Meist setzt LaTeX eine Formel schön, genau so, wie du sie geschrieben hast. Manchmal bleibt aber ein kleiner Makel: Eine Wurzel in einem Bruch ist so hoch, dass sie den Zeilenabstand aufspreizt; zwei benachbarte Quadratwurzeln schließen oben nicht bündig ab; eine lange Bedingung unter einer Summe öffnet links und rechts zu viel Raum. Für solche letzten Korrekturen gibt es eine Reihe kleiner, präziser Werkzeuge. Diese Seite sammelt sie als Problem → Lösung. Die ausführliche Behandlung steht auf den jeweiligen Fachseiten; hier geht es um den schnellen Griff zum passenden Befehl, mit dem sonst nicht behandelten \smash im Mittelpunkt.
Werkzeuge zur Feinabstimmung
Dahinter steht eine gemeinsame Idee: Die Abmessungen, die ein Element einnimmt, also Höhe, Tiefe und Breite, werden unabhängig von seinem Aussehen manipuliert. Wenn sichtbare Zeichen als „Größe null“ zählen können, oder umgekehrt unsichtbarer Inhalt Platz reserviert, lässt sich genau steuern, wie ein Teil seine Nachbarn und den Zeilenabstand beeinflusst. Die vertikale Ausdehnung, Höhe und Tiefe, steuern \smash, \vphantom und \mathstrut; die horizontale Ausdehnung, also die Breite, steuern \mathrlap, \mathllap, \mathclap und der negative Abstand \!; beides zugleich übernimmt \phantom.
Alle diese Befehle sind letzte Handgriffe zur Feinabstimmung des Druckbilds; keiner verändert die Bedeutung der Formel. Die Faustregel lautet daher: Schreibe die Mathematik zuerst schlicht und setze diese Werkzeuge nur dort ein, wo wirklich ein Makel sichtbar wird. Die folgende Tabelle dient als Schnellübersicht.
| Symptom | Nimm | Aus | |
|---|---|---|---|
tall-pushes-lines | Ein hohes Element spreizt den Zeilenabstand | \smash (\smash[t] / \smash[b]) | LaTeX-Kern ([tb] über amsmath) |
radical-heights-differ | Benachbarte Wurzeln/Zeilen haben unterschiedliche Höhe | \vphantom / \mathstrut | LaTeX-Kern |
reserve-space | Platz für unsichtbares Material reservieren, um auszurichten | \phantom / \hphantom / \vphantom | LaTeX-Kern |
wide-subscript | Ein breiter Subscript verbreitert die Spalte | \mathclap (\mathrlap / \mathllap) | mathtools |
stack-symbol | Ein beliebiges Symbol über = usw. stapeln | \overset / \underset | amsmath |
too-much-space | Symbole stehen zu weit auseinander | \! (negativer dünner Abstand) | LaTeX-Kern |
\smash — Höhe und Tiefe als null zählen lassen
Problem. Steht eine Wurzel im Zähler oder Nenner eines Bruchs, ragt die Oberkante von \sqrt, also der obere Rand des Wurzelzeichens, über eine normale Zeile hinaus. Damit Zeilen nicht kollidieren, vergrößert LaTeX den Abstand zur Zeile darüber genau um diesen Überschuss. Dadurch bekommt eine Zeile zusätzlichen Durchschuss, und der Zeilenabstand der Seite wirkt ungleichmäßig.
Lösung. \smash{...} setzt sein Argument so, als hätten Höhe und Tiefe beide den Wert null. Die sichtbaren Zeichen werden unverändert gedruckt, aber LaTeX behandelt die Box als vertikal größenlos und erweitert den Zeilenabstand deshalb nicht mehr. Die offizielle LaTeX2e-Referenz erklärt sinngemäß, ohne \smash würde LaTeX die Zeile von der darüberliegenden trennen, was unschöne ungleichmäßige Abstände ergeben kann. Zu beachten ist, dass das „gesmashte“ Material dann in die Zeile darüber hineinragen kann.
% 問題:分数のなかの根号が、この行だけ行間を押し広げる
$y = \frac{1}{\sqrt{1 - x^2}}$
% 直し方:根号の高さをゼロ扱いにして行送りへの影響を消す
$y = \frac{1}{\smash{\sqrt{1 - x^2}}}$Beide Varianten zeigen dieselbe Formel, aber in der zweiten wird die Höhe von \sqrt{1-x^2} nicht in die Berechnung des Zeilenabstands einbezogen. Die Zeile erhält daher denselben Abstand wie ihre Nachbarn. Das ist besonders wirksam, wenn ein hohes Element in Inline-Mathematik im laufenden Text steht.
Mit amsmath erhält \smash ein optionales Argument. \smash[t]{...} smash’t nur oben, also die Höhe, und lässt die Tiefe natürlich; \smash[b]{...} smash’t nur unten, also die Tiefe, und behält die Höhe. Wie das amsmath-Handbuch anmerkt, ist es gelegentlich nützlich, nur die Ober- oder Unterseite von etwas zu smashen und die natürliche Tiefe oder Höhe zu behalten.
Ein typisches Beispiel aus amsmath selbst ist das Angleichen benachbarter Quadratwurzeln. In \sqrt{x} + \sqrt{y} + \sqrt{z} hat der Buchstabe y eine Unterlänge, sodass das mittlere Wurzelzeichen etwas tiefer hängt. Entfernt man genau diese Tiefe mit \smash[b], stehen alle drei Wurzeln auf einer Linie.
% amsmath マニュアルの例:まんなかの根号だけ下がるのを直す
$\sqrt{x} + \sqrt{y} + \sqrt{z}$ % y の descender で不ぞろい
$\sqrt{x} + \sqrt{\smash[b]{y}} + \sqrt{z}$ % y の深さを消してそろえる\smash funktioniert nicht nur im Mathematikmodus, sondern auch im Text. Im Text tritt es jedoch nicht in den Horizontalmodus ein; am Absatzanfang braucht es daher ein vorangestelltes \leavevmode. Beachte, dass \smash und das \vphantom des nächsten Abschnitts entgegengesetzte Operationen sind: \smash lässt etwas Großes als null zählen, während \vphantom etwas Unsichtbarem mit Größe null eine reale Höhe gibt. amsmath zeigt tatsächlich Beispiele, in denen beide kombiniert werden, um Höhen anzugleichen.
\vphantom und \mathstrut — mit unsichtbarer Höhe ausgleichen
Problem. Das Spiegelbild von \smash: Manchmal soll das niedrigere Element auf die Höhe des höheren gebracht werden. Setzt man \sqrt{a} neben \sqrt{a^2}, macht der Exponent das rechte Wurzelzeichen höher, sodass die Oberkanten nicht bündig sind. Dasselbe passiert in Fallunterscheidungen oder Matrizen, wenn Zeilen unterschiedliche Inhaltshöhen haben.
Lösung. \vphantom{...} erzeugt eine unsichtbare Box mit derselben Höhe und Tiefe wie sein Argument, aber mit Breite null. Setzt du ein \vphantom des höheren Inhalts in das niedrigere Element, gleichen sich die Höhen an, ohne dass etwas sichtbar wird. Die abkürzende Variante ohne Argument ist \mathstrut, definiert als \vphantom(: eine unsichtbare Stütze in Höhe einer öffnenden Klammer. Am Anfang jedes Elements platziert, nivelliert sie alles auf diese Klammerhöhe.
% 根号の天井をそろえる:各 \sqrt の中身に \mathstrut を足す
$\sqrt{\mathstrut a}\;\sqrt{\mathstrut a^2}\;\sqrt{\mathstrut b}$
% 任意の高さにそろえたいときは、揃え先の中身を \vphantom に渡す
$\sqrt{a} \;\sqrt{\vphantom{a^2}\,a}$Diese Befehle werden auf der Seite zu Scripts und Abständen ausführlich behandelt; dort findest du die Mechanik und den Unterschied zu \hphantom. Wichtig ist hier: \smash, das Hohe herunterzählt, und \vphantom / \mathstrut, die das Niedrige anheben, sind komplementäre Werkzeuge zum Angleichen von Höhen.
\phantom — mit unsichtbarem Platz ausrichten
Problem. In mehrzeiligen Formeln soll dieser Term in der unteren Zeile direkt unter jenem Term in der oberen stehen, doch unterschiedliche Längen links verschieben die Spalten. Manuell eingefügte Leerzeichen brechen wieder, sobald Schrift oder Formel sich ändern.
Lösung. \phantom{...} ist eine unsichtbare Box mit derselben Höhe, Tiefe und Breite, die das normal gesetzte Argument hätte. Übergib den Ausdruck, an dem du ausrichtest, direkt an \phantom; du erhältst einen Leerraum exakt in dessen Breite, und die Spalten stehen natürlich bündig. Brauchst du nur die Breite, verwende \hphantom{...} mit Höhe und Tiefe null.
% 「= 」の左を、上の行の項の幅だけ空けて桁をそろえる
\begin{align*}
f(x) &= x^2 + 2x + 1 \\
\phantom{f(x)} &= (x + 1)^2
\end{align*}Hier reserviert \phantom{f(x)} links in der zweiten Zeile einen Leerraum in der Breite von f(x), sodass die beiden =-Zeichen vertikal ausgerichtet sind. Die ganze \phantom-Familie, also \hphantom und \vphantom, wird ebenfalls auf der Seite zu Scripts und Abständen erklärt.
\mathclap, \mathrlap, \mathllap — Boxen mit Breite null (das horizontale \smash)
Problem. Die Bedingung unter einer Summe oder einem Produkt ist manchmal breiter als der Operator selbst, etwa \sum_{1 \le i \le j \le n}. LaTeX öffnet dann auf beiden Seiten des Summenzeichens Platz für diese Breite, und die ganze Formel wirkt gedehnt. In Tabellen oder Ausrichtungen kann diese Zusatzbreite eine ganze Spalte verschieben.
Lösung. \mathclap{...} aus mathtools setzt sein Argument in eine Box mit Breite null und zentriert es darin, sodass es gleichmäßig nach links und rechts hinausragt. Die Bedingung bleibt sichtbar, während die Formel nur die Breite des Operators selbst einnimmt. Soll sie nur auf einer Seite hinausragen, verwende \mathllap{...} nach links oder \mathrlap{...} nach rechts. Diese Befehle wurden tatsächlich als horizontales Gegenstück zu \smash geschaffen: \smash setzt die vertikale Größe auf null, die lap-Befehle die horizontale Größe, also die Breite.
% 問題:長い下付き条件が総和の前後に余白を作る
\[ \sum_{1 \le i \le j \le n} a_{ij} \]
% 直し方:条件を幅ゼロの箱に入れ、式の幅を記号本体に保つ
\[ \sum_{\mathclap{1 \le i \le j \le n}} a_{ij} \]Vorausgesetzt ist, dass mathtools geladen ist (\usepackage{mathtools}, was amsmath automatisch mitlädt). Diese Befehle, die Textmodus-Variante \clap und das optionale Argument [mathstyle] werden auf der mathtools-Seite ausführlich behandelt.
Wenn du die Bedingungen nicht horizontal zusammendrücken, sondern auf mehrere Zeilen stapeln möchtest, ist amsmaths \substack{...} passend: Mit \sum_{\substack{0<i<m \\ 0<j<n}} werden die beiden Bedingungen, durch \\ getrennt, zweizeilig unter dem Summenzeichen gesetzt.
Symbole stapeln und Abstände zusammenziehen
Problem eins. Manchmal soll ein beliebiges kleines Symbol direkt über oder unter einem vorhandenen stehen: ein Ausrufezeichen über dem Gleichheitszeichen für „gleich nach Forderung“, \overset{!}{=}, oder \overset{?}{=} für „ist das wirklich gleich?“. Scripts (^, _) hängen rechts am Symbol und nicht genau darüber oder darunter.
Lösung. Verwende amsmaths \overset{above}{base} und \underset{below}{base}. \overset{!}{=} setzt ein kleines Ausrufezeichen direkt über das Gleichheitszeichen. Das zweite Argument ist die Basis, das erste das hinzugefügte Material.
\[
a \overset{!}{=} b, \qquad x \overset{?}{=} y,
\qquad A \overset{f}{\longrightarrow} B
\]Die ausführlichere Verwendung von \overset / \underset, etwa an Pfeilen oder verschachtelt, steht auf der Seite zu Über-/Unterdekorationen.
Problem zwei. Umgekehrt können Symbole zu weit auseinander stehen. Der klassische Fall ist ein Doppel- oder Dreifachintegral: \int\int lässt so viel Raum zwischen den Zeichen, dass sie wie getrennte Integrale wirken.
Lösung. Ziehe sie mit dem negativen dünnen Abstand \! zusammen, also −3 mu, genau dem Gegenstück zu \,. Als \int\!\!\int eingefügt, rücken die beiden Integralzeichen sinnvoll zusammen. Für Mehrfachintegrale bietet amsmath außerdem eigene Befehle wie \iint und \iiint. Die vollständige Tabelle der mathematischen Abstandskorrekturen einschließlich \! steht auf der Seite zu Scripts und Abständen.
\[
\int\int f \, dA % 間が空きすぎ
\qquad
\int\!\!\int f \, dA % \! で適度に詰める
\]