enumerate

Die Zahlen [1], [2], [3] im Literaturverzeichnis eines LaTeX-Dokuments stammen vom Zähler der vierten Ebene von enumerate. Statt einen eigenen Zähler anzulegen, schreibt thebibliography in article.cls schlicht \usecounter{enumiv} und leiht sich die tiefste Ebene einer nummerierten Liste. So weit reicht die Listenmechanik in das Gerüst eines Dokuments hinein. Diese Seite geht enumerate der Reihe nach durch: die Zähler enumi bis enumiv, die die Zahlen halten, die Familie \theenumi, die daraus Text macht, das Zeigen auf einen einzelnen Eintrag mit \label und \ref sowie das Fortführen der Nummerierung über eine Unterbrechung hinweg.

Die Zahlen stecken in Zählern, nicht in der Umgebung: enumi bis enumiv

enumerate hält die Zahlen nicht selbst. latex.ltx definiert vier gewöhnliche LaTeX-Zähler – enumi, enumii, enumiii, enumiv –, und die Umgebung wählt lediglich einen davon entsprechend der aktuellen Tiefe. Die Arbeit verteilt sich auf drei Schichten: \begin{enumerate} ruft \usecounter auf und setzt den Zähler auf null; \item erhöht ihn mit \refstepcounter um eins, bevor der Eintrag gesetzt wird; und die Familie \theenumi verwandelt den Wert in Text. Wer diese Reihenfolge im Kopf behält, versteht die spätere Merkwürdigkeit – man schreibt 4, damit die Liste bei 5 beginnt – sofort als logisch.

EbeneZählerStandardformatZeilenkopfmarkeAusgabe
enumi1\theenumi = \arabic{enumi}\labelenumi = \theenumi.1.
enumii2\theenumii = \alph{enumii}\labelenumii = (\theenumii)(a)
enumiii3\theenumiii = \roman{enumiii}\labelenumiii = \theenumiii.i.
enumiv4\theenumiv = \Alph{enumiv}\labelenumiv = \theenumiv.A.

Die dritte und die vierte Spalte dieser Tabelle zu verwechseln, rächt sich später. \theenumi legt fest, wie die Zahl selbst geschrieben wird; \labelenumi legt das Beiwerk am Zeilenanfang fest. Ebene 2 zeigt den Unterschied deutlich: \theenumii sagt nur a, und die Klammern setzt \labelenumii. Für einen anderen Zahlenstil wird \theenumi geändert, für andere Satzzeichen ringsum \labelenumi. Fünf Befehle verwandeln einen Zählwert in Zeichen – \arabic (1, 2, 3), \alph (a, b, c), \Alph (A, B, C), \roman (i, ii, iii) und \Roman (I, II, III) – und jeder davon funktioniert mit jedem Zähler.

latex
% style of the number itself
\renewcommand{\theenumi}{\Roman{enumi}}
% punctuation around it: I) II) instead of I. II.
\renewcommand{\labelenumi}{\theenumi)}

Mit \label und \ref auf einen Eintrag zeigen – und warum die Referenz nicht der Marke entspricht

Ein \label{key} am Anfang des Textes eines \item genügt, damit \ref{key} von überall im Dokument die Nummer dieses Eintrags ausgibt. Das \refstepcounter, mit dem \item die Nummer erhöht, vermerkt zugleich: „Das gerade referenzierbare Objekt ist dieser Eintrag“ – genau das bindet die \label an das unmittelbar vorangehende \item. Deshalb folgt die Referenz beim Umstellen der Schritte automatisch. Die Werte laufen über die Datei .aux; in dem Lauf, in dem ein neues \label hinzukommt, steht die Nummer daher noch nicht fest – es ist zweimal zu übersetzen. Ist hyperref geladen, wird dieselbe Referenz zu einem anklickbaren Verweis. Wird statt der Nummer die Seite gebraucht, auf der ein Eintrag steht, nimmt \pageref{key} denselben Schlüssel entgegen.

latex
\begin{enumerate}
  \item Bring the sample to room temperature
  \item \label{step:weigh} Record the weight
  \item Add solvent and stir
\end{enumerate}
Use the value from step~\ref{step:weigh} in the yield calculation.

Hier folgt ein Verhalten, das alle überrascht: Die Referenz auf einen verschachtelten Eintrag liefert eine andere Zeichenkette als die sichtbare Marke am Zeilenanfang. Ein Eintrag der zweiten Ebene wird als „(a)“ gesetzt, \ref gibt jedoch 2a zurück; auf der dritten Ebene steht „i.“, die Referenz lautet aber 2(a)i. Das ist kein Fehler – im Hintergrund arbeitet ein Präfixbefehl namens \p@enumii. article.cls definiert \p@enumii als \theenumi, und die zurückgegebene Zeichenkette wird als Präfix + \theenum… zusammengesetzt. \labelenumii, das die Zeilenkopfmarke erzeugt, ist am Referenzieren gar nicht beteiligt – eben darum tauchen die von ihm gesetzten Klammern in der Referenz nie auf.

