LaTeX‎ > ‎

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

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

日本では XyMTeX が主流 (?) のようですが、新しく始めるなら ChemFig をおすすめします。
(そもそも LaTeX で化学記号を描くべきか、という話は置いておこう)

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)=-(-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}{}{}
    \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
    頑張ればこんなのも描けます (嬉しいかどうかは別にして)

Subpages (1): Cyanocobalamin
Comments