![TikZ 循环通过 foreach](https://linux22.com/image/444994/TikZ%20%E5%BE%AA%E7%8E%AF%E9%80%9A%E8%BF%87%20foreach.png)
亲爱的,
我面临以下问题。给定一组点,我必须绘制这些点的几何形状,但是,我必须以编程方式执行此操作。看看这个 MWE。
\documentclass{beamer}
\usepackage{tikz}
\begin{document}
\begin{frame}
\begin{figure}
\begin{tikzpicture}
% nodes
\coordinate (a) at (0, 0);
\coordinate (b) at (1, 0);
\coordinate (c) at (1, 1);
\coordinate (d) at (0, 1);
% block
\def\blockA{a, b, c, d}
% draw cycle
% - static way
\draw[fill=gray!50, draw = white] (a) -- (b) -- (c) -- (d) -- cycle;
% - desired way
\foreach \v [count=\i] in \blockA {
% ...
}
\end{tikzpicture}
\end{figure}
\end{frame}
\end{document}
我需要找到适当的方法来实现% - desired way
。我想知道是否有人曾经使用过这个。如果有人有任何问题或建议,请随时告诉我。
感谢你并致以真诚的问候。
答案1
我能想到的最简单的方法是
\draw [fill=red] (a)
\foreach \v [count=\i] in \blockA {
\ifnum\i>1
-- (\v)
\fi
}
-- cycle;
得出的结果是:
因为red
填充是在 的顶部完成的gray!50
。
代码:
\documentclass{beamer}
\usepackage{tikz}
\begin{document}
\begin{frame}
\begin{figure}
\begin{tikzpicture}
% nodes
\coordinate (a) at (0, 0);
\coordinate (b) at (1, 0);
\coordinate (c) at (1, 1);
\coordinate (d) at (0, 1);
% block
\def\blockA{a, b, c, d}
% draw cycle
% - static way
\draw[fill=gray!50, draw = white] (a) -- (b) -- (c) -- (d) -- cycle;
% - desired way
\draw [fill=red] (a)
\foreach \v [count=\i] in \blockA {
\ifnum\i>1
-- (\v)
\fi
}
-- cycle;
\end{tikzpicture}
\end{figure}
\end{frame}
\end{document}