![Развитие контента с помощью слайдов проектора: использование `scope` для группировки элементов](https://rvso.com/image/405358/%D0%A0%D0%B0%D0%B7%D0%B2%D0%B8%D1%82%D0%B8%D0%B5%20%D0%BA%D0%BE%D0%BD%D1%82%D0%B5%D0%BD%D1%82%D0%B0%20%D1%81%20%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E%20%D1%81%D0%BB%D0%B0%D0%B9%D0%B4%D0%BE%D0%B2%20%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%BE%D1%80%D0%B0%3A%20%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%20%60scope%60%20%D0%B4%D0%BB%D1%8F%20%D0%B3%D1%80%D1%83%D0%BF%D0%BF%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B8%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D0%BE%D0%B2.png)
Я подаю заявку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}}