对于以下 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}
?
我真的不知道为什么。如果我更改amsart
为article
,或者删除该\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}