EntsprechendVerwenden externer TOC-Dateien, die folgende Datei sollte das Inhaltsverzeichnis zweimal anzeigen:
\documentclass{report}
\begin{document}
\tableofcontents
\chapter*{Contents (manual input)}
\makeatletter
\input{\jobname.toc}
\makeatother
\chapter{Foo}
\section{Bar}
\end{document}
aber die manuelle Eingabe von \jobname.toc
ist leer.
Wenn \jobname.toc
vorhanden (z. B. nach einer ersten Kompilierung der vorherigen .tex
Datei), gibt diese manuelle Eingabe das erwartete (nicht leere) Ergebnis aus, sobald sie entfernt oder kommentiert wird:
- entweder
\tableofcontents
, - oder
\chapter{Foo}
.
Verstehen Sie, was los ist?
Antwort1
Die verlinkte Frage bezog sich auf die Eingabe einer .toc
Datei im Zusammenhang mit einemandersdokumentieren.
Zum Zeitpunkt der Verwendung \input{\jobname.toc}
ist es mit Sicherheit leer, da \tableofcontents
es eingegeben wird und anschließend die Datei zum Beschreiben geöffnet und somit gelöscht wird.
Die .toc
Datei wird dann am Ende des Dokuments neu aufgefüllt.
Schauen Sie sich das shorttoc
Paket an, das Ihr eigentliches Problem lösen sollte.
Das Problem lässt sich jedoch leicht lösen, indem das Öffnen der Datei zum Schreiben am Ende des Dokuments verzögert wird.
\documentclass{report}
\usepackage{atveryend}
\makeatletter
\def\@starttoc#1{%
\begingroup
\makeatletter
\@input{\jobname.#1}%
\if@filesw
\AfterLastShipout{%
\@ifundefined{tf@#1}{%
\expandafter\newwrite\csname tf@#1\endcsname
\immediate\openout \csname tf@#1\endcsname \jobname.#1\relax
}{}%
}%
\fi
\@nobreakfalse
\endgroup}
\makeatother
\begin{document}
\tableofcontents
\chapter*{Contents (manual input)}
\InputIfFileExists{\jobname.toc}{}{Missing toc}
\setcounter{tocdepth}{0}
\renewcommand{\contentsname}{Short contents}
\tableofcontents
\chapter{Foo}
\section{Bar}
\end{document}
Du siehst, dass Du das Inhaltsverzeichnis beliebig oft einfügen kannst; \InputIfFileExists
sollte aber genutzt werden, da die .toc
Datei evtl. noch fehlt.
Antwort2
\tableofcontents
gibt das Inhaltsverzeichnis ein, öffnet es dann aberzum SchreibenDadurch wird das Original gelöscht. Wenn Sie dann eine Datei eingeben, während Sie darin schreiben, unterliegen Sie der Dateipufferung des Betriebssystems.
Antwort3
Wenn Sie die memoir
Klasse (eine erweiterte „ book
and report
“-Klasse) verwenden, wird die Inhaltsverzeichnisdatei erst am Ende des Dokuments gelöscht und neu aufgefüllt. Sie können also im gesamten Dokument so viele Inhaltsverzeichnisse einfügen, wie Sie möchten.