
私は必死にこれを成功させようとしています
\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-1
a-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}