日本では XyMTeX が主流 (?) のようですが (*1)、新しく始めるなら chemfig をおすすめします。(そもそも \LaTeX で化学記号を描くべきか、という話は置いておこう)
(*1) 最初にこの記事を書いた当時 (2013年) の印象です。現在は chemfig が主流なのでしょうか。
chemfig の特徴
- TikZ をベースとしている
- 柔軟性が高い (高すぎる、とも言えるけど…)
- PDF 等との親和性が高い
- 古い環境だと苦労するかも? (picture 環境じゃないとイヤ、という人には向かない?)
- 複雑なことをしようとすると TikZ の知識が必要になる (あまり複雑なことしなければ、なくてもどうにかなります)
- (比較的) 簡単に描ける
- 再帰の考え方ができれば、基本的なものは割とラクに描けます
- 「まだ使ったことがない」という方は、doraTeX 氏による chemfigパッケージによる構造式描画 (TeX & LaTeX Advent Calendar 2014 12日目) がコンパクトにまとまっていてオススメ
- その後は
chemfig_doc_en.pdf
を読んでみましょう
(TeX Live 2013 なら/usr/local/texlive/2013/texmf-dist/doc/generic/chemfig/chemfig_doc_en.pdf
あたりにあるはず)
- 可読性は低い
- XyMTeX も似たりよったりですが
例
\usepackage{chemfig}
して以下のコードを描くと、それぞれ描画されるはず。(pdfLaTeX 使用)
ベンゼン
基本形。六員環を単結合、二重結合、単結合、二重結合、単結合、二重結合、と描いています。
\chemfig{*6(-=-=-=)}
実際には以下の順番で描かれています。
トリニトロトルエン
予備知識なしにコードを見ると ??? となりそうですが、実は (書くのは) 簡単です。(-NO_2)
等を六員環の途中に付加しています。上のベンゼンと比較してみて下さい。
\chemfig{*6(-(-NO_2)=-(-NO_2)=(-CH_3)-(-O_2N)=)}
また、結果は同じですが、以下のようにするとちょっとエレガント (NO2 か O2N か気にしなくてよいので)
\definesubmol\nitro[O_2N]{NO_2}
\chemfig{*6(-(-!\nitro)=-(-!\nitro)=(-CH_3)-(-!\nitro)=)}
フルオレン
五員環を正五角形で描くこともホームベース形で描くこともできます。
\chemfig{[:18]*6(-=*5(-*6(-=-=-=)---)-=-=)}
\chemfig{[:180]*6(-=*6(--*6(=-=-=-)-?)-?=-=)}
無水フタル酸
これが描けなくて、XyMTeX は諦めました。chemfig ならちょ~簡単。
\chemfig{*6(-=(*5(-(=O)-O-(=O)--))-=-=)}
サリチル酸 二量体
少し複雑な例として。
\chemfig{%
[:30]*6(-(-OH)=(-C(=[1]O%
-[,,,,dash pattern=on 1pt off 0.8pt]HO-[7]C(-(*6(=-=-=(-HO)-)))
(=[5]O-[4,,,,dash pattern=on 1pt off 0.8pt]\phantom{H})
)(-[7]OH))-=-=)
}
テトロドトキシン
XyMTeX では描けないらしいですが、chemfig なら (なんとか) 描けます。
以下のコードでは重なってる線の処理のために、かなり泥臭いことをしてます。
重なりを無視してよければ、もう少しシンプルに書けるはず。
\newlength{\bond}
\newlength{\bondw}
\setlength{\bond}{1.5pt}
\setlength{\bondw}{3\bond}
\def\bgcolor{white}
%\setcrambond{\bond}{}{} % old chemfig (< v1.3)
\setchemfig{cram width=\bond}% chemfig v1.3 or later
\chemfig{%
?[a]
(-[:60]-[0]OH)
(-[6]OH)
-[:170]?[b]-[:230]?[c]-[:10]
%
(<[:230]\chembelow{N}{H}-[:170,,,,line width=\bond]
(=[:230]HN)
>[:190]HN-[:50]?[c]
(-[:190]HO))
%
(-[:-10,,,,\bgcolor,line width=\bondw])-[:-10]
(<[:5]OH)-[:50]?[a]
(-[2,,,,\bgcolor,line width=\bondw]\phantom{O})
(-[2]O-[:170]
(-[2]OH)
(-[:190]O?[b])
(<[:230]
(-[:170,,,,\bgcolor,line width=\bondw])
(-[:170]HO)
(-[6,,,,\bgcolor,line width=\bondw])
(-[6,,,,line width=\bond])
(>[:50])%redraw
))}
B12
頑張ればこんなのも描けます (嬉しいかどうかは別にして)
%\setcrambond{2pt}{}{} % old chemfig (< v1.3)
\setchemfig{cram width=2pt}% chemfig v1.3 or later
\chemfig{Co\rlap{${}^+$}(?[f])(-[2]CN)
%
(-[7,,,,<-]N*5(=(?[d])-(<:-[::60]-[::-60](=[::-60]O)-[::60]NH_2)
-(<[::-39]CH_3)(<:[::-69]CH_3)-?[a]-))
%
(-[1,,,,<-]N*5(=(-[,0.6]?[a,{=}])
-(<:-[::-60]-[::60](=[::60]O)-[::-60]NH_2)
-(<[::-84]-[::60](=[::60]O)
-[::-60]NH2)(<:[::-24,,,1]CH_3)-?[b]-))
%
(-[3,,,,<-]N*5(=(-[,0.6]?[b,{=}](-[::60]CH_3))
-(<:-[::-60]-[::60](-[::60]H_2N)=[::-60]O)
-(<[::-84]-[::-60](-[::60]H_2N)=[::-60]O)(<:[::-24]H_3C)
-?[c](<:[::-90]H_3C)
-))
%
-[5]N*5(-(?[c])(<[::0]H)
-(<-[::-60](-[::60]H_2N)=[::-60]O)
-(<[::-24]CH_3)
(<:[::-84]
-[::60]-[::-60](=[::-60]O)-[::60]NH-[::-60]-[::60]
(<:[::60,0.7]CH_3)-[::-60]O
-[::60]P(=[::90]O)(-[::-90]HO)-[::0]O
-[6]*5([::36]-(-[6]-[::-60]HO)<O>
(-[2,4.7]N*5([::-18]-(*6(=-(-CH_3)=(-CH3)-=-))
--N(?[f,,{dash pattern=on 1pt off 0.8pt}]\phantom{N})=-))
-(-[2,,,2]HO)-))
%
-(=[,0.6](?[d])-[::-60]CH_3)-)}