在幻灯片中演进内容:使用“scope”对元素进行分组

在幻灯片中演进内容:使用“scope”对元素进行分组

我正在申请https://tex.stackexchange.com/a/518585/114719scope在多个投影仪幻灯片上开发内容时使用以下方法来对元素进行分组:

\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}}

相关内容