化学(mhchem / chemfig)

LaTeX で 化学式 を組むとき、最初に決めるのは書き方ではなく「どのパッケージを読み込むか」です。mhchem\ce{H2O}chemmacros\ch{H2O} はどちらも同じ H₂O を出しますが、この二つを素直に並べて読み込むと ! LaTeX Error: Option clash for package mhchem. で落ちます——順番を入れ替えても同じでした。このページは、\ce{} で反応式・電荷・状態・同位体をどう打つか、IUPAC 命名法をどう組むか、そして chemmacros が v6 でモジュール機構を捨てたあと何が変わったかを、TeX Live 2024 で実際にコンパイルしながら整理します。構造式を描く記法そのもの(結合記号と角度、環の書き方)は「化学・物理の図」のページが持ち主なので、ここでは文書に組み込む側から扱います。

mhchem の使い方 — \ce{} は「素直に打つと正しく出る」

\usepackage{mhchem} を読み込み、化学に関するものは全部 \ce{...} の中に書きます。設計思想は一貫していて、紙に書くとおりに打てば正しい組版になる。元素記号のすぐ後ろの数字は下付きに落ち(\ce{H2O} → H₂O)、^ に続く数字と符号は電荷の上付きになり(\ce{SO4^2-} → SO₄²⁻)、-> は反応矢印、<=> は平衡矢印になります。丸括弧の (aq) (s) (l) (g) は状態記号としてそのまま通り、末尾の v は沈殿の下向き矢印、^ は発生する気体の上向き矢印です。TeX Live 2024 同梱版は v4.10(2024 年 1 月 29 日)、作者は Martin Hensel。

latex
\usepackage{mhchem}
% ...
\ce{2 H2 + O2 -> 2 H2O}                          % a balanced reaction
\ce{SO4^2-}                                      % ion with charge
\ce{CO2 + C <=> 2 CO}                            % equilibrium
\ce{NaCl(aq) + AgNO3(aq) -> AgCl(s) v + NaNO3(aq)}  % states, precipitate
\ce{CaCO3 ->[$\Delta$] CaO + CO2 ^}              % labelled arrow, gas evolved
\ce{^{227}_{90}Th+}                              % isotope with mass and atomic number
\ce{CuSO4.5H2O}                                  % the dot becomes a centred dot
\ce{H+ + OH- <=>> H2O}                           % unequal equilibrium

上のすべてを TeX Live 2024 で通し、pdftotext で中身を確認しました。矢印には角括弧でラベルを載せられ、->[上][下] と二つ書けば上下に別々の条件が入ります。同位体は \ce{^{227}_{90}Th+} のように質量数と原子番号を左肩・左下に置け、水和物の中黒は \ce{CuSO4.5H2O} のピリオドがそのまま中央の点になります。平衡矢印は <=> のほか、片側が優勢な <=>><<=> があります。\ce{} は地の文でも $...$ の中でも同じように働くので、段落の途中に化学式を挟む用途にそのまま使えます。

書いたもの出るもの覚え方
H2OH₂O元素記号の直後の数字は自動で下付きになる
SO4^2-SO₄²⁻^ の後の数字と符号は電荷として上付きに
2 H2 + O2 -> 2 H2O係数と反応矢印つきの反応式係数は空白で区切って前に置く。-> が矢印
CO2 + C <=> 2 CO平衡矢印<=> は釣り合い、<=>> <<=> は片側優勢
AgCl(s) vAgCl(s)↓(s) などの状態記号はそのまま。末尾の v が沈殿の矢印
CaCO3 ->[$\Delta$] CaO矢印の上に Δ が載る->[上][下] で矢印の上下に条件を書ける
CuSO4.5H2OCuSO₄·5H₂O水和物のピリオドが中央の点になる

