Figures de chimie et de physique

Equations chimiques, squelettes moléculaires, diagrammes de Feynman de la physique des particules : les figures scientifiques ont chacune leur propre "grammaire" de dessin. On pourrait les construire depuis zéro avec TikZ, mais les paquets spécialisés permettent d’écrire la notation même qu’un chimiste ou un physicien mettrait sur papier et d’obtenir une figure correcte à partir d’un court extrait. Cette page présente les outils de chimie mhchem, chemfig et XyMTeX, les outils de physique tikz-feynman et feynmf, ainsi que modiagram pour les diagrammes d’orbitales moléculaires, en les organisant selon ce à quoi chacun sert réellement.

Commençons par la vue d’ensemble. Même dans les "figures de chimie et de physique", l’outil à choisir dépend fortement de ce que vous voulez produire. Le tableau ci-dessous associe chaque paquet à son domaine avant de les examiner un par un.

PaquetDomaineCe qu’il produit
mhchemChimieFormules et équations (H₂O, 2H₂+O₂→2H₂O comme texte composé)
chemfigChimieFormules développées/squelettiques et schémas réactionnels
XyMTeXChimieFormules développées (ancien paquet fondé sur des commandes)
tikz-feynmanPhysiqueDiagrammes de Feynman (basés sur TikZ, placement automatique)
feynmf / feynmpPhysiqueDiagrammes de Feynman (METAFONT/MetaPost, deux passes)
modiagramChim./Phys.Diagrammes d’orbitales moléculaires (niveaux d’énergie)

Formules et équations — mhchem

mhchem compose les formules et équations chimiques comme du texte. Il ne sert pas à dessiner des structures, mais à écrire la notation chimique insérée dans le texte ou dans les mathématiques, par exemple H2O ou 2 H2 + O2 -> 2 H2O. Chargez-le dans le préambule avec \usepackage[version=4]{mhchem}, puis écrivez l’expression dans sa commande centrale, \ce{...} (chemical equation).

L’intelligence de \ce{} est que la saisie naturelle produit une typographie chimique correcte. Un chiffre juste après un symbole d’élément devient automatiquement un indice (\ce{H2O} → H₂O), et un nombre ou un signe écrit avec ^ devient un exposant de charge (\ce{SO4^2-} → SO₄²⁻). Les flèches s’écrivent littéralement : -> (sens direct), <=> (équilibre), <- (sens inverse), et + est composé comme une addition de réactifs avec le bon espacement. Les états s’ajoutent entre parenthèses, comme \ce{H2O(l)} ; un précipité se note v et un gaz dégagé ^, séparés par des espaces (\ce{BaSO4 v}).

document.tex
\usepackage[version=4]{mhchem}
% ...
\ce{2 H2 + O2 -> 2 H2O}
\ce{CO2 + C ->[\Delta] 2 CO}
\ce{H2O <=> H+ + OH-}
\ce{Ba^2+ + SO4^2- -> BaSO4 v}

Ces exemples composent, dans l’ordre, la formation de l’eau (les coefficients 2 et les indices s’alignent automatiquement), le chauffage (->[\Delta] place l’étiquette de condition Δ au-dessus de la flèche), l’auto-ionisation de l’eau (flèche d’équilibre dans les deux sens) et la précipitation du sulfate de baryum (le v final devient une flèche vers le bas ↓). Une flèche peut recevoir deux étiquettes, ->[haut][bas], pour indiquer des conditions au-dessus et au-dessous. \ce{} fonctionne aussi bien dans le texte courant que dans les mathématiques $...$.

mhchem ne peut pas dessiner des structures : les liaisons et les cycles sont hors de son périmètre. De courts symboles de liaison, comme les liaisons simples ou doubles, peuvent être affichés avec \bond, par exemple \ce{C\bond{-}C}, mais pour une vraie formule squelettique il faut passer à chemfig. (Un paquet plus récent aux objectifs proches, chemformula, propose la même idée avec la commande \ch{...}.)

Structures et schémas — chemfig

chemfig est le paquet de référence pour dessiner les formules développées ou squelettiques des molécules. Fondé sur TikZ, il décrit une molécule presque d’un seul trait grâce à un mini-langage de liaisons et de branches. Le chargement se résume à \usepackage{chemfig}. La commande centrale est \chemfig{...}, et l’on dispose les atomes et les liaisons entre les accolades.

La grammaire repose sur les symboles de liaison et les angles. Les liaisons se notent - (simple), = (double) et ~ (triple), placées entre les atomes. La direction de chaque liaison est indiquée dans les crochets qui la suivent. Un chiffre de 0 à 7 comme [2] désigne une direction prédéfinie par pas de 45° : [0] est l’est (droite, 0°), puis dans le sens antihoraire [2] est le haut (90°), [4] l’ouest (180°), [6] le bas (270°). Un angle quelconque s’écrit avec deux-points comme valeur absolue en degrés, par exemple [:30]. Une branche est un groupe entre parenthèses (...) qui se détache de la chaîne principale.

