我可以在一个代码中收集所有代码吗?

我可以在一个代码中收集所有代码吗?

我想使用 foreach 为许多多边形编写一个代码。如何使用 n 个变量并写入 n 个值来用相同的代码绘制每个多边形?我正在以与下面相同的方式重复几个步骤。但我想为每个多边形编写一个代码,通常使用 foreach 循环,但我想学习不同的循环。我正在研究一个细节,tikz。

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{shapes.geometric}
\usepackage{caption}

\tikzset{
    buffer/.style={
        draw,
        regular polygon,
        regular polygon sides=4,
        minimum size=20em
    },
}

\begin{document}
\begin{figure}
    \centering
    \begin{tikzpicture}
        \node[buffer, fill=pink]{};
    \end{tikzpicture}
    \caption{One square}
\end{figure}
\begin{figure}
    \centering
    \begin{tikzpicture}
        \node[buffer, fill=pink] (A) {};
        \foreach \mycorner in {1,2,3,4}
            {\node[buffer, fill=green,scale=.33, transform shape] (A\mycorner) at (A.corner \mycorner) {};} 
    \end{tikzpicture}       
    \caption{One square with squares}
\end{figure}
\end{document}

答案1

使用 可以很容易地根据边数对该构造进行参数化\newcommand。这是我的尝试。

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{shapes.geometric}
\usepackage{caption}

\tikzset{
    buffer/.style={
        draw,
        regular polygon,
        regular polygon sides=#1,
        minimum size=20em
    }
}

\newcommand{\myPoly}[1]{\node[buffer=#1, fill=pink] (A) {};
    \foreach \mycorner in {1,2,...,#1}
    {\node[buffer=#1, fill=green,scale=.33, transform shape] (A\mycorner) at (A.corner \mycorner) {};} }

\begin{document}
\begin{figure}
    \centering
    \begin{tikzpicture}
        \node[buffer=4, fill=pink]{};
    \end{tikzpicture}
    \caption{One square}
\end{figure}
\begin{figure}
    \centering
    \begin{tikzpicture}
\myPoly{5} 
    \end{tikzpicture}       
    \caption{One pentagon with pentagons}
\end{figure}
\end{document}

一个五边形加上五边形

相关内容