Hyperlinks im Beamer mit Allowframebreaks

Hyperlinks im Beamer mit Allowframebreaks

In diesemAntwortHeiko Oberdiek hat mir gezeigt, wie man Anker erstellt, die später zum Generieren funktionierender Hyperlinks in der Beamer-Klasse verwendet werden können. Das funktioniert sehr gut, außer in dem Fall, in dem die allowframebreaksOption angegeben ist. Um dies zu sehen, betrachten Sie das folgende MWE:

\documentclass{beamer}
\usepackage{lmodern}
\usepackage{lipsum}

\setbeamertemplate{caption}[numbered]
\hypersetup{colorlinks=true}

\makeatletter
\newcounter{phantomtarget}
\renewcommand*{\thephantomtarget}{phantom.\the\value{phantomtarget}}
\newcommand*{\phantomtarget}{%
  \stepcounter{phantomtarget}%
  \hypertarget{\thephantomtarget}{}%
  \edef\@currentHref{\thephantomtarget}%
}
\makeatother

\begin{document}
\begin{frame}[allowframebreaks]
  \frametitle{First figure}
  \lipsum[3]
  See Figure \hyperref[fig:first_figure]{\ref*{fig:first_figure}} and Figure
  \hyperref[fig:second_figure]{\ref*{fig:second_figure}}.
  \phantomtarget
  \begin{figure}
    \rule{6cm}{6cm}
    \caption{First figure}
    \label{fig:first_figure}
  \end{figure}
\end{frame}
\begin{frame}
  \frametitle{Second figure}
  \phantomtarget
  \begin{figure}
    \rule{6cm}{6cm}
    \caption{Second figure}
    \label{fig:second_figure}
  \end{figure}
\end{frame}
\end{document}

Die zweite Abbildung ist korrekt verlinkt, die erste Abbildung (die sich im zweiten oder „Fortsetzungs“-Frame eines Frames mit der allowframebreaksOption befindet) ist jedoch nicht korrekt verlinkt. Wie kann das behoben werden?

Antwort1

Grundsätzlich sollten Sie es \phantomtargetdirekt nach dem einfügen \begin{figure}, und nicht direkt vor dieser Zeile.

Erläuterung

Das Problem in Ihrem MWE besteht darin, dass der Seitenumbruch zwischen \phantomtargetund erfolgt \begin{figure}, sodass sich das Ziel auf einer anderen Seite als die Abbildung selbst befindet.

In tut es beamernicht \begin{figure}wirklich viel: Es legt lediglich den Überschriftentyp fest, beginnt einen neuen Absatz und eine centerUmgebung, die (wichtig) durch die Verwendung von umgeben ist \nobreak.

Wenn Sie also das \phantomtargetdirekt in das setzen \begin{figure}, ist es wahrscheinlicher, dass das Ziel zusammen mit dem eigentlichen Abbildungsinhalt bleibt, ohne dass dazwischen ein Seitenumbruch erfolgt. Es gibt sicherlich keinen Nachteil, das \phantomtargetin das \begin{figure}in zu setzen beamer. Ob das Problem dadurch vollständig gelöst wird, hängt im Allgemeinen davon ab, was sich sonst noch in der figureUmgebung befindet und ob es über mehrere Seiten umbrochen werden kann usw.

Fester MWE

\documentclass{beamer}
\usepackage{lmodern}
\usepackage{lipsum}

\setbeamertemplate{caption}[numbered]
\hypersetup{colorlinks=true}

\makeatletter
\newcounter{phantomtarget}
\renewcommand*{\thephantomtarget}{phantom.\the\value{phantomtarget}}
\newcommand*{\phantomtarget}{%
  \stepcounter{phantomtarget}%
  \hypertarget{\thephantomtarget}{}%
  \edef\@currentHref{\thephantomtarget}%
}
\makeatother

\begin{document}
\begin{frame}[allowframebreaks]
  \frametitle{First figure}
  \lipsum[3]
  See Figure \hyperref[fig:first_figure]{\ref*{fig:first_figure}} and Figure
  \hyperref[fig:second_figure]{\ref*{fig:second_figure}}.
  \begin{figure}
    \phantomtarget
    \rule{6cm}{6cm}
    \caption{First figure}
    \label{fig:first_figure}
  \end{figure}
\end{frame}
\begin{frame}
  \frametitle{Second figure}
  \phantomtarget
  \begin{figure}
    \rule{6cm}{6cm}
    \caption{Second figure}
    \label{fig:second_figure}
  \end{figure}
\end{frame}
\end{document}

verwandte Informationen