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
页但存储的是帧号而不是页码。