EDITAR

EDITAR

Estoy tratando desesperadamente de hacer que esto funcione.

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

Busqué en Internet tratando de obtener consejos sobre los problemas de otras personas que pudieran ayudarme a hacer que esto funcione, pero sigo recibiendo este error.

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

¿Qué punto me falta? No tengo experiencia previa con TikZ.

ACTUALIZAR: Después de hacer varias pruebas, me di cuenta de que mi problema está relacionado de alguna manera con los dos \pgfmathsetmacrodentro del bucle. ¿Algún consejo sobre cómo hacer que esto funcione?

Respuesta1

¿Querías algo como esto?

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

No creo que puedas usar cosas como \pgfsetmacroen medio de un camino, pero puedes simplemente poner los cálculos en la especificación de las coordenadas.

Esto produce un pentágono abierto:

pentágono abierto

minimalPor cierto, no lo use como ejemplo.

EDITAR

Tenga en cuenta que también puede utilizar un archivo pic. No sé exactamente qué desea incluir en la especificación de alcance, pero puede pasar algunas cosas de la pic actionssiguiente manera:

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

pentágono abierto con relleno elegante

Respuesta2

El problema proviene de una macro de cálculo dentro de la \drawruta. Por lo tanto, sugiero separar el cálculo del dibujo realizando primero los cálculos y almacenando los resultados en \coordinates etiquetados como a-1, a-2, ..., a-ny luego dibujando la ruta con la ayuda de estas coordenadas. Así es como puedes hacer esto:

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

ingrese la descripción de la imagen aquí

información relacionada