テトロドトキシンなどのように、結合の線が重なっているとき、奥の線を切って描画したい場合について見てみます。
その1: 背景色で塗り潰す
最も単純な方法は一旦背景色で線を引いて、その後改めて結合を描く、という方法でしょう。以下の例では分かりやすくするために、背景に色を付けてあります。
\setchemfig{atom sep=5em}
\chemfig{A-[:-45]B-[:180,0.707]C
(-[:45,,,,white,line width=3pt]\phantom{D})
-[:45]D}
これは、
\setchemfig{atom sep=5em}
\chemfig{A-[:-45]B-[:180,0.707]C
-[:45,,,,preaction={draw=white,-,line width=3pt}]D
}
と書くこともできます。こちらの方がシンプルで分かりやすいですね。これを背景色なしで描けば、
となる訳です。これは以前私がテトロドトキシンを描いた際に使った方法です (というか、これしか思いつかなかった)。
この方法には、背景色が単純じゃない場合 (背景がグラデーションになっている、とか) などでうまくいかないという問題点がありますが、まぁ通常は問題にならないでしょう。また、特に原子を書かない場合などで、既に描いた線を消してしまう場合があります:
左下の結合の一部が (ほんの少し) 消えてしまっています。この場合は、問題の結合を再度描く、などで回避できます:
\setchemfig{atom sep=5em}
\chemfig{-[:-45]
(-[:180,0.707]-[:45,,,,preaction={draw=white,-,line width=3pt}])
-[:180,0.707]% 再描画
}
あるいは下記 その3 の方法を使うこともできます。
その2: 二重線を使う方法
Crossing bonds in chemfig (2019年12月現在 Server not found) というサイトには別の方法も載っているので、それも紹介しておきましょう。これは白が前景色で黒が背景色の二重線を書く方法です (たぶん…)。
\setchemfig{atom sep=5em}
\chemfig{A-[:-45]B-[:180,0.707]C
-[:45,,,,white,double=black,double distance=\the\pgflinewidth,line width=1.5pt]D}
上に挙げたページにあるように、
\tikzset{
over line/.style={
white,
double=black,
double distance=\the\pgflinewidth,
line width=1.5pt,
}
}
というのをプリアンブルあたり (本文中でも大丈夫です) で定義しておけば、
\chemfig{A-[:-45]B-[:180,0.75]C-[:45,,,,over line]D}
と書けるので、さらに分かりやすくなります。
その3: marking を使う
これも上記サイトからの引用ですが、三つめは最初から切れた線を描く (正確には、なにもないノードを描く) 方法です。この方法を使うときは、プリアンブル (の \usepackage{chemfig}
よりも後ろ) に、
\usetikzlibrary{decorations.markings}
を追加する必要があります。
\tikzset{
under line/.style={
decoration={
markings,
mark connection node=mid node,
mark=at position #1 with {}
{\node[transform shape,minimum size=3pt] (mid node) {};}
},
decorate
}
}
\setchemfig{atom sep=5em}
\chemfig{A-[:-45,,,,under line=.5]B-[:180,0.707]C-[:45]D}
\tikzset
の部分ははどこかに一度書いておけば OK です。この処理を \chemfig{...}
中に書くこともできますが、やたらと長くなるのでおすすめしません。under line
の引数で切れ目の位置を指定します。
この方法では前述の問題はありませんが、(おそらく) 一つの結合上に複数の切れめが描けません。また、場所の調整が必要になるので、他の方法より若干手間がかかります。
結局のところ、その1 の preaction
を使う方法、もしくは重なり処理が頻出する場合は その2 の \tikzset
で over line
を定義する方法がおすすめです。背景色が問題になる場合も、化学式の部分は背景を白にしてしまう、と割り切ってしまうのが良いと思います。
なお、この手の図を描きたい場合は、最初にしっかり描く順番を考えておいた方が良いです。そうしないと、後から大きな修正が発生してしまう場合があります (ありました (笑))。
実際の例
最後に実例で見てみましょう。
\setchemfig{atom sep=3em}
\chemname{
\chemfig{
?[a]=[:55]-[:10]
?[b]-[:-20]-[:-125]
-[:160](?[a])
-[:80,1.75,,,preaction={draw=white,-,line width=3pt}]?[b]
}
}{\footnotesize Norbornen \\ \footnotesize (Bicyclo[2.2.1]hept-2-en)}
それっぽい感じで、なかなか良さそうです。
が、実はこれは上記の問題が発生してしまっているパターンです。手前の橋架の部分で六員環の結合が一部消えてしまっています。
左が上手くいっていない例 (上図の拡大)、右が期待する結果です。ぱっと見ではほぼ分からないと思うので、これで満足するのが最も幸せな解でしょう 😉
どうしても解決したい、という場合には、手前の線を二回描くか、marking による方法が使えます。
(二回描く方法)
\setchemfig{atom sep=3em}
\chemfig{
?[a]=[:55]-[:10]
?[b]-[:-20]-[:-125]
(-[:160,,,,draw=none]% 一回目
-[:80,1.75,,,preaction={draw=white,-,line width=3pt}]?[b])
-[:160]?[a]% 二回目
}
全く同じところをなぞっているだけなので ,,,,draw=none
はなくても大丈夫 (なはず) ですが、一応付けてあります。
(marking による方法)
\setchemfig{atom sep=3em}
\chemfig{
?[a]=^[:55]-[:10,,,,under line=0.55]
?[b]-[:-20]-[:-125]
-[:160](?[a])-[:80,1.75]?[b]
}
こちらの方法を使う場合は、上記の \tikzset
を書くのを忘れないようにして下さい。
これで期待する結果となりました。ほとんど変わらないですね。あんまりこだわらない方が良いと思います。
ところで、この例の場合、二重結合と単結合の交点の方がよっぽど気になります。これは =
を =^
に変えるとちょっと良くなり (ごまかせ) ます。