Bei der klassischen Art, Feynman-Diagramme in LaTeX zu zeichnen, wird jedes Diagramm zu einem Zeichen in einer Schrift. Das ist keine Metapher. Schickt man ein feynmf-Diagramm unter TeX Live 2024 durch METAFONT, meldet es "Font metrics written on myfd.tfm" und darauf "Output written on myfd.600gf (1 character, 4340 bytes)" — ein Zeichen. Das Bild eines Streuprozesses, gegossen als Letter samt Breitentabelle. Naturwissenschaftliche Abbildungen folgen jeweils einer eigenen Zeichengrammatik, und Fachpakete nehmen genau diese Grammatik als Eingabe. Diese Seite ordnet die Chemie-Werkzeuge mhchem, chemfig und XyMTeX, die Physik-Werkzeuge tikz-feynman und feynmf sowie modiagram für Molekülorbitaldiagramme entlang zweier Achsen: was jedes erzeugt und unter welcher Engine es läuft.
Auch innerhalb von „Chemie- und Physikabbildungen“ trennt sich das Werkzeug klar danach, was entstehen soll. Erst die Übersicht, dann die Einzelbetrachtung.
| Paket | Bereich | Was es erzeugt | Engine / Durchläufe |
|---|---|---|---|
mhchem | Chemie | Formeln und Gleichungen im Textsatz (H2O, 2H2+O2 -> 2H2O) | Jede Engine; ein Durchlauf |
chemfig | Chemie | Struktur- und Skelettformeln, Reaktionsschemata | TikZ-basiert; pdf, lua oder xe |
xymtex | Chemie | Strukturformeln; Ringe und Gerüste als Befehle abgerufen | Standard-LaTeX, dazu PostScript- und PDF-Modi |
tikz-feynman | Physik | Feynman-Diagramme; Vertices benennen genügt zur Platzierung | Setzt LuaLaTeX voraus; sonst verschlechtertes Layout |
feynmf / feynmp | Physik | Feynman-Diagramme; jedes wird zur Glyphe oder MetaPost-Abbildung | Zwei Durchläufe; mf oder mpost separat starten |
modiagram | Chemie und Physik | Molekülorbital- bzw. Energieniveaudiagramme | TikZ-basiert; ein Durchlauf |
Chemische Formeln und Gleichungen im Fließtext: \ce{} von mhchem
mhchem dient nicht dem Zeichnen von Strukturen, sondern dem Satz chemischer Formeln und Gleichungen als Text. Geladen wird es mit \usepackage[version=4]{mhchem}, der Ausdruck steht im zentralen Befehl \ce{...} (chemical equation). Seine Stärke liegt darin, dass natürliches Tippen korrekte Chemie ergibt: Eine Ziffer direkt nach einem Elementsymbol wird zum Index (\ce{H2O}), eine Zahl oder ein Zeichen mit ^ zum Ladungsexponenten (\ce{SO4^2-}). Pfeile werden wörtlich getippt — -> vorwärts, <=> Gleichgewicht, <- rückwärts — und + erscheint mit dem richtigen Abstand als Addition der Reaktanden.
\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}
\ce{C\bond{-}C}Der Reihe nach entstehen: die Bildung von Wasser (Koeffizienten und Indizes richten sich selbst aus); Erhitzen, wobei ->[\Delta] eine Bedingung über den Pfeil setzt (mit ->[oben][unten] auch zwei); die Autoionisation von Wasser mit zweiseitigem Gleichgewichtspfeil; die Fällung von Bariumsulfat, wo das abschließende v zum Abwärtspfeil wird (ein entweichendes Gas ist ^); und ein Einfachbindungszeichen über \bond. \ce{} funktioniert im Fließtext ebenso wie in $...$. Nicht leisten kann es das Zeichnen von Strukturen — Bindungslinien und Ringe liegen außerhalb. Für Skelettbilder ist als Nächstes chemfig zuständig. Ein späteres Paket mit gleicher Absicht, chemformula, bietet die Idee über \ch{...}.
Strukturen in einem Zug: Bindungszeichen und Winkel in chemfig
chemfig ist das Standardwerkzeug für Struktur- bzw. Skelettformeln von Molekülen; auf TikZ aufgebaut, beschreibt es ein Molekül über eine Minisprache aus Bindungen und Verzweigungen. Geladen wird schlicht \usepackage{chemfig}, zentraler Befehl ist \chemfig{...}. Die Grammatik dreht sich um zwei Dinge: Bindungszeichen und Winkel. Bindungen — - einfach, = doppelt, ~ dreifach — stehen zwischen Atomen, die Richtung folgt direkt danach in eckigen Klammern. Eine Ziffer 0-7 wie [2] ist eine vordefinierte Richtung in 45°-Schritten: [0] Osten (rechts), gegen den Uhrzeigersinn [2] gerade nach oben, [4] Westen, [6] gerade nach unten. Ein beliebiger Winkel wird mit Doppelpunkt absolut angegeben, etwa [:30]. Runde Klammern (...) zweigen von der Hauptkette ab.
\usepackage{chemfig}
% ...
% methane: hydrogens west, up, down, east
\chemfig{H-C(-[2]H)(-[6]H)-H}
% benzene: alternating bonds, then the inscribed-circle form
\chemfig{*6(=-=-=-)}
\chemfig{**6(------)}Im Methanbeispiel setzt H-C zuerst ein Wasserstoffatom westlich des Kohlenstoffs; die Zweige (-[2]H) und (-[6]H) ergänzen Wasserstoff gerade nach oben und gerade nach unten; das abschließende -H verlängert nach Osten (Standardrichtung) und ergibt das kreuzförmige CH4. Beim Benzol bedeutet *6(...) einen Sechsring, und =-=-=- darin lässt Einfach- und Doppelbindungen alternieren. * erzeugt einen gewöhnlichen Ring, verdoppelt zu ** die aromatische Form mit eingeschriebenem Kreis. chemfig zeichnet zudem Reaktionsschemata: mit \schemestart ... \schemestop umschließen, die Moleküle anordnen und Pfeile mit \arrow einsetzen. \arrow{->[Reagenz]} beschriftet einen Pfeil mit Reagenzien oder Bedingungen, \arrow{<=>} ergibt einen Gleichgewichtspfeil.
\schemestart
\chemfig{H-C(-[2]H)(-[6]H)-H}
\arrow{->[\small oxidation]}
\chemfig{O=C(-[2]H)-[6]H}
\schemestopDas ist ein Schema von links nach rechts: von der Strukturformel des Methans über einen beschrifteten Pfeil für die Oxidation zur Strukturformel des Formaldehyds. Da chemfig auf TikZ aufsetzt, läuft es unter pdfLaTeX, LuaLaTeX und XeLaTeX und braucht in der Regel keine zusätzliche Treibereinstellung (bei DVI-basiertem pLaTeX ist dvipdfmx anzugeben). TeX Live 2024 liefert Version 1.66 vom 28. Dezember 2023 von Christian Tellechea.
Ganze Ringe als Befehl abrufen: XyMTeX
Das andere langlebige Werkzeug für Strukturformeln ist XyMTeX (von Shinsaku Fujita), dessen Prämisse der von chemfig entgegengesetzt ist. Während chemfig Bindungen in einem Zug zeichnet, ruft XyMTeX ganze Ringe und Gerüste als Befehle ab und nimmt die Substituenten als Argumente. \bzdrv{1==Cl;4==OH} liefert einen Benzolring mit Cl in Position 1 und OH in Position 4 — was wo sitzt, wird über Lokantennummern angegeben, genau wie in der chemischen Nomenklatur. Seine Stärke ist es, komplexe kondensierte Polycyclen und Substitutionsmuster über feste, strukturierte Befehle zuverlässig zu setzen.
\usepackage{xymtex}
% ...
% benzene with Cl at position 1 and OH at position 4
\bzdrv{1==Cl;4==OH}Wer neu beginnt, wählt meist chemfig, dessen Notation intuitiver ist und das aktiv gepflegt wird. Nützlich bleibt XyMTeX für die Pflege bereits damit geschriebener Manuskripte und für alle, denen die Angabe über Lokanten vertraut ist. Neben dem Standard-LaTeX-Ausgabemodus unterstützt es PostScript- und PDF-Modi.
tikz-feynman setzt LuaLaTeX voraus: die Warnungen unter pdfLaTeX
Mit LuaLaTeX kompilieren. Unter anderen Engines „läuft“ es zwar, aber die automatische Platzierung entfällt, und die Platzierungsschlüssel werden nicht stillschweigend übergangen, sondern einzeln als Warnung gemeldet. Ein Versuch mit pdflatex unter TeX Live 2024 ergab zunächst "Package tikz-feynman Warning: LuaTeX is required if you wish to have vertices automatically placed." und danach je eine Zeile für horizontal, node distance, level distance und sibling distance mit "The key you tried to use ... requires LuaTeX. It will be ignored." Der Layout-Algorithmus ist in Lua geschrieben; nach dem Wechsel zu lualatex erschien keine einzige Warnung.
Und noch etwas: auf die compat-Nummer achten. Das oft zitierte \usepackage[compat=1.0.0]{tikz-feynman} erzeugt unter TeX Live 2024 eine Warnung: "Package tikz-feynman Warning: The preamble requested version 1.0.0, but the system version is 1.1.0. This may change some diagrams." Enthalten ist 1.1.0 vom 5. Februar 2016, richtig ist also compat=1.1.0. Der Schlüssel soll bemerkbar machen, wenn ein Paketupdate die Diagramme verändern würde; korrekt ist daher, die tatsächlich installierte Version anzugeben (eine abweichende Hauptnummer erzeugt einen Fehler, keine Warnung).
% compile with lualatex
\usepackage[compat=1.1.0]{tikz-feynman}
% ...
% one-shot command: e+ e- -> mu+ mu- via a photon
\feynmandiagram [horizontal=a to b] {
i1 -- [fermion] a -- [fermion] i2,
a -- [photon] b,
f1 -- [fermion] b -- [fermion] f2,
};Die Abbildung zeigt eine lehrbuchhafte s-Kanal-Streuung: Das Paar links trifft sich am Vertex a, eine Wellenlinie, also ein Photon, verbindet a mit b, und rechts spaltet es sich in ein anderes Paar. Linienstile setzt man mit [fermion] (gerade Linie mit Pfeil), [photon] (Wellenlinie), [gluon] (Spirale) und weiteren; Vertices entstehen implizit, sobald man sie benennt. horizontal=a to b ist ein Layouthinweis mit der Bedeutung „a und b waagerecht platzieren“ — genau der Schlüssel, dessen Missachtung pdfLaTeX zuvor gemeldet hatte. Für genaue Platzierung öffnet man in einem tikzpicture eine feynman-Umgebung, setzt Vertices mit \vertex und verbindet sie mit \diagram*.
feynmf und feynmp: ein Zweipassverfahren von 1989
Diese Familie setzt jede Abbildung außerhalb von LaTeX und bindet das Ergebnis ein — ein Zweipassverfahren. feynmf nutzt METAFONT, feynmp MetaPost. Autor ist Thorsten Ohl, und der Copyright-Vermerk in feynmf.sty reicht bis 1989 zurück, also vor LaTeX2e (1994). TeX Live 2024 liefert v1.08, dessen interne Revisionsstempel noch von 1996 stammen. Anders gesagt: Seit fast dreißig Jahren waren keine Änderungen nötig.
Die Schreibweise ist deklarativ. Abbildungen werden in einer fmffile-Umgebung nach Dateinamen gruppiert; darin gibt man in einem fmfgraph (oder fmfgraph*) die äußeren Beine an \fmfleft und \fmfright und die Linien an \fmf{...}. Vertexkoordinaten schreibt man nie — man nennt nur, welches Bein über welchen Vertex wohin läuft, die Platzierung erfolgt von selbst. \fmf{fermion}{i1,v1,o1} heißt: „zeichne eine Fermionlinie von i1 über v1 nach o1“.
% feynmp-auto runs MetaPost for you: pdflatex -shell-escape document
\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}Hier schließt sich der Kreis zum Einstieg dieser Seite. Auf dem feynmf-Weg schreibt der erste LaTeX-Lauf myfd.mf heraus — einen METAFONT-Quelltext —, und dessen Durchgang durch mf gießt die Abbildung als Schrift. Der METAFONT-Bericht des tatsächlichen Laufs unter TeX Live 2024 lautete "Font metrics written on myfd.tfm" und "Output written on myfd.600gf (1 character, 4340 bytes)". Ein Zeichen für ein Diagramm. Der zweite LaTeX-Lauf setzt dann schlicht Zeichen Nummer eins dieser Schrift in den Text. Der feynmp-Weg über MetaPost erzeugt statt einer Schrift eine gewöhnliche Abbildung, weshalb ein moderner PDF-Ablauf üblicherweise diesen wählt.
In der Praxis ist es bequemer, feynmp-auto zu laden; es automatisiert den MetaPost-Lauf. Weil es aber ein externes Programm startet, ist --shell-escape nötig, und es zu vergessen ist unangenehm: Unter TeX Live 2024 gab es weder Warnung noch Fehler — es entstand schlicht ein PDF ohne die Abbildung. Bleibt die Stelle einer Abbildung leer, sollte zuerst ein fehlendes -shell-escape verdächtigt werden. Mit dem Schalter genügen zwei Durchläufe: mpost läuft, und die Abbildung sitzt.
modiagram für MO-Diagramme: die Umgebung MOdiagram ist veraltet
Den kleingeschriebenen Umgebungsnamen modiagram verwenden. Beispiele im Netz — und eine frühere Fassung dieser Seite — zeigen weithin \begin{MOdiagram}, doch mit modiagram 0.3a unter TeX Live 2024 warnt das: "Package modiagram Warning: The environment MOdiagram is deprecated. Use modiagram instead." Die Abbildung entsteht zwar weiterhin, aber es gibt keinen Grund, einen auslaufenden Namen weiterzuverwenden. Mit Kleinschreibung verschwindet die Warnung.
Ein Molekülorbitaldiagramm (MO-Diagramm) steht an der Grenze zwischen Chemie und Physik: Es zeigt, wie Atomorbitale (AOs) zu bindenden und antibindenden Molekülorbitalen (MOs) kombinieren, vertikal nach Energie gestapelt. Genau dafür gebaut ist modiagram (von Clemens Niederberger; in TeX Live 2024 Version 0.3a), auf TikZ aufsetzend. Mit \usepackage{modiagram} laden und in der Umgebung die linken und rechten Atomorbitale mit \atom sowie die verbindenden Molekülorbitale mit \molecule schreiben.
\usepackage{modiagram}
% ...
% lower-case environment name: MOdiagram is deprecated
\begin{modiagram}
\atom{left}{ 1s = {0; up} }
\atom{right}{ 1s = {0; up} }
\molecule{ 1sMO = {1; pair, } }
\end{modiagram}Das ist das einfachste MO-Diagramm überhaupt, für das Wasserstoffmolekül H2. \atom{left} und \atom{right} setzen jeweils ein Elektron mit Spin nach oben in ein 1s-Orbital (die 0 in {0; up} ist das Energieniveau), und \molecule fasst beide zu einem bindenden Orbital mit einem Elektronenpaar (pair) zusammen. Man gibt nur die Besetzung — up, down, pair — und die Niveauhöhen als Argumente an, und ein Niveaudiagramm aus waagerechten Linien und Spinpfeilen setzt sich von selbst zusammen. Solche Diagramme lassen sich auch mit reinem TikZ zeichnen, doch weil modiagram auf MO-Konventionen spezialisiert ist, setzt es diese Standardfiguren kürzer und korrekter.
Die Auswahl und die typischen Stolperstellen beim Kompilieren
Die Wahl folgt unmittelbar daraus, was entstehen soll. Chemische Formeln und Gleichungen im Fließtext: mhchem. Strukturen und Reaktionsschemata: chemfig (oder XyMTeX, wo ein befehlsbasierter Zugang zu komplexen kondensierten Ringen passt). Feynman-Diagramme: tikz-feynman (oder feynmf / feynmp für ältere Umgebungen und Bestandsmanuskripte). MO-Diagramme: modiagram. mhchem und chemfig sind keine Konkurrenten, sondern Ergänzungen; üblich ist der Einsatz beider in einem Dokument — mhchem für die Gleichungen im Text, chemfig für die abgesetzten Skelettformeln.
Erfahrungsgemäß laufen Kompilierprobleme auf etwa drei Ursachen hinaus. Die falsche Engine — das Layout von tikz-feynman braucht LuaLaTeX. Ein fehlendes --shell-escape — feynmp-auto lässt die Abbildung wortlos fallen. Und die Zahl der Durchläufe — feynmf / feynmp brauchen zwei Läufe, bis die Abbildung erscheint. Hinzu kommt, dass chemfig und modiagram TikZ-basiert sind und die Rechnerei mit der Zahl der Abbildungen schwer wird. Abbildungen mit tikzexternalize zwischenzuspeichern oder sie mit der Klasse standalone einzeln zu kompilieren, verkürzt die Wartezeit beim Bearbeiten sichtbar.