带有星号部分 + \addcontentsline 的目录页码错误

带有星号部分 + \addcontentsline 的目录页码错误

当使用未编号的部分(\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。如果没有选项,页眉和页脚以及章节标题将会有所不同。

相关内容