ToC 编号问题

ToC 编号问题

我的 LaTeX 文档表现异常。以下是它的简化版本:

\documentclass{article}

\begin{document}

\tableofcontents
\newpage

\addcontentsline{toc}{part}{A Part of My Document}
\include{includedfile}

\end{document}

并且includedfile.tex

\section{My Section Title}
Quack.

显然,在目录中,部分的标题应该位于节的标题之前,但事实并非如此!出了什么问题?

答案1

一些人提到的延迟问题是 TeX 会延迟所有\write命令直到\shipout时间。如果出于某种原因,您需要立即执行\write,则可以使用\immediate\write。为此,这里有一个简单的新宏,其作用类似于\addcontentsline,但会立即写入辅助文件。

\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}

答案2

这是一个棘手的小问题。事实证明,它\include与 有很大不同\input;它不只是增加了几个\clearpages。我认为正确的解决方案是创建一个自定义\include命令,其功能几乎与通常的命令一样:

\newcommand{\myinclude}[1]{\clearpage\input{#1}\clearpage}

当您\addcontentsline直接或间接使用 时,它会在文件上写一行aux,说“将这个和那个写入toc文件”。然后它读取aux文件并按照该指令操作。当您运行 latex 时再次toc文件中有正确的内容,并且您会得到一个漂亮的目录。

但是 tex\write命令有某种延迟(我不明白)。当你\addcontentsline连续使用几次时,这并不重要,因为它们都以正确的顺序进入写入堆栈。但这里有一个棘手的部分:当你使用\include,它会产生分离 aux文件为你要包含的文件,立即地在主aux文件中写入一条命令,表示“查看其他aux文件以获取说明”(没有奇怪的延迟)。因此,如果您\include在 之后立即使用\addcontentsline,则“查看其他aux文件”命令将被写入“在文件中写入一些内容toc”命令。因此,包含文件中的所有内容条目都会被首先写入!

答案3

\include当我用替换时,它对我有用\input

我认为\include是针对章节(它强制\clearpage或类似的东西),所以我从未在实践中使用它。

答案4

尝试将添加内容行移至目录上方:

更新:\addcontentsline如果与 处于同一级别,则会出现错误的排序\include。解决方法是将 放在\addcontentsline包含文件中:

\documentclass{article}
\begin{document}
\tableofcontents
\newpage
\include{includedfile}
\include{some-other-file}
\end{document}

的内容includedfile.tex

\addcontentsline{toc}{part}{First Part of My Document}
\section{My Section Title}
Quack.

相关内容