如何使用 \part 重置章节和部分计数器

如何使用 \part 重置章节和部分计数器

要获取以下输出 Toc 或 pdf 书签:


Part I
    Chapter I
    Chapter II
Part II
    Chapter I
    Chapter II

我需要重置章节计数器。我谷歌了一下,找到了一种方法。


\makeatletter
\@addtoreset{chapter}{part}
\makeatother

是的,可以这样输出。但是hyperref包无法链接到章节的正确目标第一章。也就是说页面引用链接已损坏。

我喜欢在样式文件中定义所有样式。小文档:


\documentclass[]{book}
\usepackage[]{hyperref}
\usepackage{mini} % my own style file

\begin{document}
\tableofcontents
\part{Test}
\chapter{One}
\chapter{Two}
\part{Test}
\chapter{Three}
\chapter{Four}
\end{document} 

和迷你风格文件:


\renewcommand\part{%
  \if@openright
    \cleardoublepage
  \else
    \clearpage
  \fi
\setcounter{chapter}{0}} % I reset manually here.  

答案1

这个小例子对我来说很好用:

\documentclass[]{book}
\usepackage[]{hyperref}

\makeatletter
\@addtoreset{chapter}{part}
\makeatother  

\begin{document}
\tableofcontents
\part{Test}
\chapter{One}
\chapter{Two}
\part{Test}
\chapter{Three}
\chapter{Four}
\end{document}

因此,请提供显示问题的最小示例。谢谢。

答案2

问题不在于计数器,而在于您对部分的重新定义。您的命令\part只处理页面打开,然后将章节归零。由于您的计数器不是part第一章 1 的链接的子计数器,因此第二章 1 是相同的。

事实上pdfTeX发出了警告:

pdfTeX warning (ext4): destination with the same identifier (name{chapter.1}) 
has been  already used, duplicate ignored

就像网络超链接一样,一个链接不能指向两个不同的目的地。

要解决此问题,您可以将章节计数器添加到重置列表中,

   \makeatletter
   \@addtoreset{chapter}{part}
   \makeatother  

或者保存book.cls并将mybook.cls行更改\newcounter {chapter}为:

   \newcounter {chapter}[part]

只要您对 part 有正确的定义(即增加 part 计数器),此方法便可行。有趣的是,您对 的重新定义\part除了给您带来麻烦外,实际上没有起到任何作用。它不接受任何参数!(请查看book.cls了解类似的定义)。

答案3

您应该使用 chngcntr 包,它本质上相当于\@addtoreset{chapter}{part}。但使用包更干净,不是吗 ;)

另外,请注意它应该被加载hyperref 和 bookmark 包以确保链接正确。

\documentclass{book}

\usepackage{hyperref}
\usepackage{chngcntr}
\counterwithin{chapter}{part}

\begin{document}
\tableofcontents

\part{Test}
\chapter{One}

\part{Test2}
\chapter{Two}

\end{document}

此外,\counterwithin将重命名所有章节/节/等标签并将部分添加到其前面,例如第 2.2 节变为 IV.2.2 或其他。如果您不想这样,请使用\counterwithin*

相关内容