我正在申请https://tex.stackexchange.com/a/518585/114719我scope
在多个投影仪幻灯片上开发内容时使用以下方法来对元素进行分组:
\documentclass{beamer}
\usepackage{tikz}
\begin{document}
\begin{frame}
\begin{overlayarea}{\linewidth}{0.7\paperheight}
\centering
\begin{tikzpicture}
\useasboundingbox(-5.5,-.5)rectangle(6,5.5);%
\coordinate (O) at (0, 0);
\coordinate (A) at (5, 5);
\coordinate (B) at (-5, 5);
\begin{scope}<1->
\draw (O) -- (B);
\end{scope}
\begin{scope}<2->
\draw (O) -- (A);
\end{scope}
\draw<3> (A) -- (B);
% \begin{scope}<3>
% \draw (A) -- (B);
% \end{scope}
\end{tikzpicture}
\end{overlayarea}
\end{frame}
\end{document}
如果我也对最后一张幻灯片中的元素进行分组,则替换
\draw<3> (A) -- (B);
和
\begin{scope}<3>
\draw (A) -- (B);
\end{scope}
幻灯片数组折叠到最后一张幻灯片。为什么会这样?如何使用 对最后一张幻灯片上的元素进行分组scope
?
答案1
如果您想要一个包装到的作用域版本\onslide
,您可以按如下方式进行操作:
\newenvironment<>{Scope}[1][]{\onslide#2\begingroup\begin{scope}[#1]}{%
\end{scope}\endgroup}
然后您可以使用\begin{Scope}<3> ... \end{Scope}
而不是\begin{scope}<3> ... \end{scope}
,正如您所说,这有点错误并且不起作用。
例子:
\documentclass{beamer}
\usepackage{tikz}
\newenvironment<>{Scope}[1][]{\onslide#2\begingroup\begin{scope}[#1]}{%
\end{scope}\endgroup}
\begin{document}
\begin{frame}
\begin{overlayarea}{\linewidth}{0.7\paperheight}
\centering
\begin{tikzpicture}
\useasboundingbox(-5.5,-.5)rectangle(6,5.5);% unnecessary
\coordinate (O) at (0, 0);
\coordinate (A) at (5, 5);
\coordinate (B) at (-5, 5);
\begin{Scope}<1->[blue]
\draw (O) -- (B);
\end{Scope}
\begin{Scope}<2->
\draw (O) -- (A);
\end{Scope}
\begin{Scope}<3>
\draw (A) -- (B);
\end{Scope}
\end{tikzpicture}
\end{overlayarea}
\end{frame}
\end{document}
蓝线只是为了显示如何添加范围的选项。
我个人仍然认为overlay-beamer-styles
,正如这个答案从长远来看,Skillmon 的建议会有很大帮助,至少我在这类应用中经常使用它。
答案2
这是一个使用 的方法\uncover
,其用法为(例如)\uncover<1->{..}
,括号内的所有内容{..}
都显示在幻灯片 2、幻灯片 1 及以后。以下是代码:
\documentclass{beamer}
\usepackage{tikz}
\begin{document} \begin{frame} \begin{overlayarea}{\linewidth}{0.7\paperheight}
\centering
\begin{tikzpicture}
\useasboundingbox(-5.5,-.5)rectangle(6,5.5);
\coordinate (O) at (0, 0);
\coordinate (A) at (5, 5);
\coordinate (B) at (-5, 5);
\uncover<1->{\begin{scope}\draw (O) -- (B);\end{scope}}
\uncover<2->{\begin{scope}\draw (O) -- (A);\end{scope}}
\uncover<3>{\draw (A) -- (B);}
\end{tikzpicture}
\end{overlayarea} \end{frame} \end{document}
\uncover
如果您希望在幻灯片 2 之后显示范围(例如),但稍后显示范围的某些部分,则可以嵌套该命令。在您的示例中,如果您将以 开头的三行替换\uncover
为以下行,则上述代码将产生相同的结果。我添加了缩进以显示嵌套。
\uncover<1->{
\begin{scope}
\draw (O) -- (B);
\uncover<2->{
\begin{scope}
\draw (O) -- (A);
\uncover<3>{
\draw (A) -- (B);
}
\end{scope}}
\end{scope}}