动机:使用 Beamer 进行授课时,我会展示示例解决方案的所有细节,但在讲义中,我想隐藏这些细节。学生在授课期间填写缺失的文本,这似乎可以鼓励学生出勤。同事们通过使用两个单独的 latex 文件来做到这一点 - 但出于显而易见的原因,我宁愿避免这样做。
我曾尝试(相当成功)使用 Bruno Le Floch 建议的代码 如何用相同大小的空块替换大块文本?
注意:用白色替换字体颜色不是一个选项:它仍然可以在学生的 pdf 阅读器上阅读。
然而,我发现了 4 到 5 个错误(我猜这些可能是 Bruno 预见到的):
- 在逐项列表中,如果您将
\item \hideit{some text}
其隐藏,则会隐藏项目符号和文本(不是一个严重的问题!) - 它与 beamer 的
\pause
命令交互很差,即使启用了 handout 选项,也不\pause
应该有效果。命令前的文本\pause
没有被隐藏。(更严重) - 它只在
\vbox
es 上正常工作(我认为)。如果您隐藏句子中的一个单词(即在 中\hbox
),该\hideit
命令将引入段落结尾。(好的,在这种情况下可以使用 \phantom,但最好只有一个命令。) - 环境带来的奇怪的色彩效果
eqnarray*
:我已将投影仪数学文本定义为蓝色,如果您\hideit{\begin{eqnarray*} equations \end{eqnarray*}}
随后将后面的文本(未隐藏)也定义为蓝色!
(因为它在 beamer 中,所以我不关心分页符。)
我将 Bruno 的代码复制到了一个名为的文件中hidestuff.tex
,并将其输入到以下显示所有 4 个错误的最小示例中:
\documentclass[handout]{beamer}
\usepackage{xparse}
\usepackage{ifthen}
\newboolean{showitall}
%\setboolean{showitall}{true}
\ifthenelse{\boolean{showitall}}{\def\hideit{}}
{\input{hidestuff}}
\setbeamercolor{math text}{fg=blue}
%%%%
\begin{document}
%%%%%%%%%%%
\begin{frame}
\frametitle{Two bugs:}
{\color{red}Error with itemize}
\begin{itemize}
\item The line below should have a `bullet' (only the
text should be hidden)
\item \hideit{Some text to be hidden}
\item This is visible again.
\end{itemize}
\bigskip
{\color{red}Error with beamer's pause command:}
\textbf{Example 1:}\quad Differentiate \ $f(x)=x^2\sin x$
\bigskip
\underline{\it Solution:}
\hideit{Let $u=x^2$ and $v=\sin x$. (this line should be hidden)
\pause Then $u'=2x$ and $v'=\cos x$.
Using the product rule we get
$$f' = 2x\sin x + x^2\cos x.$$
}
\end{frame}
%%%%%%%%%%%
\begin{frame}
\frametitle{Two more bugs:}
{\color{red}Error with `inline' hiding:}
Here is some \hideit{hidden} text on one line.
\bigskip
{\color{red}Error with eqnarray* in beamer:}
\textbf{Example 1:}\quad Differentiate \ $f(x)= \frac{\sin x}{e^x}$.
\medskip
\underline{Solution:} Let $u=\sin x$ and $v=e^x$.
Then $u'=\cos x$ and $v'=e^x$. Therefore
\hideit{\begin{eqnarray*}
f'(x) &=& \frac{e^x\cos x-(\sin x)e^x}{(e^x)^2} \\
&=& \frac{e^x(\cos x-\sin x)}{(e^x)^2} \\
&=& \frac{\cos x-\sin x}{e^x}.
\end{eqnarray*}
}
And that's how you do it! (This should be black text)
\end{frame}
%%%%%%%%%%%
\end{document}
如果取消注释\setboolean{showitall}{true}
,它将输出所有文本,包括隐藏的和未隐藏的文本。
我不懂所使用的 expl3 语言,但如果有人能提供修补代码以避免这些错误的建议,我将不胜感激。谢谢。
答案1
\hideit
以下是使用 Beamer 扩展的定义的方法\newcommand
:
\documentclass[handout]{beamer}
\setbeamercolor{math text}{fg=blue}
\newcommand\hideit[1]{%
\only<0| handout:1>{\mbox{}}%
\invisible<0| handout:1>{#1}}
\begin{document}
\begin{frame}
\frametitle{Two bugs:}
{\color{red}Error with itemize}
\begin{itemize}
\item The line below should have a `bullet' (only the
text should be hidden)
\item \hideit{Some text to be hidden}
\item This is visible again.
\end{itemize}
\bigskip
{\color{red}Error with beamer's pause command:}
\textbf{Example 1:}\quad Differentiate \ $f(x)=x^2\sin x$
\bigskip
\underline{\itshape Solution:}
\hideit{Let $u=x^2$ and $v=\sin x$. (this line should be hidden)
\pause Then $u'=2x$ and $v'=\cos x$.
Using the product rule we get
$$f' = 2x\sin x + x^2\cos x.$$
}
\end{frame}
%%%%%%%%%%%
\begin{frame}
\frametitle{Two more bugs:}
{\color{red}Error with `inline' hiding:}
Here is some \hideit{hidden} text on one line.
\bigskip
{\color{red}Error with eqnarray* in beamer:}
\textbf{Example 1:}\quad Differentiate \ $f(x)= \frac{\sin x}{e^x}$.
\medskip
\underline{Solution:} Let $u=\sin x$ and $v=e^x$.
Then $u'=\cos x$ and $v'=e^x$. Therefore
\hideit{\begin{eqnarray*}
f'(x) &=& \frac{e^x\cos x-(\sin x)e^x}{(e^x)^2} \\
&=& \frac{e^x(\cos x-\sin x)}{(e^x)^2} \\
&=& \frac{\cos x-\sin x}{e^x}.
\end{eqnarray*}
}
And that's how you do it! (This should be black text)
\end{frame}
\end{document}
以下是演示:
答案2
我缩短了示例以显示与\mode<handout>{...}
和相关的功能\mode<beamer>{...}
,这基本上是等beamer
的自己的方式。\hideit
\documentclass[handout]{beamer}
\setbeamercolor{math text}{fg=blue}
%%%%
\begin{document}
%%%%%%%%%%%
\begin{frame}{Two bugs:}
%\frametitle{Two bugs:}
%{\color{red}Error with itemize}
\begin{itemize}
\item The line below should have a `bullet' (only the text should be hidden)
\mode<handout>{%
\item
}%
\mode<beamer>{%
\item Some text to be hidden
}%
\item This is visible again.
\end{itemize}
\end{frame}
%%%%%%%%%%%
\end{document}
投影机模式