尝试在 Beamer 中隐藏文本块

尝试在 Beamer 中隐藏文本块

动机:使用 Beamer 进行授课时,我会展示示例解决方案的所有细节,但在讲义中,我想隐藏这些细节。学生在授课期间填写缺失的文本,这似乎可以鼓励学生出勤。同事们通过使用两个单独的 latex 文件来做到这一点 - 但出于显而易见的原因,我宁愿避免这样做。

我曾尝试(相当成功)使用 Bruno Le Floch 建议的代码 如何用相同大小的空块替换大块文本?

注意:用白色替换字体颜色不是一个选项:它仍然可以在学生的 pdf 阅读器上阅读。

然而,我发现了 4 到 5 个错误(我猜这些可能是 Bruno 预见到的):

  1. 在逐项列表中,如果您将\item \hideit{some text}其隐藏,则会隐藏项目符号和文本(不是一个严重的问题!)
  2. 它与 beamer 的\pause命令交互很差,即使启用了 handout 选项,也不\pause应该有效果。命令前的文本\pause没有被隐藏。(更严重)
  3. 它只在\vboxes 上正常工作(我认为)。如果您隐藏句子中的一个单词(即在 中\hbox),该\hideit命令将引入段落结尾。(好的,在这种情况下可以使用 \phantom,但最好只有一个命令。)
  4. 环境带来的奇怪的色彩效果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}

投影机模式

在此处输入图片描述

讲义模式 在此处输入图片描述

相关内容