如何获取个人环境中投影仪的帧数?

如何获取个人环境中投影仪的帧数?

假设我有一个beamer演示文稿,其中包含一些连续的帧,其中包含“特殊内容”,这些帧位于specialcontent。我想介绍此特殊内容带有一个框架,可同时显示以下内容:

  • “特殊”帧的数量,
  • 最后一个“特殊框架”的框架号(不是页面号),

如下面的 MCE 所示(<total number of frames><number of last frame of the special content>)。

我怎样才能实现这个目标?

\documentclass{beamer}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{lmodern}

\setbeamertemplate{footline}[frame number]
\setbeamertemplate{navigation symbols}{}

\newenvironment{specialcontent}{%
  \begin{frame}
    \frametitle{Special content}
    The following special content:
    \begin{itemize}
    \item has <total number of frames> frames,
    \item ends frame \# <number of last frame of the special content>.
    \end{itemize}
  \end{frame}
}{%
}

\begin{document}
\begin{frame}
  \frametitle{Foo bar}
  Foo\pause{} bar.
\end{frame}

\begin{specialcontent}

  \begin{frame}
    \frametitle{Foo bar (special content)}
    Foo\pause{} bar.
  \end{frame}

  \begin{frame}
    \frametitle{Foo bar (special content)}
    Foo\pause{} bar.
  \end{frame}

\end{specialcontent}

\begin{frame}
  \frametitle{Foo bar}
  Foo\pause{} bar.
\end{frame}
\end{document}

答案1

使用totcount包:

\documentclass{beamer}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{lmodern}

\setbeamertemplate{footline}[frame number]
\setbeamertemplate{navigation symbols}{}


\usepackage{totcount}
\newcounter{endspecial}
\newcounter{startspecial}
\regtotcounter{endspecial}


\newenvironment{specialcontent}{%
  \begin{frame}
    \frametitle{Special content}
    The following special content:
    \begin{itemize}
    \setcounter{startspecial}{\totvalue{endspecial}}
    \addtocounter{startspecial}{1}
    \addtocounter{startspecial}{-\insertframenumber}
    \item has \thestartspecial  <total number of frames> frames,
    \item ends frame \total{endspecial} <number of last frame of the special content>.
    \end{itemize}
  \end{frame}
}{%
  \setcounter{endspecial}{\insertframenumber}
}

\begin{document}
\begin{frame}
  \frametitle{Foo bar}
  Foo\pause{} bar.
\end{frame}

\begin{specialcontent}

  \begin{frame}
    \frametitle{Foo bar (special content)}
    Foo\pause{} bar.
  \end{frame}

  \begin{frame}
    \frametitle{Foo bar (special content)}
    Foo\pause{} bar.
  \end{frame}

\end{specialcontent}

\begin{frame}
  \frametitle{Foo bar}
  Foo\pause{} bar.
\end{frame}
\end{document}

在此处输入图片描述

答案2

为了记录在案,我在这里提出了一个扩展的解决方案samcarter 的一个这也适用于需要使用多个环境的情况specialcontents(比如,这个环境不是我们的,而是由第三方包或类提供的——在我的实际用例中,它来自包versions)。

棘手的问题是,在动态定义许多“总计数器”时,只创建了最后一个。 感谢埃格雷格的诡计,下面的操作非常有效:

\documentclass{beamer}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{lmodern}
\usepackage{multido}
\usepackage{totcount}

\usetheme{PaloAlto}
\useoutertheme{infolines}

\setbeamertemplate{navigation symbols}{}

\newenvironment{specialcontent}{%
}{%
}

\AtBeginEnvironment{specialcontent}{%
  \stepcounter{specialcontent@cntr}%
  %
  \begingroup\edef\x{\endgroup
    \noexpand\newtotcounter{startspecial@\roman{specialcontent@cntr}}
    \noexpand\newtotcounter{endspecial@\roman{specialcontent@cntr}}%
  }\x
  %
  \begin{frame}
    \frametitle{Special content (begins)}
    %
    \setcounter{startspecial@\roman{specialcontent@cntr}}{\totvalue{endspecial@\roman{specialcontent@cntr}}}%
    \addtocounter{startspecial@\roman{specialcontent@cntr}}{-\insertframenumber}%
    %
    The following special content:
    \begin{itemize}
    \item \alert{has \total{startspecial@\roman{specialcontent@cntr}} frames},
    \item \alert{ends frame \total{endspecial@\roman{specialcontent@cntr}}}.
    \end{itemize}
  \end{frame}
}

\AtEndEnvironment{specialcontent}{%
  \setcounter{endspecial@\roman{specialcontent@cntr}}{\insertframenumber}%
}

\newcounter{specialcontent@cntr}%

\begin{document}

\multido{\i=1+1}{17}{%
  \begin{frame}
    \frametitle{Foo bar}
    Foo\pause{} bar.
  \end{frame}
  %
  \section{Special \i{}}
  %
  \begin{specialcontent}
    \multido{\I=1+1}{\i}{%
      \begin{frame}
        \frametitle{Foo bar (special content)}
        Foo\pause{} bar.
      \end{frame}
    }
  \end{specialcontent}
  %
  \begin{frame}
    \frametitle{Foo bar}
    Foo\pause{} bar.
  \end{frame}
}

\end{document}

在此处输入图片描述

相关内容