目次番号の問題

目次番号の問題

私の 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を実行すると、auxtocauxまたファイルtocには適切な内容が含まれており、適切な目次が表示されます。

しかし、tex\writeコマンドには何らかの遅延があります(私には理解できません)。\addcontentslineを連続して複数回使用する場合、すべてが正しい順序で書き込みスタックに配置されるため、問題にはなりません。 しかし、ここで厄介なのが、 を使用すると\include aux含めるファイルのファイルとすぐにはメインauxファイルに「他のファイルを見て指示を仰ぐ」というコマンドを書きます(奇妙な遅延はありません)。そのため、の直後にaux使用すると、「他のファイルを見て」というコマンドが書き込まれます。\include\addcontentslineaux前に「ファイルに何かを書き込む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.

関連情報