document.tex
\usepackage{chemfig}
% ...
% メタン CH4:中心 C に H を 4 方向へ
\chemfig{H-C(-[2]H)(-[6]H)-H}

% ベンゼン環(交互の二重結合)
\chemfig{*6(=-=-=-)}

Dans le méthane ci-dessus, H-C place d’abord un hydrogène à l’ouest du carbone ; les deux branches (-[2]H) et (-[6]H) ajoutent des hydrogènes vers le haut et vers le bas ; le dernier -H en ajoute un à l’est (direction par défaut), ce qui donne un CH₄ en croix. Dans le benzène en dessous, *6(...) signifie un cycle à six chaînons, et =-=-=- à l’intérieur alterne liaisons simples et doubles, dessinant l’anneau aromatique hexagonal familier. * crée un cycle ordinaire ; ** donne la forme aromatique avec un cercle inscrit.

chemfig dessine aussi des schémas réactionnels, c’est-à-dire des figures reliant plusieurs molécules par des flèches. Encadrez-les avec \schemestart ... \schemestop, placez-y les molécules (\chemfig{...}), puis insérez les flèches avec \arrow. On peut annoter une flèche avec des réactifs ou conditions, comme \arrow{->[condition]}, et \arrow{<=>} donne une flèche d’équilibre. L’extrait suivant est un schéma simple A → B.

latex
\schemestart
  \chemfig{H-C(-[2]H)(-[6]H)-H}
  \arrow{->[\small oxidation]}
  \chemfig{O=C(-[2]H)-[6]H}
\schemestop

Cela produit un schéma réactionnel de gauche à droite qui part de la formule développée du méthane, passe par une flèche étiquetée indiquant l’oxydation, puis arrive à la formule développée du formaldéhyde. chemfig fonctionne avec pdfLaTeX, LuaLaTeX ou XeLaTeX ; comme il repose sur TikZ, il ne demande généralement pas de réglage de pilote supplémentaire (avec pLaTeX via DVI, indiquez dvipdfmx).

Un autre outil de structure — XyMTeX

Parmi les anciens paquets pour formules développées se trouve XyMTeX (de Shinsaku Fujita). Là où chemfig raisonne comme un "tracé des liaisons d’un seul trait", XyMTeX raisonne en appelant des cycles et des squelettes entiers sous forme de commandes. Pour un dérivé du benzène, par exemple, on transmet les positions et les types de substituants comme arguments à une commande dédiée. Sa force est de composer de manière fiable des polycycles condensés complexes et des motifs de substitution au moyen de commandes fixes et structurées.

On le charge avec \usepackage{xymtex} ; il fournit notamment des commandes pour les formes verticales et horizontales des cycles benzéniques. Pour un nouveau travail, la plupart des gens choisissent chemfig, dont la notation est plus intuitive et la maintenance active, mais XyMTeX reste utile pour les manuscrits existants qui en dépendent ou lorsque son système de commandes est déjà familier. Il prend en charge le mode de sortie LaTeX standard ainsi que les modes PostScript et PDF.

Diagrammes de Feynman — tikz-feynman et feynmf

Passons à la physique. Pour les diagrammes de Feynman, qui représentent les interactions de particules, il existe deux grandes familles d’outils. La plus moderne est tikz-feynman, fondée sur TikZ : on déclare les sommets (vertex) et les lignes (propagators), et il les met en page automatiquement. Le chargement recommandé utilise une clé de compatibilité, \usepackage[compat=1.0.0]{tikz-feynman}.

Pour une figure rapide, utilisez la commande directe \feynmandiagram. On fixe le style de chaque ligne avec [fermion] (fermion : ligne droite fléchée), [photon] (photon : ligne ondulée), [gluon] (gluon : spirale), etc., et les sommets sont créés implicitement dès qu’on les nomme. Pour un placement précis, ouvrez l’environnement feynman dans un tikzpicture, placez les sommets avec \vertex, puis reliez-les avec \diagram*.

document.tex
\usepackage[compat=1.0.0]{tikz-feynman}
% ...
% 一発命令:e+ e- → μ+ μ-(光子交換)
\feynmandiagram [horizontal=a to b] {
  i1 -- [fermion] a -- [fermion] i2,
  a -- [photon] b,
  f1 -- [fermion] b -- [fermion] f2,
};

