![为什么目录页中的某些链接指向错误的页面?](https://linux22.com/image/361454/%E4%B8%BA%E4%BB%80%E4%B9%88%E7%9B%AE%E5%BD%95%E9%A1%B5%E4%B8%AD%E7%9A%84%E6%9F%90%E4%BA%9B%E9%93%BE%E6%8E%A5%E6%8C%87%E5%90%91%E9%94%99%E8%AF%AF%E7%9A%84%E9%A1%B5%E9%9D%A2%EF%BC%9F.png)
\documentclass[a4paper,12pt]{book}
\usepackage[hidelinks]{hyperref}
\begin{document}
\tableofcontents
\newpage
\addcontentsline{toc}{section}{from there}
no text
\newpage
\addcontentsline{toc}{section}{to here}
some text
\newpage
\addcontentsline{toc}{subsection}{and here}
still more text
\newpage
\addcontentsline{toc}{subsection}{not here}
or maybe less text
\newpage
\addcontentsline{toc}{section}{also here}
and more text
\newpage
\addcontentsline{toc}{subsection}{maybe here}
and still more text
\end{document}
答案1
\addcontentsline
做不是创建锚点时,它会使用之前创建的锚点,即使该锚点属于先前的页面之一。这是设计使然,它允许,例如:
\section*{Introduction}
\addcontentsline{toc}{section}{Introduction}
如果\addcontentsline
创建一个锚点,那么它将指向以下章节标题。
这里的解决方案是使用\phantomsection
,它将创建所需的锚点:
\newpage
\phantomsection
\addcontentsline ...