EbeneSichtbare Nummer in der ZeileVon \ref gelieferte ZeichenketteDefinition des Präfixes
enumi2.2kein Präfix
enumii(a)2a\p@enumii = \theenumi
enumiiii.2(a)i\p@enumiii = \theenumi(\theenumii)
enumivA.2(a)iA\p@enumiv = \p@enumiii\theenumiii

Der Entwurf ist für sich genommen sinnvoll: Ein bloßes „a“ ließe offen, unter welchem Elterneintrag dieses (a) steht. Trotzdem passt „2a“ oft nicht zum Hausstil eines Dokuments. Um das Elternteil wegzulassen und ein schlichtes a zu erhalten, dient \renewcommand{\p@enumii}{}; für eine Trennung als „2.1“ genügt \renewcommand{\p@enumii}{\theenumi.}. Was hier nicht angefasst werden darf, ist \theenumii – eine Änderung dort schreibt auch die Zeilenkopfmarke auf „2.1“ um und zerstört das Bild der Liste. Wenn nur die Referenz zu korrigieren ist, gehört \p@enum… bearbeitet.

Die Nummerierung nach einer Unterbrechung fortsetzen: warum man 4 schreibt, um bei 5 zu beginnen

Unterbricht ein erklärender Absatz oder eine Abbildung den Ablauf und die Liste wird geschlossen, beginnt das nächste enumerate zwangsläufig wieder bei 1 – denn das von \begin{enumerate} aufgerufene \usecounter setzt den Zähler bei jedem Eintritt in die Umgebung auf null. Um weiterzuzählen, wird der Wert unmittelbar nach dem Öffnen der Liste mit \setcounter neu gesetzt. Hier zahlt sich die Dreiteilung von oben aus: \item erhöht den Zähler, bevor der Eintrag gesetzt wird, also schreibt man für den Beginn bei 5 die 4. Das „eins abziehen“ ist kein Zauberspruch, sondern die direkte Folge davon, dass \refstepcounter zuerst läuft.

latex
\newcounter{savedstep}

\begin{enumerate}
  \item first
  \item second
\end{enumerate}
\setcounter{savedstep}{\value{enumi}}

An interrupting paragraph.

\begin{enumerate}
  \setcounter{enumi}{\value{savedstep}}
  \item this one is numbered 3
\end{enumerate}

Die Wendung ist verlässlich, weil enumi seinen Endwert nach \end{enumerate} behält. Wird er direkt nach dem Schließen der Liste in einem eigenen Zähler abgelegt, übersteht die Nummerierung beliebig viele dazwischenliegende Absätze und Abbildungen. Für tiefere Ebenen gilt dasselbe mit enumii, enumiii und enumiv. Statt diesen Baustein jedes Mal zu tippen, empfiehlt sich allerdings enumitem: \begin{enumerate}[resume] knüpft dort an, wo die vorige Liste aufhörte, und \begin{enumerate}[start=7] beginnt bei 7 – bei start= entfällt das „minus eins“. Für ein längeres Ablaufdokument lohnt es sich, enumitem von Anfang an zu laden.

Wann Nummerierung berechtigt ist – und wann sie in die Irre führt

enumerate wird nicht gewählt, weil Zahlen ordentlich aussehen. Eine Zahl ist ein Vertrag mit den Lesenden: Sie erklärt, dass hier Reihenfolge, Priorität oder Verweis tatsächlich etwas bedeuten. Wer ungeordnete Punkte nummeriert, lädt dazu ein, Chronologie oder Wichtigkeit hineinzulesen – und behauptet damit etwas, das nie gemeint war. Umgekehrt sind die Zahlen in einer echten Handlungsanweisung genau das, was ein „zurück zu Schritt 3“ erst möglich macht. Und dieser Verweis gehört an \label und \ref delegiert, nicht als wörtliche „3“ in den Fließtext getippt: Von Hand gesetzte Zahlen werden in dem Moment zur Unwahrheit, in dem ein Eintrag eingefügt wird.

  • enumerate für Abläufe, Chronologie und Priorität. Dass jemand „zurück zu Nummer 3“ sagen kann, ist der einzige Grund zu nummerieren.
  • itemize für ungeordnete Bedingungen und Eigenschaften. Nummerierung behauptet dort eine Rangfolge oder Abfolge, die nicht gemeint war.
  • Jeden Eintrag, auf den verwiesen wird, mit \label versehen. Eine in den Text getippte Zahl stimmt nicht mehr, sobald ein Eintrag hinzukommt.
  • Prüfen, was \ref bei verschachtelten Einträgen liefert. In der Zeile steht „(a)“, die Referenz lautet 2a.
  • Die Nummerierung über eine Unterbrechung tragen. Reines LaTeX tut das mit \setcounter, enumitem mit resume.