我正在使用 hyperref 包和自定义类,但遇到了 hyperref 无法正确创建树的问题。我期望看到以下内容:
+ Section 1
++ Section 1.1
++ Section 1.2
+++ Section 1.2.1
+++ Section 1.2.2
++ Section 1.3
+ Section 2
++ Section 2.1
但我看到的却是这样的:
+ Section 1
++ Section 1.1
++ Section 1.2
+++ Section 1.2.1
+++ Section 1.2.2
++++ Section 1.3
+++++ Section 2
++++++ Section 2.1
我猜想存在某种级别计数器,用于跟踪树处于哪个级别的节、子节、子子节等,而当我运行\clearpage
或创建章节或节标题时,它不会被重置。但我不知道如何重置它,也不知道 hyperref 使用什么样的机制来跟踪它。我无法弄清楚 hyperref 是如何自己做到这一点的。
我如何从 Latex 类级别控制 hyperref 的级别“计数器”?
任何帮助将不胜感激。
答案1
这里最有可能的罪魁祸首是重新定义部分排版方式的“自定义类”。具体来说,可能有一个增加相反secnumdepth
环境明确地。您的选择是:
- 要么编辑自定义文档类,
\addtocounter
通过删除它并用正确的、固定的 替换它来修复此问题secnumdepth
。例如,在\section
命令中使用\setcounter{secnumdepth}{3}
。在 中\subsection
,删除\addtocounter
并使用\setcounter{secnumdepth}{4}
。在 中\subsubsection
,删除\addtocounter
并使用\setcounter{secnumdepth}{5}
。这将确保相应的分段命令位于不同的级别。 使用
etoolbox
包裹在扩展之前,在所需的计数器中预先添加一个 drop。也就是说,通过添加\usepackage{etoolbox}% http://ctan.org/pkg/etoolbox ... \pretocmd{\section}{\addtocounter{secnumdepth}{-1}{}{}% \pretocmd{\subsection}{\addtocounter{secnumdepth}{-1}{}{}% \pretocmd{\subsubsection}{\addtocounter{secnumdepth}{-1}{}{}%