在以下示例中,第二个链接没有超链接:
\documentclass{article}
\usepackage{amsmath} % Removing this makes the second link work
\usepackage{hyperref}
\begin{document}
\hyperref[abc-def]{link} % This link works
\(\textnormal{\hyperref[abc-def]{link}}\) % But not this one
\label{abc-def} Target
\end{document}
但是,删除后\usepackage{amsmath}
第二个链接就修复了。为什么会这样?如何在不删除 amsmath 的情况下让第二个链接正常工作?
(这是从自动生成的 XeLaTeX 源简化的示例,因此修改代码本身相当不方便)。
这是一个稍微大一点的例子:
\documentclass{article}
\usepackage{amsmath}
\usepackage{hyperref}
\begin{document}
\hyperref[lbl]{term}
\(\textnormal{\hyperref[lbl]{term}}\)
\newpage
\subsubsection{Abc}
\phantomsection\label{lbl} def
\end{document}
答案1
更新已在 Hyperref v6.83p 中修复
看来 xetex/dvipdfm(x) 的宏代码仅在 mathchoice 的第一个选择中插入链接(因此它仅在 displaystyle 中有效)
您可以使用\mbox
或类似的构造来强制文本大小,从而避免内部的数学选择,或者更好的解决方法是
这里我禁用了amstext
包\iffirstchoice@
测试,所以宏无法知道它们被执行了四次。这是添加 hyperref 特殊时想要的,但它确实意味着如果您增加一个计数器,或者在其中创建一个索引条目,\textnormal
您将获得 4 个增量或索引条目。
\documentclass{article}
\usepackage{amsmath}
\usepackage{hyperref}
\begin{document}
\makeatletter
\let\iffirstchoice@\iftrue
\let\firstchoice@false\relax
\makeatletter
\hyperref[lbl]{1term}
\(\textnormal{\hyperref[lbl]{2term}} x^{\textnormal{\hyperref[lbl]{3term}}}\)
\newpage
\subsubsection{Abc}
\phantomsection\label{lbl} def
\end{document}