TikZ 循环通过 foreach

TikZ 循环通过 foreach

亲爱的,

我面临以下问题。给定一组点,我必须绘制这些点的几何形状,但是,我必须以编程方式执行此操作。看看这个 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}

相关内容