Beschriftungen und Teilabbildungen

Alle Abbildungen sind richtig nummeriert, und trotzdem druckt \ref eine andere Zahl – die am häufigsten gemeldete „falsche Abbildungsnummer“ in LaTeX rührt fast immer daher, dass \label vor \caption steht. Es gibt weder Fehler noch Warnung; nur die gedruckte Ziffer lügt still vor sich hin. Der Beschriftungsbefehl wirkt bescheiden, doch Nummerierung, Querverweise und das Abbildungsverzeichnis entscheiden sich alle hier. Diese Seite behandelt, warum \caption nur innerhalb eines Floats funktioniert, wohin \label gehört, die Gestaltung mit dem Paket caption, \captionof für alles, was kein Float ist, und Teilabbildungen mit (a) und (b).

Warum \caption nur innerhalb eines Floats funktioniert

\caption{…} hängt einer Abbildung oder Tabelle erklärenden Text an, funktioniert aber nur innerhalb von figure oder table. Im laufenden Text geschrieben, bricht es mit ! LaTeX Error: \caption outside float. ab. Der Grund: Der Befehl setzt nicht bloß Schrift, sondern schaut nach, in welcher Art Float er steckt, und zählt den passenden Zähler weiter. In figure erhöht er den Zähler figure, in table den Zähler table. Außerhalb eines Floats fehlt diese Information, also gibt es keine Nummer zu vergeben. Deshalb schreibt man die Nummer nie selbst – und darf es auch nicht.

latex
\begin{figure}
  \centering
  \includegraphics[width=0.6\textwidth]{plot}
  \caption{Measured values against the theoretical curve}
  \label{fig:plot}   % after \caption -- always
\end{figure}

Zur Konvention: Die Beschriftung einer Abbildung steht meist unter der Abbildung, die einer Tabelle über der Tabelle. Eine Tabelle wird von oben nach unten gelesen, deshalb ist es natürlich, vorab anzukündigen, was sie enthält. LaTeX setzt \caption genau dort, wo es steht: für eine Beschriftung oben also vor die Grafik, für eine unten dahinter. Das Format selbst – der Abstand zwischen Nummer und Text und so fort – ändert sich durch die Position nicht. Meist gibt allerdings das Publikationsorgan die Richtung vor; prüfen Sie zuerst dessen Gestaltungsrichtlinien.

Was passiert, wenn \label vor \caption steht

\label muss immer nach \caption stehen. \label tut nichts weiter, als „die aktuelle Nummer“ festzuhalten, und derjenige Befehl, der die aktuelle Nummer auf die Abbildungsnummer setzt, ist \caption. Steht \label davor, hält es den zuletzt bewegten Zähler fest – in der Regel die Abschnittsnummer. Übersetzt man in Abschnitt 5 eine Abbildung, die die Nummer 2 tragen sollte, mit \label vor dem \caption, so steht in der Hilfsdatei \newlabel{fig:before}{{5}{1}...} und im Text erscheint „Abbildung 5“. Kein Fehler, keine Warnung. Wer die Ausgabe nicht mit eigenen Augen prüft, trägt den Fehler bis zur Endfassung mit.

Die Falle hat eine feste Gestalt. Es fühlt sich natürlich an, \label direkt hinter \includegraphics zu schreiben, als hänge man dem Bild ein Namensschild um. Doch \label bezieht sich nicht auf das Bild, sondern auf einen Zähler, und gesetzt wird dieser Zähler von \caption. Das Gegenmittel ist einfach: \caption und \label immer in zwei benachbarten Zeilen halten. Steht nichts dazwischen, kann die Reihenfolge nicht verrutschen. Für Teilabbildungen gilt dasselbe – ein \label in einer subfigure steht hinter deren eigenem \caption. Die allgemeine Mechanik von \label und \ref behandelt die Seite zu Querverweisen.

Kurztitel und Abbildungsverzeichnis: \caption[...]{...}, \caption*, \ContinuedFloat

Ist eine Beschriftung lang und soll im Abbildungsverzeichnis nur eine Zeile stehen, ist das optionale Argument gefragt: \caption[Kurztitel]{langer Text}. Was in den eckigen Klammern steht, geht in \listoffigures; was in den geschweiften steht, erscheint bei der Abbildung. Ohne eckige Klammern fließt der volle Text ebenfalls ins Verzeichnis, was dieses zerstört, sobald mehrere Abbildungen dreizeilige Beschriftungen tragen. In einem Testdokument trägt \caption[Short entry for the list]{A long caption that is only shown under the figure} nur die Kurzform in die .lof-Datei ein. Enthält die Beschriftung Mathematik oder ein \cite, verhindert eine schlichte Fassung in den Klammern zudem Satzunfälle im Verzeichnis.

