我怎样才能让 addcontentsline 跳转到章节标题的正确位置?

我怎样才能让 addcontentsline 跳转到章节标题的正确位置?

我正在尝试使用\addcontentsline,但无法使其正常工作。它生成的链接要么跳转到之前的页面,要么跳过章节标题,具体取决于我将其放在哪里。这是 MWE

% !TEX encoding = UTF-8 Unicode
% !TEX TS-program = xelatex
\documentclass{book}
\usepackage{lipsum}
\usepackage{hyperref}

\begin{document}
\pagestyle{plain}
\tableofcontents

\chapter{A}
\lipsum[1]

\phantomsection
\addcontentsline{toc}{chapter}{B} %% <-- jumps to the page before
\chapter*{B}
\phantomsection
\addcontentsline{toc}{chapter}{B} %% <-- jumps over the chapter header
\lipsum[2]

\chapter{C}
\lipsum[3]

\end{document}

我尝试将\clearpage\newpage放在前面,但都没有用。

提前致谢!

答案1

您有一份双面文档,因此您需要一个,\cleardoublepage以便锚点\phantomsection位于正确的页面上。或者,您也可以将其放在章节下方的某个位置并将其向上移动,请参阅 raisebox 示例。

\documentclass{book}
\usepackage{lipsum}
\usepackage{hyperref}

\begin{document}
\pagestyle{plain}
\tableofcontents

\chapter{A}
\lipsum[1]

\cleardoublepage 
\phantomsection
\addcontentsline{toc}{chapter}{B} %% <-- jumps to the page before
\chapter*{B}
\phantomsection
\addcontentsline{toc}{chapter}{B} %% <-- jumps over the chapter header

\raisebox{3cm}[0pt][0pt]{\phantomsection HERE}\addcontentsline{toc}{chapter}{B} %% 

\lipsum[2]

\chapter{C}
\lipsum[3]

\end{document}

相关内容