带有 allowframebreaks 的 beamer 中的超链接

带有 allowframebreaks 的 beamer 中的超链接

在此回答Heiko Oberdiek 向我展示了如何创建锚点,这些锚点稍后可用于在 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内部\begin{figure}意味着目标更有可能与实际图形内容保持在一起,中间没有分页符。将 移到 内部当然没有任何缺点。\phantomtarget一般来说,这是否能完全解决问题将取决于环境中还有什么以及它是否可以跨页面中断等。\begin{figure}beamerfigure

固定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}

相关内容