Chimie (mhchem/chemfig)

La première décision quand on compose des formules chimiques en LaTeX ne porte pas sur l'écriture mais sur le package à charger. Le \ce{H2O} de mhchem et le \ch{H2O} de chemmacros donnent le même H₂O — mais charger les deux de la façon évidente échoue sur ! LaTeX Error: Option clash for package mhchem., dans l'un ou l'autre ordre. Cette page parcourt la manière dont \ce{} traite réactions, charges, états et isotopes, comment se compose la nomenclature IUPAC, et ce qui a changé quand chemmacros a abandonné son mécanisme de modules à la version 6 — le tout compilé sur TeX Live 2024. La notation permettant de dessiner les structures elles-mêmes (symboles de liaison, angles, cycles) appartient à la page sur les figures de chimie et de physique ; ici, il s'agit d'intégrer la chimie à un document.

Utiliser mhchem : avec \ce{}, taper naturellement suffit

Chargez \usepackage{mhchem} et placez tout ce qui est chimique dans \ce{...}. Le principe de conception est constant : tapez comme vous écririez sur le papier et la composition est juste. Un chiffre placé juste après un symbole d'élément descend en indice (\ce{H2O} donne H₂O), un nombre et un signe après ^ deviennent un exposant de charge (\ce{SO4^2-} donne SO₄²⁻), -> devient une flèche de réaction et <=> une flèche d'équilibre. Les symboles d'état entre parenthèses (aq), (s), (l) et (g) passent tels quels, un v final devient la flèche vers le bas d'un précipité et ^ la flèche vers le haut d'un gaz dégagé. La version de TeX Live 2024 est la v4.10, datée du 29 janvier 2024, de 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

Chaque ligne ci-dessus a été compilée sur TeX Live 2024 et vérifiée avec pdftotext. Les flèches acceptent des étiquettes entre crochets, et ->[dessus][dessous] place des conditions distinctes de part et d'autre. Les isotopes s'écrivent \ce{^{227}_{90}Th+}, nombre de masse et numéro atomique empilés devant le symbole, et le point médian d'un hydrate vient directement du point de \ce{CuSO4.5H2O}. Outre <=>, il existe <=>> et <<=> pour les équilibres déplacés d'un côté. \ce{} se comporte de la même façon dans le texte courant et dans $...$, et s'insère donc sans façon au milieu d'un paragraphe.

Ce que vous tapezCe que vous obtenezL'idée
H2OH₂OUn chiffre juste après un symbole d'élément passe en indice
SO4^2-SO₄²⁻Nombre et signe après ^ deviennent un exposant de charge
2 H2 + O2 -> 2 H2OUne réaction avec coefficients et flècheLes coefficients se placent devant, séparés par une espace ; -> est la flèche
CO2 + C <=> 2 COUne flèche d'équilibre<=> est équilibrée ; <=>> et <<=> penchent d'un côté
AgCl(s) vAgCl(s)↓Les symboles d'état passent tels quels ; un v final est la flèche de précipité
CaCO3 ->[$\Delta$] CaOUn Δ se pose au-dessus de la flèche->[dessus][dessous] inscrit des conditions des deux côtés
CuSO4.5H2OCuSO₄·5H₂OLe point d'un hydrate devient un point médian

Une petite parenthèse : ouvrez mhchem.sty et les coordonnées du mainteneur figurent dans les commentaires d'en-tête, chiffrées en ROT13, avec la raison indiquée — lutter contre le pourriel — et une note vous invitant à chercher sur Internet si vous ignorez ce qu'est ROT13. C'est le coin le plus humain d'un package maintenu depuis plus de vingt ans. L'implémentation, elle, est tout à fait moderne : elle charge d'elle-même expl3, l3keys2e, calc, amsmath, chemgreek et graphics. amsmath est chargé par mhchem, inutile de l'écrire vous-même.

Quand apparaît Option clash for package mhchem

Mettre mhchem et chemmacros chacun dans une ligne \usepackage arrête la compilation sur ! LaTeX Error: Option clash for package mhchem. Les deux ordres ont été essayés sur TeX Live 2024 et ont échoué de la même manière. La cause : chemmacros choisit en interne un moteur de formules et, ce faisant, charge lui-même mhchem avec ses propres options. Le remède est d'écrire \usepackage[formula=mhchem]{chemmacros} — cela seul supprime le conflit et fait tourner le \ch{...} de chemmacros sur mhchem en dessous. Au test, \ch{2 H2 + O2 -> 2 H2O} et \iupac{ethanol} ont compilé sans erreur dans le même document.

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}

Au passage, deux messages émis par chemmacros chargé nu méritent d'être reconnus. Le premier est Package chemmacros Warning: You haven't loaded any package for upright Greek : aucun mécanisme de grec droit n'a été choisi via chemgreek — utile dès qu'il faut composer l'α d'un acide α-aminé. Le second est la ligne d'information commençant par Package chemmacros Info: You haven't chosen a formula method so I'm assuming, qui correspond exactement à la clé formula= ci-dessus. Aucun n'est une erreur, mais si vos formules n'ont pas l'allure attendue, ce sont ces deux lignes qu'il faut regarder d'abord.

chemmacros v6 : les modules ont disparu

