Hipervínculos en Beamer con Allowframebreaks

Hipervínculos en Beamer con Allowframebreaks

En estorespuestaHeiko Oberdiek me mostró cómo crear anclajes que podrían usarse más adelante para generar hipervínculos funcionales en la clase Beamer. Esto funciona muy bien excepto en el caso en que allowframebreaksse da la opción. Para ver esto, considere el siguiente 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}

La segunda figura tiene un hipervínculo correcto, pero la primera figura (que está en el segundo cuadro o "continuación" de un cuadro con la allowframebreaksopción) no tiene un hipervínculo correcto. ¿Cómo se puede arreglar esto?

Respuesta1

Básicamente deberías ponerlo \phantomtargetjusto después de \begin{figure}, en lugar de justo antes de esa línea.

Explicación

El problema en su MWE es que el salto de página se produce entre \phantomtargety \begin{figure}, por lo que el destino está en una página diferente a la de la figura misma.

En beamer, \begin{figure}realmente no hace mucho: simplemente establece el tipo de título, comienza un nuevo párrafo y un centerentorno, rodeado (lo que es más importante) por el uso de \nobreak.

Por lo tanto, poner el \phantomtargetjusto dentro \begin{figure}significa que es más probable que el objetivo permanezca junto con el contenido de la figura real, sin un salto de página en el medio. Ciertamente no hay ninguna desventaja en mover el \phantomtargetinterior hacia \begin{figure}adentro beamer. En general, si esto resolverá completamente el problema o no dependerá de qué más hay dentro del figureentorno y si se puede dividir entre páginas, etc.

MWE fija

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

información relacionada