Farbe für Hyperlinks (mit Autoref) im Beamer

Farbe für Hyperlinks (mit Autoref) im Beamer

Betrachten Sie die folgenden 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}

Ich möchte, dass i) die Klammern um die Gleichungsnummer Teil des Hyperlinks sind (und daher auch blau hervorgehoben werden) und ii) „Get \autorefto Work“ (und daher „Get Equation (1) belongs to Theorem (1)with “ (auch blau hervorgehoben)) (1).Theorem (1)

Bildbeschreibung hier eingeben

Bearbeiten:Betrachten Sie das folgende MWE, das die vorgeschlagene Lösung in die eindeutige Antwort auf diese Frage einbezieht:

\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}

Die Hyperlinks verweisen immer auf den ersten Frame und nicht auf die entsprechende Gleichung oder den Satz.

Antwort1

Klasse beamerlädt hyperrefmit Option implicit=false. Das bedeutet, dass das Laden von hyperreffrüher abgebrochen wird und wichtige Teile nicht geladen werden. Dadurch erzeugen die Gleichungen nicht einmal Anker. Ohne Anker kein Link (zumindest nicht dorthin, wo er hin soll), ohne Ankernamen kein \autoref.

Die Problemumgehung besteht aus zwei Teilen:

  • Anker werden mit gesetzt \phantomsection. Der Ankername spielt ohnehin keine Rolle, da es sich bei den Einstellungen \autorefnur um einen Stumpf für handelt . Da es sich bei jedoch auch um einen Dummy, also ein leeres Makro handelt, definiert das Beispiel einen , der einen Anker mit setzt .\refbeamer\phantomsection\phantomtarget\hypertarget
  • \hyperrefmit optionalem Argument wird die einfache Referenznummer durch die längere Phrase mit Name und Nummer ersetzt, beides innerhalb des Links. \ref*mit Stern verhindert einen unnötigen verschachtelten Link.

Vollständiges Beispiel:

\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}

Ergebnis

verwandte Informationen