当我使用 Beamer 制作幻灯片时,我经常使用一个itemize
环境来\pause
一次展示一个要点。此外,通常我想在一张幻灯片上展示的所有要点都放不下,我需要在一张新幻灯片上再添加几个要点。
我想要的是一个itemize
类似的环境,它可以给我(当要点无法放在一张幻灯片上时)滚动的项目符号,类似于以下代码所做的那样:
\documentclass{beamer}
\begin{document}
\begin{frame}
\begin{itemize}
\only<-5>{\item one}
\only<2-6>{\item two}
\only<3-7>{\item three}
\only<4-8>{\item four}
\only<5-9>{\item five}
\only<6-10>{\item six}
\only<7-11>{\item seven}
\only<8-12>{\item eight}
\only<9->{\item nine}
\only<10->{\item ten}
\only<11->{\item eleven}
\only<12->{\item twelve}
\end{itemize}
\end{frame}
\end{document}
但是我不想跟踪我使用了多少张幻灯片。
在某个地方有这样的环境吗?
此外,如果能有某种动画滚动就更好了,但这可能要求太高了。
答案1
这是投影机内置的:
\documentclass{beamer}
\begin{document}
\begin{frame}
\begin{itemize}[<only@+-+(4)>]
\item one
\item two
\item three
\item four
\item five
\item six
\item seven
\item eight
\item nine
\item ten
\end{itemize}
\end{frame}
\end{document}
覆盖规范的+-+(4)
含义与 相同(n+1)-(n+5)
,其中n
是当前幻灯片计数。only@
操作将项目包装在 中\only<...>
。将规范作为itemize
环境的参数放入其中,使其成为每个项目的默认值。
如果您想在\foreach
循环中指定项目文本,您可以\only
在每个项目之前明确调用:
\documentclass{beamer}
\usepackage{pgffor}
\begin{document}
\begin{frame}
\begin{itemize}
\foreach \x in {a,b,...,z} {%
\only<+-+(4)>{\item \x}
}
\end{itemize}
\end{frame}
\end{document}
请参阅 beamer (v3.22) 手册的第 9.6.3 节(操作规范)和第 9.6.4 节(增量规范)。另请参阅这个答案我的。
答案2
这是一个版本,有一个相当奇怪的问题,因此也有一个限制。它定义了一个新的计数器iii
和一个新\myitem
命令。如果你itemize
在多张幻灯片上使用这样的环境,那么计数器必须重置。否则,例如,如果你在第一张幻灯片上有 10 个点,那么它将在下一张幻灯片上从第 11 张幻灯片开始。所以我用了电子工具箱重置\AtBeginEnvironment
计数器iii
。但是这意味着您只能使用一个这样的itemize
列表,frame
否则您将同时滚动浏览它们。我尝试通过iii
在每个开始时重置计数器来改进这一点frame
。但如果我没有该行,\AtBeginEnvironment{itemize}{\setcounter{iii}{0}}
我会得到一大堆错误(“也许有物品丢失”),因此目前仅限于每次滚动一次itemize
。frame
此外,由于没有前瞻机制,因此在显示最后 5 个项目时它不会停止,而只会在显示最后一个项目时停止。
代码
\documentclass{beamer}
\usetheme{Darmstadt}
\usepackage{tikz}
\usepackage{etoolbox}
\newcounter{iii}
\AtBeginEnvironment{itemize}{\setcounter{iii}{0}}
\newcommand{\myitem}[2][$\bullet$]
{ \stepcounter{iii}
\pgfmathtruncatemacro{\endslide}{\theiii+4}
\only<\theiii-\endslide>{\item[#1] #2}
}
\begin{document}
\begin{frame}[t]
\begin{itemize}
\myitem{a \theiii}
\myitem{b \theiii}
\myitem{c \theiii}
\myitem{d \theiii}
\myitem{e \theiii}
\myitem{f \theiii}
\myitem{g \theiii}
\myitem{h \theiii}
\myitem{i \theiii}
\myitem{j \theiii}
\myitem{k \theiii}
\myitem{l \theiii}
\myitem{m \theiii}
\myitem{n \theiii}
\myitem{o \theiii}
\myitem{p \theiii}
\myitem{q \theiii}
\myitem{r \theiii}
\myitem{s \theiii}
\myitem{t \theiii}
\myitem{u \theiii}
\myitem{v \theiii}
\myitem{w \theiii}
\myitem{x \theiii}
\myitem{y \theiii}
\myitem{z \theiii}
\end{itemize}
\end{frame}
\end{document}
结果
答案3
作为@Matthew Leingang 的优秀答案的扩展,请参考。下面是如何对开始和结束进行硬编码,以避免列表显示少于 4 个项目。
\documentclass{beamer}
\usepackage{pgffor}
\begin{document}
\begin{frame}
\begin{itemize}
\only<-1>{\item 1}
\only<-2>{\item 2}
\only<-3>{\item 3}
\only<+-+(3)>{\item 5}
\only<+-+(3)>{\item 6}
\only<+-+(3)>{\item 7}
\only<+-+(3)>{\item 8}
\only<+-+(3)>{\item 9}
\only<+-+(3)>{\item 10}
\only<+-+(3)>{\item 11}
\only<+-+(3)>{\item 12}
\only<+-+(3)>{\item 13}
\only<+->{\item 14}
\only<+->{\item 15}
\only<+->{\item 16}
\only<+->{\item 17}
\end{itemize}
\end{frame}
\end{document}