Das Schwierige an einer mehrzeiligen abgesetzten Formel in LaTeX ist nicht die Wahl der Umbruchstellen. Es ist die Frage, wie viele Formelnummern das Ergebnis trägt: align vergibt eine pro Zeile, multline eine für die ganze Formel, und split trägt gar keine und leiht sich eine von der umgebenden Struktur. Wer das verwechselt, verschiebt jede folgende Nummer – und mit ihr sämtliche Querverweise. Diese Seite ordnet die amsmath-Umgebungen equation, align, gather, multline, split und cases entlang genau dieser Achse, behandelt dann die Nummernsteuerung mit \notag, \tag und subequations sowie das Verweisen mit \label und \eqref. Am Ende steht eqnarray – mit einer Messung, die zeigt, warum man es nie wieder verwenden sollte.
Zuerst amsmath laden – und niemals eine Leerzeile darin lassen
Alle Umgebungen dieser Seite außer equation stammen aus amsmath; eine Zeile in der Präambel ist also die Voraussetzung für alles Weitere. amsmath füllt einen Bereich, in dem einfaches LaTeX fast nichts bot, und ergänzt align und align*, gather und gather*, multline und multline*, alignat und alignat*, flalign und flalign* sowie split. Für Formelnummern am linken Rand übergibt man \usepackage[leqno]{amsmath}, am rechten (Standard bei horizontaler Schrift) [reqno], für linksbündige Displays [fleqn].
\usepackage{amsmath}Vorab noch eine Mine entschärfen: Niemals eine Leerzeile in diese Umgebungen setzen. Wer es tut, erhält ! Paragraph ended before \align was complete. Der Grund ist historisch. Die technischen Notizen der AMS erklären, dass diese Display-Umgebungen ihren Inhalt als begrenztes Makroargument einlesen und ihn in mehreren Durchgängen verarbeiten, um Breiten und Positionen zu bestimmen – mit Algorithmen, die von Michael Spivaks amstex.tex übernommen wurden. Eine Leerzeile ist für TeX ein \par, und ein \par kann das Argument eines nicht als \long deklarierten Makros nicht überschreiten. Die Fehlermeldung ist der direkte Beleg dafür, dass in amsmath noch das Blut des AMS-TeX der 1980er fließt.
Eine nummerierte Einzelzeile: die Umgebung equation
Ausgangspunkt ist die equation-Umgebung. Sie setzt ihren Inhalt in eine eigene Zeile und fügt am rechten Rand (Standard bei horizontaler Schrift) eine fortlaufende Nummer hinzu. Die Nummer verwaltet der Zähler equation, und ein \label{…} erlaubt den Aufruf im Text mit \ref{…} oder \eqref{…}. Soll nur die Nummer verschwinden, nimmt man das sternmarkierte equation* – bei geladenem amsmath exakt dasselbe wie \[ … \]. Kurz: equation gibt einer Formelzeile genau eine Nummer, nicht mehr und nicht weniger.
\begin{equation}
\label{eq:euler}
e^{i\pi} + 1 = 0
\end{equation}Das setzt Eulers Identität zentriert in eine eigene Zeile, mit einer Nummer wie (1) am rechten Rand (die Nummer ist der laufende Zähler des Dokuments, also nicht zwingend 1). Passt eine Formel nicht in eine Zeile oder sollen mehrere ausgerichtet werden, geht es mit den Umgebungen unten weiter. Eine Warnung: Eine nummerierte Umgebung niemals in \[ … \] verschachteln. \[ \begin{align} … \end{align} \] liefert ! Package amsmath Error: Erroneous nesting of equation structures; – das äußere \[ … \] ist schlicht überflüssig.
Mehrere Formeln ausrichten: align gegen gather
align richtet an der Relation aus; gather stapelt zentriert und richtet gar nichts aus. Das ist der ganze Unterschied, und beide nummerieren jede Zeile (die sternmarkierten align* und gather* nicht). In align trennt man Zeilen mit \\ und setzt ein & an die auszurichtende Stelle – üblicherweise unmittelbar vor eine Relation wie ein Gleichheits- oder Ungleichheitszeichen. Alles links von & wird rechtsbündig, alles danach linksbündig gesetzt, sodass beide Seiten genau an der Relation zusammentreffen. Das amsmath-Handbuch sagt ausdrücklich, dass ein & hinter der Relation den normalen Abstand stört – genau so war das alte eqnarray gebaut.
\begin{align}
(x + y)^2 &= x^2 + 2xy + y^2 \\
(x - y)^2 &= x^2 - 2xy + y^2
\end{align}Das stapelt die beiden Formeln, beide Gleichheitszeichen an derselben waagerechten Position, mit einer Nummer rechts in jeder Zeile. Setzen Sie kein \\ hinter die letzte Zeile – das amsmath-Handbuch warnt ausdrücklich davor, denn es fügt unter der Formel unerwünschten vertikalen Abstand ein. Der häufigste Fehlgriff ist ein & in gather: Dort gibt es keine Ausrichtungsspalte, also erscheint ! Extra alignment tab has been changed to \cr. Dieselbe Meldung kommt, wenn in einer Zeile eines split zwei & stehen.
align kann Formeln auch nebeneinander setzen. Das & dient zugleich als Ausrichtungsmarke und als Spaltentrenner: Eine Gruppe lautet „rechtsbündiger Teil & Relation mit linksbündigem Teil“, und ein weiteres & trennt sie von der nächsten. Den Abstand zwischen den Spalten setzt amsmath automatisch in fester Breite. Wer ihn selbst bestimmen will, nimmt alignat, das die Zahl der Spaltenpaare als Argument erhält und keinen Zwischenraum lässt, sodass man ihn mit \quad selbst einfügt; und flalign, wenn die Spalten auf die volle Breite des Satzspiegels auseinandergezogen werden sollen.
\begin{align}
x &= y & X &= Y & a &= b + c \\
x' &= y' & X' &= Y' & a' &= b \\
x + x' &= y + y' & X + X' &= Y + Y' & a'b &= c'b
\end{align}gather dagegen kennt gar keine Ausrichtung: Jede Zeile wird für sich zentriert. Zeilen trennt \\, und jede erhält eine Nummer (gather* keine). Merkt man sich align als „an der Relation ausrichten“ und gather als „einfach zentriert stapeln“, trifft sich die Wahl von selbst. Eine einzelne Zeile eines gather darf ein split (unten) enthalten, sodass nur diese Zeile über mehrere umbricht.
\begin{gather}
a^2 + b^2 = c^2 \\
e^x = \sum_{n=0}^{\infty} \frac{x^n}{n!}
\end{gather}Trifft ein langes align auf einen Seitenwechsel, bricht LaTeX es standardmäßig nicht um: amsmath setzt \interdisplaylinepenalty auf den Höchstwert. In Dokumenten mit Herleitungen über Dutzende von Zeilen lockert \allowdisplaybreaks in der Präambel dieses Verbot. Das optionale Argument reicht von [1] bis [4], von widerwillig bis großzügig; Vorgabe ist das großzügigste [4]. Soll nach einer bestimmten Zeile nicht umbrochen werden, schreibt man deren \\ als \\*.
Eine lange Formel umbrechen: multline und split
Zwei Umgebungen brechen eine einzelne Formel um, die nicht in eine Zeile passt, und beide unterscheiden sich entscheidend von align/gather: eine Formel, eine Nummer. multline richtet nichts aus. Es setzt die erste Zeile linksbündig und die letzte rechtsbündig, mittlere Zeilen zentriert. „Linksbündig“ ist dabei nicht ganz bündig: Gemessen beginnt die erste Zeile 10pt innerhalb des Randes, dem Vorgabewert von \multlinegap. Die Nummer der gesamten Formel steht auf der letzten Zeile (unter leqno auf der ersten). Da es eine Formel mit einer Nummer ist, dürfen einzelne Zeilen nicht mit \notag ausgeblendet werden. Um eine mittlere Zeile zur Seite zu schieben, übergibt man die ganze Zeile – ohne das folgende \\ – an \shoveleft{…} oder \shoveright{…}. Die unnummerierte Form ist multline*.
\begin{multline}
a + b + c + d + e + f \\
+ g + h + i + j + k + l + m + n
\end{multline}Sollen die umbrochenen Zeilen ausgerichtet werden, nimmt man split. Wie align richtet split an & aus, erlaubt aber nur eine Ausrichtungsspalte (ein & je Zeile) und trägt selbst keine Nummer. Man setzt es in eine nummerierte Struktur wie equation (oder align, oder gather); das Ganze erhält dann vom Wirt eine einzige Nummer. Allein verwendet, meldet es ! Package amsmath Error: \begin{split} won't work here. Der Inhalt eines split sollte den Wirt vollständig ausfüllen; nur ausgabelose Befehle wie \label dürfen daneben stehen. In multline kann es nicht stehen.
\begin{equation}
\label{eq:cosh}
\begin{split}
\cosh x &= \frac{e^x + e^{-x}}{2} \\
&= 1 + \frac{x^2}{2!} + \frac{x^4}{4!} + \cdots
\end{split}
\end{equation}| Umgebung | Formeln und Nummern | Ausrichtung | Hauptzweck |
|---|---|---|---|
equation | eine / eine | keine | eine einzelne abgesetzte Zeile |
align | viele / je Zeile | bei & | stapeln und an Relationen ausrichten |
gather | viele / je Zeile | keine (je zentriert) | zentriert stapeln, ohne Ausrichtung |
multline | eine / eine (auf der letzten Zeile) | keine (links nach rechts) | lange Formel umbrechen, ohne Ausrichtung |
split | eine / Nummer vom Wirt | eine &-Spalte | Zeilen einer umbrochenen Formel ausrichten |
Fallweise Definitionen: cases
Um eine Funktion fallweise zu definieren, nimmt man die cases-Umgebung. Die große linke Klammer erscheint automatisch; in jeder Zeile trennt ein & den Wert von der Bedingung, Zeilen trennt \\. Schreibt man die Wörter einer Bedingung („if …“) blank hin, erscheinen sie kursiv und zu eng, denn sie stehen weiterhin im Mathematikmodus – umschließen Sie sie mit \text{…}. cases trägt selbst keine Nummer und steht daher meist in einer equation, die dem Ganzen eine Nummer gibt.
\begin{equation}
|x| =
\begin{cases}
x & \text{if } x \ge 0, \\
-x & \text{if } x < 0.
\end{cases}
\end{equation}Das setzt zwei Zeilen rechts neben eine große Klammer – x (Bedingung x ≥ 0) und −x (Bedingung x < 0) – mit einer einzigen Nummer aus equation. Wertspalte und Bedingungsspalte stehen beide linksbündig. Eine Falle: cases setzt seinen Inhalt im Textstil. Gemessen sind die Ziffern eines \frac{1}{2} innerhalb von cases 6,19pt hoch gegenüber 8,85pt für denselben Bruch in einer gewöhnlichen abgesetzten Formel. Soll der Bruch groß bleiben, nimmt man dcases aus dem Paket mathtools, dieselbe Umgebung im Displaystil.
Die Nummern steuern: \notag, \tag, subequations
In den nummerierten Umgebungen wird jede Zeile automatisch nummeriert, und das lässt sich zeilenweise anpassen. Eine Tatsache beruhigt: Eine Zeile mit \notag verbraucht keine Nummer. amsmath definiert \nonumber so um, dass das Unterdrücken einer Zeile den Zähler zugleich um eins zurücksetzt – in amsmath.sty steht wörtlich \addtocounter{equation}\m@ne. Setzt man \notag an die zweite von drei align-Zeilen, laufen die Nummern (1), keine, (2), und die nächste Formel ist (3). In der Folge bleibt keine Lücke.
- Die Nummer einer Zeile entfernen:
\notagvor das\\dieser Zeile setzen. Das Synonym ist\nonumber; in amsmath ist\notagbuchstäblich als Alias für\nonumberdefiniert. - Die Nummer selbst wählen:
\tag{…}setzt anstelle der automatischen Nummer das Angegebene und ergänzt die Klammern.\tag*{…}fügt keine Klammern hinzu und druckt das Argument wörtlich.\tag{$\star$}ergibt (⋆),\tag*{NP}ergibt NP. - Zusammengehörige Formeln als (4a), (4b) gruppieren: In
subequationseingeschlossen, erhalten die inneren Formeln die Elternnummer plus einen Buchstaben. Ein\labeldirekt nach\begin{subequations}verweist auf die Elternnummer (4), nicht auf das Kind (4a). - Die Nummerierung pro Kapitel oder Abschnitt neu beginnen:
\numberwithin{equation}{section}in der Präambel macht die erste Formel von Abschnitt 2 zu (2.1). So verhindert man in langen Dokumenten vierstellige Formelnummern.
\begin{align}
y &= (x + 1)^2 \notag \\
&= x^2 + 2x + 1 \\
E &= mc^2 \tag{$\star$}
\end{align}
\begin{subequations}
\label{eq:max}
\begin{align}
\nabla \cdot \mathbf{E} &= \frac{\rho}{\varepsilon_0} \label{eq:gauss} \\
\nabla \cdot \mathbf{B} &= 0
\end{align}
\end{subequations}Im obigen align bleibt die erste Zeile dank \notag unnummeriert, die zweite erhält ihre gewöhnliche automatische Nummer, und die dritte bekommt (⋆) statt einer. Die Zwischenschritte einer Herleitung unnummeriert zu lassen und nur die Schlusszeile zu nummerieren, ist das häufigste Muster in einer Arbeit. Im subequations darunter tragen die beiden Maxwell-Gleichungen die Nummern (4a) und (4b); \eqref{eq:gauss} liefert dann (4a), \eqref{eq:max} dagegen (4) für die gesamte Gruppe.
Mit \label und \eqref auf Formeln verweisen
Markieren Sie eine nummerierte Formel mit \label{…}, dann können Sie sie im Text über ihre Nummer aufrufen. \ref{…} liefert die nackte Nummer (etwa 3.2), amsmaths \eqref{…} ergänzt die Klammern und liefert (3.2). In amsmath.sty ist das ganze \eqref in \textup{…} gehüllt, sodass die Klammern auch in kursiver Umgebung aufrecht bleiben – ein Unterschied, der beim ersten Verweis auf eine Formel innerhalb einer Satzformulierung auffällt. In einer mehrzeiligen Umgebung setzt man \label in die Zeile, deren Nummer gemeint ist. Verweise laufen über die Hilfsdatei, deshalb zweimal kompilieren.
By~\eqref{eq:euler}, we have $e^{i\pi} = -1$.
% preamble: number equations within sections, giving (2.1), (2.2), ...
\numberwithin{equation}{section}Das Aussehen der Nummer bestimmt \theequation. In article lautet die Vorgabe \arabic{equation}; in book und report heißt die Definition „ist der Kapitelzähler größer als null, stelle \thechapter. voran, dann die laufende Nummer“ – genau so steht es in book.cls, weshalb der Vorspann eine nackte Nummer ohne Kapitelpräfix erhält. Man kann das Format direkt umdefinieren, etwa mit \renewcommand{\theequation}{\thesection.\arabic{equation}}, doch \numberwithin ist meist die sicherere Wahl, weil es zusätzlich das Zurücksetzen des Zählers regelt.
eqnarray nicht verwenden – 3,6-mal zu locker
Ältere Dokumente verwenden eqnarray (und eqnarray*) für mehrzeilige Mathematik. Tun Sie es nicht. Der Grund lässt sich als Messwert statt als Meinung angeben. In der Definition von \eqnarray in latex.ltx steht auf beiden Seiten der Relationsspalte ein \hskip \tw@\arraycolsep – und \arraycolsep ist mit 5pt voreingestellt, also 10pt je Seite. Setzt man dieselbe Formel in align oder equation, erhält jede Seite \thickmuskip, nämlich 2,78pt. Gemessen in einem 10pt-Dokument: 9,97pt gegen 2,77pt, ein Faktor von 3,6. Schlimmer noch: Diese 10pt sind ein starres Maß, geerbt vom Spaltenabstand der Tabellen, und skalieren nicht mit der Größe der Mathematikschrift.
Der zweite reale Schaden ist die Formelnummer. Steckt eine lange Zeile in einem eqnarray, wird die Nummer über die Formel gedruckt. Gemessen belegte der letzte Term die waagerechten Positionen 483 bis 505pt, die Nummer (1) die Positionen 492 bis 505pt – eine glatte Überlappung. Derselbe Inhalt in align lässt amsmath die Kollision erkennen und die Nummer auf eine eigene Zeile rücken. Genau diese beiden Gründe nennt der Short Math Guide for LaTeX der AMS gegen eqnarray: uneinheitlicher Abstand um die Gleichheitszeichen und kein Versuch, das Überdrucken des Formelkörpers durch die Nummer zu verhindern. Das amsmath-Handbuch fügt einen dritten hinzu: \qed und \qedhere aus den Theorem-Paketen funktionieren darin nicht.
Die Ersetzung ist mechanisch. Mehrere Formeln ausrichten: align. Eine Formel umbrechen: equation plus split. Auch das & wandert – eqnarray war darauf ausgelegt, & hinter die Relation zu setzen, die align-Familie setzt es davor; aus x &=& y wird also x &= y. Übernimmt man ein Manuskript, ist diese Ersetzung die erste Aufgabe.