この記事は TeX & LaTeX Advent Calendar 2014 の20日目の記事です.
19日目は y_minoda さんでした.21日目は termoshtt さんの予定です.
今年の TeX & LaTeX Advent Calendar では8日目に aminophenさん がWYSIWYG構造式エディタを用いて,doraTeXさん がchemfigパッケージを用いてLaTeX文書に化学構造式を出力する方法を解説してくださっています.そして今回,私たちは化学構造式を出力する3つ目の選択肢を提示したいと思います.
3つの出力法にはそれぞれ異なる特長があります.詳しいことは各記事を読んでいただければわかるかと思いますが,WYSIWYGの構造式エディタは直感的なわかりやすい操作性,chemfigパッケージは構造式を「図」と捉えて比較的簡単な記述で多様な構造を出力できるというのがそれぞれの魅力です.ではXyMTeXの魅力とは何でしょうか? それはこれから説明します.
それでは,他の化学構造式出力法とは一味違う,XyMTeXの世界をお楽しみください.
XyMTeXの基本スタンス
XyMTeXは「極力IUPAC命名法に則した形のコマンドで,構造式を出力する」ことができるように設計されています.そのため,XyMTeXのコマンドはIUPAC名に準じて2つの要素から構成されています.
- 母体構造を指定する要素
- 原子や結合などの付加的な情報を与える要素
この「IUPAC命名法に則す」という方針は,次のような利点をもっています.
- 有機化合物の構造を実際に構造式を描写することなく伝達できる
- XyMTeXのコマンドを習得する過程でIUPAC命名法も習得でき,教育的である
いよいよ,具体的なXyMTeXの使用法について見ていくことにします.なお,XyMTeXパッケージはXyMTeXの作者でいらっしゃる藤田眞作さんのホームページからダウンロードすることができます.また,以下の説明中に登場するXyMTeXのコマンドを実行する際には,プリアンプル内でxymtex.styを読み込んでいる必要があります.
\usepackage{xymtex}
母体構造の指定
XyMTeXの母体構造を指定するコマンドには,大きく分けて2系統のものが存在します.ひとつは特定化合物用コマンド\ComSpec
で,特に使用頻度の高い化合物(構造)について定義されており,二重結合の位置などのある程度細かな設定が予め適用されています.もうひとつの系統は一般化合物用コマンド\ComGen
で,特定化合物用コマンドが用意されていないものも含め様々な化合物を描画する際に使用できます.
特定化合物用コマンド
以下に示すのは,単環化合物(および複素環化合物)に関する特定化合物用コマンドの例です.
具体例からもわかるように,特定化合物用コマンドのコマンド名はIUPAC名(または適切な慣用名)に準じて付けられています.コマンド名には通常,構造式の向きを垂直または水平に指定するv
かh
の接尾辞が付いています.さらに,このv
,h
接尾辞の後ろにもうひとつ接尾辞i
を付けて,出力する構造式をそれぞれ上下,左右に反転させることができる場合もあります.
こうした特定化合物用コマンドの書式は次のように一般化することができます.
\ComSpec[ 結合リスト ]{ 置換基リスト }
結合リストと置換基リストは,それぞれ母体構造の結合と置換基について記述する部分です.ここで,結合リストはオプション引数であるため省略することが可能ですが,もう一方の置換基リストは必須の引数であるため,たとえ置換基がひとつも存在しなかったとしても空のブレース{}
を書いておく必要があります(実際,上の例においてもそのようになっています).
位置指定番号と位置指定アルファベット
XyMTeXの母体構造を指定するコマンド(\ComSpec
,\ComGen
)には位置指定番号と位置指定アルファベットが設定されています.例として,\cyclohexanev
の位置指定番号,位置指定アルファベットを示します.
これらの番号およびアルファベットは以下で使い方を説明する結合リストや置換基リストの中で使用します.なお,XyMTeXコマンドの位置指定番号は「構造からみて」合理的に付けられているので,IUPAC名における番号の付け方とは必ずしも一致しないので注意が必要です.
よく使用するコマンドに関するものならばともかく,すべてのコマンドについて位置指定番号/アルファベットを暗記するというのは(ある程度規則性があるとはいえ)あまり現実的でないので,わからないときは「とりあえず"実験"して確かめてみる」というスタンスをとるのがXyMTeX初心者にはおすすめです.
結合リスト
結合リストは母体構造中の二重結合の位置を指定するためのもので,具体的には,二重結合にしたい部分を指示する位置指定アルファベットを書き込んで使用します.
\cyclohexanev[b]{}
環系化合物のうち集積(連続)していない二重結合の数が最大となっているものをマンキュード環系化合物といいますが(ベンゼンはその代表例),マンキュード環系化合物は一般に二重結合の位置のパターン(結合パターン)が2通りに限られます.そのため,マンキュード環系化合物を出力する特定化合物用コマンドに関しては,結合リストにr
またはl
を指定することで二重結合の位置をまとめて指定することが可能です.さらに,芳香族の結合パターンを指定する場合には結合リストにA
を指定することによって共役二重結合系を表す円を出力することもできます.
\benzenev[r]{}
\benzenev[l]{}
\benzenev[A]{}
結合リストに@
を書き込むことによって,デフォルトの二重結合設定をすべて解除(単結合のみにする)こともできます.
また,結合リスト内に{ 位置指定番号 + }
を書き込むことで,位置指定番号が指示する位置に+を出力することも可能です.ただし,この場合デフォルトの二重結合は一旦すべて解除されるので,二重結合が必要な場合は結合リストに該当する位置指定アルファベットを入力する必要があります.
置換基リスト
置換基リストの一般書式は以下のとおりです.
{ 位置指定番号 結合の種類を表すアルファベット == 置換基 ; ...... }
しかし,こう書いてもあまりわかりやすくないかもしれないので,具体例を挙げて説明します.
\cyclohexanev{1D==O;3B==Cl;5A==CH$_{3}$;}
位置指定番号の後ろにはA
,B
,D
などを記入でき,それぞれ α-結合,β-結合,二重結合によって置換基と母体構造を結びつけます.さらにその後ろには==
に続けて置換基を入力します.セミコロン;
で区切ることによって,複数の置換基を付けることも可能です.
一般化合物用コマンド
以下に,一般化合物用コマンドの例を示します.
一般化合物用コマンドは特定化合物用コマンドよりも汎用性が高いコマンドです.したがって,その書式も特定化合物用コマンドのそれよりもやや複雑化します(特定化合物用コマンドが定義されている構造については,特定化合物用コマンドを利用した方が負担が少なくて済みます).
\ComGen[ 結合リスト ]{ 原子リスト }{ 置換基リスト }
ここで,結合リストと置換基リストの取り扱いについては特定化合物用コマンドと同様であるので,以下では原子リストについてのみ説明します.
原子リスト
母体構造中の炭素を別の原子に変更する際に使用します.一般書式は以下のとおりです.
{ 位置指定番号 == 置換する元素 ; ...... }
置換基リストの書式とかなり似ています.具体的には,次のように使用します.
\fiveheterov{1==O}{}
置換基をもつ化合物の描画
置換基がついた化合物をXyMTeXで描画する際には,yl機能と呼ばれる記法を用います.
\benzeneh{1==\cyclohexaneh{4==(yl)}}
置換基のどこを結合させるかを番号で指定して,そこの部分を 位置指定番号 ==(yl)
とすることで,原子団をいわば置換基化することができます.あらためて上の例を見ると,シクロヘキサンの4番目の原子を置換基化して,ベンゼン環の1番目の原子に結合させていることがわかります.
###縮合環の描画
yl機能を用いて縮合環を描くことができます.下の2つの六員環構造を持った化合物を結合させることを考えてみます.
\sixheterov[bf]{5==O;6==N}{}
\sixheterov[ace]{1==N}{}
両者を縮合させるコマンドを書くには,
- 縮合「する」側と「される」側の主従関係を明らかにする
- 縮合する側の化合物の結合を削除する(そのままだと結合が重なってしまいます)
- 縮合「する」側と「される」側で,どこの位置が重なるのかを明らかにする
ことが必要です.
まず,縮合「する」側の構造のXyMTeXコマンドの一般的な形は以下のようになります。
\Comfuse[ 結合リスト ]{ 原子リスト }{ 置換基リスト }{ 骨格結合消去リスト }
ここでは,ピリジンを縮合「する」側の化合物と見なして考えることにしましょう(1. の手続き).すると,(単なる)ピリジンを出力するコマンドを,この縮合する化合物用のコマンドに書き換えていく必要があります。
\sixfuse[ace]{1==N}{}{e}
骨格結合消去リストを用いて,eの位置にあった結合を消去したことにご注目下さい(2. の手続き).あとは,2つの構造のうちどこの原子が重なるのかを明らかにしましょう.これについては,結合を表すアルファベットの大文字と小文字を使います.この項のはじめに示した2つの化合物では,ピリジンの"e"の原子ともう一方の"B"の原子が重なります(3. の手続き).以上から,2つの化合物を縮合させたものは以下のようにして描画できます.
\sixheterov[f{B\sixfusev[ace]{1==N}{}{e}}]{5==O;6==N}{}
スピロ環式化合物の描画
環構造同士が1つの原子だけを共有する構造をスピロ環と呼びますが,これもyl機能の応用によって描画することができます.
\nonaheterovi[bdfh]{1s==\cyclohexanev{4==(yl)}}{}
ここではシクロヘキサンの4番目の原子が「置換基化」されるので4==(yl)
と命令されており,また母構造の1番目に結合するものがスピロ環であることを表すために,置換基リストの番号の所が1s
となっています.
また,ここまでで結合リスト・原子リスト・置換基リストの使い方を説明してきましたが,それぞれのリストを使用するXyMTeXにおけるテクニックは,それぞれ置換テクニック・交替テクニック・付加テクニックと呼ばれます.
一般化合物用コマンドの書式
前節で紹介した一般化合物用コマンドの書式は簡略化されたものでしたが,ここではこの一般化合物用コマンドのより詳細な書式について解説します.
コマンド名と書式
一般化合物用コマンドは一般に\ComGen
で表され,汎用的に利用するため,骨格原子の置換が可能なように設計されています.一般化合物用コマンドのコマンド名は,一般的に使用されている用語(IUPACで用いられる骨格構造名が中心)を基準に決められています.XyMTeXのほとんどのユーザーコマンドは垂直方向の出力を表す接尾辞v
か水平方向の出力を表す接尾辞h
で終わっています.さらに,別の向きでの出力が可能な場合はこれらの接尾辞のうしろに接尾辞i
を加えることも可能であるほか,六員環が2つ結合した構造の場合は接頭辞b
やt
も使用可能となっています.
一般化合物用コマンドの一覧は下表の通りです(省略できる部分は可能な限り省略した形です).
また,下図は各種\sixhetero
の位置指定番号のつき方を示しています.
一般化合物用コマンドの書式は以下の通りです.
\ComGen( 骨格結合リスト )[ 結合リスト ]{ 原子リスト }{ 置換基リスト }[ 骨格結合消去リスト ]
原子リストと置換基リストの2つは必須引数であり,それ以外は省略可能なオプション引数となっています.
引数の詳細
置換基リストの一般書式
置換基およびそれに付随する結合は次のように表すことができ,また置換基と置換基の間は;
で区切ります.
置換基リストの書式は以下の通りです.
{ 位置指定番号 結合の種類を表すアルファベット == 原子 または 置換基 ; ...... }
例を1つあげてみます.
\sixheterov{}{1D==O;2Sa==Cl;2Sb==Cl}
結合の種類の一覧は以下の通りです.
α-結合は破線で表されますが,\wedgehashwedge
を利用すれば,楔形を出力することも可能です.ただし,これはPostScriptモードにおいてのみ可能なようです.
また,置換基の指定は\ChemForm
を用いれば簡略化することができます.さらに,長い置換基は通常右に伸びて出力されますが,\llap
を使えば左向きに伸ばすことも可能です.
\sixheterov{}{1==\llap{CH$_{3}$CH$_{2}$CH$_{2}$}CH$_{2}$}
\sixheterov{}{1==\lmoiety{\ChemForm{CH_3CH_2CH_2CH_2O}}}
原子リスト
炭素原子以外の原子が環構造に含まれている場合や,スピロ構造に関わる原子は下のように表します.原子ごとの区切りには,これまでと同様;
を使用します.
{ 位置指定番号 == 原子 または 原子団 ; ...... }
例を1つあげておきます.
\sixheteroh{4==NH}{}
また,原子団を縦方向に並べて記したい場合は,結合を表す線を表示させずに\downnobond{}{}
や\upnobond{}{}
を用いて表すことができます.
\sixheterov{1==O;4==\downnobond{N}{H}}{}
\sixheterov{1==O;4==\upnobond{N}{H}}{}
スピロ構造を出力したい場合は,スピロ結合を形成する原子が炭素原子の場合は位置指定番号の後にs
を,炭素原子以外の場合は位置番号の後にh
をつけます.
\sixheteroh{4s==\fiveheterohi{2==O;5==O}{1==(yl)}}{}
\sixheteroh{4h==\fiveheterohi{1==Si}{1==(yl)}}{}
オプション引数の詳細
結合リスト
結合リストは,骨格結合の不飽和を表します.つまり基本的には,二重結合にしたい部分を指示する位置指定アルファベットをブラケット[ ]
の中に書き込んで使用します.しかし,[ ]
の中に書けるのは位置指定アルファベットだけではありません.一般書式は以下のようになっています.
[ 位置指定アルファベット ...... { 位置指定アルファベット \Comfuse } { 位置指定番号 + または - } ]
1つ目は先ほど述べたように二重結合を出力するための位置指定アルファベットですが,2つ目の{位置指定アルファベット 縮合単位}
では,\Comfuse
で指定した構造が位置指定アルファベットで指示される位置に出力されます.具体例を挙げておきましょう.
\decaheterov[acfhk{a\fivefusev[b]{}{}{e}}{c\sixfusev[bd]{}{}{F}}]{}{}
また,{ 位置指定番号 + または - }
を書き込むこともできます.こうすると,入力した + または - の符号が位置指定番号で指示した位置に表示されます.
\decaheterov[acegi{9+}]{9==N}{}
骨格結合リスト
このリストは,骨格構造の結合を変更するときに使用します.一般書式は以下の通りです.
( { 位置指定アルファベット 結合の種類 } ...... )
結合の種類はA
またはB
のアルファベットで指定され,それぞれα-結合とβ-結合を表します.したがって,位置指定アルファベットによって指定された骨格構造の結合が,結合の種類としてA
を指定した場合は太い点線に,B
を指定した場合は太線に変わるということです.
\sixheterov({bB}{eA}){3==O;5==O}{2==CH$_3$;6==CH$_3$}
結合消去リスト
このリストを用いると,骨格構造の結合の線を消すことができます.一般書式は以下の通りです.
[ 位置指定アルファベット ...... ]
このリストに書き込まれた位置指定アルファベットによって指示された箇所の結合は消去されます.もちろん,複数の位置指定アルファベットを併記すれば,指定された全ての結合の線が消去されます.このことを応用すると,次に示すような大きな環構造をもつ化合物も出力することができます.
\decaheterov[ae{j\sixfusev[e]{}{}{C}[d]}]{}{}[ijk]
一般化合物用コマンドの詳細
三員環の描画
垂直方向に三員環を描くコマンドの書式は次のようになっています.
\threeheterov( 骨格結合リスト )[ 結合リスト ]{ 原子リスト }{ 置換基リスト}[ 結合消去リスト ]
\threeheterovi( 骨格結合リスト )[ 結合リスト ]{ 原子リスト }{ 置換基リスト}[ 結合消去リスト ]
\threeheteroh( 骨格結合リスト )[ 結合リスト ]{ 原子リスト }{ 置換基リスト}[ 結合消去リスト ]
\threeheterohi( 骨格結合リスト )[ 結合リスト ]{ 原子リスト }{ 置換基リスト}[ 結合消去リスト ]
位置指定番号と位置指定アルファベットの設定は次の通りです.
四員環の描画
四員環の描画には\fourhetero
コマンドを使います.\fourhetero
コマンドの書式は以下の通りです.
\fourhetero( 骨格結合リスト )[ 結合リスト ]{ 原子リスト }{ 置換基リスト }[ 結合消去リスト ]
位置指定番号と位置指定アルファベットの設定は次の通りです.
これらは,例えば次のように使用します.
\fourhetero{1==N}{1==H}
\fourhetero{1==O}{3Sa==COOH;3Sb==COOH}
\fourhetero{1==O;2==O}{3Sa==COOH;3Sb==COOH}
より複雑な例としてセファロスポリンCの構造を書いてみます.
\fourhetero[{b\sixfusev[c]{1==S;5==\null;%
3s==\pentamethylenei{3==O}{1==(yl);4D==O}}{4==COOH;6GA==H}{e}}%
]{2==N}{1D==O;4Sd==H;4Su==\heptamethylenei{7==\downnobond{N}{H}}%
{7==(yl);1W==HO;1D==O;2B==NH$_{2}$;6D==O}}
五員環の描画
五員環の描画には向きに応じて4種類のコマンドがあります.書式は以下の通りです.
\fiveheterov( 骨格結合リスト )[ 結合リスト ]{ 原子リスト }{ 置換基リスト }[ 結合消去リスト ]
\fiveheterovi( 骨格結合リスト )[ 結合リスト ]{ 原子リスト }{ 置換基リスト }[ 結合消去リスト ]
\fiveheteroh( 骨格結合リスト )[ 結合リスト ]{ 原子リスト }{ 置換基リスト }[ 結合消去リスト ]
\fiveheterohi( 骨格結合リスト )[ 結合リスト ]{ 原子リスト }{ 置換基リスト }[ 結合消去リスト ]
それぞれの位置指定番号と位置指定アルファベットの設定は次の通りです.
いくつか具体的な使用例を挙げておきます.
\fiveheterov{1==O}{2D==O;5D==O;3==CH$_{3}$;4==CH$_{3}$}
\fiveheterovi[b]{1==O}{}
\fiveheteroh{2==O;5==O}{1D==O;3B==CH$_{2}$CH$_{3}$;4B==CH$_{3}$}
\fiveheterohi{2==S;5==S}{1Sa==Me$_{3}$Si;1Sb==Li}
六員環の描画
六員環の場合も,五員環と同様に描画できます.この場合は\sixhetero
コマンドを使用します.
\sixheterov( 骨格結合リスト )[ 結合リスト ]{ 原子リスト }{ 置換基リスト }[ 骨格結合消去リスト ]
\sixheterovi( 骨格結合リスト )[ 結合リスト ]{ 原子リスト }{ 置換基リスト }[ 骨格結合消去リスト ]
\sixheteroh( 骨格結合リスト )[ 結合リスト ]{ 原子リスト }{ 置換基リスト }[ 骨格結合消去リスト ]
\sixheterohi( 骨格結合リスト )[ 結合リスト ]{ 原子リスト }{ 置換基リスト }[ 骨格結合消去リスト ]
位置指定番号と位置指定アルファベットの設定は次の通りです.
例えば,次のような使い方が考えられます.
\sixheterov{1==O}{2D==O;6D==O;3==CH$_{3}$;5==CH$_{3}$}
\sixheterov[b]{1==O}{}
\sixheterov{3==O;5==O}{4D==O;6B==ICH$_{2}$;2B==CH$_{3}$}
\sixheterov{3==S;5==S}{4Sa==SiMe$_{3}$;4Sb==Li}
六員環+五員環の描画
六員環に五員環を縮合させた化合物は,有機化学において頻繁に登場します.そうした化合物を書くためのコマンドが,以下のようなものです.
\nonaheterov( 骨格結合リスト )[ 結合リスト ]{ 原子リスト }{ 置換基リスト }[ 骨格結合消去リスト ]
\nonaheterovi( 骨格結合リスト )[ 結合リスト ]{ 原子リスト }{ 置換基リスト }[ 骨格結合消去リスト ]
\nonaheteroh( 骨格結合リスト )[ 結合リスト ]{ 原子リスト }{ 置換基リスト }[ 骨格結合消去リスト ]
\nonaheterohi( 骨格結合リスト )[ 結合リスト ]{ 原子リスト }{ 置換基リスト }[ 骨格結合消去リスト ]
それぞれについての位置指定番号と位置指定アルファベットの設定は次の通りです.
いくつかの例を示しておきます.
\nonaheterov[bjg]{1==N;3==N;5==N;7==N}{1==H;5==H;4D==O}
\nonaheterov[bjge]{1==N;5==N;7==N}{1==H;3==C$_{6}$H$_{5}$;4==NHCH$_{3}$}
\nonaheterov[bjge]{1==S;2==N}{3==Cl}
次に,やや複雑な化合物の例としてロガニンの構造式を見てみましょう.
\nonaheterovi[e]{6==O}{1B==CH$_{3}$;2B==OH;4==COOCH$_{3}$;%
7B==\lmoiety{glucose-$\beta$-O};8B==H;9B==H}
この構造の入力ソースについては,グルコースとの結合部分を表すときに「酸素原子と結合している」ことを表現するため,\lmoiety
コマンドを用いて位置を調整していることに留意する必要があります.
また,yl機能と組み合わせることで,グルコース部分を明記した形でのロガニンの構造式を描くこともできます.
\nonaheterovi[e]{6==O}{1B==CH$_{3}$;2B==OH;4==COOCH$_{3}$;%
7B==\lyl(8==O){3==\sixheterov{2==O}{3==(yl);1B==CH$_{2}$OH;3GA==H;%
4A==\lmoiety{HO};5B==HO;6A==HO}};8B==H;9B==H}
練習問題
最後に,少しだけ練習問題を用意しておきます.これまでの解説をもとに,以下の構造を書いてみてください.
おわりに
いかがだったでしょうか? 後半は少々複雑で難しいと感じたでしょうか?
しかし,ここで解説したのはまだXyMTeXのほんの一部機能でしかありません.XyMTeXの世界は奥が深く,ここで紹介したのは全780ページのマニュアルの50ページ分にも満たないような内容です.
一般に,XyMTeXの習得には時間がかかると言われています.確かに,そのコマンド群は複雑な体系でそれらの使い方をひと通り覚えるにはそれなりの修練が必要でしょう(我々もまだまだ初心者ですが……).その代わり,一度これを習得してしまえば,あらゆる構造式を極めて高い品質で,自由に出力することが可能となります.こうした性質はLaTeXの理念に一致しています.
それぞれの方法にはそれぞれの魅力があります.今後LaTeX文書内(あるいはそれ以外でも)に構造式を描く必要が生じた時は,ぜひXyMTeXもそのための選択肢の1つとして検討してみてくだい.