mathtools

Sobald amsmath geladen ist und du Mathematik setzt, tauchen ein paar knapp unerreichbare Wünsche auf: Der Doppelpunkt in := sitzt etwas zu tief, ein langer Pfeil soll Labels über *und* unter sich tragen, die Betragsstriche sollen mit dem Inhalt wachsen. mathtools kümmert sich um all das. Es ist eine Erweiterung, die amsmath lädt und anschließend verbessert, sodass die eine Zeile \usepackage{mathtools} amsmath gleich mitbringt. Diese Seite führt durch die meistgenutzten Ergänzungen: ein sauberes :=, den streckbaren Pfeil \xrightarrow, das eckige \overbracket, das selbstskalierende \DeclarePairedDelimiter, das nullbreite \mathclap, Vorskripte mit \prescript und spaltenausgerichtete Matrizen über matrix*.

Was mathtools ist

mathtools ist, mit den Worten des offiziellen Handbuchs, ein „Erweiterungspaket zu amsmath“. Es setzt amsmath als De-facto-Standard für mathematischen Satz voraus, behebt einige verbleibende Mängel und Fehler und ergänzt Werkzeuge für den täglichen Satz. Wichtig ist: mathtools benötigt amsmath intern und lädt es automatisch. Du musst amsmath also nicht zusätzlich nennen; diese eine Zeile in der Präambel genügt.

latex
\usepackage{mathtools}

Wenn du Optionen an amsmath weitergeben willst, reicht mathtools sie durch. Wie das Handbuch zeigt, bedeutet \usepackage[fleqn,tbtags]{mathtools} dasselbe wie \usepackage[fleqn,tbtags]{amsmath} gefolgt von \usepackage{mathtools}. Die Optionen, die du beim Laden von mathtools angibst, erreichen also das darunterliegende amsmath.

Der Funktionsumfang von mathtools ist breit und lässt sich hier nicht vollständig behandeln. Diese Seite beschränkt sich auf die häufig verwendeten Ergänzungen, wie sie auch ein Nachschlagewerk wie Okumuras *Introduction to LaTeX2e* ansprechen würde. Es gibt weitere Funktionen, etwa erweiterte Fallunterscheidungen (dcases), Steuerung von Gleichungsnummern (showonlyrefs) und Pfeile innerhalb von Ausrichtungen (\ArrowBetweenLines); die Details zu Ausrichtungen gehören aber auf die eigene Seite „Abgesetzte, ausgerichtete und nummerierte Gleichungen“.

Intern stützt sich mathtools außerdem auf ein kleines Hilfspaket namens mhsetup, das unter anderem die Paired-Delimiter-Mechanik von \DeclarePairedDelimiter trägt. Große Distributionen wie TeX Live liefern es mit, daher musst du normalerweise nicht daran denken. Die aktive Pflege liegt inzwischen bei Lars Madsen, und die aktuelle Version befindet sich auf CTAN.

Ein sauberes Definitionszeichen: die \coloneqq-Familie

Schreibt man das Definitionszeichen „:=“ im Mathematikmodus wörtlich als :=, sieht es unerwartet holprig aus. Der : wird als Interpunktion, nicht als Relation behandelt, daher stimmt der Abstand nicht, und der Doppelpunkt sitzt etwas unter der Mittellinie des =. \coloneqq aus mathtools setzt „:=“ mit dem Doppelpunkt in der richtigen Höhe zentriert zum Gleichheitszeichen und mit passendem Relationsabstand. Für die umgekehrte Form „=:“ verwendet man \eqqcolon.

latex
\[
  f(x) \coloneqq x^2 + 1, \qquad y \eqqcolon g(x)
\]

Im linken Ausdruck steht hier das := für „f(x) als x²+1 definieren“, im rechten das =: für „g(x) als y schreiben“; jeweils ist der Doppelpunkt sauber zentriert. Außerdem gibt es den Doppeldoppelpunkt \dblcolon (::) sowie Formen mit Näherung oder Ähnlichkeit wie \colonapprox und \colonsim.

