计算每张幻灯片上的单词数?

计算每张幻灯片上的单词数?

有没有办法自动计算每张幻灯片上的字数,并将其显示在幻灯片上?我希望此功能仅在我创建幻灯片草稿版本时可用。理想情况下,我应该能够在创建幻灯片的最终版本以供分发时关闭此功能。

平均能量损失

\documentclass{beamer}

\begin{document}

\begin{frame}{First Slide}
This is my first slide.

% I want to generate the word count below automatically
nwords = 7
\end{frame}

\begin{frame}{Second Slide}
This is my second slide.
It has more words than the first slide.

% I want to generate the word count below automatically
nwords = 15
\end{frame}

\end{document}

我之所以问这个问题,是因为有些人建议幻灯片中不要有太多文字。例如,Presentation Magazine 的一篇文章,标题为 每张幻灯片上应该写多少个字? 给出了“每张幻灯片少于 40 个字”的经验法则。因此,知道每张幻灯片有多少个字是很有用的。

答案1

幸好,beamer框架像环境一样将其主体收集在标记列表中amsmath。因此,我们可以简单地检查存储内容的标记列表。但是,我们必须为此破解 beamer 框架。框架的所有参数(在本例中{First Slide})也计算在内。括号组算作一个标记,其他奇怪之处也适用,请参阅 的文档\seq_set_split

\documentclass{beamer}
\usepackage{xparse}

\ExplSyntaxOn

\cs_generate_variant:Nn \seq_set_split:Nnn { Nno }

\NewDocumentCommand \setwordcount { m m }
{
  % split the frame contents at spaces
  \seq_set_split:Nno \l_tmpa_seq { ~ } { \the#2 }
  % remove all mentions of the counter variable
  \seq_remove_all:Nn \l_tmpa_seq { #1 }
  % set counter
  \tl_gset:Nx #1 { \seq_count:N \l_tmpa_seq }
}

\ExplSyntaxOff

\makeatletter

\def\beamer@frameenv{%
  \def\beamer@process@envbody{\endgroup%
    \setwordcount\insertwordcount\beamer@envbody% Count number of space delimited tokens in the input
    \expandafter\expandafter\expandafter\beamer@framecommand\expandafter\beamer@frameoptions\expandafter{\the\beamer@envbody}}%
  \global\beamer@envbody{}\def\beamer@begin@stack{b}%
  \begingroup
  \let\frame\beamer@collect@@body
  \def\beamer@process@envbody{\frame}%
  \beamer@process@envbody%
}

\makeatother

\begin{document}

\begin{frame}{First Slide}
  This is my first slide.
  \insertwordcount
\end{frame}

\end{document}

在此处输入图片描述


用 ... 来计算单词可能更好l3regex,但也可能不行。谁知道呢?这是子群中的递归,不计算控制序列,但数学材料仍然很棘手。

这会产生类似的输出,但计数为 7。

\documentclass{beamer}
\usepackage{xparse}

\ExplSyntaxOn

\cs_generate_variant:Nn \regex_count:nnN { noN }

\NewDocumentCommand \setwordcount { m m }
{
  % regex match words
  \regex_count:noN { \w+ } { \the#2 } \l_tmpa_int
  % set counter
  \tl_gset:Nx #1 { \int_to_arabic:n \l_tmpa_int }
}

\ExplSyntaxOff

\makeatletter

\def\beamer@frameenv{%
  \def\beamer@process@envbody{\endgroup%
    \setwordcount\insertwordcount\beamer@envbody% Count number of space delimited tokens in the input
    \expandafter\expandafter\expandafter\beamer@framecommand\expandafter\beamer@frameoptions\expandafter{\the\beamer@envbody}}%
  \global\beamer@envbody{}\def\beamer@begin@stack{b}%
  \begingroup
  \let\frame\beamer@collect@@body
  \def\beamer@process@envbody{\frame}%
  \beamer@process@envbody%
}

\makeatother

\begin{document}

\begin{frame}{First Slide}
  This is my first slide.
  \insertwordcount
\end{frame}

\end{document}

相关内容