使用节的投影机中的页码计数器不正确

使用节的投影机中的页码计数器不正确

我正在尝试将一个使用多个部分组合在一起的投影仪文档放在一起,其中帧编号在每个部分重新开始,并且我可以将文档开头和每个部分开头的某些帧保留为未计数。

我的主文档如下所示:

\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

以下答案基于https://tex.stackexchange.com/a/279364/36296

您的方法的问题在于,它\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}

相关内容