我正在用 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
如下: