Allowframebreaks를 사용하는 비머의 하이퍼링크

Allowframebreaks를 사용하는 비머의 하이퍼링크

이에답변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}

설명

\phantomtargetMWE의 문제는 및 사이에 페이지 나누기가 발생하여 \begin{figure}대상이 그림 자체와 다른 페이지에 있다는 것입니다.

에서는 beamer실제로 \begin{figure}많은 작업을 수행하지 않습니다. 캡션 유형을 설정하고 새 단락을 시작하며 를 center사용하여 (중요하게) 둘러싸인 환경을 시작합니다 \nobreak.

따라서 \phantomtargetjust를 안에 넣으면 \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}

관련 정보