======================= chemfigパッケージの基本 ======================= 以下の内容はdoraTexさんのブログを加筆してまとめました。 http://doratex.hatenablog.jp/entry/20141212/1418393703 :program:`chemfig` : :program:`chemfig` はTikZという描画パッケージを用いて化学構造式を描画することができる強力なパッケージです。これを用いることで、枝分かれ構造、環状構造、立体表示、電子式などが簡単に表示することができます。 結合のオプション ---------------- chemfigパッケージの根幹をなすのは,結合のオプションです。次のようなオプションをとります。:: -[角度,長さの倍率,結合元原子の番号,結合先原子の番号,TikZのオプション] 重要なものから順に並んでいます。 オプション指定の仕様 ~~~~~~~~~~~~~~~~~~~~ 必要なオプションまで指定すれば,その先は省略可能です。例えば, ``-[4,2]`` とすれば,角度と長さの倍率までを指定したことになります。 途中のオプションを省略したい場合は, ``-[,,1,2]`` のように空のコンマを入れます。 結合の種類の指定 ~~~~~~~~~~~~~~~~ :単結合: "-" :二重結合: "=" :三重結合: "~" 第1オプション:角度の指定 ~~~~~~~~~~~~~~~~~~~~~~~~~ 角度の指定には3通りの方法があります。 :45°の倍数による指定: ====================== 結合を伸ばす方向が ``45°`` の倍数の場合, ``「45°の何倍方向か」`` を表す整数を角度オプションに指定します。例えば ``90°`` であれば ``-[2]`` となります。指定する整数値としては ``0〜7`` が有効です。 .. image:: 1-0.png :scale: 35% :角度の数値による指定: ====================== ``-[:60]`` のように,コロンに続けて数値を書くとその角度方向に結合が伸びます。角度指定は負の整数も可能ですので,例えば ``-[:-90]`` と指定すれば下方向に結合を伸ばせます。 :相対角度指定: ============== ``-[::20]`` のように,コロン2つに続けて数値を書くと,そこまでの結合角からの相対的な回転角を指定できます。例えば下記の例では,毎回 ``20°`` ずつ結合が回転しています。 【入力】:: \chemfig{C - C -[::20] C -[::20] C -[::20] C} 【出力】 .. image:: 1-1.png :scale: 50% 第2オプション:結合の長さ倍率 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 第2オプションには,「デフォルトで決められる長さの何倍にするか」を指定します。例えば ``-[,1.5]`` のように指定すると,結合の長さ がデフォルト値の ``1.5倍`` に伸びます。 :結合の長さのデフォルト値の設定: ================================ 結合の長さのデフォルト値を変更するには, ``\setatomsep`` という命令を用いて:: \setatomsep{2em} のように指定します。 第3,第4オプション:結合原子の指定 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ デフォルトでは,各原子団の端の原子同士が結合によって結ばれます。これを変更する場合は,結合の第3,第4オプションを指定します。 例えば下記の例では,結合元原子団 ``(CH_3CH_2)`` の3番目の原子(C)から ``-90`` 方向に結合を伸ばすようしています。 【入力】:: \chemfig{CH_3CH_2 -[:-90,,3] OH} 【出力】 .. image:: 1-2.png :scale: 150% 第5オプション:TikZのオプション ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 第5オプション(以降)には, ``TikZ`` のオプションを記述することにより結合の見た目をカスタマイズできます。 【入力】:: \chemfig{CH_3 -[,,,,red,line width=2pt,dash pattern=on 1pt off 2pt] CH_3 } 【出力】 .. image:: 1-3.png :scale: 100% 枝分かれの記述 ~~~~~~~~~~~~~~ chemfigパッケージの優れている点は, ``枝分かれを持つ構造式`` が簡単に書ける点です。 ``( )`` でくくるだけで,その部分が枝になります。枝は何重にネストしても書くことができます。 【入力】:: \chemfig{CH_3 - CH (-[2] CH (-CH_3) -[2] CH_3) - CH_3} 【出力】 .. image:: test-1.png :scale: 100% 炭素原子の省略 ~~~~~~~~~~~~~~~ 結合の方向と長さばかりを連ねて書けば,骨格のみで表した構造式も出力できます。 【入力】:: \chemfig{-[:-30]-[::60](=[2]O)-[::-60]=[::60](-[::60])-[::-60]} 【出力】 .. image:: 1-5.png :scale: 75% 環状構造の記述 ~~~~~~~~~~~~~~ 構造中に ``?`` を付した原子を2つ用意しておくと,その2つの原子が結ばれて環状構造が形成されます。 【入力】:: \chemfig{H_2C? - CH_2 -[2] CH_2 -[4] H_2C?} 【出力】 .. image:: 1-6.png :scale: 40% :複数の環状構造を持つ分子: ========================== 環状構造が複数存在する場合は, ``?[a]`` のように ``?`` に対してラベルを付与しておきます。すると,同一のラベルを持つ原子同士が結ばれて環状構造が形成されます。同一原子に複数のラベルを貼ることも可能です。 また,単結合ではなく二重結合で環状構造を結びたい場合は, ``?`` の第2オプションを ``?[a,2]`` のように指定します。 立体化学表記 ~~~~~~~~~~~~ 結合の種類として ``<`` や ``>`` を指定すると,紙面より手前に飛び出していることを示す太いくさび, ``>:`` や ``<:`` を指定すると紙面より奥に飛び出していることを示す破線のくさびになります。 【入力】:: \chemfig{A < B > C <: D >: F} 【出力】 .. image:: 1-7.png :scale: 100% くさびのデザインのカスタマイズ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ くさびのデザインをカスタマイズするには, ``\setcrambond`` という命令を利用します。デフォルトでは, :\setcrambond{1.5pt}{1pt}{2pt}: という設定になっています。各パラメータの意味は次のようになっています。:: \setcrambond{#1:くさびの最も太い部分の太さ}{#2:破線の幅}{#3:破線間の間隔} デフォルトのまま変更したくないパラメータがある場合は,空欄のままにします。例えば,破線のくさびを使わない場合は,第2,第3引数は空のままで:: \setcrambond{3pt}{}{} のように指定します。 .. image:: 1-8.png :scale: 50% エイリアスの設定 ~~~~~~~~~~~~~~~~ よく使う原子団を ``\definesubmol`` で登録しておくと, ``!`` で呼び出せます。 名前によるエイリアス 【入力】:: \definesubmol{CH2}{C(-[::+90]H)(-[::-90]H)} \chemfig{H-!{CH2}-O-[:30]!{CH2}-[::0]H} 【出力】 .. image:: 1-13.png :scale: 50% 制御綴によるエイリアス ~~~~~~~~~~~~~~~~~~~~~~~ バックスラッシュの後に、文字で登録することもできます。しかし、文字の後に直接 ``OH`` など原子や分子が来ると使えなくなるので注意が必要です。 【入力】:: \definesubmol\methylene{C(-[::+90]H)(-[::-90]H)} \chemfig{H-!\methylene-O-[:30]!\methylene-[::0]H} 【出力】 .. image:: 1-13.png :scale: 50% |を使って空の原子を配置することによる微調整 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ある構造式を ``chemfig`` を用いて描画すると以下のようになります。 【入力】:: \chemfig{CH_3-CH(-[2]O-C(=[2]O)-CH_3)-CH_2-[7]C(-[5]H)=C(-[7]H)-[1]CH_3} 【出力】 .. image:: 1-9.png :scale: 75% ただし,上記出力には,若干の不満が残ります。 *左端の CH3ーCH の結合の長さが他に比べて短い。 *二重結合の左上の ``CH2`` との結合が ``2`` という数字と接触している。 これらは, ``chemfig`` がH原子の中心と次のC原子とを結ぼうとしているために起こっています。そこで,このような場合, ``|`` を打つことで,仮想的に「空の次の原子」を設けます。 【入力】:: \chemfig{CH_3| - CH(-[2]O - C(=[2]O) - CH_3) - CH_2| -[7] C(-[5] H) = C(-[7] H) -[1] CH_3} 【出力】 .. image:: 1-10.png :scale: 150% しかし、上記の ``|`` を使った出力では, ``CH3`` や ``CH2`` の後の出力が改善されましたが,その代わり,二重結合の他の結合とのつりあいが悪くなってしまいました。 このような場合,空ブレース ``{}`` や ``\llap``, ``\rlap`` を使うことによる微調整が可能です。 【入力】:: \chemfig{CH_3| - CH(-[2]O - C(=[2]O) - CH_3) - CH_2| -[7] C(-[5] \llap{H}) = C(-[7] {}H) -[1] {}CH_3} 【出力】 .. image:: 1-11.png :scale: 150% 不斉炭素原子の表示 ~~~~~~~~~~~~~~~~~~~ 不斉炭素原子の ``*印`` は ``^{*}`` と書けば出力できます。ただし,それで1個の原子扱いになってしまうので,結合の手の接続先を1つ分ずらす必要が生じます。 【入力】:: \chemfig{CH_3 - CH_2 - ^{*}CH(-[6,,2]OH) - CH_3} 【出力】 .. image:: 1-12.png :scale: 100% 以上のように、炭素の左上に*がきます。これは同様にして、電荷の ``+`` や ``-`` などの表記にも用いることができます。 実際に書く際の手順 ------------------ 1. 構造式の左もしくは左下から順番に :program:`\chemfig{}` の{}内に原子や結合を記入していく。 2. 必要に応じて :program:`\definesubmol` や :program:`\setcrambond` 、:program:`\setatomsep` という設定をカスタマイズします。