投影仪中的超链接(带有 autoref)颜色

投影仪中的超链接(带有 autoref)颜色

考虑以下 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加载类。这意味着 的加载会提前停止,并且不会加载重要部分。因此,方程式甚至不会生成锚点。没有锚点就没有链接(至少没有到它应该去的地方),没有锚点名称就没有。hyperrefimplicit=falsehyperref\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}

结果

相关内容