我怎样才能获得 beamer 类中某个部分的第一帧和最后一帧?

我怎样才能获得 beamer 类中某个部分的第一帧和最后一帧?

Beamer 类区分页面和框架。要获取某个部分的第一页,beamer提供命令\insertpartstartpage,而要获取最后一页,提供命令\insertpartendpage

是否有机会获得第一个和最后一个框架当前部分?

答案1

似乎没有内置的方法来访问部分第一张和最后一张幻灯片的帧编号,但您可以定义必要的宏和自己:\insertpartstartframe\insertpartendframe

\documentclass{beamer}

% How can I get the first and the last frame of an part in beamer class?
% (http://tex.stackexchange.com/q/73142/3323)
\usepackage{etoolbox}
\makeatletter
\newcount\beamer@partstartframe
\beamer@partstartframe=1
\apptocmd{\beamer@part}{\addtocontents{nav}{\protect\headcommand{%
        \protect\beamer@partframes{\the\beamer@partstartframe}{\the\c@framenumber}}}}{}{}
\apptocmd{\beamer@part}{\beamer@partstartframe=\c@framenumber\advance\beamer@partstartframe by1\relax}{}{}
\AtEndDocument{\immediate\write\@auxout{\string\@writefile{nav}%
        {\noexpand\headcommand{\noexpand\beamer@partframes{\the\beamer@partstartframe}{\the\c@framenumber}}}}}{}{}
\def\beamer@startframeofpart{1}
\def\beamer@endframeofpart{1}
\def\beamer@partframes#1#2{%
  \ifnum\c@framenumber<#1%
  \else%
    \ifnum\c@framenumber>#2%
    \else%
      \gdef\beamer@startframeofpart{#1}%
      \gdef\beamer@endframeofpart{#2}%
    \fi%
  \fi%
}
\newcommand\insertpartstartframe{\beamer@startframeofpart}
\newcommand\insertpartendframe{\beamer@endframeofpart}
\makeatother

\setbeamertemplate{footline}{\insertpart: \insertpartstartframe--\insertpartendframe}

\begin{document}
\part{Part 1}
\frame{1\pause 2\pause 3}
\frame{1\pause 2}
\frame{1}
\part{Part 2}
\frame{1\pause 2}
\frame{1\pause 2\pause 3}
\part{Part 3}
\frame{1}
\frame{1\pause 2\pause 3\pause 4}
\end{document}

\usepackage{etoolbox}和之间的代码与用于访问开始和结束的\makeatother代码基本相同beamer但存储的是帧号而不是页码。

相关内容