BEARBEITEN

BEARBEITEN

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 \pgfmathsetmacroinnerhalb 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 „ \pgfsetmacroin 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:

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 actionswie 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}

offenes Fünfeck mit ausgefallener Füllung

Antwort2

Das Problem entsteht durch ein Berechnungsmakro innerhalb des \drawPfades. Ich schlage daher vor, die Berechnung vom Zeichnen zu trennen, indem man zuerst die Berechnungen durchführt und die Ergebnisse in \coordinates mit der Bezeichnung a-1, a-2, ..., speichert a-nund 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} 

Bildbeschreibung hier eingeben

verwandte Informationen