Toute description de chemmacros comme un ensemble dont on charge les modules un à un est périmée. La version de TeX Live 2024 est la v6.2a, datée du 11 mars 2022, de Clemens Niederberger, et le package le dit lui-même : le mécanisme de modules a changé à la v6, tous les modules ont été intégrés au package principal et sont préchargés à moins d'avoir chargé chemmacros avec l'option minimal, la nouvelle valeur par défaut correspondant à l'ancien modules=all. Écrire \usechemmodule ne produit désormais que cet avertissement et ne fait rien. Autrement dit, la seule ligne \usepackage{chemmacros} fournit déjà nomenclature, nombres d'oxydation, projections de Newman et le reste. Le moteur de formules par défaut est chemformula, un package distinct dont le \ch{...} ressemble à celui de mhchem ; chemformula se charge aussi seul, par \usepackage{chemformula}.

Un secours est prévu pour qui recompile un vieux manuscrit. L'en-tête de chemmacros.sty porte \DeclareRelease {v4} {2015-02-08} et \DeclareRelease {v5} {2020-03-07}, et TeX Live livre effectivement chemmacros-2015-02-08.sty et chemmacros-2020-03-07.sty. Le mécanisme de retour en arrière de LaTeX permet de désigner une version antérieure par sa date : si un article écrit à l'époque de la v5 casse sous la v6, épinglez l'ancienne version et comparez avant de tout réécrire.

Composer les noms IUPAC : \iupac et descripteurs stéréochimiques en italique

Le nom d'un composé organique ressemble à une formule en ce que son apparence est fixée par convention. \iupac{...} prend en charge ces conventions : à l'intérieur, \- est un trait d'union où la coupure est permise, et \higher{...} place un descripteur stéréochimique surélevé et en italique. Écrire \iupac{(1\higher{R},3\higher{S})\-camphor} compose (1R,3S)-camphre avec R et S en italique. Comme les traits d'union des indices de position servent aussi de points de coupure, les noms longs débordent bien moins souvent de la colonne dans un article sur deux colonnes.

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

Toutes les commandes ci-dessus ont fonctionné sur TeX Live 2024. \ox{2,Ca} place un nombre d'oxydation en chiffres romains à l'épaule de Ca, \ox{-2,O} gère les états négatifs. \cip{R,S} compose les descripteurs de Cahn-Ingold-Prelog, \latin{in situ} compose les locutions latines selon la charte, et \pH, \pKa et \pOH donnent le p droit habituel avec un symbole de grandeur en italique. \newman{...} prend une liste d'angles et dessine une projection de Newman. Un point demande de l'attention : les pictogrammes de danger du SGH. \ghspic{skull} échoue sur ! Undefined control sequence. avec chemmacros seul — ajoutez \usepackage{ghsystem} séparément.

Structures et schémas réactionnels : \chemname et le piège de l'étiquette de flèche

Les structures elles-mêmes sont dessinées par chemfig — sa notation faite des liaisons -, = et ~, des angles 0 à 7 et de cycles comme *6(...) est traitée sur la page des figures de chimie et de physique. Ce qui nous occupe ici, c'est la couche qui les intègre à un document. \schemestart ... \schemestop construit un schéma réactionnel : on aligne les molécules et on les sépare par \arrow. Chaque molécule peut porter un nom via \chemname{\chemfig{...}}{benzène}, posé proprement sous la structure. L'échelle générale et l'épaisseur des liaisons se règlent ensemble, par exemple avec \setchemfig{atom sep=2em, bond style={line width=1pt}}. La version de TeX Live 2024 est la v1.66, datée du 28 décembre 2023, de 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

Les étiquettes de flèche recèlent un piège qu'il vaut la peine d'avoir mesuré. Ce qui figure entre les crochets de \arrow{->[...]} est du texte ordinaire, pas des mathématiques. Écrire \arrow{->[FeBr_3]} place donc un _ dans le texte courant, et la compilation enchaîne ! Missing $ inserted., ! Extra }, or forgotten $. et ! Undefined control sequence. jusqu'à se plaindre que \node est indéfini — la figure est perdue. Une étiquette qui demande des indices doit être enveloppée dans \ce{FeBr3} ou \chemfig{FeBr_3}. Employer \ce{} et chemfig dans un même document est l'association recommandée — autre chose que le conflit avec chemmacros ci-dessus — et charger les deux est passé sans encombre ici. Par ailleurs, \charge ajoute doublets libres et charges, \chemabove et \chembelow annotent au-dessus et au-dessous d'un atome, et \polymerdelim trace les crochets d'un motif répétitif.

Alors, que charger au juste

Si vous n'avez besoin que de formules et d'équations, chargez mhchem seul. C'est la bonne réponse pour l'immense majorité des articles, et \ce{} est la seule commande à apprendre. Si vous dessinez aussi des structures, prenez mhchem et chemfig — les deux ne se gênent pas, et la répartition habituelle est \ce{} pour les équations dans le texte, \chemfig{} pour les squelettes hors texte. Si vous allez jusqu'à la nomenclature, aux nombres d'oxydation, au SGH et à la thermodynamique, recourez à chemmacros, mais passez-lui [formula=mhchem] plutôt que de charger mhchem sur sa propre ligne. En complétant dans cet ordre et seulement selon le besoin, vous ne rencontrerez ni Option clash ni Undefined control sequence.