Inhaltsverzeichnisnummerierungsproblem

Inhaltsverzeichnisnummerierungsproblem

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 \writeBefehle bis \shipoutzur 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 \includevon unterscheidet \input; es werden nicht nur ein paar \clearpages 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 \addcontentslinedirekt oder indirekt verwenden, schreibt es eine Zeile in die auxDatei mit dem Inhalt „schreibe dies und das in die tocDatei“. Dann liest es die auxDatei und befolgt diese Anweisung. Wenn Sie latex ausführenwieder, die tocDatei 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 \addcontentslinemehrmals 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 auxDatei für die Datei, die Sie einbinden, undsofortschreibt einen Befehl in die Hauptdatei, auxder besagt: „Schauen Sie sich die andere auxDatei an, um Anweisungen zu erhalten“ (ohne seltsame Verzögerung). Wenn Sie also \includeunmittelbar nach einem verwenden \addcontentsline, wird der Befehl „Schauen Sie sich die andere auxDatei an“ geschrieben.Vorder Befehl „Schreibe etwas in die tocDatei“. So werden zuerst alle Inhaltseinträge aus der eingebundenen Datei geschrieben!

Antwort3

Bei mir funktioniert es, wenn ich \includedurch ersetze \input.

Ich glaube, \includees ist für Kapitel (es erzwingt ein \clearpageoder 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 \addcontentslineauf derselben Ebene wie steht \include. Eine Problemumgehung besteht darin, Folgendes \addcontentslinein 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.

verwandte Informationen