我有一个 beamer 演示文稿,其中我做了类似以下 MWE 的事情:
\documentclass[handout]{beamer}
\include{tikz}% To get \foreach
\begin{document}
\begin{frame}
These I want to uncover one by one in presentation mode, but to appear
as a single slide in the handout
\begin{itemize}[<+->]
\item Item 1
\item Item 2
\item Item 3
\item Item 4
\end{itemize}
\end{frame}
\def\slideContent{
These I want to uncover one by one in presentation mode *and* do the same
in the handout. But that's not what I get!
\begin{itemize}[<+->]
\item Item 1
\item Item 2
\item Item 3
\item Item 4
\end{itemize}
}
\foreach \i in {1, ..., 4} {
\begin{frame}<\i>
\slideContent
\end{frame}
}
\end{document}
在讲义模式下,第一帧按预期生成,但最后 4 帧没有生成,因为讲义折叠全部效果叠加到一张幻灯片上。但这并不是我想要的。相反,我希望最后 4 张幻灯片能够与演示模式中的效果完全相同。我知道可以通过明确添加handout:0
以抑制讲义中的效果来实现这一点,但我有一些非常复杂的图形,无法对每个叠加层都进行这样的操作。请注意,这与排除某些幻灯片,因为那样的话我就会添加handout:0
到那些幻灯片中,但这里更多的是将讲义上看到的效果限制在一定数量的转换内。
那么,简而言之,如何让讲义模式与某些幻灯片的演示模式完全一样?
答案1
解决您的问题的一个方法是在编译时暂时从讲义模式切换到 Beamer 模式。这样,您可以选择幻灯片的子集,就像在演示模式下编译的那样。诀窍是更改\beamer@currentmode
Beamer 使用的内部变量(我不知道弄乱这个变量是否会破坏任何东西)。我为我的幻灯片创建了一个新环境来封装这个更改,所以我希望它可以有用。
你要做的是:
- 将定义复制到序言中
- 把你的框架放进去
\begin{handoutframeselect}[2,4-5]
,把规格改成你需要的 - 在框架前面放置一个选择宏:
\begin{frame}<\slideselection>
在演示模式下,宏\slideselection
将选择整套幻灯片,但在讲义模式下,宏将仅选择您指定的幻灯片。查看示例:
\documentclass[handout]{beamer}
\usepackage[utf8]{inputenc}
\usepackage{default}
\usepackage{tikz}
\makeatletter
\newif\ifOnBeamerModeTransition
\newcommand{\slideselection}{1-}%
\newenvironment{handoutframeselect}[1][1-]{%
\begingroup%
\mode<handout>{%
\gdef\beamer@currentmode{beamer}%
\OnBeamerModeTransitiontrue%
\renewcommand{\slideselection}{#1}}%
}{%
\ifOnBeamerModeTransition%
\OnBeamerModeTransitionfalse%
\gdef\beamer@currentmode{handout}%
\fi%
\endgroup%
}
\makeatother
\begin{document}
\begin{frame}{Normal frame}
No selection in this frame:
\begin{itemize}[<+->]
\item slide 1
\item slide 2
\item slide 3
\end{itemize}
\end{frame}
\begin{handoutframeselect}[2,4-5]
\begin{frame}<\slideselection>{Custom frame}
slideselection will be
\begin{itemize}
\item 1- in beamer mode
\item 2,4-5 in handout mode
\end{itemize}
This slides will be shown : \slideselection
\begin{itemize}[<+->]
\item custom slide 1
\item custom slide 2
\item custom slide 3
\item custom slide 4
\item custom slide 5
\end{itemize}
\end{frame}
\end{handoutframeselect}
\begin{frame}{Other normal frame}
In this frame, we return to handout mode, no selection either:
\begin{itemize}[<+->]
\item slide 1
\item slide 2
\item slide 3
\end{itemize}
\end{frame}
\end{document}
答案2
您可以通过在初始(投影仪)规范后添加来将叠加规范分别应用于beamer
和模式。在您的第一个列表中,您有,它将所有内容展平到一个讲义框架上,因为没有给出叠加规范来说明其他情况。如果您将其更改为,则行为也将应用于讲义模式。我希望这种用法在下面的代码中很清楚。handout
|handout:"overlay specification"
\begin{itemize}[<+->]
\begin{itemize}[<+-|handout:+->]
+-
\documentclass[handout]{beamer}
\begin{document}
\begin{frame}
These I want to uncover one by one in presentation mode, but to appear
as a single slide in the handout
\begin{itemize}[<+->]
\item Item 1
\item Item 2
\item Item 3
\item Item 4
\end{itemize}
\end{frame}
\begin{frame}
These I want to uncover one by one in presentation mode *and* do the same
in the handout. But that's not what I get!
\begin{itemize}[<+-|handout:+->]
\item Item 1
\item Item 2
\item Item 3
\item Item 4
\end{itemize}
\end{frame}
\end{document}
答案3
好吧,我终于得到了我想要的东西,但是我必须完全绕过handout
模式的使用。
我所做的是pdftk
获取beamer
模式 PDF,然后将其切碎以生成handout
模式 PDF,如下所示:
pdftk presentation.pdf cat 1 6 10-20 60-70 76 81 [...] output handout.pdf
这不是最好的解决方案,因为您必须手动选择要保留的幻灯片,但由于该命令嵌入到 Makefile 中,并且我很少添加或删除幻灯片,因此每当我修复幻灯片中的某些错误时,它足以自动执行制作讲义的任务。