Sie sind hier

Wie man die Einzüge im Inhaltsverzeichnis an die tatsächliche Breite der Nummern anpassen kann

Bild von Markus Kohm

In English: How to adjust the indents in the table of contents to the actual width of the numbers

In der Voreinstellung erzeugen die KOMA-Script-Klassen ein Inhaltsverzeichnis, bei dem die einzelnen Ebenen entsprechend ihrer Hierarchie eingezogen sind. Teile und Kapitel werden bei scrbook und scrreprt linksbündig gesetzt, wobei für die Nummern eine feste Breite reserviert ist. Abschnitte werden um die Breite eingezogen, die für die Kapitelnummern reserviert ist. Auch hier wird für die Nummern wieder eine feste Breite reserviert. Unterabschnitte werden bis hinter die Nummernbreite für Abschnitte eingezogen. Auch für deren Nummern ist eine feste Breite reserviert. Es ergibt sich ein Bild mit vertikalen Fluchtlinien sowohl links von Nummern als auch links von den Texten, wobei die Fluchtlinie links von der Nummer der untergeordneten Ebene jeweils mit der Fluchtlinie links des Textes der aktuellen Ebene übereinstimmt.

Bei der Klasse scrartcl tritt die Abschnittebene an Stelle der Kapitelebene.

Teilweise sind die fest vorgegebenen Breiten jedoch zu gering oder auch zu groß, um ein ausgewogenes Bild zu ergeben. Für diesen Fall bieten die Klassen selbst die Option toc=flat. Dabei erfolgt kein hierarchischer Einzug mehr und gleichzeitig wird die Breite für die nun gemeinsame Nummernspalte durch die größte tatsächlich benötigten Breite aller Gliederungsnummern im Inhaltsverzeichnis bestimmt. Hierfür werden mehrere LaTeX-Läufe benötigt.

Darüber hinaus gibt es aber auch die Möglichkeit, für jede einzelne Ebene über die Eigenschaft dynnumwidth des Verzeichniseintragsstils tocline lediglich die Breite, die für die Nummer dieser Ebene benötigt wird, automatisch ermitteln zu lassen. Setzt man diese Eigenschaft für alle Ebenen (bzw. für alle nummerierten Ebenen):

\documentclass{scrbook}
\usepackage{blindtext}
\RedeclareSectionCommands[tocdynnumwidth]{chapter,section,subsection}
\begin{document}
\tableofcontents
\chapter{First Chapter}
\section{First Section}
\subsection{First Subsection}
\subsubsection{First Subsubsection}
 
\setcounter{chapter}{99}
\chapter{Second Chapter}
\setcounter{section}{99}
\section{Second Section}
\setcounter{subsection}{99}
\subsection{Second Subsection}
\setcounter{subsubsection}{99}
\subsubsection{Second Subsubsection}
\end{document}

so sind zwar die Abstände zwischen Gliederungsnummer und Text nach drei LaTeX-Läufen jeweils eingehalten, aber die Einzüge der untergeordneten Ebenen orientieren sich nicht mehr an den Einzügen und Nummernbreiten ihrer übergeordneten Ebene, sondern sind weiterhin fest vorgegeben. Dadurch verdoppelt sich die Anzahl der Fluchlinien.

Es sei an dieser Stelle explizit erwähnt, dass eine solche Darstellung nicht grundsätzlich falsch ist. Außerdem ist das gezeigte Beispiel mit dem Wechsel zwischen einstelligen Zahlen auf allen Ebenen hin zu dreistelligen Zahlen auf allen Ebenen natürlich realitätsfremd. Normalerweise sind die Übergänge weniger krass. Beide Extreme können jedoch auftreten.

Vielfach wünschen Anwender, dass bei dieser hierarchischen Darstellung nicht nur der benötigte Platz für die Nummern, sondern auch die Einzüge davon abhängend automatisch bestimmt werden. Ab KOMA-Script 3.31 wird dies mit der neuen Eigenschaft dynindent unterstützt:

