查阅了beamer手册,发现有\insertsectionstartpage和\insertsectionendpage,但我想要的是\insertsectionstartnumber和\insertsectionendnumber这两个命令,即返回section所在的帧的序号而不是页面的页码,目的是为了自定义写类似于\usebeamertemplate{miniframes}的效果。
请问大佬们,如何写这样的命令?
试试...
\documentclass{beamer}
\usetheme{moloch}
\usepackage{etoolbox}
\makeatletter
\newcount\beamer@sectionstartframe
\beamer@sectionstartframe=1
\apptocmd{\beamer@section}{\addtocontents{nav}{\protect\headcommand{%
\protect\beamer@sectionframes{\the\beamer@sectionstartframe}{\the\c@framenumber}}}}{}{}
\apptocmd{\beamer@section}{\beamer@sectionstartframe=\c@framenumber\advance\beamer@sectionstartframe by1\relax}{}{}
\AtEndDocument{\immediate\write\@auxout{\string\@writefile{nav}%
{\noexpand\headcommand{\noexpand\beamer@sectionframes{\the\beamer@sectionstartframe}{\the\c@framenumber}}}}}{}{}
\def\beamer@startframeofsection{1}
\def\beamer@endframeofsection{1}
\def\beamer@sectionframes#1#2{%
\ifnum\c@framenumber<#1%
\else%
\ifnum\c@framenumber>#2%
\else%
\gdef\beamer@startframeofsection{#1}%
\gdef\beamer@endframeofsection{#2}%
\fi%
\fi%
}
\newcommand\insertsectionstartframe{\beamer@startframeofsection}
\newcommand\insertsectionendframe{\beamer@endframeofsection}
\makeatother
\setbeamertemplate{headline}{
\Large\sffamily
\inteval{\insertframenumber - \insertsectionstartframe + 1}
/
\inteval{\insertsectionendframe - \insertsectionstartframe + 1}
}
\begin{document}
\begin{frame}sec=0,framenumber=1\end{frame}
\begin{frame}sec=0,framenumber=2\end{frame}
\begin{frame}sec=0,framenumber=3\end{frame}
\section{Sec1}
\begin{frame}sec=1,framenumber=1
\begin{itemize}
\item<1-> First item
\item<2> Second item
\item<3-> Third item
\end{itemize}
\end{frame}
\begin{frame}sec=1,framenumber=2\end{frame}
\begin{frame}sec=1,framenumber=3\end{frame}
\section{Sec2}
\begin{frame}sec=2,framenumber=1\end{frame}
\begin{frame}sec=2,framenumber=2\end{frame}
\section{Sec3}
\begin{frame}sec=3,framenumber=1\end{frame}
\begin{frame}sec=3,framenumber=2\end{frame}
\begin{frame}sec=3,framenumber=3\end{frame}
\begin{frame}sec=3,framenumber=4
\begin{itemize}
\item<1-> First item
\item<2-> Second item
\item<3> Third item
\item<4-> Third item
\end{itemize}
\end{frame}
\begin{frame}sec=3,framenumber=5\end{frame}
\end{document}