使用 beamer,我想定义一个不以模式显示的环境。我想要这样的环境,因为它为我的文档提供了更好的结构,并且与使用多次handout
之类的方法相比,将大量材料放入环境中更容易 。\only<handout:>{...}
我的第一个想法是尝试:
\newenvironment{Lecture}{\actionenv<handout:0>}{\endactionenv}
在handout
模式下,这完全符合我的要求。在beamer
模式下,这在大多数情况下都能很好地工作,但当环境包含应在“较早”幻灯片上显示的材料时,它无法达到我的要求Lecture
。例如,考虑:
\documentclass[]{beamer}
\usepackage[]{xparse}
\newenvironment{Lecture}{\actionenv<handout:0>}{\endactionenv}
\begin{document}
\begin{frame}{A frame}
First slide
\pause second slide
\begin{Lecture}
\only<1>{First slide..lecture}
Second slide..lecture
\pause Third slide..lecture
\end{Lecture}
\pause[3]Third slide
\end{frame}
\begin{frame}{Working frame}
First slide
\pause second slide
\onslide<1 | handout:0>{First slide..lecture}
\only<handout:0>{Second slide..lecture}
\pause[3]\only<handout:0>{Third slide..lecture}
\pause[3]Third slide
\end{frame}
\end{document}
得出的结果为:
请注意,文本“第一张幻灯片..讲座”从未出现 --- 即使在第二张幻灯片上,也应该显示我想要的内容。我尝试过使用以下变体:
\newenvironment{Lecture}{\onslide<handout:0>}{}
\newenvironment{Lecture}{\only<handout:0>}{}
\NewDocumentEnvironment{Lecture}{ d<> }{\IfNoValueTF{#1}{\onslide<1-| handout:0>}{\onslide<#1| handout:0>}}
我所尝试过的一切都没有给我我想要的东西。
有没有办法做到这一点?
答案1
问题不在于您的定义,而在于您对 的使用\pause
。注释掉Lecture
第一张幻灯片中的环境仍然不会显示\only<1>
文本,因为前一个\pause
命令阻止了文本的读取。相反,第一个\pause
可以用 或类似地替换\onslide<2->{...}
,后面是\pause
:
\documentclass[]{beamer}
\usepackage[]{xparse}
\newenvironment{Lecture}{\actionenv<handout:0>}{\endactionenv}
\begin{document}
\begin{frame}{A frame}
First slide
\onslide<2->{second slide}
\begin{Lecture}
\only<1>{First slide..lecture}
\pause Second slide..lecture
\pause Third slide..lecture
\end{Lecture}
\pause[3]Third slide
\end{frame}
\begin{frame}{Working frame}
First slide
\pause second slide
\onslide<1 | handout:0>{First slide..lecture}
\only<handout:0>{Second slide..lecture}
\pause[3]\only<handout:0>{Third slide..lecture}
\pause[3]Third slide
\end{frame}
\end{document}