ここでひとつ小ネタを。mhchem.sty を開くと、冒頭のコメントに保守者の連絡先が ROT13 で暗号化して置かれています。理由も添えてあって、迷惑メール対策とのこと。「ROT13 を知らなければインターネットで検索せよ」という注記まで付いています。20 年以上メンテナンスが続いているパッケージの、いちばん人間くさい部分です。実装のほうは今風で、expl3l3keys2ecalcamsmathchemgreekgraphics を自前で読み込みます。amsmath は mhchem が勝手に読むので、自分で書く必要はありません。

Option clash for package mhchem が出たら

mhchemchemmacros を両方 \usepackage すると、! LaTeX Error: Option clash for package mhchem. で止まります。TeX Live 2024 で両方の順番を試しましたが、どちらが先でも同じでした。原因は chemmacros が化学式のエンジンを内部で選ぶ仕組みで、その過程で mhchem を独自のオプション付きで読み込むためです。正解は \usepackage[formula=mhchem]{chemmacros} と書くこと——これだけで衝突は消え、chemmacros の \ch{...} が内部で mhchem を使うようになります。実際に \ch{2 H2 + O2 -> 2 H2O}\iupac{ethanol} が同じ文書でエラーなく通りました。

latex
% WRONG -- fails with "! LaTeX Error: Option clash for package mhchem."
% \usepackage{chemmacros}
% \usepackage{mhchem}

% RIGHT -- let chemmacros load mhchem itself
\usepackage[formula=mhchem]{chemmacros}
% ...
\ch{2 H2 + O2 -> 2 H2O}
\iupac{ethanol}

ついでに、chemmacros を素で読み込むと出る 2 つのメッセージも覚えておくと落ち着きます。ひとつは Package chemmacros Warning: You haven't loaded any package for upright Greek ——立体のギリシャ文字(α-アミノ酸の α など)を出す仕組みを chemgreek 経由で選んでいないという警告です。もうひとつは Package chemmacros Info: You haven't chosen a formula method so I'm assuming 以下の情報行で、これが上の formula= キーに対応します。どちらもエラーではありませんが、化学式の見た目が思ったとおりでないときは、まずこの 2 行を疑ってください。

chemmacros v6 — モジュールはもう無い

chemmacros を「モジュールを選んで読み込む総合バンドル」と説明した文章は、もう古い情報です。TeX Live 2024 同梱版は v6.2a(2022 年 3 月 11 日、Clemens Niederberger 作)で、パッケージ自身が次のように告げます——「モジュール機構は v6 で変わった。すべてのモジュールは本体に統合され、はじめから読み込まれている(minimal オプションを付けていない限り)。新しい既定は以前の modules=all に相当する」。\usechemmodule を書くとこの警告だけが出て何も起きません。つまり \usepackage{chemmacros} の一行で、命名法も酸化数もニューマン投影も全部使える状態になります。化学式のエンジンは既定では chemformula(mhchem に似た \ch{...} を持つ別パッケージ)で、chemformula は単独でも \usepackage{chemformula} として使えます。

古い原稿を再コンパイルする側の救済もちゃんと用意されています。chemmacros.sty の先頭に \DeclareRelease {v4} {2015-02-08}\DeclareRelease {v5} {2020-03-07} が並んでおり、TeX Live には chemmacros-2015-02-08.stychemmacros-2020-03-07.sty が実際に同梱されています。LaTeX のロールバック機構で古い版を名指しできるので、v5 時代に書いた論文が v6 で崩れたときは、書き直す前にまず旧版を指定して比べてみてください。

IUPAC 命名法を組む — \iupac と立体記述子の斜体

有機化合物の名前は、見た目が規約で決まっている点で数式に似ています。\iupac{...} はその規約を面倒みる命令で、中では \- が「改行してよいハイフン」、\higher{...} が立体記述子を斜体・上寄りに置く指定として働きます。\iupac{(1\higher{R},3\higher{S})\-camphor} と書けば (1R,3S)-カンファー が組め、RS が斜体になります。位置番号のハイフンは長い名前の折り返し位置にもなるので、二段組の論文で名前が欄からはみ出す事故が減ります。