Mit dem Paket caption kommen zwei Varianten hinzu. \caption*{…} erzeugt eine Beschriftung, die weder nummeriert noch verzeichnet wird – passend für ein Frontispiz oder eine Tafel am Kapitelanfang. \ContinuedFloat lässt einen Float die Nummer des vorhergehenden Floats übernehmen, was man braucht, wenn eine große Abbildung auf mehrere Floats aufgeteilt werden muss. Schreibt man \ContinuedFloat an den Anfang eines \begin{figure} und anschließend \caption{Continued}, erscheint ein zweites Blatt, das weiterhin „Abbildung 1“ trägt. Das ist der Standardgriff für eine große Übersichtsabbildung über mehrere Seiten, ohne die Nummerierung aufzublähen.

latex
% short entry for the list, full text under the figure
\caption[Measured values and the model]{Measured values (dots) against the
  theoretical curve (solid). Error bars are one standard deviation.}

% no number, no entry in the list of figures
\caption*{Frontispiece}

% second sheet of a split figure keeps the previous number
\begin{figure}
  \ContinuedFloat
  \centering\includegraphics[width=\linewidth]{survey-part2}
  \caption{Continued}
\end{figure}

Beschriftungen gestalten mit dem caption-Paket: \captionsetup

Um Schrift, Trennzeichen zwischen Nummer und Text oder Ausrichtung zu ändern, dient das Paket caption. Sein Autor ist Axel Sommerfeldt, der Copyright-Vermerk reicht bis 1994 zurück, und in TeX Live 2024 steckt v3.6o vom August 2023 – ein Werkzeug, das drei Jahrzehnte lang in einer Hand gepflegt wurde. Geladen wird es mit \usepackage{caption} und eingestellt mit \captionsetup{Schlüssel=Wert, …}. Entscheidend an diesem Befehl ist die Reichweite: in der Präambel gilt er für das ganze Dokument, innerhalb eines Floats nur für diese eine Beschriftung.

SchlüsselHäufige WerteWirkung
formatplain / hangSatz des Textkörpers; hang rückt Folgezeilen um die Labelbreite ein
labelsepcolon / period / space / quad / newlineTrenner zwischen Label und Text; Standard ist colon
fontsmall / footnotesize / it …Schrift und Größe der gesamten Beschriftung
labelfontbf / sc / it …Schrift allein des Labels „Figure 1“
textfontit / rm …Schrift allein des beschreibenden Textes
justificationjustified / centering / raggedrightAusrichtung; Standard ist Blocksatz
widtheine Länge (z. B. 0.8\textwidth)Verringert die Umbruchbreite der Beschriftung
singlelinechecktrue / falseStandardmäßig an; zentriert jede einzeilige Beschriftung unabhängig von justification

Der letzte Schlüssel, singlelinecheck, ist die Voreinstellung mit dem größten Überraschungspotenzial. Wer justification=raggedright schreibt und dennoch sieht, wie sich kurze Beschriftungen zentrieren, hat hier die Erklärung: Jede Beschriftung, die auf eine Zeile passt, wird automatisch zentriert. singlelinecheck=false hält sie linksbündig. Sollen Abbildungen und Tabellen unterschiedlich aussehen, gibt man den Float-Typ in eckigen Klammern an: \captionsetup[figure]{…} und \captionsetup[table]{…}. Zeitschriftenvorlagen bringen oft ein eigenes \captionsetup mit; vor dem Hinzufügen lohnt daher die Prüfung, ob man deren Einstellung überschreibt.

latex
\usepackage{caption}
\captionsetup{labelfont=bf, labelsep=period, font=small,
              justification=raggedright, singlelinecheck=false}

% different rules per float type
\captionsetup[figure]{justification=centering}
\captionsetup[table]{font=footnotesize}

Etwas beschriften, das kein Float ist: \captionof

Wenn eine Abbildung genau an dieser Textstelle bleiben soll, statt zu gleiten, die Nummerierung und Verweise aber normal funktionieren sollen, ist \captionof{Typ}{Text} der richtige Befehl. In einer minipage oder center, wo einfaches \caption den Dienst verweigert, erhöht \captionof{figure}{…} den Zähler figure, ergänzt eine Zeile im Abbildungsverzeichnis und lässt \ref korrekt auflösen. Setzt man es in einer minipage, wird daraus – falls der vorherige Float „Abbildung 1“ war – ordnungsgemäß „Abbildung 2“, mit eigenem Eintrag in der .lof. Genau darin liegt der Sinn des Befehls: die Float-Mechanik weglassen, die Nummerierungsmechanik behalten.

Ein Vorbehalt: \captionof gehört nicht zum LaTeX-Standard; ohne geladenes caption erscheint ! Undefined control sequence. Wer den Befehl möchte, aber nicht die Gestaltung des Pakets, findet im schlanken Paket capt-of allein \captionof. Und die Reihenfolgeregel bleibt auch hier bestehen: Auch bei \captionof steht \label danach.

