(1) LaTeX で化学式を書(描)いてみる

日本では 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)-)}

コメントを残す

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