この答え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}
2 番目の図は正しくハイパーリンクされていますが、最初の図 (オプションのあるフレームの 2 番目または「継続」フレームにあるallowframebreaks
) は正しくハイパーリンクされていません。これを修正するにはどうすればよいですか?
答え1
基本的には、の行の直前ではなく、\phantomtarget
の直後に置く必要があります。\begin{figure}
説明
MWE の問題は、と\phantomtarget
の間でページ区切りが発生しているため\begin{figure}
、ターゲットが図自体とは異なるページにあることです。
ではbeamer
、\begin{figure}
実際にはあまり多くのことが行われません。キャプションの種類を設定し、新しい段落とcenter
環境を開始し、(重要なことですが) の使用で囲むだけです\nobreak
。
したがって、 を\phantomtarget
のすぐ内側に配置する\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}