latex
\usepackage{caption}   % or the lightweight capt-of

\begin{center}
  \includegraphics[width=0.5\textwidth]{diagram}
  \captionof{figure}{A figure fixed in the text, outside any float}
  \label{fig:inline}
\end{center}

Eine Abbildung mit subcaption in (a) und (b) teilen

Um kleine Abbildungen innerhalb einer Abbildung nebeneinanderzusetzen, jede mit eigenem Unterlabel (a), (b), (c), ist heute das Paket subcaption der Standard – wieder von Sommerfeldt. \usepackage{subcaption} lädt caption gleich mit, beides zu nennen erübrigt sich also. Hauptwerkzeug ist die Umgebung subfigure (subtable für Tabellen), die eine Breite als Pflichtargument verlangt, etwa \begin{subfigure}[b]{0.45\textwidth}. Sie ist im Kern eine minipage und nimmt ein \includegraphics und ein \caption auf. Ein \caption innerhalb einer subfigure wird zum Unterlabel (a)/(b); das \caption außerhalb nummeriert die Abbildung als Ganzes.

latex
\usepackage{graphicx}
\usepackage{subcaption}   % loads caption itself

\begin{figure}
  \centering
  \begin{subfigure}[b]{0.45\textwidth}
    \centering
    \includegraphics[width=\linewidth]{before}
    \caption{Before}
    \label{fig:before}
  \end{subfigure}
  \hfill
  \begin{subfigure}[b]{0.45\textwidth}
    \centering
    \includegraphics[width=\linewidth]{after}
    \caption{After}
    \label{fig:after}
  \end{subfigure}
  \caption{Before and after processing}
  \label{fig:compare}
\end{figure}

Übersetzt man das, wird die gesamte Abbildung zu „Abbildung 1“, und die beiden Teilabbildungen erscheinen als „(a) Before“ und „(b) After“. Im Text liefert \ref{fig:compare} „1“ und \ref{fig:before} „1a“ – ein Verweis auf eine Teilabbildung ist die Abbildungsnummer, verbunden mit dem Unterlabel. Soll nur das Unterlabel erscheinen, gibt \subref{fig:before} ein bloßes „a“ und \subref*{fig:before} ein „(a)“. Daneben gibt es die einzeilige Form \subcaptionbox[Verzeichniseintrag]{Überschrift}[Breite][Innenposition]{Inhalt}. Ihre Syntax verlangt das \label im Überschriftenargument, also \subcaptionbox{Before\label{fig:before}}{\includegraphics{…}}. Für eine Teilabbildung mit nur einem Bild ist das kürzer als mehrere Zeilen minipage.

subfigure, subfig, subcaption: drei Generationen und ein stiller Konflikt

Pakete für Teilabbildungen gibt es in drei Generationen, und ihre ähnlichen Namen sorgen fortlaufend für Verwechslungen. Das älteste, subfigure, ist obsolet und verwendet einen \subfigure-Befehl; sein Nachfolger subfig stellt \subfloat bereit, wird aber ebenfalls nicht mehr aktiv gepflegt. Neue Dokumente sollten subcaption verwenden. Der Ärger entsteht mitten in der Umstellung: Man ergänzt subcaption, ohne zu bemerken, dass die Vorlage bereits subfig lädt.

Tückisch am Konflikt ist, dass beim Laden nichts geschieht. Stehen beide in der Präambel, schreibt subcaption lediglich eine Informationszeile ins Protokoll – Package subcaption Info: The counter 'subfigure' was already defined by... – ohne Warnung, ohne Fehler. Dann verzichtet es still auf die eigene subfigure-Umgebung. Das Dokument läuft weiter, bis das erste \begin{subfigure} kommt und alles mit ! LaTeX Error: Environment subfigure undefined. einstürzt, gefolgt von einer Kaskade aus Missing number und Illegal unit of measure. Mit anderen Worten: Der Ort des Fehlers ist nicht der Ort der Ursache. Wer dieses Muster sieht, durchsucht zuerst die gesamte Präambel nach subfig und subfigure – am wahrscheinlichsten ist es innerhalb einer Zeitschriftenvorlage.

  • subcaption — der heutige Standard: Umgebungen subfigure / subtable, \subcaptionbox, \subref. Lädt caption selbst mit.
  • subfig — die vorherige Generation mit \subfloat. In bestehenden Dokumenten in Ordnung, für neue nicht wählen.
  • subfigure — die älteste Variante mit \subfigure. Obsolet, nicht verwenden.
  • Nie kombinieren — genau eines. Vor dem Hinzufügen prüfen, ob die Vorlage bereits eines lädt.