(6) 反応機構 その5: 重なりの処理

テトロドトキシンなどのように、結合の線が重なっているとき、奥の線を切って描画したい場合について見てみます。

その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 の \tikzsetover 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 を書くのを忘れないようにして下さい。

これで期待する結果となりました。ほとんど変わらないですね。あんまりこだわらない方が良いと思います。

ところで、この例の場合、二重結合と単結合の交点の方がよっぽど気になります。これは ==^ に変えるとちょっと良くなり (ごまかせ) ます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です