我用 定义了 21 个点\path.a,b,c,d,...,u,
,
我想这样画:
\draw (a)--(b);
\newframe
\draw (a)--(b)--(c);
\newframe
\draw (a)--(b)--(c)--(d);
\newframe
\draw (a)--(b)--(c)--(d)--(e);
\newframe
\draw (a)--(b)--(c)--(d)--(e)--(f);
...
\newframe
\draw (a)--(b)--(c)--(d)--(e)--(f)....(u);
我认为这个问题有没有什么好的方法使用 tikz 循环
答案1
像这样吗?
\documentclass{beamer}
\usepackage{tikz}
\begin{document}
\begin{frame}
\begin{tikzpicture}
% this is just to define the nodes
\foreach [count=\i] \j in {a,b,...,u}
\node [fill,inner sep=1pt,circle,outer sep=0pt] (\j) at (\i/2,0) {};
% this draws the lines, using an overlay specification for \draw
\foreach [count=\i,remember=\j as \k (initially a)] \j in {b,c,...,u}
\draw<\i-> (\k) -- (\j);
\end{tikzpicture}
\end{frame}
\end{document}
如果您使用的是animate
,那么这可能会奏效。它至少编译时没有错误,并且根据日志判断创建了 20 帧。但我没有想要显示动画的 PDF 查看器。
\documentclass{beamer}
\usepackage{tikz,animate}
\newcounter{upperbound}
\begin{document}
\begin{frame}
\frametitle{ABC}
\begin{animateinline}[%
controls,
begin={\begin{tikzpicture}
\foreach [count=\i] \j in {a,...,u}
\node [fill,inner sep=1pt,circle,outer sep=0pt] (\j) at (\i/2,0) {};},
end={\end{tikzpicture}}
]{5}
\multiframe{20}{iCount=2+1}{%
\setcounter{upperbound}{\iCount}
\foreach [remember=\j as \k (initially a)] \j in {b,...,\alph{upperbound}} {
\draw (\k) -- (\j);
}
}
\end{animateinline}
\end{frame}
\end{document}
答案2
如果你可以重命名这些点,例如(p1)
... (p21)
,那么
\foreach \j in {1,...,20}
{
\draw
\foreach \i in {1,...,\j}
{
(p\i) --
}
-- (p\j);
}
应该可以解决问题。