使用 amsart + tocdepth + 段落时出现奇怪的错误

使用 amsart + tocdepth + 段落时出现奇怪的错误

对于以下 MWE

\documentclass{amsart}
\setcounter{tocdepth}{3}
\title{Hi}
\begin{document}
\maketitle
\tableofcontents
\section{A}
\subsection{B}
\subsubsection{B}
\paragraph{D}
\end{document}

我收到错误

! Missing number, treated as zero.
<to be read again> 
                   \r@tocindent4 
l.11 \end{document}

?

我真的不知道为什么。如果我更改amsartarticle,或者删除该\setcounter行,错误就会消失。

答案1

首先,amsart仅支持tocdepth最多3,因为它仅定义变量\r@tocindentX−1 ≤ X ≤3.

即便如此,amsart当你设置tocdepth为 3 时,这看起来还是像是一个错误。

该类定义:

\def\l@subsubsection{\@tocline{3}{0pt}{1pc}{7pc}{}}

然后还会执行以下操作:

\let\l@paragraph\l@subsubsection

第一行没有问题,因为它定义了 a 的 ToC 条目\subsubsection处于级别 3(这是受支持的)。但是第二行还定义了\paragraph为 3,这会引起麻烦,因为\paragraph是 4 级(对于 来说也是一样)\subparagraph

正确的定义是:

\def\l@paragraph{\@tocline{4}{0pt}{1pc}{7pc}{}}
\def\l@subparagraph{\@tocline{5}{0pt}{1pc}{7pc}{}}

如果你将这些行添加到你的文档中,它会编译:

\documentclass{amsart}
% bug fix:
\makeatletter
\def\l@paragraph{\@tocline{4}{0pt}{1pc}{7pc}{}}
\def\l@subparagraph{\@tocline{5}{0pt}{1pc}{7pc}{}}
\makeatother
%
\setcounter{tocdepth}{3}
\title{Hi}
\begin{document}
\maketitle
\tableofcontents
\section{A}
\subsection{B}
\subsubsection{B}
\paragraph{D}
\end{document}

相关内容