![Развивайте контент с помощью слайдов проектора](https://rvso.com/image/405341/%D0%A0%D0%B0%D0%B7%D0%B2%D0%B8%D0%B2%D0%B0%D0%B9%D1%82%D0%B5%20%D0%BA%D0%BE%D0%BD%D1%82%D0%B5%D0%BD%D1%82%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.png)
В этом примере:
\documentclass{beamer}
\usepackage{tikz}
\begin{document}
\begin{frame}
\begin{overlayarea}{\linewidth}{0.7\paperheight}
\centering
\begin{tikzpicture}
\coordinate (O) at (0, 0);
\coordinate (A) at (5, 5);
\coordinate (B) at (-5, 5);
\only<1>
{
\draw (O) -- (B);
}
\only<2>
{
\draw (O) -- (B);
\draw (O) -- (A);
}
\only<3>
{
\draw (O) -- (B);
\draw (O) -- (A);
\draw (A) -- (B);
}
\end{tikzpicture}
\end{overlayarea}
\end{frame}
\end{document}
Я выстраиваю на слайдах все более сложную картину:
Однако:
в каждом слайде я перерисовываю все, что было нарисовано на предыдущем слайде. Как перенести контент с предыдущего слайда?
Линия на слайде 1 смещена относительно той же линии на последующих слайдах. Как обеспечить одну и ту же систему отсчета на каждом слайде.
решение1
Решением может быть использование \onslide
:
\documentclass{beamer}
\usepackage{tikz}
\begin{document}
\begin{frame}
\centering
\begin{tikzpicture}
\coordinate (O) at (0, 0);
\coordinate (A) at (5, 5);
\coordinate (B) at (-5, 5);
\onslide<1->{
\draw (O) -- (B);
}
\onslide<2->{
\draw (O) -- (A);
}
\onslide<3->{
\draw (A) -- (B);
}
\end{tikzpicture}
\end{frame}
\end{document}
решение2
overlay-beamer-styles
создано для этого. В отличие от использования \only
, это обычно позволяет избежать прыжков без необходимости добавления жестко закодированного ограничивающего прямоугольника, координаты которого вам нужно угадать и который вам нужно будет скорректировать, если вы решите добавить пути позже.
\documentclass{beamer}
\usepackage{tikz}
\usetikzlibrary{overlay-beamer-styles}
\begin{document}
\begin{frame}
\begin{overlayarea}{\linewidth}{0.7\paperheight}
\centering
\begin{tikzpicture}
\coordinate (O) at (0, 0);
\coordinate (A) at (5, 5);
\coordinate (B) at (-5, 5);
\draw (O) -- (B);
\draw[visible on=<2->] (O) -- (A);
\draw[visible on=<3->] (A) -- (B);
\end{tikzpicture}
\end{overlayarea}
\end{frame}
\end{document}
Если вы хотите, чтобы соединения линий выглядели хорошо, возможно, лучше подойдет что-то вроде этого. (В данном случае вам нужно увеличить масштаб, чтобы увидеть разницу, но в целом, на мой взгляд, так лучше.)
\documentclass{beamer}
\usepackage{tikz}
\usetikzlibrary{overlay-beamer-styles}
\begin{document}
\begin{frame}
\begin{overlayarea}{\linewidth}{0.7\paperheight}
\centering
\begin{tikzpicture}
\coordinate (O) at (0, 0);
\coordinate (A) at (5, 5);
\coordinate (B) at (-5, 5);
\draw[visible on=<1>] (O) -- (B);
\draw[visible on=<2>] (B) -- (O) -- (A);
\draw[visible on=<3->] (B) -- (O) -- (A) -- cycle;
\end{tikzpicture}
\end{overlayarea}
\end{frame}
\end{document}
Если у вас много путей, с которыми вы хотите поиграть, вы можете определить стиль, accumulate path
, который поможет вам накапливать эти пути. Вы просто рисуете эти пути, и всякий раз, когда вы хотите, чтобы этот и все последующие пути появлялись только в следующем кадре, вам нужно добавить vis+
. Вам не нужны никакие области видимости или что-то еще, просто vis+
.
\documentclass{beamer}
\usepackage{tikz}
\newcounter{Viesturs-step}
\resetcounteronoverlays{Viesturs-step}%
\usetikzlibrary{overlay-beamer-styles}
\tikzset{accumulate path/.style={/utils/exec=\setcounter{Viesturs-step}{#1},
every path/.append style={visible on=<\number\value{Viesturs-step}->}},
accumulate path/.default=1,
vis+/.style={/utils/exec=\stepcounter{Viesturs-step},
visible on=<\number\value{Viesturs-step}->}}
\begin{document}
\begin{frame}[t]
\centering
\begin{tikzpicture}[accumulate path]
\coordinate (O) at (0, 0);
\coordinate (A) at (5, 5);
\coordinate (B) at (-5, 5);
\draw (O) -- (B);
\draw[red] (O) to[bend left] (B);
\draw[vis+] (O) -- (A);
\draw[red] (O) to[bend right] (A);
\draw[vis+] (A) -- (B);
\draw[red] (A) to[bend right] (B);
\end{tikzpicture}
\end{frame}
\end{document}
решение3
\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);
\draw<1-> (O) -- (B);
\draw<2-> (O) -- (A);
\draw<3> (A) -- (B);
\end{tikzpicture}
\end{overlayarea}
\end{frame}
\end{document}