买者自负...

买者自负...

目前,beamer 类有两种模式:演示和讲义。我想为 beamer 类创建第三种模式,即具有演示、讲义和一种新模式 - 练习讲义模式。我希望练习讲义模式的功能与讲义模式相同,只是它不会包含讲义模式中的所有元素。

我现在拥有的一个例子:

\documentclass
%[handout]
{beamer}
\begin{document}
\begin{frame}
\[
1+1=\uncover<handout:1|2->{\alert<handout:0|2>{2}}
\]
\end{frame}
\end{document}

现在,演示模式逐步显示 1+1 的计算。讲义模式在一张幻灯片中显示计算。现在,我需要第三种模式,其中幻灯片没有答案。我想象的是这样的:

1+1=\uncover<handout:1|exerciseHandout:0|2->{\alert<handout:0|2>{2}}

现在,当我在“exerciseHandout”模式下编译时,我希望获得与讲义模式相同的内容,但没有答案2。我想要拥有幻灯片的所有三个版本(用于向学生展示的演示文稿,供参考的讲义和用于分发给学生以“填空”风格练习的exerciseHandout)。

你会如何做呢?

答案1

请注意,这款产品测试得非常差。几乎没有测试过。今天,MWE 在这台机器上对我有用。就是这样。

买者自负...


这将创建一个新类hackedbeamer.cls,它本质上是 的包装器beamer.cls。无法准确模仿该类的功能,因为它用于\DeclareOptionBeamer{}{}定义传递给该类的模式选项。我不能在这里使用它,因为我需要在加载和定义该类之前定义该选项\DeclareOptionBeamer{}{}。所以我使用常规方法\DeclareOption{}{},并希望最坏的情况不会太糟。

这不会尝试针对处理模式不同的主题进行调整。这包括默认的外部主题。

无论如何,它的价值如下:

\begin{filecontents}{hackedbeamer.cls}
\NeedsTeXFormat{LaTeX2e}% LaTeX 2.09 can't be used (nor non-LaTeX)
[1994/12/01]% LaTeX date must December 1994 or later
\ProvidesClass{hackedbeamer}
\newif\ifhacked@beamer@exhandout\hacked@beamer@exhandoutfalse
\DeclareOption{exhandout}{\hacked@beamer@exhandouttrue}
\DeclareOption*{\PassOptionsToClass{\CurrentOption}{beamer}}
\ProcessOptions*
\LoadClass{beamer}
\ifhacked@beamer@exhandout
  \AtEndOfClass{%
    \gdef\beamer@currentmode{exhandout}%
    \def\animate<#1>{\transduration<#1| handout:0| exhandout:0| trans:0>{0}}%
  }
\fi
\endinput
\end{filecontents}
\documentclass
[exhandout]
{hackedbeamer}
\begin{document}
\begin{frame}
  \[
    1+1=\uncover<2-| handout:1| exhandout:0>{\alert<2| handout:0>{2}}
  \]
\end{frame}
\end{document}

如上所述,代码生成一张幻灯片:

新模式

切换到讲义会产生一张与上面的幻灯片不同的幻灯片:

标准讲义

切换到默认模式会产生两个方面:

默认

编辑

我认为上述方法更干净,但如果你不想使用像这样的寄生类hackedbeamer.cls,你可以按如下方式避免它:

\documentclass
[handout]
{beamer}
% \makeatletter
%     \gdef\beamer@currentmode{exhandout}%
%     \def\animate<#1>{\transduration<#1| handout:0| exhandout:0| trans:0>{0}}%
% \makeatother
\begin{document}
\begin{frame}
  \[
    1+1=\uncover<2-| handout:1| exhandout:0>{\alert<2| handout:0>{2}}
  \]
\end{frame}
\end{document}

当您想要启用exhandout模式时,请取消注释注释行。当您想要时handout,请注释这些行并指定类选项。当您想要默认模式时,请注释这些行并注释类选项。

这与寄生类所做的相同。它只是在你的序言中这样做。

这两种方法看起来都有点神秘,但这种方法感觉像是巧妙的花招。请注意,尽管exhandout模式从未定义,但上面的代码仍然有效,即使覆盖规范使用了它。我假设 Beamer 的解析器必须丢弃与当前活动模式无关的任何模式规范。

相关内容