pdflatex编译下,自定义part计数器为什么导致hyperref生成的书签层级出错?

发布于 2025-07-03 11:28:44

目的:第一个part的计数器设置为0,第二个part计数器设为1并正常递增。
MWE如下:

\documentclass{book}
\counterwithout{subsection}{section} %为了实现其他排版要求
\usepackage{hyperref}
\begin{document}

\frontmatter
\tableofcontents

\mainmatter

\part{zeroth part}
\setcounter{part}{0}

\part{first part}
\setcounter{part}{0}
\addtocounter{part}{1}
\chapter{first chapter}

\part{second part}
\chapter{second chapter}

\chapter{third chapter}
\backmatter
\end{document}

复现使用的.latexmkrc:

$pdf_mode = 2;
$postscript_mode = $dvi_mode = 0;

(即使用pdflatex编译)
出现的效果如图:
image.png

但是使用xelatex编译,能得到符合预期的目录行为。使用.latexmkrc:

$pdf_mode = 5;
$postscript_mode = $dvi_mode = 0;

效果:image.png

查看更多

关注者
0
被浏览
115
尊咾哎哟
尊咾哎哟 1天前
¥a^2+b^2=c^2¥. . .

应明白章节标题命令的一个潜在作用(虽然lshort中没有明讲,但基本能自悟到):创建编号的同时给编号计数加1。因此,没有必要在正文区中使用多余的\setcounter,\addtocounter

另外,\part的编号默认为罗马数字样式,该样式没有计数为0的形式吧...这里为方便表示,我修改了\part,\section的编号样式,您可再另外调整:

\renewcommand{\thepart}{\arabic{part}} % 阿拉伯数字形式
\renewcommand{\thechapter}{\alph{chapter}} % 小写字母形式

由于需求为“第一个\part的计数为0”,因此在“第一个\part之前将其计数设为-1:,由此\part被执行时其计数加1刚好等于0:

\setcounter{part}{-1}

MWE:

\documentclass{book}
\counterwithout{subsection}{section} %为了实现其他排版要求
\renewcommand{\thepart}{\arabic{part}}
\renewcommand{\thechapter}{\alph{chapter}}
\usepackage{hyperref}
\begin{document}

\frontmatter
\tableofcontents

\mainmatter

\setcounter{part}{-1}
\part{zeroth part}

\part{first part}
\chapter{first chapter}

\part{second part}
\chapter{second chapter}

\chapter{third chapter}

\backmatter

\end{document}

效果:
image.png

无论哪种编译选项,pdf正常、书签正常。

而且别忘了:使用hyperref宏包时,除latexmk以外都需编译2次

1 个回答

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览