Evolua o conteúdo em slides beamer: usando `scope` para agrupar elementos

Evolua o conteúdo em slides beamer: usando `scope` para agrupar elementos

estou aplicandohttps://tex.stackexchange.com/a/518585/114719onde uso scopepara agrupar elementos enquanto desenvolvo conteúdo em vários slides do projetor:

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

Caso eu também agrupe elementos no último slide, substituindo

      \draw<3> (A) -- (B);

com

      \begin{scope}<3>                                                                                                                                                                                   
         \draw (A) -- (B);                                                                                                                                                                                
      \end{scope}  

a matriz de slides é reduzida apenas ao último slide. Por que isso acontece e como posso agrupar elementos também no último slide usando scope?

Responder1

Se você deseja ter uma versão de um escopo agrupado em \onslide, você pode fazer isso da seguinte maneira:

\newenvironment<>{Scope}[1][]{\onslide#2\begingroup\begin{scope}[#1]}{%
\end{scope}\endgroup}

Então você pode usar \begin{Scope}<3> ... \end{Scope}em vez de \begin{scope}<3> ... \end{scope}, o que é um pouco errado e não funciona, como você diz.

Exemplo:

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

insira a descrição da imagem aqui

A linha azul serve apenas para mostrar como você pode adicionar as opções do escopo.

Pessoalmente, ainda penso que overlay-beamer-styles, tal como ilustrado noesta respostae sugerido por Skillmon, a longo prazo, ajudará bastante, pelo menos estou usando-o muito precisamente para essas aplicações.

Responder2

Aqui está um método usando \uncover, que é usado como (por exemplo) \uncover<1->{..}, e tudo dentro dos colchetes {..}é mostrado no slide 2, slide 1 e em diante. Aqui está o código:

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

O \uncovercomando pode ser aninhado, se você quiser mostrar um escopo após (por exemplo) o slide 2, mas algumas partes do escopo posteriormente. No seu exemplo, o código acima dará o mesmo resultado se você substituir as três linhas que começam pelas \uncoverlinhas a seguir. Eu adicionei recuo para mostrar o aninhamento.

\uncover<1->{
  \begin{scope}
  \draw (O) -- (B);
  \uncover<2->{
    \begin{scope}
    \draw (O) -- (A);
    \uncover<3>{
      \draw (A) -- (B);
    }
  \end{scope}}
\end{scope}}

informação relacionada