이에답변Heiko Oberdiek은 나중에 비머 클래스에서 작동하는 하이퍼링크를 생성하는 데 사용할 수 있는 앵커를 만드는 방법을 보여주었습니다. 옵션이 제공되는 경우를 제외하면 이는 매우 잘 작동합니다 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}
설명
\phantomtarget
MWE의 문제는 및 사이에 페이지 나누기가 발생하여 \begin{figure}
대상이 그림 자체와 다른 페이지에 있다는 것입니다.
에서는 beamer
실제로 \begin{figure}
많은 작업을 수행하지 않습니다. 캡션 유형을 설정하고 새 단락을 시작하며 를 center
사용하여 (중요하게) 둘러싸인 환경을 시작합니다 \nobreak
.
따라서 \phantomtarget
just를 안에 넣으면 \begin{figure}
중간에 페이지 나누기 없이 대상이 실제 그림 내용과 함께 유지될 가능성이 더 높아집니다. \phantomtarget
내부를 \begin{figure}
in 으로 이동해도 불이익은 없습니다 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}