![Evolua o conteúdo em slides beamer: usando `scope` para agrupar elementos](https://rvso.com/image/405358/Evolua%20o%20conte%C3%BAdo%20em%20slides%20beamer%3A%20usando%20%60scope%60%20para%20agrupar%20elementos.png)
estou aplicandohttps://tex.stackexchange.com/a/518585/114719onde uso scope
para 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}
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 \uncover
comando 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 \uncover
linhas 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}}