
Ich versuche verzweifelt, das zum Laufen zu bringen
\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}
Ich habe das ganze Internet durchforstet, um Tipps aus den Problemen anderer Leute zu bekommen, die mir helfen könnten, dies zum Laufen zu bringen, aber ich bekomme immer noch diesen Fehler
Package tikz Error: Giving up on this path. Did you forget a semicolon?.
Welchen Punkt übersehe ich? Ich habe keine Vorkenntnisse mit TikZ.
AKTUALISIEREN:
nach mehreren Versuchen ist mir gerade klar geworden, dass mein Problem irgendwie mit den beiden \pgfmathsetmacro
innerhalb der Schleife zusammenhängt. Irgendwelche Tipps, wie man das zum Laufen bekommt?
Antwort1
Wollten Sie so etwas?
\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}
Ich glaube nicht, dass man so etwas wie „ \pgfsetmacro
in der Mitte eines Pfades“ verwenden kann, aber man kann die Berechnungen einfach in die Angabe der Koordinaten einfügen.
Es entsteht ein offenes Fünfeck:
Verwenden Sie es minimal
übrigens nicht als Beispiel.
BEARBEITEN
Beachten Sie, dass Sie auch ein verwenden könnten pic
. Ich weiß nicht genau, was Sie in die Bereichsspezifikation aufnehmen möchten, aber Sie können einige Dinge pic actions
wie folgt übergeben:
\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}
Antwort2
Das Problem entsteht durch ein Berechnungsmakro innerhalb des \draw
Pfades. Ich schlage daher vor, die Berechnung vom Zeichnen zu trennen, indem man zuerst die Berechnungen durchführt und die Ergebnisse in \coordinate
s mit der Bezeichnung a-1
, a-2
, ..., speichert a-n
und dann den Pfad mit Hilfe dieser Koordinaten zeichnet. So können Sie das tun:
\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}