Manuelle Eingabe der Inhaltsverzeichnisdatei (\jobname.toc) unter Umständen leer

Manuelle Eingabe der Inhaltsverzeichnisdatei (\jobname.toc) unter Umständen leer

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.tocist leer.

Wenn \jobname.tocvorhanden (z. B. nach einer ersten Kompilierung der vorherigen .texDatei), 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 .tocDatei im Zusammenhang mit einemandersdokumentieren.

Zum Zeitpunkt der Verwendung \input{\jobname.toc}ist es mit Sicherheit leer, da \tableofcontentses eingegeben wird und anschließend die Datei zum Beschreiben geöffnet und somit gelöscht wird.

Die .tocDatei wird dann am Ende des Dokuments neu aufgefüllt.

Schauen Sie sich das shorttocPaket 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; \InputIfFileExistssollte aber genutzt werden, da die .tocDatei 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 memoirKlasse (eine erweiterte „ bookand 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.

verwandte Informationen