\addcontentsline

Aus goLaTeX

\addcontentsline ist eine LaTeX-Kern-Anweisung, um einen Eintrag mit Seitenzahl in ein Verzeichnis wie das Inhaltsverzeichnis oder ein Gleitumgebungsverzeichnis vorzunehmen.

Verwendung

Syntax

\addcontentsline{Dateiendung}{Eintragstype}{Eintrag}

Parameter

{Dateiendung}
Die Endung der Hilfsdatei mit dem Inhalt des Verzeichnisses.Typische Dateiendungen wären:
  • toc – Inhaltsverzeichnis
  • lof – Abbildungsverzeichnis (Paketautoren sollten stattdessen \ext@figure verwenden)
  • lot – Tabellenverzeichnis (Paketautoren sollten stattdessen \ext@table verwenden)
  • lol – Listingsverzeichnis mit Paket listings.
{Eintragstype}
Beim Inhaltsverzeichnis typischerweise der Name eines Gliederungsbefehls, beispielsweise part, chapter, section etc. Bei Gleitumgebungsverzeichnissen ist es typischerweise der Name der Gleitumgebung, beispielsweise figure, table, lstlisting.
{Eintrag}
Inhalt des Verzeichniseintrags (ohne Seitenzahl). Bei nummerierten Verzeichniseinträge steht am Anfang typischerweise [[\numberline{Nummer}]].

Beschreibung

Die Anweisung erzeugt einen Eintrag in einem Verzeichnis.

Es wird darauf hingewiesen, dass bei Verwendung einer KOMA-Script-Klasse die Endung des Inhaltsverzeichnis nicht fest vorgegeben, sondern in \ext@toc gespeichert ist.

Der LaTeX-Kern schreibt für den Verzeichniseintrag via \addtocontents in die aux-Datei eine Zeile:
\@writefile{Dateiendung}{\contentsline{Eintragstyp}{Eintrag}{Seitenzahl}\protected@file@percent}

Da diese Zeile erst bei Ausgabe der Seite, auf der die \addcontentsline-Anweisung steht, in die aux-Datei geschrieben wird, sollten zerbrechliche Anweisungen innerhalb von Eintrag mit \protect geschützt werden.

Die Seitenzahl kann über \addcontentsline nicht manuell vorgegeben werden, stattdessen wird die Seitenzahl der Seite, auf der die \addcontentsline-Anweisung ausgeführt wird, automatisch hinzugefügt.

Einige Pakete verändern die Ausgabe in die aux-Datei. So wird bei Verwendung von hyperref beispielsweise:
\@writefile{Dateiendung}{\contentsline{Eintragstype}{Eintrag}{Seitenzahl}{hyperref-Referenz}\protected@file@percent}
geschrieben.

Bei Verwendung der Anweisung durch den Anwender sollte dieser ein besonderes Augenmerk darauf haben, dass sie auch wirklich an der korrekten Stelle auf der korrekten Seite ausgeführt wird, weil sonst leicht die Seitenzahl und bei Verwendung von hyperref auch die hyperref-Referenz falsch sein können.

Beispiele

\documentclass{book}
\usepackage[ngerman]{babel}
\usepackage{mwe}
\begin{document}
\tableofcontents

\cleardoublepage% Wichtig, weil sonst der Eintrag ggf. die falsche Seite zeigt.
\addcontentsline{toc}{chapter}{\protect\listfigurename}
\listoffigures

\cleardoublepage% Wichtig, weil sonst der Eintrag ggf. die falsche Seite zeigt.
\addcontentsline{toc}{chapter}{\protect\listtablename}
\listoftables

\blinddocument
\begin{figure}
  \includegraphics{example-image}
  \caption{Ein Beispielbild}
\end{figure}

\begin{table}
  \begin{tabular}{lcr}
    links & mitten drin & rechts \\
    Spalte & Zelle & Zeile \\
  \end{tabular}
  \caption{Eine Beispieltabelle}
\end{table}

\end{document}

Häufig machen Anwender den Fehler entweder die \cleardoublepage-Anweisungen zu vergessen oder die \addcontentsline-Anweisungen erst nach dem jeweiligen Verzeichnis einzufügen. Hat das Verzeichnis dann aber mehr als eine Seite, so wird die letzte Seite oder sogar die Seite nach dem Verzeichnis ins Inhaltsverzeichnis eingetragen.

Da bei der Klasse article die Verzeichnisse nicht automatisch eine neue Seite beginnen, ist dort die Lösung deutlich umständlicher:

\documentclass{article}
\usepackage[ngerman]{babel}
\usepackage{mwe}
\addtocontents{lof}{%
  \protect\addcontentsline{toc}{section}{\protect\protect\protect\listfigurename}%
}%
\addtocontents{lot}{%
  \protect\addcontentsline{toc}{section}{\protect\protect\protect\listtablename}%
}
\begin{document}
\tableofcontents

\listoffigures

\listoftables

\blinddocument
\begin{figure}
  \includegraphics{example-image}
  \caption{Ein Beispielbild}
\end{figure}

\begin{table}
  \begin{tabular}{lcr}
    links & mitten drin & rechts \\
    Spalte & Zelle & Zeile \\
  \end{tabular}
  \caption{Eine Beispieltabelle}
\end{table}

\end{document}

Hier werden dann nicht mehr nur zwei, sondern mindestens drei LaTeX-Läufe benötigt, damit die Einträge für Abbildungs- und Tabellenverzeichnis im Inhaltsverzeichnis erscheinen.

Es sei darauf hingewiesen, dass bei Verwendung einer KOMA-Script-Klasse mit Option listof=totoc bzw. toc=listof eine bessere, automatische Lösung existiert, um alle Verzeichnisse von Gleitumgebungen unter der Kontrolle von KOMA-Script ins Inhaltsverzeichnis einzutragen. Außerdem wird bei KOMA-Script-Klassen empfohlen, \addcontentsline nicht direkt zu verwenden, sondern Einträge in das Inhaltsverzeichnis mit \addGliederungsbefehltocentry, beispielsweise \addparttocentry, \addchaptertocentry, \addsectiontocentry etc. und für Verzeichnisse von Gleitumgebungen unter Kontrolle von KOMA-Script mit der tocbasic-Anweisung \addxcontentsline vorzunehmen.

Bei Verwendung einer Standardklasse kann man ähnlichen Komfort mit Hilfe von Paket bibintoc erreichen.

Verwandte Befehle

\addtocontents, \contentsline, \addxcontentsline (KOMA-Script-Paket tocbasic), \addparttocentry (KOMA-Script-Klassen), \addchaptertocentry (KOMA-Script-Klassen), \addsectiontocentry (KOMA-Script-Klassen), \addsubsectiontocentry (KOMA-Script-Klassen), \addsubsubsectiontocentry (KOMA-Script-Klassen), \addparagraphtocentry (KOMA-Script-Klassen), \addsubparagraphtocentry (KOMA-Script-Klassen)

Verweise

Die Anweisung ist in den LaTeX-Quellen in Datei ltsect.dtx definiert und in source2e.pdf dokumentiert. Sie wird beispielsweise in hyperref umdefiniert.