Ein Hinweis: In einer Aktualisierung von 2022 hat mathtools die kanonischen Namen dieser Doppelpunkt-Symbole vereinheitlicht, um sie an andere Pakete anzugleichen. Die vertrauten Namen \coloneqq und \eqqcolon bleiben aus Kompatibilitätsgründen verfügbar, doch im neuen Schema sind \coloneq und verwandte Formen kanonisch. Die alten Namen bleiben, damit vorhandene Dokumente weiter kompilieren.

Streckbare Pfeile: \xrightarrow und \xleftarrow

Die gewöhnlichen \rightarrow (→) und \Rightarrow (⇒) haben feste Länge und wirken unbeholfen, wenn ein Label darüber breiter ist als der Pfeil. amsmath stellt genau zwei horizontal streckbare Pfeile bereit: \xrightarrow und \xleftarrow. Die Syntax lautet \xrightarrow[unteres Label]{oberes Label}; die geschweiften Klammern { } stehen über dem Pfeil, die eckigen Klammern [ ] darunter und sind optional. Der Pfeil wächst auf die Breite der Labels.

latex
\[
  A \xrightarrow{f} B \xrightarrow[\sim]{g} C,
  \qquad
  X \xleftarrow[n \to \infty]{\varphi_n} Y
\]

Hier ist der Pfeil von A nach B ein nach rechts streckbarer Pfeil mit f darüber, und von B nach C ein Pfeil mit g darüber und darunter; beide werden auf die Breite ihrer Labels gestreckt. Rechts steht ein nach links zeigender Pfeil mit der Abbildung φ_n oben und der Grenzbedingung n→∞ unten.

amsmath liefert nur diese beiden streckbaren Pfeile, doch mathtools vergrößert die Familie stark nach demselben Namensschema: die Doppellinien \xRightarrow, \xLeftarrow und \xLeftrightarrow, das beidseitige \xleftrightarrow, die Hakenpfeile \xhookrightarrow und \xhookleftarrow, den Abbildungspfeil \xmapsto, dazu Harpunen, also halb gespitzte Pfeile, und längere Varianten wie \xlongrightarrow. Alle verwenden dieselbe Form [unten]{oben}.

Eckige Klammern: \overbracket und \underbracket

Standard-LaTeX und amsmath bieten \overbrace und \underbrace, die eine geschweifte Klammer über oder unter einen Ausdruck setzen. mathtools ergänzt \overbracket und \underbracket, die stattdessen eine eckige, rechtwinklige Klammer zeichnen: keine runde geschweifte Form, sondern eine Klammer mit rechtwinklig abknickenden Enden wie „⌜ ⌟“. Das kann beim Markieren des Umfangs eines Diagramms oder einer Struktur klarer wirken.

\overbracket nimmt zwei optionale Argumente: zuerst die Linienstärke, dann die Klammerhöhe, geschrieben als \overbracket[Linienstärke][Höhe]{Inhalt}. Standardmäßig entspricht die Linienstärke der von \overbrace, etwa 5/18 ex, und die Höhe beträgt etwa 0,7 ex; diese Werte sehen bei jeder Schriftgröße gut aus. Gib die eckigen Klammern nur an, wenn du Stärke oder Höhe ändern willst. Das Label darüber wird wie bei der geschweiften Form mit ^{ } angehängt, darunter mit _{ }.

latex
\[
  \underbracket{a + b + c}_{\text{3 terms}}
  \quad\text{vs}\quad
  \underbrace{a + b + c}_{\text{3 terms}}
\]

Hier erhält dasselbe „a+b+c“ links eine rechtwinklige Klammer aus \underbracket und rechts eine geschweifte Klammer aus \underbrace, jeweils mit der Anmerkung „3 terms“ darunter. Nebeneinander ist der Unterschied zwischen eckiger Klammer und runder geschweifter Klammer deutlich.

