这是一个后续问题这
如何在使用包(在本例中只有 mathtools)时更改 toc dept mid 文档。
一个例子:
\documentclass[a4paper,10pt,oneside]{book}
\usepackage{mathtools}
\begin{document}
\frontmatter
\chapter{hello}
\section{hello}
\subsection{hello}
\subsubsection{hello}
\setcounter{tocdepth}{3}
\tableofcontents
\mainmatter
\chapter{hello}
\section{hello}
\subsection{hello}
\subsubsection{hello}
\chapter{hello}
\section{hello}
\subsection{hello}
\subsubsection{hello}
\appendix
\addtocontents{toc}{\setcounter{tocdepth}{0}}
\chapter{hello}
\section{hello}
\subsection{hello}
\subsubsection{hello}
\chapter{hello}
\section{hello}
\subsection{hello}
\subsubsection{hello}
\end{document}
此示例会产生错误,并且非常奇怪地在目录中放置了一个感叹号,如您在此处所见
然而,当我注释掉它时,\usepackage{mathtools}
它突然又可以工作了,或者用不同的包替换它,也\usepackage[T1]{fontenc}
不会产生任何错误。
但这不仅限于这个特定的包,某些其他包也引入了相同的行为(我只是采用这个包来使示例保持较小)。
答案1
除了我上面的评论之外:您必须添加一个,\protect
以便该行看起来像\addtocontents{toc}{\protect\setcounter{tocdepth}{0}}
。有关解释,您可以参考mathtools 包的问题(或者参见下面 egreg 的详细回答)。
答案2
当你这样做
\addtocontents{toc}{<whatever>}
<whatever>
当文件中发生写入时,中的标记会完全展开.aux
。因此,
\addtocontents{toc}{\setcounter{tocdepth}{0}}
该.aux
文件将包含
\@writefile{toc}{\global \c@tocdepth 0\relax }
(没有mathtools
)。另一方面,mathtools
需要calc
,这会改变\setcounter
工作方式,并且在运行 LaTeX 时你会得到
! Undefined control sequence.
\@calc@post@scan ...st@scan \else \def \calc@next
{\calc@error #1}\fi \fi \f...
l.31 ...dtocontents{toc}{\setcounter{tocdepth}{0}}
问题是\setcounter
变成了一个脆弱的命令。简单地忽略错误本质上会产生任意的垃圾。
无论如何,你不会想要诸如
\global \c@tocdepth 0\relax
在.toc
文件中,因此应该在加载时独立地\protect
在前面使用。\setcounter
calc
假设您定义一个计数器,用于在运行时决定要在附录中显示哪些内容级别。
\newcounter{appendixtocdepth}
\setcounter{appendixtocdepth}{0} % choose a value
...
\addtocontents{toc}{\protect\setcounter{tocdepth}{\arabic{appendixtocdepth}}}
请注意,\arabic
不应保护其免受扩展,因为您希望对数字进行评估。
如果你确定要使用的级别是 0,那么只需
\addtocontents{toc}{\protect\setcounter{tocdepth}{0}}
就足够了。无论如何,将代码合并到 中会更好\appendix
。在序言中
\makeatletter
\g@addto@macro\appendix{%
\addtocontents{toc}{\protect\setcounter{tocdepth}{0}}%
}
\makeatother
所以只要这样做\appendix
就足够了。
答案3
你应该保护柜台:
\documentclass[a4paper,10pt,oneside]{book}
\usepackage{mathtools}
\begin{document}
\frontmatter
\chapter{hello}
\section{hello}
\subsection{hello}
\subsubsection{hello}
\setcounter{tocdepth}{3}
\tableofcontents
\mainmatter
\chapter{hello}
\section{hello}
\subsection{hello}
\subsubsection{hello}
\chapter{hello}
\section{hello}
\subsection{hello}
\subsubsection{hello}
\appendix
\addtocontents{toc}{\protect\setcounter{tocdepth}{0}}
\chapter{hello}
\section{hello}
\subsection{hello}
\subsubsection{hello}
\chapter{hello}
\section{hello}
\subsection{hello}
\subsubsection{hello}
\end{document}