Mein LaTeX-Dokument verhält sich merkwürdig. Hier ist eine vereinfachte Version davon:
\documentclass{article}
\begin{document}
\tableofcontents
\newpage
\addcontentsline{toc}{part}{A Part of My Document}
\include{includedfile}
\end{document}
Und in includedfile.tex
:
\section{My Section Title}
Quack.
Im Inhaltsverzeichnis sollte die Überschrift des Teils eindeutig vor der des Abschnitts stehen, aber das ist nicht der Fall! Was ist falsch?
Antwort1
Das Verzögerungsproblem, das mehrere Leute erwähnt haben, besteht darin, dass TeX alle \write
Befehle bis \shipout
zur Zeit verzögert. Wenn Sie aus irgendeinem Grund ein sofortiges benötigen \write
, können Sie verwenden \immediate\write
. Zu diesem Zweck gibt es hier ein einfaches neues Makro, das wie funktioniert \addcontentsline
, aber sofort in die AUX-Datei schreibt.
\documentclass{article}
\newcommand\immediateaddcontentsline[3]{%
\begingroup
\let\origwrite\write
\def\write{\immediate\origwrite}%
\addcontentsline{#1}{#2}{#3}%
\endgroup
}
\begin{document}
\tableofcontents
\newpage
\immediateaddcontentsline{toc}{part}{A Part of My Document}
\include{includedfile}
\end{document}
Antwort2
Dies ist ein kniffliges kleines Problem. Es stellt sich heraus, dass sich in einem wichtigen Punkt \include
von unterscheidet \input
; es werden nicht nur ein paar \clearpage
s hinzugefügt. Ich denke, die richtige Lösung besteht darin, einen benutzerdefinierten Befehl zu erstellen \include
, der fast wie der übliche funktioniert:
\newcommand{\myinclude}[1]{\clearpage\input{#1}\clearpage}
Wenn Sie \addcontentsline
direkt oder indirekt verwenden, schreibt es eine Zeile in die aux
Datei mit dem Inhalt „schreibe dies und das in die toc
Datei“. Dann liest es die aux
Datei und befolgt diese Anweisung. Wenn Sie latex ausführenwieder, die toc
Datei enthält die richtigen Inhalte und Sie erhalten ein schönes Inhaltsverzeichnis.
Aber der tex \write
-Befehl hat eine Art Verzögerung (die ich nicht verstehe). Wenn Sie \addcontentsline
mehrmals hintereinander verwenden, spielt das keine Rolle, da sie alle in der richtigen Reihenfolge auf den Schreibstapel gelangen. Aber hier ist der schwierige Teil: Wenn Sie verwenden \include
, wird einseparate aux
Datei für die Datei, die Sie einbinden, undsofortschreibt einen Befehl in die Hauptdatei, aux
der besagt: „Schauen Sie sich die andere aux
Datei an, um Anweisungen zu erhalten“ (ohne seltsame Verzögerung). Wenn Sie also \include
unmittelbar nach einem verwenden \addcontentsline
, wird der Befehl „Schauen Sie sich die andere aux
Datei an“ geschrieben.Vorder Befehl „Schreibe etwas in die toc
Datei“. So werden zuerst alle Inhaltseinträge aus der eingebundenen Datei geschrieben!
Antwort3
Bei mir funktioniert es, wenn ich \include
durch ersetze \input
.
Ich glaube, \include
es ist für Kapitel (es erzwingt ein \clearpage
oder so etwas), daher verwende ich es in der Praxis nie.
Antwort4
Versuchen Sie, die Zeile „addcontents“ über das Inhaltsverzeichnis zu verschieben:
Aktualisiert:Eine falsche Reihenfolge tritt auf, wenn \addcontentsline
auf derselben Ebene wie steht \include
. Eine Problemumgehung besteht darin, Folgendes \addcontentsline
in der enthaltenen Datei zu haben:
\documentclass{article}
\begin{document}
\tableofcontents
\newpage
\include{includedfile}
\include{some-other-file}
\end{document}
Inhalt vonincludedfile.tex
\addcontentsline{toc}{part}{First Part of My Document}
\section{My Section Title}
Quack.