当使用未编号的部分(\part*
)时,使用 添加到目录中\addcontentsline
,部分页面的页码是错误的。
请参阅此 MWE:
\documentclass{book}
\begin{document}
\tableofcontents
\part*{First part}
\addcontentsline{toc}{part}{First part}
\chapter{Chapter 1}
\end{document}
“第 1 部分”页面是第 3 页,但目录显示第 5 页,就像第一章的开头一样。如果我们添加hyperref
内部链接的锚点,结果将类似(第 5 页而不是第 3 页)。
这看起来很简单,但我不知道如何修复这种行为,令我惊讶的是,我没有找到答案,无论是在这里还是在常规的乳胶手册中……有人知道这里出了什么问题吗?
答案1
问题在于\part*
,与 不同\chapter*
, 不仅会开始一个新页面并在其上打印标题,还会在标题后开始另一个新页面。在双面打印中,此页保持空白,因此会开始另一个新页面。只有这样您的\addcontentsline
语句才会执行,因此晚了两页。
为了解决这个问题,你应该像 Ulrike 的评论中所指出的那样,首先开始一个新的右页,然后放置声明\addcontentsline
,然后才放置标题\part*
:
\documentclass{book}
\begin{document}
\tableofcontents
\cleardoublepage
\addcontentsline{toc}{part}{First part}
\part*{First part}
\chapter{Chapter 1}
\end{document}
\addcontentsline
放在标题之前还有一个好处,就是当hyperref
使用时,链接实际上指向标题之前而不是标题之后。
顺便说一句:KOMA-Script 类scrbook
有一个附加命令\addpart
,其使用方式类似\chapter*
但会自动添加一个目录条目:
\documentclass[emulatestandardclasses]{scrbook}
\begin{document}
\tableofcontents
\addpart{First part}
\chapter{Chapter 1}
\end{document}
我使用选项emulatestandardclasses
来模拟标准类的相似性book
。如果没有选项,页眉和页脚以及章节标题将会有所不同。