在 amsart 中写入 ToC 时执行延迟

在 amsart 中写入 ToC 时执行延迟

考虑以下使用amsart文档类

\documentclass{amsart}% http://ctan.org/pkg/amsart
\newcommand{\addtotoc}[1]{\addtocontents{toc}{#1}}

\begin{document}

\tableofcontents
\section{First section}
\addtotoc{abc}
\section{Second section}
\subsection{First subsection}
\addtotoc{def}
\subsection{Second subsection}
\end{document}

文档类amsart似乎在处理目录内容时表现出延迟;以下是.toc文件的内容:

\contentsline {section}{\tocsection {}{1}{First section}}{1}
abc
\contentsline {section}{\tocsection {}{2}{Second section}}{1}
def
\contentsline {subsection}{\tocsubsection {}{2.1}{First subsection}}{1}
\contentsline {subsection}{\tocsubsection {}{2.2}{Second subsection}}{1}

目录

为什么条目abc在第一部分之后结束(如预期的那样),但def没有在第一个小节之后结束?

答案1

同样的问题已经出现在article课堂上,并且paragraph

\documentclass{article}
\newcommand{\addtotoc}[1]{\addtocontents{toc}{#1}}
\begin{document}
\setcounter{tocdepth}{5}
\tableofcontents

\section{First section}
\addtotoc{abc\endgraf}
\section{Second section}
\subsection{First subsection}
\addtotoc{def\endgraf}
\subsection{Second subsection}
\paragraph{A paragraph}% insert \leavevmode to cure the problem
\addtotoc{ghk\endgraf}
\end{document}

无论是用amsart+subsection还是用治疗方法都是在之前article+paragraph添加。\leavevmode\addtotoc

实际情况是,\addcontentsline源自小节的 只会作为 中的内容的一部分执行\everypar,因此位于下一段的开头。这样做\par没有帮助,因为我们处于垂直模式:紧接着\subsection{First subsection}小节标题尚未排版。

因此,\addtotoc在垂直模式下,首先遇到的是,因此内容在文件中的位置.aux先于产生子节标题本身的相应指令。此顺序在.toc文件中自然保留。

目录图像,其中文章类展示了问题

(有人可能想知道最后一个\addcontentsline是如何执行的,但在文档的末尾,a\clearpage已经完成,这\if@noskipsec就是\iftrue所做的\leavevmode事情)

相关内容