为什么我所有的超链接都会把我带到同一个页面?

为什么我所有的超链接都会把我带到同一个页面?

我无法在我的文档之外以微型形式重现此问题,因此我寻求更多调试帮助,以了解如何在我拥有的文档中修复此问题。

问题是,我有一个部分,内容如下:

First is \hyperref[P1]{Item I}, go there.  \hyperref[P2]{Next} is item 2, and finally is \hyperref[P3]{Item III}.
\newpage

%% later...
\section*{Item I}
\label{P1}
stuff
\section*{Item II}
\label{P2}
stuff
\section*{Item III}
\label{P3}
stuff

认为

  • 项目 I,P1 在第 1 页。
  • 第 II 项,P2 在第 6 页。
  • 第 III 项,P3 在第 20 页。

无论我做何改变,\hyperref[P3]{Item III}都指向第 5 页,而不是第 20 页。

我尝试了以下调试:

  1. 我是否确实错误地将 P3 标记为 P2 了? 不,是 P3。
  2. 我是否实际上未能更新原始超链接,所以它仍然显示 P2?不,上面写的是 P3。
  3. 我确定吗? 我不如给它起个完全不同的名字,比如“位置”。\hyperref[LOCATION]{Item III} \section*{Item III}\label{LOCATION}仍然指向第 5 页,而不是第 20 页!
  4. 我是否遗漏了错误,例如: L aTeX Warning: There were undefined references.? 没有,没有缺失的引用。
  5. 如何完全移除\label{P2}并查看 P3 是否仍指向那里? 删除后,是的,它仍然指向第 5 页,而现在没有任何标签有意指向该页。
  6. 那么如何调试页面本身呢? \pageref{P1} \pageref{P2} \pageref{P3}打印结果2 7 21非常接近,但这告诉我 pageref{P2} 实际上也是不正确的。它不是指向 P2,而是指向 P1 的末尾,就像 P3 指向 P1 的末尾一样。

除此之外,我不知道如何使第一个引用工作之后定义的任何引用起作用,我的意思是指向第 5 页以外的其他地方。可能发生了什么?

答案1

你需要使用

\phantomsection
\section*{<title>}
\label{<label>}

因为没有\section*像 那样设置 的超目标\section。如果你只\section*在文档中使用,你可以使用

\let\oldsection\section % Copy \section into \oldsection
\renewcommand{\section}{%
  \phantomsection % Set hyper target
  \oldsection*
}

在你的序言中

答案2

另一种方法是使用和hyperrefnameref不需要 \phantomsections:

姆韦

\documentclass{article}
\usepackage[colorlinks,linkcolor=blue]{hyperref}
\usepackage{lipsum}
\usepackage{nameref}
\begin{document}

First is \Nameref{P1}, go there. \par 
\hyperlink{X}{Here} is \nameref{P2} (\Nameref{P2}).\par
But there are a  \Nameref{P3}.\par 
And there are not three without \hyperlink{Y}{four} in page \pageref{P4}

\newpage

\section*{Item I}
\label{P1}
\lipsum[1-20]
\section*{Item II}
\label{P2}\hypertarget{X}
\lipsum[21-40]
\section*{Item III}
\label{P3}
\lipsum[41-50]
\section*{Item IV}
\label{P4}
\hypertarget{Y} 
\lipsum[1]

\end{document}

相关内容