帶有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

因此,將\phantomtargetjust 放在裡面\begin{figure}意味著目標更有可能與實際圖形內容保持在一起,而中間沒有分頁符號。將\phantomtarget內部移動到\begin{figure}內部當然沒有任何缺點beamer。一般來說,這是否能完全解決問題將取決於環境中的其他內容figure以及它是否可以跨頁面破壞等。

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

相關內容