我正在尝试将一个使用多个部分组合在一起的投影仪文档放在一起,其中帧编号在每个部分重新开始,并且我可以将文档开头和每个部分开头的某些帧保留为未计数。
我的主文档如下所示:
\documentclass{beamer}
\mode<presentation>
{
\usetheme{default}
\usecolortheme{default}
\usefonttheme{default}
\setbeamertemplate{navigation symbols}{}
\setbeamertemplate{caption}[numbered]
\setbeamertemplate{footline}[frame number]
}
\AtBeginSection{\setcounter{framenumber}{0}}
\usepackage{hyperref}
\title[MATH]{Daily Notes}
\author{Me}
\institute{My College}
\date{\today}
\begin{document}
{
\setbeamertemplate{footline}{}
\begin{frame}[noframenumbering]
\titlepage
\end{frame}
}
{
\setbeamertemplate{footline}{}
\begin{frame}[noframenumbering]{Table of Contents}
\setcounter{tocdepth}{1}
\label{ToC}
\tableofcontents
\end{frame}
}
\input{Day_1.tex}
\input{Day_2.tex}
\end{document}
我使用 hyperref 在目录中创建链接。两个输入文件除了框架数量外,其余部分都差不多,这似乎是问题所在。如果Day_1.tex
有 4 个框架,如下所示:
\section{The First}
\subsection{Housekeeping}
{
\setbeamertemplate{footline}{}
\begin{frame}[noframenumbering]{Announcements}
Hello world!
\end{frame}
}
\subsection{Content}
\begin{frame}
First slide
\end{frame}
\begin{frame}
Second slide
\end{frame}
\begin{frame}
Third slide
\end{frame}
\begin{frame}
Fourth slide
\end{frame}
并且Day_2.tex
除了只有 3 帧之外其他都相同,那么 Day_1 的编号为 1/3、2/3、3/3、4/3。如果 Day_1 的帧数少于 Day_2(例如 Day_1 为 2 帧,Day_2 为 3 帧),那么 Day_1 的编号为 1/3、2/3。
如何才能获得帧编号中每个部分的正确帧数?
答案1
您的方法的问题在于,它\totalframenumber
保存在文档末尾,因此在您的情况下,它是最后一节的长度。但是您可以计算每个部分的长度。
\documentclass{beamer}
\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
\usepackage{tikz}
\usetikzlibrary{calc}
\def\inserttotalsectionframenumber{%
\pgfmathparse{(\insertsectionendframe-\insertsectionstartframe+1)}%
\pgfmathprintnumber[fixed,precision=2]{\pgfmathresult}%
}
\def\insertsectionframenumber{%
\pgfmathparse{(\insertframenumber-\insertsectionstartframe+1)}%
\pgfmathprintnumber[fixed,precision=2]{\pgfmathresult}%
}
\setbeamertemplate{footline}{\insertsectionframenumber/\inserttotalsectionframenumber}
\title[MATH]{Daily Notes}
\author{Me}
\institute{My College}
\date{\today}
\begin{document}
{
\setbeamertemplate{footline}{}
\begin{frame}[noframenumbering]
\titlepage
\end{frame}
}
{
\setbeamertemplate{footline}{}
\begin{frame}[noframenumbering]{Table of Contents}
\setcounter{tocdepth}{1}
\label{ToC}
\tableofcontents
\end{frame}
}
\section{The First}
\subsection{Housekeeping}
{
\setbeamertemplate{footline}{}
\begin{frame}[noframenumbering]{Announcements}
Hello world!
\end{frame}
}
\subsection{Content}
\begin{frame}
First slide
\end{frame}
\begin{frame}
Second slide
\end{frame}
\begin{frame}
Third slide
\end{frame}
\begin{frame}
Fourth slide
\end{frame}
\section{The Second}
\subsection{Housekeeping}
{
\setbeamertemplate{footline}{}
\begin{frame}[noframenumbering]{Announcements}
Hello world!
\end{frame}
}
\subsection{Content}
\begin{frame}
First slide
\end{frame}
\begin{frame}
Second slide
\end{frame}
\begin{frame}
Third slide
\end{frame}
\end{document}