latex
\usepackage[formula=mhchem]{chemmacros}
\usepackage{ghsystem}   % needed separately for \ghspic and the H/P statements
% ...
\iupac{2,4,6\-trinitrotoluene}                  % \- is a breakable hyphen
\iupac{(1\higher{R},3\higher{S})\-camphor}      % italic stereodescriptors
\ox{2,Ca} \ox{-2,O}                             % oxidation numbers, roman
\cip{R,S}                                       % Cahn-Ingold-Prelog descriptors
\latin{in situ}                                 % Latin phrases, per house style
\pH{} \pKa{} \pOH{}                             % upright p, italic quantity
\newman{0,60,120,180,240,300}                   % a Newman projection

上の命令はいずれも TeX Live 2024 で動きました。\ox{2,Ca} は Ca の右肩にローマ数字の酸化数を置き、\ox{-2,O} は負の酸化数を出します。\cip{R,S} は Cahn–Ingold–Prelog の記述子、\latin{in situ} はラテン語句を誌面の慣行に合わせて組む命令、\pH \pKa \pOH は p を立体、量記号を斜体にする定型です。\newman{...} は角度の並びを渡すとニューマン投影を描きます。ひとつだけ注意が要るのは GHS の絵表示で、\ghspic{skull}chemmacros だけでは ! Undefined control sequence. になります。\usepackage{ghsystem} を別に書いてください。

構造式と反応スキーム — \chemname と矢印ラベルの落とし穴

構造式そのものは chemfig が描きます(結合記号 - = ~ と 0〜7 の角度、*6(...) の環といった記法は「化学・物理の図」のページが詳しい)。ここで扱うのは、それを文書に載せるときの層です。\schemestart ... \schemestop で反応スキームを組み、分子を並べて \arrow で矢印を挟む。各分子には \chemname{\chemfig{...}}{ベンゼン} で名前を添えられ、名前は構造の真下に揃って入ります。全体の縮尺や結合の太さは \setchemfig{atom sep=2em, bond style={line width=1pt}} のようにまとめて指定します。TeX Live 2024 同梱版は v1.66(2023 年 12 月 28 日)、作者は Christian Tellechea。

latex
\usepackage{mhchem}
\usepackage{chemfig}
\setchemfig{atom sep=2em, bond style={line width=1pt}}
% ...
\schemestart
  \chemname{\chemfig{*6(-=-=-=)}}{benzene}
  % arrow labels are ordinary TEXT: bare "FeBr_3" gives "! Missing $ inserted."
  \arrow{->[\ce{Br2}][\ce{FeBr3}]}
  \chemname{\chemfig{*6(-=-(-Br)=-=)}}{bromobenzene}
\schemestop

矢印のラベルには、実測した落とし穴があります。\arrow{->[...]} の角括弧の中は ふつうの文字列で、数式モードではありません。ですから \arrow{->[FeBr_3]} と書くと _ が本文に出てしまい、! Missing $ inserted. から始まって ! Extra }, or forgotten $. ! Undefined control sequence. へと連鎖し、最後は \node が未定義だと言われて図が壊れます。下付きが要るラベルは \ce{FeBr3}\chemfig{FeBr_3} で包んでください。\ce{}chemfig を同じ文書で使うのは推奨される組み合わせで(前節の chemmacros との衝突とは別の話です)、実際に両方読み込んで問題なく通りました。このほか \charge で孤立電子対や電荷を、\chemabove\chembelow で原子の上下に注記を、\polymerdelim で繰り返し単位の括弧を付けられます。

結局どれを読み込むか

化学式と反応式しか要らないなら mhchem だけ。これが圧倒的多数の論文の正解で、\ce{} ひとつ覚えれば済みます。構造式も描くなら mhchem + chemfig——この二つは競合せず、本文の反応式を \ce{} で、別立ての骨格構造を \chemfig{} で、というのが定番の組み方です。命名法・酸化数・GHS・熱力学まで踏み込むなら chemmacros、ただし mhchem を別行で読まずに [formula=mhchem] を渡すこと。この順で必要になったぶんだけ足していけば、Option clash にも Undefined control sequence にも当たりません。