Beamer:如何让每一帧都出现在 PDF 目录中?

Beamer:如何让每一帧都出现在 PDF 目录中?

我想做一个投影仪演示,其中每一个框架出现在 PDF 目录中(即带有书签)。我的具体演示文稿只有部分,因此所有框架都可以作为 PDF 上的“子部分”出现。请注意,我不想为每个框架创建一个子部分。

一种方法是编写一个命令,通过调用 hyperref 的相应书签命令来修补 frametitle。还有更好的方法吗?

答案1

这里有一个解决方案,它修补了一个辅助宏\frametitle,添加了代码,该代码将添加书签和目录行,就好像它是一个小节一样(如果不需要,您可以将其注释掉):

\documentclass{beamer}

\AtBeginSection{\frame{\tableofcontents[currentsection]}}

\usepackage{bookmark}
\usepackage{etoolbox}
\makeatletter
% save the current definition of \beamer@@frametitle
\let\nobookmarkbeamer@@frametitle\beamer@@frametitle
% then patch it to do the bookmarks and/or TOC entries
\apptocmd{\beamer@@frametitle}{%
  % keep this to add the frame title to the TOC at the "subsection level"
  \addtocontents{toc}{\protect\beamer@subsectionintoc{\the\c@section}{0}{#1}{\the\c@page}{\the\c@part}%
        {\the\beamer@tocsectionnumber}}%
  % keep this line to add a bookmark that shows up in the PDF TOC at the subsection level
  \bookmark[page=\the\c@page,level=3]{#1}%
  }%
  {\message{** patching of \string\beamer@@frametitle succeeded **}}%
  {\errmessage{** patching of \string\beamer@@frametitle failed **}}%

\pretocmd{\beamer@checknoslide}{%
  % ensure the bookmark is not created if the slide is filtered out
  \let\beamer@@frametitle\nobookmarkbeamer@@frametitle
  }%
  {\message{** patching of \string\beamer@checknoslide succeeded **}}%
  {\errmessage{** patching of \string\beamer@checknoslide failed **}}%

\makeatother



\begin{document}



\section{First Section}

\begin{frame}{First frame}Text\end{frame}

\begin{frame}{Second frame}Text\end{frame}



\section{Second Section}

\begin{frame}{Third frame}Text\end{frame}

\begin{frame}\frametitle{Fourth frame}Text\end{frame}

\begin{frame}<handout>\frametitle{Fifth frame}Text\end{frame}


\end{document}

我不得不深入研究beamerbasesection.sty才能弄清楚。但它似乎有效。

输出

编辑。(由 cyberSingularity 提供):现在,当幻灯片未显示时,可以通过修补来防止不需要的书签\beamer@checknoslide,并提供额外的框架进行测试。

注意:如果存在包含多张幻灯片的框架(例如由于\pauses),您可能还会对以下内容感兴趣这个后续问题

相关内容