如何使用 Beamer 的 \includeonlylecture{} 修改框架标题内容?

如何使用 Beamer 的 \includeonlylecture{} 修改框架标题内容?

我正在用 Beamer 准备课程讲座。时不时地,我会提示学生回答一张幻灯片上的问题。我使用后续幻灯片来回答问题。我将答案作为句子的一部分包含在框架标题中。我在讲座之前向学生提供幻灯片,因此有些学生只是从后续幻灯片中阅读答案,而不是思考可能的答案。

我知道我可以用\includeonlylecture{}一套幻灯片为学生准备,另一套幻灯片为我自己准备。我可以制作两份幻灯片:一份学生版,其中有一行空白用于写答案;一份教师版,其中有答案。这就要求我为每张幻灯片制作两份副本,如果我提示几个项目或将来编辑幻灯片时,这会变得很麻烦。

我想要一个宏,它可以确定 I am\includeonlylecture{}模式是否处于活动状态。如果是,则绘制一条空白行。该行的长度为答案的长度。如果\includeonlylecture{}处于非活动状态(注释掉),则打印答案。

在下面的 MWE 中,我编写了一个名为的宏\HiddenWord,它会在答案的位置绘制空白行。我试图将其转换为 if-then-else 结构,但无济于事。Beamer 已定义变量来beamerbasesection.sty确定它是否处于我尝试使用的仅讲课模式。例如,我尝试了以下宏

\includeonlylecture{student}

\newlength{\myLength}
\makeatletter
\newcommand{\HiddenWord}[1]{%
    \ifbeamer@inlecture{
        \settowidth{\myLength}{#1}
        \rule{\myLength}{0.4pt}
    }%
}%
\makeatother

\includeonlylecture{student}但是,无论是否注释掉,这总是会打印出空白行。我不知道如何将\else语句合并到这个宏中,甚至不知道是否\ifbeamer@inlecture是要检查的正确变量。我感觉我可能没有错得太离谱,但我不知道如何获取 Beamer 现有的if宏之一并将其用于我的宏,或者至少确定 Beamer 的宏是 T 还是 F,并将该值分配给我自己的变量。

最后,当我将幻灯片转换为讲义时,这必须起作用。这也包括在序言中,但在制作幻灯片时被注释掉了。

梅威瑟:

\documentclass[t]{beamer}

%%%% HANDOUTS For online Uncomment the following four lines for handout
%\documentclass[t,handout]{beamer}  %Use this for handouts.
%\usepackage{handoutWithNotes}
%\pgfpagesuselayout{3 on 1 with notes}[letterpaper,border shrink=5mm]
%   \setbeamercolor{background canvas}{bg=black!5}

\includeonlylecture{student}

\newlength{\myLength}

\makeatletter
\newcommand{\HiddenWord}[1]{%
    \ifbeamer@inlecture{
      \settowidth{\myLength}{#1}
      \rule{\myLength}{0.4pt}}}
\makeatother


\begin{document}

\lecture{student}{student}

\begin{frame}[c]{Name two terms about salinity tolerance in fishes.}
    1. \rule{4cm}{0.4pt}
    \vspace{1cm}

    2. \rule{4cm}{0.4pt}
\end{frame}

\begin{frame}[c]{\HiddenWord{Stenohaline} fishes tolerate a narrow salinity range.}
\end{frame}

\begin{frame}[c]{Fishes that are \HiddenWord{euryhaline} tolerate a wide salinity range.}
\end{frame}

\end{document}

答案1

这实现了你所要求的,但换一种方式:\includeonlylecture我不使用机制,而是使用 beamer 的覆盖命令来不是在模式下打印某些内容handout

%\documentclass[t]{beamer}
\documentclass[t,handout]{beamer}


\begin{document}


\begin{frame}[c]{Name two terms about salinity tolerance in fishes.}
    1. \rule{4cm}{0.4pt}
    \vspace{1cm}

    2. \rule{4cm}{0.4pt}
\end{frame}

\begin{frame}[c]{\onslide<handout:0>{Stenohaline} fishes tolerate a narrow salinity range.}
\end{frame}

\begin{frame}[c]{Fishes that are \onslide<handout:0>{euryhaline} tolerate a wide salinity range.}
\end{frame}

\end{document}

这是handout模式(选项handout 传递给文档类的选项):

在此处输入图片描述

与此相比beamer模式相比(没有选项传递给文档类):

在此处输入图片描述

要绘制一条水平线而不是一些空白区域,我们可以应用相同的技巧,但现在使用 beamer 的\alt<handout>{true}{false}命令在模式下绘制一条线handout,在所有其他情况下使用原始单词。我采用了你原来的界面\HiddenWord{...}在这里采用了您的原始界面,使其更舒适一些:

%\documentclass[t]{beamer}
\documentclass[t,handout]{beamer}

\usepackage{calc} % for the \widthof command

\newcommand\HiddenWord[1]{%
  \alt<handout>{\rule{\widthof{#1}}{\fboxrule}}{#1}%
}
\begin{document}


\begin{frame}[c]{Name two terms about salinity tolerance in fishes.}
    1. \rule{4cm}{0.4pt}
    \vspace{1cm}

    2. \rule{4cm}{0.4pt}
\end{frame}

\begin{frame}[c]{\HiddenWord{Stenohaline} fishes tolerate a narrow salinity range.}
\end{frame}

\begin{frame}[c]{Fishes that are \HiddenWord{euryhaline} tolerate a wide salinity range.}
\end{frame}

\end{document}

模式下的结果handout如下:

在此处输入图片描述

相关内容