编辑

编辑

我正拼命努力

\documentclass{minimal}
\usepackage{tikz}

\newcommand\polygon[3][]{
    \pgfmathsetmacro{\angle}{360/#2}
    \pgfmathsetmacro{\startangle}{0}
    \begin{scope}[#1]
        \draw \foreach\i in {1,...,#2}{ 
            \pgfmathsetmacro{\x}{cos(\startangle + \angle*\i)*#3}
            \pgfmathsetmacro{\y}{sin(\startangle + \angle*\i)*#3}
            \ifnum\i=1 \else--\fi ({\x},{\y})
        };
    \end{scope}
}

\begin{document}
\begin{tikzpicture}
\polygon{5}{1}
\end{tikzpicture}
\end{document}

我搜索了整个互联网,试图从其他人的问题中获取可以帮助我完成这项工作的提示,但我仍然收到此错误

Package tikz Error: Giving up on this path. Did you forget a semicolon?.

我遗漏了什么要点?我之前没有使用过 TikZ。

更新:\pgfmathsetmacro经过多次尝试后,我才意识到我的问题与循环内部的 两个问题有关。有什么建议可以解决这个问题吗?

答案1

你想要这样的东西吗?

\documentclass[tikz,border=5pt]{standalone}
\newcommand\polygon[3][]{
  \pgfmathsetmacro{\angle}{360/#2}
  \pgfmathsetmacro{\startangle}{0}
  \begin{scope}[#1]
    \draw \foreach\i in {1,...,#2}{
      \ifnum\i=1 \else--\fi ({cos(\startangle + \angle*\i)*#3},{sin(\startangle + \angle*\i)*#3})
    };
  \end{scope}
}

\begin{document}
  \begin{tikzpicture}
    \polygon{5}{1}
  \end{tikzpicture}
\end{document}

我认为您不能使用诸如\pgfsetmacro路径中间之类的东西,但您可以将计算放入坐标的规范中。

生成一个开五边形:

开放五边形

minimal顺便说一句,不要用它作为例子。

编辑

请注意,您也可以使用pic。我不知道您到底想在范围规范中放入什么,但您可以pic actions按如下方式传递一些内容:

\documentclass[tikz,border=5pt]{standalone}
\tikzset{
  pics/open polygon/.style n args=2{
    code={
      \pgfmathsetmacro{\angle}{360/#1}
      \pgfmathsetmacro{\startangle}{0}
        \draw [pic actions] \foreach\i in {1,...,#1}{
          \ifnum\i=1 \else--\fi ({cos(\startangle + \angle*\i)*#2},{sin(\startangle + \angle*\i)*#2})
        };
    }
  },
}

\begin{document}
  \begin{tikzpicture}
    \pic [draw=cyan!50!blue, outer color=cyan!50!blue, inner color=cyan!15] {open polygon={5}{1}};
  \end{tikzpicture}
\end{document}

带花式填充的开口五边形

答案2

问题出在\draw路径内部的计算宏上。因此,我建议将计算与绘图分开,首先执行计算并将结果存储在\coordinate标记为a-1a-2、 ...的 中a-n,然后借助这些坐标绘制路径。您可以这样做:

\documentclass{standalone}
\usepackage{tikz}

\newcommand\polygon[3][]{
    \pgfmathsetmacro{\angle}{360/#2}
    \pgfmathsetmacro{\startangle}{0}
    \begin{scope}[#1]
            \foreach\i in {1,...,#2}{ 
            \pgfmathsetmacro{\x}{cos(\startangle + \angle*\i)*#3}
            \pgfmathsetmacro{\y}{sin(\startangle + \angle*\i)*#3}
            \coordinate (a-\i) at ({\x},{\y});
        }
    \draw\foreach \i in{1,...,#2}{\ifnum\i=1 \else --\fi (a-\i)};
    \end{scope}
}
\begin{document}
\begin{tikzpicture}
\polygon{5}{1}
\end{tikzpicture}
\end{document} 

在此处输入图片描述

相关内容