\documentclass{scrbook}
\usepackage{blindtext}
\RedeclareSectionCommands[tocdynnumwidth,tocdynindent]{chapter,section,subsection}
\begin{document}
\tableofcontents
\chapter{First Chapter}
\section{First Section}
\subsection{First Subsection}
\subsubsection{First Subsubsection}
 
\setcounter{chapter}{99}
\chapter{Second Chapter}
\setcounter{section}{99}
\section{Second Section}
\setcounter{subsection}{99}
\subsection{Second Subsection}
\setcounter{subsubsection}{99}
\subsubsection{Second Subsubsection}
 
\end{document}

Hiermit ergibt sich wieder die gewohnte hierarchisch eingezogene Darstellung jedoch mit automatisch angepassten Einzügen und Nummernbreiten.

Der gezeigte Automatismus hängt jedoch davon ab, dass die Ebenen auch in der gewohnten Weise verwendet werden. Lässt man eine Ebene aus, so versagt der Mechanismus, weil in der Voreinstellung für den Einzug einer untergeordneten Ebene nur der Einzug und die Nummernbreite ihres direkten Vorgängers herangezogen wird. Wird nun eine Ebene übersprungen werden stattdessen die statisch vorbestimmten Werte verwendet, bis dynamisch ermittelte Werte vorliegen. Spätestens bei Verwendung dieser Methode wird daher nicht empfohlen, Ebenen zu überspringen. Man kann jedoch auch manuell vorgeben, welcher Ebene eine andere Ebene folgen soll:

\documentclass{scrbook}
\usepackage{blindtext}
\RedeclareSectionCommand[tocindentfollows=chapter,tocindent=0pt,tocnumwidth=0pt]{subsection}
\RedeclareSectionCommands[tocdynnumwidth,tocdynindent]{chapter,subsection}
\begin{document}
\tableofcontents
\chapter{First Chapter}
\subsection{First Subsection}
 
\setcounter{chapter}{99}
\chapter{Second Chapter}
\setcounter{subsection}{99}
\subsection{Second Subsection}
\end{document}

Die Angaben für indent und numwidth sind hier notwendig, weil ansonsten die voreingestellten Werte als Mindestwert für einen höheren Einzug sorgen.

Mancher Anwender mag sich nun fragen, warum im Text immer von indent, dynindent, numwidth und dynnumwidth die Rede ist, in den Beispielen aber tocindent, tocdynindent, tocnumwidth und tocdynnumwidth verwendet werden. Das liegt am Unterschied zwischen den Eigenschaften des Verzeichniseintragsstils tocline und den korrespondierenden Optionen für \RedeclareSectionCommand, der auch in der KOMA-Script-Anleitung und im KOMA-Script-Buch erklärt ist. Bei Verwendung von \DeclareTOCStyleEntry oder \DeclareTOCStyleEntries wären direkt die Eigenschaften als Optionen anzugeben, also ohne den Präfix toc.

Statt die ganzen Breiten und Einzüge automatisch bestimmen zu lassen, gibt es übrigens auch die Möglichkeit, manuell zu den vorhandenen Werten einen Wert zu addieren:

\documentclass{scrbook}
\usepackage{blindtext}
\RedeclareSectionCommand[tocnumwidth+=8pt]{chapter}
\RedeclareSectionCommands[tocindent+=8pt]{section,subsection}
\RedeclareSectionCommand[tocnumwidth+=4pt]{section}
\RedeclareSectionCommand[tocindent+=4pt]{subsection}
\RedeclareSectionCommand[tocnumwidth+=3pt]{subsection}
\begin{document}
\tableofcontents
\chapter{First Chapter}
\section{First Section}
\subsection{First Subsection}
 
\setcounter{chapter}{99}
\chapter{Second Chapter}
\section{Second Section}
\subsection{Second Subsection}
\end{document}

Auch so sind relativ schnell, ansprechende Ergebnisse zu erzielen. Diese Methode funktioniert darüber hinaus auch bereits ab KOMA-Script 3.27.

Comments for "Wie man die Einzüge im Inhaltsverzeichnis an die tatsächliche Breite der Nummern anpassen kann" abonnieren