\addtocontents
\addtocontents
ist eine LaTeX-Kern-Anweisung, um in die Hilfsdatei eines Verzeichnisses wie das Inhaltsverzeichnis oder ein Gleitumgebungsverzeichnis zu schreiben.
Inhaltsverzeichnis
Verwendung
Syntax
\addtocontents{Dateiendung}{Inhalt}
Parameter
{Dateiendung}
-
- Die Endung der Hilfsdatei mit dem Inhalt des Verzeichnisses. Typische Dateiendungen wären:
toc
– Inhaltsverzeichnislof
– Abbildungsverzeichnis (Paketautoren sollten stattdessen\ext@figure
verwenden)lot
– Tabellenverzeichnis (Paketautoren sollten stattdessen\ext@table
verwenden)lol
– Listingsverzeichnis mit Paket listings.
- Die Endung der Hilfsdatei mit dem Inhalt des Verzeichnisses. Typische Dateiendungen wären:
{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.