目錄編號問題

目錄編號問題

我的 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,但立即寫入 aux 檔案。

\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文件並遵循該指令。當你運行乳膠時再次,該toc文件中包含正確的內容,您將獲得一個不錯的目錄。

但是 tex\write命令有某種延遲(我不明白)。當您\addcontentsline連續使用多次時,這並不重要,因為它們都會以正確的順序進入寫入堆疊。但這是棘手的部分:當你使用 時\include,它會產生一個分離 auxfile 為您所包含的文件以及立即地在主aux文件中寫入一條命令,表示「查看其他aux文件以獲取說明」(沒有奇怪的延遲)。因此,如果您\include在 後立即使用,則會寫入\addcontentsline「查看其他檔案」命令aux“在文件中寫入一些內容toc”命令。因此,包含文件中的所有內容條目都會先寫入!

答案3

\include當我替換為時,它對我有用\input

我認為\include是針對章節的(它強制 a\clearpage或類似的東西),所以我從不在實踐中使用它。

答案4

試著將 addcontents 行移至目錄上方:

更新:\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.

相關內容