編集

編集

私は必死にこれを成功させようとしています

\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何度か試してみた後、私の問題はループ内の 2 つに何らかの関連があることに気づきました。これを機能させるためのヒントはありますか?

答え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付いた sに保存し、次にこれらの座標を使用してパスを描画することで、計算と描画を分離することをお勧めします。これを行う方法は次のとおりです。a-1a-2a-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} 

ここに画像の説明を入力してください

関連情報