在這個回答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
just 放在裡面\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}