EDITAR

EDITAR

Estou tentando desesperadamente fazer isso funcionar

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

Procurei por toda a internet tentando obter dicas de problemas de outras pessoas que pudessem me ajudar a fazer isso funcionar, mas ainda recebo esse erro

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

Que ponto estou perdendo? Não tenho experiência anterior com TikZ.

ATUALIZAR: depois de fazer vários testes, percebi que meu problema está de alguma forma relacionado aos dois \pgfmathsetmacrodentro do loop. Alguma dica sobre como fazer isso funcionar?

Responder1

Você queria algo assim?

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

Não acho que você possa usar coisas como \pgfsetmacrono meio de um caminho, mas pode simplesmente colocar os cálculos na especificação das coordenadas.

Isso produz um pentágono aberto:

pentágono aberto

minimalA propósito, não use como exemplo.

EDITAR

Observe que você também pode usar um arquivo pic. Não sei exatamente o que você quer colocar na especificação do escopo, mas você pode passar algumas coisas usando pic actionso seguinte:

\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 aberto com preenchimento sofisticado

Responder2

O problema vem de uma macro de cálculo dentro do \drawcaminho. Então, sugiro separar o cálculo do desenho, primeiro realizando os cálculos e armazenando os resultados em \coordinates rotulados a-1, a-2, ..., a-n, e depois desenhando o caminho com o auxílio dessas coordenadas. Aqui está como você pode fazer isso:

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

insira a descrição da imagem aqui

informação relacionada