\addtocontents

Aus goLaTeX

\addtocontents ist eine LaTeX-Kern-Anweisung, um in die Hilfsdatei eines Verzeichnisses wie das Inhaltsverzeichnis oder ein Gleitumgebungsverzeichnis zu schreiben.

Verwendung

Syntax

\addtocontents{Dateiendung}{Inhalt}

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.
{Inhalt}
Was in die Hilfsdatei geschrieben werden soll.

Beschreibung

Die Anweisung schreibt einen Eintrag in die aux-Datei, der wiederum am Ende des Dokuments den Inhalt in der Hilfsdatei eines Verzeichnisses schreibt. Anweisungen innerhalb des Arguments Inhalt werden beim Schreiben in die aux-Datei expandiert. Dieses Schreiben erfolgt bei Ausgabe der Seite, auf der die Anweisung steht. Zerbrechliche Anweisungen im Argument Inhalt und Anweisungen, die nicht expandiert werden sollen, sind mit \protect zu schützen.

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

LaTeX selbst verwendet \addtocontents, um die mit \addcontentsline erzeugten Verzeichniseinträge via aux-Datei in die Hilfsdatei eines Verzeicnisses zu schreiben.

Es wird darauf hingewiesen, dass die Befehle für Verzeichniseinträge beispielsweise bei den Standardklassen mit \addpenalty arbeiten. Daher ist es zwingend erfordlich, dass Inhalt keine Umschaltung in den horizontalen Modus zurück lässt. Text, der per Inhalt in einem Verzeichnis erzeugt wird, sollte also immer mit einem Absatzende abschließen.

Beispiele

\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 wird noch in der Dokumentpräambel dafür gesorgt, dass in die Hilfsdatei des Abbildungsverzeichnisses (Dateiendung lof) und die Hilfsdatei des Tabellenverzeichnisses (Dateiendung lot) der Befehl \addcontentsline zur Erzeugung eines Inhaltsverzeichniseintrags geschrieben wird. Die Anweisung \addcontentsline wird dabei vor Expansion/Zerbrechen geschützt, so dass tatsächlich die Anweisung selbst und nicht etwa deren Expansion in die Verzeichnisdatei geschrieben wird. Mit \protect\protect wird ein einzelnes \protect in die Hilfsdatei des Abbildungs- bzw. Tabellenverzeichnis geschrieben. Mit \protect\listfigurename schließlich wird \listfigurename in die Hilfsdatei des Abbildungsverzeichnisses geschrieben. Entsprechend wird mit \protect\listtablename ein \listtablename in die Hilfsdatei des Tabellenverzeichnisses geschrieben. In der lof-Datei dann also beispielsweise:

\addcontentsline{toc}{section}{\protect\listfigurename}

Das Schreiben in die aux-Datei erfolgt bei der Ausgabe der nächsten, also der ersten Seite. Damit ist sichergestellt, dass es die ersten Anweisungen in der aux-Datei sind. Somit ist sichergestellt, dass die Inhaltsverzeichniseinträge auch ganz am Anfang der beiden Verzeichnisse erzeugt werden und die korrekte Seitenzahl tragen. Das ist auch dann noch korrekt, wenn die Verzeichnisse an das Ende des Dokuments verschoben werden. Hingegen wäre das direkte Einfügen obiger \addcontentsline-Zeile in die Dokumentpräambel falsch und würde dann nicht zum gewünschten Ergebnis führen.

Es wird empfohlen, sich die aux-Datei, die lof- und die lot-Datei und die toc-Datei des Beispiels einmal genau anzuschauen. Außerdem sollte ausprobiert werden, was passiert, wenn \protect\protect entfernt wird. Das Ergebnis in den Hilfsdateien sollte dann mit dem ursprünglichen Ergebnis verglichen werden.

\documentclass{article}

\usepackage[ngerman]{babel}
\usepackage{mwe}

\addtocontents{toc}{\protect\hfill\protect\pagename\protect\par}
\begin{document}
\tableofcontents
\blinddocument
\end{document}

Dieses Beispiel erzeugt den Text Seite über der Seitenzahlenspalte im Inhaltsverzeichnis. Allerdings geschieht dies nur auf der ersten Seite des Inhaltsverzeichnisses.

Hier kann sehr schön ausprobiert werden, was geschieht, wenn man \protect\par weglässt, also den vertikalen Modus nicht wieder herstellt. Es werden zwei LaTeX-Läufe benötigt, damit sich die Änderung (unerfreulich) bemerkbar macht.

Verwandte Befehle

\addcontentsline, \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.