
Я отчаянно пытаюсь сделать это.
\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}
Я перерыл весь интернет, пытаясь найти советы по решению проблем других людей, которые могли бы мне помочь, но я все еще получаю эту ошибку
Package tikz Error: Giving up on this path. Did you forget a semicolon?.
Что я упускаю? У меня нет опыта работы с TikZ.
ОБНОВЛЯТЬ:
после нескольких попыток я просто понял, что моя проблема как-то связана с двумя \pgfmathsetmacro
внутри цикла. Есть какие-нибудь советы, как заставить это работать?
решение1
Вы хотели что-то подобное?
\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}
Я не думаю, что можно использовать что-то вроде этого \pgfsetmacro
в середине пути, но можно просто включить вычисления в спецификацию координат.
Это создает открытый пятиугольник:
minimal
Кстати, не используйте в качестве примеров.
РЕДАКТИРОВАТЬ
Обратите внимание, что вы также можете использовать pic
. Я не знаю точно, что вы хотите поместить в спецификацию области действия, но вы можете передать некоторые вещи, используя pic actions
следующее:
\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}
решение2
Проблема возникает из-за макроса расчета внутри \draw
пути. Поэтому я предлагаю отделить расчет от рисования, сначала выполнив вычисления и сохранив результаты в \coordinate
s с метками a-1
, a-2
, ..., a-n
, а затем нарисовать путь с помощью этих координат. Вот как это можно сделать:
\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}