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 allowframebreaks
se 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 allowframebreaks
opción) no tiene un hipervínculo correcto. ¿Cómo se puede arreglar esto?
Respuesta1
Básicamente deberías ponerlo \phantomtarget
justo 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 \phantomtarget
y \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 center
entorno, rodeado (lo que es más importante) por el uso de \nobreak
.
Por lo tanto, poner el \phantomtarget
justo 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 \phantomtarget
interior hacia \begin{figure}
adentro beamer
. En general, si esto resolverá completamente el problema o no dependerá de qué más hay dentro del figure
entorno 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}