Selbstskalierende Begrenzer: \DeclarePairedDelimiter

Beim Setzen eines Betrags |x| oder einer Norm ‖x‖ wirkt ein fest großer Strich unbeholfen, wenn der Inhalt hoch ist, etwa ein Bruch. Das amsmath-Handbuch schlägt ein eigenes \newcommand*\abs[1]{\lvert#1\rvert} vor; damit stimmt zwar der horizontale Abstand, doch bei hohem Inhalt wie \abs{\frac{a}{b}} wachsen die Striche nicht mit. \DeclarePairedDelimiter aus mathtools definiert ein solches passendes Paar von Begrenzern auf einmal, einschließlich automatischer Skalierung. Schreibe dies in die Präambel.

latex
\DeclarePairedDelimiter\abs{\lvert}{\rvert}
\DeclarePairedDelimiter\norm{\lVert}{\rVert}

Nach dieser Definition haben \abs und \norm jeweils drei Verwendungsarten. Erstens setzt einfaches \abs{x} fest große Striche, was bei kurzem Inhalt genügt. Zweitens umschließt die Sternform \abs*{x} den Inhalt mit \left … \right und streckt sich automatisch auf seine Höhe. Drittens gibt die optionale Form \abs[\big]{x} die Größe von Hand vor, mit den vier Stufen \big, \Big, \bigg und \Bigg.

latex
\[
  \abs{x} = \abs{-x}, \qquad
  \abs*{\frac{a}{b}} = \frac{\abs{a}}{\abs{b}}, \qquad
  \norm[\big]{v}
\]

Hier sind \abs{x} und \abs{-x} normal große Striche, \abs*{\frac{a}{b}} ist ein Strichpaar, das auf die Höhe des Bruchs gestreckt wird, und \norm[\big]{v} ist ein Doppelstrich, der um eine \big-Stufe vergrößert ist. Zur zugrunde liegenden Mechanik von Begrenzern siehe auch die Seite „Begrenzer (\left \right)“.

Nullbreite Zentrierung und Vorskripte

Drei weitere häufig verwendete Werkzeuge im Überblick. Das erste ist \mathclap. Wenn die Bedingung unter einer Summe oder einem Produkt breiter ist als der Operator selbst, erzeugt diese Breite zusätzlichen Platz in der ganzen Formel. \mathclap{…} setzt sein Argument in eine nullbreite Box und zentriert es symmetrisch, sodass die Bedingung sichtbar bleibt, die Formelbreite aber auf die des Operators beschränkt wird. Es gibt auch die links- und rechtsausgerichteten Varianten \mathllap und \mathrlap sowie \clap für Textmodus.

latex
\[
  \sum_{\mathclap{1 \le i \le j \le n}} a_{ij}
\]

Hier steht die breite Bedingung „1 ≤ i ≤ j ≤ n“ unter dem Summenzeichen. Durch \mathclap wird sie unter dem Zeichen zentriert und links und rechts der Formel bleibt kein unnötiger Platz. Entfernt man \mathclap, dehnt sich der Bereich um das Summenzeichen um die Breite der langen Bedingung aus.

Das zweite Werkzeug ist \prescript, das hoch- und tiefgestellte Skripte vor, also links von, ein Symbol setzt. Es nimmt drei Argumente in der Reihenfolge \prescript{Vorsuperskript}{Vorsubskript}{Basis}. Das ist praktisch für Isotopenschreibweisen in der Chemie und für mathematische Notationen mit linken Indizes. Uran-238 schreibt man zum Beispiel mit der Massenzahl 238 als Vorsuperskript und der Ordnungszahl 92 als Vorsubskript.

latex
\[
  \prescript{238}{92}{\mathbf{U}}, \qquad
  \prescript{n}{}{C}_{k}
\]

Links steht hier die Isotopenschreibweise für Uran, mit 238 links oben und 92 links unten am Elementsymbol U. Rechts steht n links oben an C, während k wie üblich rechts unten angehängt wird. Wenn kein Vorsubskript benötigt wird, lässt man das zweite Argument als {} leer.

Das dritte Werkzeug ist \shortintertext. \intertext aus amsmath fügt Text zwischen Zeilen ein und erhält dabei die Ausrichtung, doch der Abstand darüber und darunter kann etwas zu großzügig sein. \shortintertext{…} ist eine kompaktere Version, die besser passt, wenn nur eine kurze Bemerkung zwischen Zeilen stehen soll. Sowohl \intertext als auch \shortintertext funktionieren auch in der Umgebung gather.

Spaltenausgerichtete Matrizen: die matrix*-Familie

Die Matrixumgebungen von amsmath, etwa matrix, pmatrix, bmatrix und andere, setzen jede Spalte immer zentriert. Wenn Einträge mit und ohne Minuszeichen gemischt sind, richten sich die Ziffern bei Zentrierung schlecht aus. mathtools stellt passende Sternumgebungen bereit: matrix*, pmatrix*, bmatrix*, Bmatrix*, vmatrix*, Vmatrix*. Sie akzeptieren ein optionales Argument für die Spaltenausrichtung. Schreibe etwa \begin{pmatrix*}[r] und gib dieselben Spaltenspezifizierer wie in array an, also r, l, c; Standard ist c.

latex
\[
  \begin{pmatrix*}[r]
    -1 & 3 \\
     2 & -4
  \end{pmatrix*}
\]

Hier wird jede Spalte der geklammerten Matrix rechtsbündig gesetzt. Dadurch richten sich die rechten Kanten von -1 und 2 sowie von 3 und -4 aus, und die Minuszeichen ragen sauber nach links. Mit einfachem pmatrix würden die Einträge zentriert, sodass die Ziffern um die Breite des Minuszeichens versetzt erscheinen. Grundlagen zu Matrizen stehen auf der Seite „Matrizen und Arrays“.

Optionen setzen: \mathtoolsset

Viele Verhaltensweisen von mathtools lassen sich über Schalter, etwa true/false, anpassen. Der Befehl dafür ist \mathtoolsset{…}, normalerweise in der Präambel, damit er dokumentweit wirkt. Schlüssel werden durch Kommas getrennt und entweder als key=value oder, wenn der Wert offensichtlich ist, als bloßer key angegeben.

latex
\mathtoolsset{
  showonlyrefs = true,
  centercolon
}

Einige häufig verwendete Schlüssel: showonlyrefs=true nummeriert nur die Gleichungen, die im Text referenziert werden, und versteckt die Nummern der übrigen; dazu muss allerdings \eqref statt \ref verwendet werden. centercolon aktiviert das Verhalten, einen : als Relation auf Mittellinienhöhe zu setzen. Daneben gibt es viele feinere Schlüssel, etwa smallmatrix-align für die Standardausrichtung kleiner Matrixvarianten und prescript-sub-format / prescript-sup-format, um die Schrift von \prescript-Indizes zu ändern.

FunktionBefehl / UmgebungWirkung
coloneqq\coloneqq / \eqqcolon:= / =: mit zentriertem Doppelpunkt
xrightarrow\xrightarrow[unten]{oben}Ein Pfeil, der sich an seine Labels anpasst
overbracket\overbracket / \underbracketEckige Klammern, Stärke/Höhe einstellbar
DeclarePairedDelimiter\DeclarePairedDelimiterDefiniert selbstskalierende \abs, \norm
mathclap\mathclap / \clapNullbreite Zentrierung für ordentliche Indizes
prescript\prescript{sup}{sub}{Basis}Setzt Skripte vor ein Symbol
matrix*matrix* / pmatrix* usw.Matrixumgebungen mit Spaltenausrichtung