
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 \pgfmathsetmacro
dentro 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 \pgfsetmacro
en medio de un camino, pero puedes simplemente poner los cálculos en la especificación de las coordenadas.
Esto produce un pentágono abierto:
minimal
Por 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 actions
siguiente 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}
Respuesta2
El problema proviene de una macro de cálculo dentro de la \draw
ruta. Por lo tanto, sugiero separar el cálculo del dibujo realizando primero los cálculos y almacenando los resultados en \coordinate
s etiquetados como a-1
, a-2
, ..., a-n
y 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}