В соответствии сИспользование внешних файлов .toc, следующий файл должен отображать оглавление дважды:
\documentclass{report}
\begin{document}
\tableofcontents
\chapter*{Contents (manual input)}
\makeatletter
\input{\jobname.toc}
\makeatother
\chapter{Foo}
\section{Bar}
\end{document}
но ручной ввод \jobname.toc
пуст.
Если \jobname.toc
существует (например, после первой компиляции предыдущего .tex
файла), этот ручной ввод дает ожидаемый (непустой) результат, как только он будет удален или прокомментирован:
- или
\tableofcontents
, - или
\chapter{Foo}
.
Вы понимаете, что происходит?
решение1
Связанный вопрос был о вводе .toc
файла, связанного сдругойдокумент.
В момент использования \input{\jobname.toc}
он наверняка пуст, потому что \tableofcontents
вводит его, а затем открывает файл для записи в него, тем самым очищая его.
Затем файл .toc
повторно заполняется в конце документа.
Взгляните на shorttoc
пакет, который должен решить вашу реальную проблему.
Однако решить эту проблему легко, отложив открытие файла для записи в конце документа.
\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}
Вы видите, что вы можете вводить оглавление столько раз, сколько захотите; это \InputIfFileExists
следует использовать, поскольку .toc
файл может все еще отсутствовать.
решение2
\tableofcontents
вводит оглавление, но затем открывает егодля записитаким образом, это удаляет оригинал, поэтому затем вы вводите файл во время записи в него, поэтому вы подвергаетесь буферизации файлов операционной системы.
решение3
Если вы используете memoir
класс (расширенный book
класс report
), то файл toc не удаляется и не заполняется заново до конца документа, поэтому вы можете разместить столько toc, сколько захотите, по всему документу.