要获取以下输出 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*
。