(2) 反応機構 その1

2014-12-14 2025-04-06

chemfig で反応機構を書(描)くのはかなり大変です。相当泥臭い作業になりますので、まずは覚悟が必要になります ;-) latex は原則 (最低) 二回実行する必要があることに注意して下さい。

日本語環境での注意点

(u)platex + dvipdfmx (TeX Live 2019, 2024 にて確認) ではうまく動作しないようです (矢印の位置が正しい位置に描画されない)。

日本語文書で反応機構を描きたい場合は LuaLaTeX の使用をおすすめします。

本稿は chemfig v1.66 をもとにしています。

基本形

まずは簡単な形で見てみましょう。

\schemestart
\chemfig{@{edu1}A} \+ \chemfig{@{edu2}B} \arrow \chemfig{C}
%
\chemmove{
  \draw(edu1)..controls +(90:6mm) and +(90:6mm)..(edu2);
}
\schemestop

@{name} で「ノード」 (ひとまず始点・終点を指示する際の場所 (原子あるいは結合) と思っておけば良いでしょう) に名前を付けます。 原子の場合は その前 に書きます。この例では、A に edu1 、B に edu2 という名前をつけています。

矢印は \chemmove{ } 内に書きます。 基本形は、

\draw( node1 ) ..controls +( angle:pos ) and +( angle:pos ).. ( node2 );

です。 controls で制御点を指定することで矢印の微調整をします。

angle はどの角度から/へ矢印を引くかを指定します。 角度は原子 (ノード) の右を起点 (0 度) とします。 下の例は、

  • 赤 : A 45 度 から B 45 度 へ
  • 青 : A 90 度 から B 90 度 へ
  • 緑 : A 135 度 から B 135 度 へ

と指定した例です。 もちろん A と B で異なった角度を使用しても構いません。 and +(\w:6mm)..(edu2) の部分を and +(180-\w:6mm)..(edu2) と変更すると、A の 45 度 から B の 135 度へ、等になります。

\schemestart
\chemfig{@{edu1}A} \+ \chemfig{@{edu2}B} \arrow \chemfig{X}
%
\chemmove{
  \foreach \w/\c in {45/red, 90/blue, 135/green} {
    \draw[color=\c](edu1)..controls +(\w:6mm) and +(\w:6mm)..(edu2);
  }
}
\schemestop

次の例は長さを変更した場合です。 赤、青、緑はそれぞれ 5 mm, 10 mm, 15 mm を指定した場合です (角度は全て 90 度)。

\schemestart
\chemfig{@{edu1}A} \+ \chemfig{@{edu2}B} \arrow \chemfig{X}
%
\chemmove{
  \foreach \l/\c in {5mm/red, 10mm/blue, 15mm/green} {
    \draw[color=\c](edu1)..controls +(90:\l) and +(90:\l)..(edu2);
  }
}
\schemestop

角度、位置の調整はひたすらトライアンドエラーです。普通の人はこの辺で嫌になると思います ;-)

さて、最初の例では矢印の始点・終点が原子にくっついてカッコ悪いので、改良します。 具体的には shorten を使って矢印を短くします。 <= で始点を、 >= で終点を指定しています。

\schemestart
\chemfig{@{edu1}A} \+ \chemfig{@{edu2}B} \arrow \chemfig{X}
%
\chemmove{
  \draw[shorten <=3pt,shorten >=2pt](edu1)..controls +(90:6mm) and +(90:6mm)..(edu2);
}
\schemestop

それっぽくなりました。どのくらい短くするかはひたすらトライアンドエラーです ;-)

二重結合などから出る矢印も書けます。ノード名の定義のしかたがちょっと違うだけで、それ以外は基本形と同じです。

\schemestart
\chemfig{A=[@{db}]B} \+ \chemfig{@{edu3}C} \arrow \chemfig{X}
%
\chemmove{
  \draw[shorten <=3pt,shorten >=2pt](db)..controls +(90:6mm) and +(90:6mm)..(edu3);
}
\schemestop