Brüche, Wurzeln und Exponenten

Der Haken des Wurzelzeichens √ und der Querstrich darüber entstanden im Abstand von 112 Jahren. Der bloße Haken erschien 1525 im Druck, in Christoff Rudolffs Die Coss; erst Descartes verband ihn 1637 mit dem Überstrich (dem Vinculum) zu dem Zeichen, das heute üblich ist. Der Bruchstrich ist noch älter: Er wird dem maghrebinischen Mathematiker al-Hassar aus dem 12. Jahrhundert zugeschrieben und kam durch Fibonacci nach Europa. LaTeX setzt diese getrennt entstandenen Teile bis heute getrennt zusammen. Diese Seite erschließt Brüche, Wurzeln und Exponenten von einer Tatsache aus: \frac ist im Kern \over. Behandelt werden die Arbeitsteilung von \dfrac, \tfrac, \cfrac, \binom und \genfrac, die Wahl zwischen \nicefrac und \sfrac sowie die tatsächlichen Symptome – ein Bruch, der zu klein herauskommt, ein Wurzelexponent an der falschen Stelle.

\frac ist \over – nur mit Klammern darum

\frac gehört zum LaTeX-Kern; amsmath wird nicht benötigt. Die Definition steht offen sichtbar in Zeile 12700 von latex.ltx: \DeclareRobustCommand\frac[2]{{\begingroup#1\endgroup\over#2}}. Ausgesprochen heißt das: das Ganze in { } fassen, den Zähler in \begingroup … \endgroup einschließen und dazwischen das TeX-Primitiv \over setzen. \frac{a+b}{c} und {a+b \over c} liefern folglich dieselbe Ausgabe. Nachgemessen unter TeX Live 2024 bei 10pt in Computer Modern ergeben beide Boxen exakt 24,19968pt Breite, 13,70952pt Höhe und 6,85951pt Tiefe.

Warum heißt es dann immer wieder „nimm \frac, nicht \over“? Der Unterschied sind die Klammern. \over ist ein Primitiv und verschluckt alles links davon in der aktuellen Gruppe als Zähler. Deshalb ergibt {x + y \over 2} nicht „x plus y-halbe“, sondern (x+y)/2, während x + \frac{y}{2} mit derselben Absicht korrekt x + y/2 liefert. \frac verhindert diesen Unfall strukturell, indem es den Zähler als explizites Argument entgegennimmt. Stehen zwei \over in einer Gruppe, kann TeX nicht entscheiden, was zuerst gilt, und bricht ab mit ! Ambiguous; you need another { and }.

latex
% same shape in the source, two different formulas
\[
  {x + y \over 2} \qquad x + \frac{y}{2}
\]

% error: Ambiguous; you need another { and }.
% \[ 1 \over 2 \over 3 \]

Mit amsmath wird diese Linie im Code festgeschrieben. amsmath.sty sichert zunächst das Primitiv mit \@saveprimitive\over\@@over und ersetzt dann \over, \atop und \above (samt ihren …withdelims-Formen) so, dass ihre Verwendung Package amsmath Warning: Foreign command \over; \frac or \genfrac should be used instead auslöst. Anschließend definiert es \frac selbst in Zeile 234 neu als {{\begingroup#1\endgroup\@@over#2}} – damit es das beiseitegelegte echte \over aufruft. Als Nebenwirkung löst auch das alte {n \choose k} über \atopwithdelims dieselbe Warnung aus. Es ist eine Warnung, kein Fehler, die Ausgabe entsteht also; die richtige Korrektur ist \binom.

Warum der Bruch zu klein wird – \dfrac und \tfrac

Weil \frac seine Größe selbsttätig nach dem Stil wählt, in dem es landet. In $ … $ im Fließtext (Textstil) wird es klein gesetzt, damit die Zeilenhöhe nicht springt; in \[ … \] (Display-Stil) groß und mit Luft. Misst man dasselbe \frac{a+b}{c}, ist die Display-Fassung 24,19968pt breit und 13,70952pt hoch, die Textfassung 16,39322pt und 8,79842pt – rund die Hälfte mehr. Um diese automatische Entscheidung abzuschalten, dienen \dfrac (immer Display-Größe) und \tfrac (immer Textgröße) aus amsmath, die nichts anderes sind als Aliase für \genfrac: definiert als \genfrac{}{}{}0 und \genfrac{}{}{}1. Die Messung bestätigt es – ein \tfrac in einer abgesetzten Formel fällt bis auf das Hunderttausendstel Punkt genauso aus wie ein \frac im Text.

latex
% preamble: \usepackage{amsmath}
Small in running text: $\frac{a+b}{c}$, forced large: $\dfrac{\partial f}{\partial x}$.

\[
  \frac{a+b}{c} \qquad \tfrac{a+b}{c} \qquad \dfrac{1}{1 + \dfrac{1}{x}}
\]

Beim Verschachteln wird die Sache dringlicher. TeX kennt nur vier Stile – display, text, script, scriptscript –, und Zähler wie Nenner eines Bruchs werden stets eine Stufe tiefer gesetzt. Gestapelte \frac schrumpfen daher display → text → script → scriptscript und stoßen auf der vierten Stufe auf den Boden. Die Messung bestätigt es: \frac{1}{2} ist im Display-Stil 7,40001pt breit, im Textstil 6,38612pt, im Script-Stil 5,80283pt – und im Scriptscript-Stil ebenfalls 5,80283pt. Dritte und vierte Stufe sind gleich groß; kleiner geht es nicht. Lesbar ist es da ohnehin längst nicht mehr. Sollen alle Ebenen gleich groß bleiben, stapelt man \dfrac oder greift zu \cfrac aus dem nächsten Abschnitt.

  • \frac — die Voreinstellung. Wenn die natürliche Größe dem Kontext folgen soll. Kein Paket nötig.
  • \dfrac — wenn ein Bruch im Fließtext in voller Größe statt zusammengedrückt erscheinen soll oder alle Ebenen einer Verschachtelung gleich groß bleiben müssen. Er treibt die Zeilenhöhe auseinander; auf einer ganzen Seite gerät der Durchschuss ins Springen.
  • \tfrac — wenn nur ein Bruch in einer abgesetzten Formel kompakt bleiben soll. Passend für Brüche in Koeffizienten und in der Nähe von Indizes.
  • \cfrac — ausschließlich für Kettenbrüche. Die Größe bleibt gleich, wie viele Ebenen auch folgen.

Kettenbrüche: \cfrac und sein Argument [l] / [r]

Für Kettenbrüche dient \cfrac aus amsmath. Verschachtelte \frac schrumpfen Ebene für Ebene, wie der vorige Abschnitt zeigte; \cfrac setzt jede Ebene in Display-Größe, sodass die Schriftgröße unabhängig von der Tiefe gleich bleibt. Die Definition in Zeile 913 von amsmath.sty erzählt den ganzen Mechanismus: \DeclareRobustCommand{\cfrac}[3][c]{{\displaystyle\frac{\strut\ifx r#1\hfill\fi#2\ifx l#1\hfill\fi}{#3}}\kern-\nulldelimiterspace}. Sie setzt \displaystyle ausdrücklich, gibt mit einem \strut allen Ebenen dieselbe Höhe und hebt mit dem abschließenden \kern-\nulldelimiterspace den Restabstand rechts vom Bruchstrich auf.

Wie das [3][c] in dieser Definition zeigt, nimmt \cfrac als erstes ein optionales Ausrichtungsargument mit der Voreinstellung c (zentriert). \cfrac[l] setzt den Zähler linksbündig, \cfrac[r] rechtsbündig. Der Kniff ist schlicht: bei r kommt ein \hfill vor den Zähler, bei l eines dahinter. In einem Kettenbruch wird der Nenner nach unten hin länger, der Bruchstrich also von Ebene zu Ebene breiter; [l] sorgt dafür, dass die Zähler am linken Rand fluchten.

latex
% preamble: \usepackage{amsmath}
\[
  x = 1 + \cfrac{1}{2 + \cfrac{1}{2 + \cfrac{1}{2 + \cdots}}}
  \qquad
  \cfrac[l]{1}{2 + \cfrac[l]{1}{2 + \cfrac[l]{1}{2}}}
\]

Binomialkoeffizienten: \binom ist ein Bruch mit 0pt-Strich

\binom{n}{k} (amsmath) setzt den Binomialkoeffizienten „n über k“ als strichlosen senkrechten Stapel in runden Klammern. Dass kein Strich erscheint, liegt nicht an einer Sonderbehandlung, sondern daran, dass es ein Bruch mit einer Strichstärke von 0pt ist. Zeile 240 von amsmath.sty lautet \DeclareRobustCommand{\binom}{\genfrac()\z@{}}: ein \genfrac mit ( und ) als Begrenzern, \z@ (also 0pt) als Strichstärke und leerem Stilargument, das dem Kontext folgt. Für eine feste Größe gibt es \dbinom (immer Display) und \tbinom (immer Text), die ebenso nur \genfrac(){0pt}0 und \genfrac(){0pt}1 sind.

\genfrac ist der allgemeine Befehl, auf dem alle bisherigen aufbauen, und nimmt sechs Argumente: \genfrac{linker Begrenzer}{rechter Begrenzer}{Strichstärke}{Stil}{Zähler}{Nenner}. Das vierte, der Stil, ist eine ganze Zahl 03 und wählt der Reihe nach \displaystyle, \textstyle, \scriptstyle und \scriptscriptstyle; bleibt es leer, folgt es dem Kontext. \genfrac[]{1pt}{0}{a}{b} ergibt somit einen Bruch in eckigen Klammern mit kräftigem 1pt-Strich, stets in Display-Größe. Das ist der Notausgang, wenn die Standardbefehle das gewünschte Aussehen nicht hergeben. Die alte Schreibweise {n \choose k} löst die oben gezeigte amsmath-Warnung aus – sie gehört durch \binom ersetzt.

latex
% preamble: \usepackage{amsmath}
\[
  \binom{n}{k} = \frac{n!}{k!\,(n-k)!}
  \qquad \dbinom{n}{k} \qquad \tbinom{n}{k}
  \qquad \genfrac[]{1pt}{0}{a}{b}
\]

\sqrt und n-te Wurzeln: Der Index sitzt auf \root … \of

\sqrt{Inhalt} gehört zum LaTeX-Kern; amsmath ist nicht nötig. Das Wurzelzeichen und der nach rechts oben laufende Strich (das Vinculum) passen sich automatisch Höhe und Breite des Inhalts an. Für eine n-te Wurzel übergibt man den Index als optionales Argument in eckigen Klammern: \sqrt[3]{x+y}. Beides sind getrennte Implementierungen. Zeile 12701 von latex.ltx lautet \DeclareRobustCommand\sqrt{\@ifnextchar[\@sqrt\sqrtsign} – folgt ein [, geht es zu \@sqrt, sonst zur nackten Glyphe \sqrtsign –, und Zeile 12702, \def\@sqrt[#1]{\root #1\of}, leitet den Fall mit Index über \root … \of. Der Index wird in \scriptscriptstyle gesetzt, bekommt einen Abstand von \mkern5mu und wird um das 0,6-Fache der Zeichenhöhe angehoben – dass Rudolffs Haken und Descartes’ Strich getrennt entstanden, ist der Implementierung bis heute anzusehen.

Kennt man den Mechanismus, wird die klassische Klage verständlich: Bei einem hohen Radikanden landet der Index an einer unschönen Stelle. Er wird proportional zur Höhe des Wurzelzeichens angehoben, driftet also umso weiter nach links vom Zeichen weg, je höher der Inhalt ist. amsmath stellt zur Korrektur \leftroot{n} und \uproot{n} bereit, geschrieben unmittelbar vor dem Index, etwa \sqrt[\leftroot{2}\uproot{3}\beta]{x}. Die Einheit ist mu (math unit, 1/18 em). Gemessen ist die Box von \sqrt[3]{x} 8,00272pt hoch; mit \uproot{10} wächst sie auf 12,14214pt. \leftroot dagegen ändert die Breite überhaupt nicht: \r@@t in amsmath.sty setzt \mkern-\leftroot@ mu und \mkern\leftroot@ mu als sich aufhebendes Paar, sodass die Laufweite bleibt und nur der Index seitlich wandert. Eingreifen sollte man nur, wenn das Ergebnis wirklich schief aussieht; meist genügt die Voreinstellung.

latex
% \sqrt is core LaTeX; \leftroot and \uproot need amsmath
\[
  \sqrt{x^2 + y^2} \qquad \sqrt[3]{x+y} \qquad \sqrt[n]{a}
  \qquad \sqrt[\leftroot{2}\uproot{3}\beta]{\frac{a}{b}}
\]

Exponenten und ! Double superscript

Exponenten sind Hochstellungen und werden mit dem Zirkumflex ^ geschrieben: x^2 ist „x Quadrat“. Es ist eine Kernfunktion, ein Paket wird nicht gebraucht. Die Falle sind Exponenten aus mehr als einem Zeichen, denn ^ greift nur das eine unmittelbar folgende Token. x^10 wird als „x hoch eins“ mit einer verirrten 0 dahinter gesetzt, und da keine Fehlermeldung kommt, übersieht man es leicht. Also immer klammern: x^{10}. Zwei Hochstellungen an derselben Basis wie in x^2^3 brechen den Lauf dagegen ab mit ! Double superscript. – und TeX bietet hilfsbereit seine eigene Lesart an: I treat x^1^2 essentially like x^1{}^2. Wer wirklich einen doppelten Exponenten will, verschachtelt: x^{2^3}. Tief- und Hochstellung am selben Buchstaben sowie die Einheiten des mathematischen Abstands gehören auf die eigene Seite „Indizes und Abstände“.

latex
% braces decide the scope; x^10 is x-to-the-first followed by 0
\[
  x^{10} \qquad x^{2^3} \qquad
  x = \frac{-b \pm \sqrt{b^2 - 4ac}}{2a}
\]

Schräge Brüche: \nicefrac und \sfrac im Fließtext

Wer im Fließtext nur „etwa 3/4 Stunde“ schreiben will, stört die Zeile mit einem kleinen schrägen Bruch weit weniger als mit einem senkrechten Stapel. Der Altgediente ist \nicefrac{a}{b} aus dem Paket nicefrac, seit 1998 als Teil des units-Bündels in Gebrauch. Die neuere Wahl ist \sfrac{a}{b} aus dem Paket xfrac, das zu den l3packages von LaTeX3 gehört; die in TeX Live 2024 mitgelieferte Fassung trägt das Datum 2024-02-13. Die CTAN-Beschreibung von nicefrac hält selbst fest, dass das Paket xfrac dieselben Möglichkeiten in sauberer Form bietet – für neue Dokumente ist \usepackage{xfrac} mit \sfrac also die sichere Voreinstellung.

Beim Nachmessen zeigt sich der Unterschied. Im Fließtext (Textmodus) ist die Box von \sfrac{3}{4} 9,00314pt breit bei 0,13495pt Tiefe, die von \nicefrac{3}{4} dagegen 11,30565pt breit bei 2,5pt Tiefe. \sfrac greift auf die echten Zähler- und Nennerziffern der Schrift zurück, ist deshalb schmaler und rutscht kaum unter die Grundlinie – genau darum stört es den Durchschuss weniger. Im Mathematikmodus ($ … $) fielen beide Boxen jedoch identisch aus, 11,30565pt breit und 2,5pt tief: Der Vorteil von \sfrac ist ein Vorteil im Text. Die Arbeitsteilung ist einfach – \frac oder \dfrac für gestapelte Brüche, \sfrac für solche, die im Satz klein bleiben sollen (\nicefrac, wenn ein bestehendes Dokument es bereits verwendet).

latex
% \usepackage{nicefrac}  (the older one)
It takes about \nicefrac{3}{4} of an hour.

% \usepackage{xfrac}  (recommended for new documents)
That is roughly \sfrac{1}{2} of the total, or $\sfrac{1}{2}$ in math mode.
BefehlBenötigtes PaketAusgabe
\frac{a}{b}keines (LaTeX-Kern)Bruch mit Strich; Größe folgt dem Kontext; innen \over
\dfrac{a}{b}amsmathstets Display-Größe; Alias für \genfrac{}{}{}0
\tfrac{a}{b}amsmathstets Textgröße; Alias für \genfrac{}{}{}1
\cfrac{a}{b}amsmathKettenbruch; alle Ebenen gleich groß; [l] / [r] richten den Zähler aus
\binom{n}{k}amsmathstrichloser Binomialkoeffizient in Klammern; auch \dbinom und \tbinom
\genfracamsmathdie allgemeine Form: Begrenzer, Strichstärke und Stil in sechs Argumenten
\overkeines (TeX-Primitiv)nimmt alles links davon in der Gruppe als Zähler; warnt unter amsmath
\sqrt{x}keines (LaTeX-Kern)Quadratwurzel; \sqrt[n]{x} für die n-te Wurzel; Index feinjustieren mit \leftroot / \uproot (amsmath)
\nicefrac{a}{b}nicefrackleiner schräger Bruch a/b; aus dem units-Bündel von 1998
\sfrac{a}{b}xfrackleiner schräger Bruch; im Textmodus mit den eigenen Ziffern der Schrift, kaum Störung der Zeile