考虑以下 MWE
\documentclass[leqno]{beamer}
\usepackage{lmodern}
\hypersetup{colorlinks=true,allcolors=blue}
\setbeamertemplate{theorems}[numbered]
\begin{document}
\begin{frame}
\begin{theorem}
\label{thm:a_theorem}
\begin{equation}
\label{eq:an_equation}
2 + 2 = 4
\end{equation}
\end{theorem}
Equation \ref{eq:an_equation} belongs to \ref{thm:a_theorem}.\\
Equation \eqref{eq:an_equation} belongs to \ref{thm:a_theorem}.\\
Equation \autoref{eq:an_equation} belongs to \autoref{thm:a_theorem}.
\end{frame}
\end{document}
我想要 i) 方程编号周围的括号成为超链接的一部分(因此也以蓝色突出显示)和 ii) 开始\autoref
工作(因此获得Equation (1) belongs to Theorem (1)
也以蓝色突出(1)
显示Theorem (1)
)。
编辑:考虑以下 MWE,它将建议的解决方案融入到这个问题的独特答案中:
\documentclass[leqno]{beamer}
\usepackage{lmodern}
\hypersetup{colorlinks=true,allcolors=blue}
\setbeamertemplate{theorems}[numbered]
\begin{document}
\begin{frame}
Foo
\end{frame}
\begin{frame}
\phantomsection
\begin{theorem}
\label{thm:a_theorem}
Bar
\end{theorem}
\end{frame}
\begin{frame}
\phantomsection
\begin{equation}
\label{eq:an_equation}
2 + 2 = 4
\end{equation}
\end{frame}
\begin{frame}
\hyperref[eq:an_equation]{Equation (\ref*{eq:an_equation})} belongs
to \hyperref[thm:a_theorem]{Theorem \ref*{thm:a_theorem}}.
\end{frame}
\end{document}
超链接总是指向第一帧而不是相应的方程或定理。
答案1
使用选项beamer
加载类。这意味着 的加载会提前停止,并且不会加载重要部分。因此,方程式甚至不会生成锚点。没有锚点就没有链接(至少没有到它应该去的地方),没有锚点名称就没有。hyperref
implicit=false
hyperref
\autoref
解决方法包括两部分:
- 锚点用 来设置
\phantomsection
。锚点名称无论如何都无所谓,因为\autoref
只是 的存根,\ref
带有beamer
设置。但是, 也是\phantomsection
虚拟的,一个空宏,因此示例定义了一个\phantomtarget
,它使用 来设置锚点\hypertarget
。 \hyperref
使用可选参数将普通的参考编号替换为链接内的带有名称和编号的较长短语。\ref*
使用星号可防止不必要的嵌套链接。
完整示例:
\documentclass[leqno]{beamer}
\usepackage{lmodern}
\hypersetup{colorlinks=true,allcolors=blue}
\setbeamertemplate{theorems}[numbered]
\makeatletter
\newcounter{phantomtarget}
\renewcommand*{\thephantomtarget}{phantom.\the\value{phantomtarget}}
\newcommand*{\phantomtarget}{%
\stepcounter{phantomtarget}%
\hypertarget{\thephantomtarget}{}%
\edef\@currentHref{\thephantomtarget}%
}
\makeatother
\begin{document}
\begin{frame}
\phantomtarget
\begin{theorem}
\label{thm:a_theorem}
\phantomtarget
\begin{equation}
\label{eq:an_equation}
2 + 2 = 4
\end{equation}
\end{theorem}
\hyperref[eq:an_equation]{Equation (\ref*{eq:an_equation})} belongs
to \hyperref[thm:a_theorem]{Theorem \ref*{thm:a_theorem}}.
\end{frame}
\end{document}