VScode住人の探検記

Visual Studio Codeでなんでもこなすのがポリシー。LaTeX(2020/7/19~), C(2021/1/25~), C#(2/4~), HTML&CSS(2/14~), Python(2/16~), JavaScript(2/28~), jQuery(3/18~), Sass(Scss)(3/20~),シェルスクリプト(3/21~), jCanvas(5/21~), WordPress(5/23~), PHP(5/31~)

chemfigで色つき構造式を描く【LaTeXで化学ノートをつくりたい】

xymtexで色つき構造式を描くのは比較的簡単だが、chemfigで色つき構造式を描こうとすると様々な困難が立ち塞がる。

しかし、xymtexは環式化合物の描画に特化しているため、鎖式化合物の色つき構造式を描くにはどうしてもchemfigを使わなくてはならない。

chemfigマニュアル(英語)にもほとんど明記されておらず、解説ブログも現時点では存在しないchemfig構造式のカラー化手法…
そんな道無き道だが、試行錯誤の末に方法を確立した(気がする)ので、ここに記しておく。

構造式全体に色をつける

これは簡単である。

\textcolor{色名}{\chemfig{構造式を出力する文字列}}

とすればよい。

結合線に色をつける

chemfigで結合線を描くには、\chemfig{}内で

  • 単結合なら -[結合線の情報]

  • 二重結合なら =[結合線の情報]
  • 三重結合なら ~[結合線の情報]

という書式で入力することになり、結合線の情報の中身は

[角度,長さの倍率,結合元原子の番号,結合先原子の番号,TikZのオプション]

のように記述する。
具体的な書き方については、私自身も大変お世話になったブログ↓
chemfigパッケージによる構造式描画 - TeX Alchemist Online
を参照していただくとして、とりあえず結合線に色をつけるにはtikzのオプションの部分を色名に変更すればよい。

離れている原子にそれぞれ色をつける

これも直感が通用し、\chemfig{}内で

\textcolor{色名}{原子}

とすればうまくいく。

主鎖の一部や置換基に色をつける(ここからが本題)

ここが厄介なところで、単純に\textcolor{色名}{基を出力する文字列}としてしまうと次のような問題が発生する。

基が主鎖の一部分の場合
…色をつけた基が主鎖の他の部分に重なる

基が主鎖に直接結合している置換基の場合
…結合線の位置が色をつけた基の中央になってしまい、CとCとの結合に見えない

f:id:nix_campane:20200905015315p:plain

試行錯誤の結果、これらの問題を回避するには次のように記述すればよいことがわかった。
鎖の骨格となる原子そこにくっついている諸々を分けて、別々に色づけしてあげるというニュアンスである。

枝分かれとなるメチル基-CH3に色をつける場合

-[,,,,色名]\textcolor{色名}{C}|{\color{色名}H_3}

プロパンCH3-CH2-CH3のCH2部分に色をつけたい場合

枝分かれがない鎖状化合物の一部分に色をつけるなら、chemfigを使わずにchemformulaパッケージの\chコマンドで全体を描画するほうが早い。
\chコマンドではchemfigのような厄介な問題は起こらないからだ。

プリアンブル↓
\usepackage{chemformula}

begin{document}以降↓
\ch{CH3-\textcolor{色名}{CH2}-CH3}

イソブタンの主鎖の一部に色をつける場合

枝分かれがある化合物はchemfigで描くしかないので、上記のメチル基の場合と同じように、骨格をつくるCは独立で色付けしなければならない。

プロパノールのOH基に色をつける場合

Oは骨格をつくる原子とみなし、これまでに挙げた例のCと同じ扱いをする。

鬼畜な例

以上の教訓を胸に、次のような鬼畜な構造式を描画してみよう。

f:id:nix_campane:20200905015220p:plain

水色とピンクはお気に入りの色味に設定。
(このRGB値はアナログ時代愛用していたプレイカラーというペンの桃色、水色をスポイトでデータ化したもの)

\definecolor{plmomo}{RGB}{248,22,147}
\definecolor{plmizu}{RGB}{2,181,238}

また、\textcolor{plmomo}{}や\textcolor{plmizu}{}といちいち書いていると鬼畜な長さのコードになってしまい、エラーが起きたときに原因を見つけ出しづらくなってしまうため、

\newcommand{\mm}[1]{\textcolor{plmomo}{#1}}
\newcommand{\mz}[1]{\textcolor{plmizu}{#1}}

のようなコマンドを定義して、\mm{}または\mz{}と書けば済むように工夫しよう。
つまり、ここから先は、

  • \textcolor{plmomo}{}を\mm{}で表す
  • \textcolor{plmizu}{}を\mz{}で表す

するとコードは…

\chemfig{\mm{C}|{\color{plmomo}H_3}\mm{C}|{\color{plmomo}H}=[,,,,plmomo]\mm{C}|{\color{plmomo}H}-[,,,,plmomo]\mm{C}|{\color{plmomo}H}(-[2,,,,plmizu]\mz{C}|{\color{plmizu}H_2}-[,,,,plmizu]\mz{C}|{\color{plmizu}H}=[,,,,plmizu]\mz{C}|{\color{plmizu}H_2})-[,,,,plmomo]\mm{C}|{\color{plmomo}H_2}\mm{C}|{\color{plmomo}H_2}\mm{C}|{\color{plmomo}H}=[,,,,plmomo]\mm{C}|{\color{plmomo}H_2}}

…こうなる。エグい

\chemfig{}内の各部分が何を表すのか分解してみると、

%主鎖のCH3(左端)
\mm{C}|{\color{plmomo}H_3}

%主鎖のCH
\mm{C}|{\color{plmomo}H}

%主鎖の=
=[,,,,plmomo]

%主鎖のCH
\mm{C}|{\color{plmomo}H}

%主鎖のー
-[,,,,plmomo]

%主鎖のCH
\mm{C}|{\color{plmomo}H}

%枝分かれ
(
 -[2,,,,plmizu]\mz{C}|{\color{plmizu}H_2}%ーCH2
 -[,,,,plmizu]\mz{C}|{\color{plmizu}H}%ーCH
 =[,,,,plmizu]\mz{C}|{\color{plmizu}H_2}%=CH2
)

%主鎖のー
-[,,,,plmomo]

%主鎖のCH2
\mm{C}|{\color{plmomo}H_2}

%主鎖のCH2
\mm{C}|{\color{plmomo}H_2}

%主鎖のCH
\mm{C}|{\color{plmomo}H}

%主鎖の=
=[,,,,plmomo]

%主鎖のCH2(右端)
\mm{C}|{\color{plmomo}H_2}

…本当に大変だが、アナログで色ペンを何度も持ち替えながら書くよりはよっぽど楽である。