私の 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
、 を使用できます。そのために、 のように動作しながら aux ファイルに即時に書き込む、\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
異なっていることがわかりました。単に s をいくつか追加するだけではありません。適切な解決策は、通常のコマンドとほぼ同じように機能するカスタム コマンドを作成することだと思います。\input
\clearpage
\include
\newcommand{\myinclude}[1]{\clearpage\input{#1}\clearpage}
を直接的または間接的に使用すると、ファイルに「これこれのことをファイルに書き込む」という\addcontentsline
行が書き込まれます。その後、ファイルを読み取り、その指示に従います。latexを実行すると、aux
toc
aux
またファイルtoc
には適切な内容が含まれており、適切な目次が表示されます。
しかし、tex\write
コマンドには何らかの遅延があります(私には理解できません)。\addcontentsline
を連続して複数回使用する場合、すべてが正しい順序で書き込みスタックに配置されるため、問題にはなりません。 しかし、ここで厄介なのが、 を使用すると\include
、別 aux
含めるファイルのファイルとすぐにはメインaux
ファイルに「他のファイルを見て指示を仰ぐ」というコマンドを書きます(奇妙な遅延はありません)。そのため、の直後にaux
使用すると、「他のファイルを見て」というコマンドが書き込まれます。\include
\addcontentsline
aux
前に「ファイルに何かを書き込むtoc
」コマンド。したがって、インクルードされたファイルからのすべてのコンテンツ エントリが最初に書き込まれます。
答え3
\include
を に置き換えるとうまくいきます\input
。
は章用だと思います\include
(a またはそれに似たものを強制します\clearpage
)ので、実際には使用しません。
答え4
addcontentsline を tableofcontents の上に移動してみてください:
更新しました:\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.