C’est une diffusion en canal s classique : une paire électron-positron à gauche se rencontre au sommet a, une ligne ondulée (un photon) relie a et b, puis elle se sépare à droite en une autre paire. horizontal=a to b est une indication de placement signifiant "placer a et b horizontalement". Important : le placement automatique nécessite LuaTeX, car tikz-feynman utilise en interne un algorithme Lua. Il fonctionne avec pdfLaTeX, mais la mise en page se dégrade vers une forme rudimentaire et un avertissement est émis. Considérez LuaLaTeX comme pratiquement requis.

L’autre famille est le classique feynmf / feynmp. Chaque diagramme est composé séparément avec METAFONT (feynmf) ou MetaPost (feynmp), puis le résultat est inclus : c’est un flux en deux passes. Les diagrammes sont regroupés par nom de fichier dans un environnement fmffile ; dans un fmfgraph (ou fmfgraph*), on indique les pattes externes avec \fmfleft et \fmfright, et les lignes avec \fmf{...}. La première exécution de LaTeX écrit les fichiers de définition du diagramme ; mf/mpost les convertit en police ou figure ; la seconde exécution les incorpore.

document.tex
\usepackage{feynmp-auto}
% ...
\begin{fmffile}{myfd}
  \begin{fmfgraph*}(120,80)
    \fmfleft{i1,i2}
    \fmfright{o1,o2}
    \fmf{fermion}{i1,v1,o1}
    \fmf{photon}{v1,v2}
    \fmf{fermion}{i2,v2,o2}
  \end{fmfgraph*}
\end{fmffile}

Cet exemple dessine la même diffusion avec feynmp. Avec feynmp-auto, on peut automatiser l’étape MetaPost, ce qui allège le flux manuel en deux passes. feynmf/feynmp sont mûrs, produisent un beau résultat et restent largement utilisés dans les anciens articles et environnements TeX, mais ils imposent l’étape supplémentaire d’appel à MetaFont/MetaPost. En règle générale : pour un nouveau travail, le pratique tikz-feynman ; pour du matériel hérité ou des dépendances minimales, la famille feynmf.

Diagrammes OM et niveaux d’énergie — modiagram

À la frontière de la chimie et de la physique se trouve le diagramme d’orbitales moléculaires (diagramme OM) : il montre comment des orbitales atomiques (OA) se combinent en orbitales moléculaires (OM) liantes et antiliantes, empilées verticalement selon l’énergie. Le paquet conçu pour cela est modiagram, lui aussi fondé sur TikZ. Chargez-le avec \usepackage{modiagram} ; dans l’environnement MOdiagram, décrivez les orbitales atomiques gauche et droite avec \atom, puis les orbitales moléculaires qui les relient avec \molecule.

document.tex
\usepackage{modiagram}
% ...
\begin{MOdiagram}
  \atom{left}{ 1s = {0; up} }
  \atom{right}{ 1s = {0; up} }
  \molecule{ 1sMO = {1; pair, } }
\end{MOdiagram}

C’est le diagramme OM le plus simple, pour la molécule d’hydrogène H₂. \atom{left} et \atom{right} placent chacun un électron de spin vers le haut dans une orbitale 1s ({0; up}, où 0 est le niveau d’énergie), et \molecule les fusionne en une orbitale liante contenant une paire d’électrons (pair). En donnant simplement l’occupation (up, down, pair) et les hauteurs de niveau comme arguments, on obtient un diagramme de niveaux fait de lignes horizontales et de flèches de spin. De tels diagrammes d’énergie peuvent aussi être dessinés en TikZ pur, mais comme modiagram est spécialisé dans les conventions OM, il compose ces figures types plus brièvement et plus correctement.

Choix et remarques de compilation

Pour finir, une règle pratique. On choisit simplement selon ce que l’on veut produire. Pour des formules et équations chimiques dans le texte, mhchem ; pour des structures et schémas réactionnels, chemfig (ou XyMTeX lorsqu’une approche par commandes convient à des cycles condensés complexes) ; pour des diagrammes de Feynman, tikz-feynman (ou feynmf/feynmp pour des environnements anciens ou des manuscrits hérités) ; pour des diagrammes OM, modiagram. mhchem et chemfig sont complémentaires, et il est courant de les utiliser ensemble dans un même document : mhchem pour les équations en ligne et chemfig pour les squelettes affichés.

Gardez aussi en tête les exigences de moteur et de passes. Le placement automatique de tikz-feynman suppose LuaLaTeX ; avec d’autres moteurs, la disposition se dégrade. feynmf/feynmp demandent un flux en deux passes qui appelle MetaFont/MetaPost séparément (feynmp-auto peut l’automatiser). chemfig et modiagram reposent sur TikZ et fonctionnent avec pdfLaTeX, LuaLaTeX ou XeLaTeX, mais les figures TikZ sont coûteuses à calculer et, lorsqu’elles sont nombreuses, ralentissent la compilation. Mettre les figures en cache avec tikzexternalize, ou les compiler seules avec la classe standalone, rend l’édition plus confortable.