В этомотвечатьХайко Обердиек показал мне, как создавать якоря, которые можно было бы использовать позже для генерации рабочих гиперссылок в классе beamer. Это работает очень хорошо, за исключением случая, когда allowframebreaks
указана опция. Чтобы увидеть это, рассмотрим следующий 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}
Вторая фигура правильно гиперсвязана, но первая фигура (которая находится во втором или "продолжающем" фрейме фрейма с опцией allowframebreaks
) некорректно гиперсвязана. Как это можно исправить?
решение1
По сути, вы должны поставить \phantomtarget
его сразу после \begin{figure}
, а не перед этой строкой.
Объяснение
Проблема в вашем MWE заключается в том, что разрыв страницы происходит между \phantomtarget
и \begin{figure}
, поэтому цель находится на другой странице, нежели сам рисунок.
В beamer
, \begin{figure}
на самом деле не делает ничего особенного: он просто устанавливает тип заголовка, начинает новый абзац и center
окружение, окруженное (что важно) использованием \nobreak
.
Таким образом, размещение \phantomtarget
just внутри \begin{figure}
означает, что более вероятно, что цель останется вместе с фактическим содержимым рисунка, без разрыва страницы между ними. Нет никаких недостатков в перемещении внутри \phantomtarget
in \begin{figure}
. beamer
В целом, решит ли это проблему полностью или нет, будет зависеть от того, что еще находится внутри среды figure
и можно ли ее разбить на страницы и т. д.
Фиксированная МВЭ
\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}