
나는 필사적으로 이 일을 하려고 노력 중이야
\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
레이블 로 저장 한 다음 이러한 좌표를 사용하여 경로를 그리는 방식으로 계산과 그리기를 분리하는 것이 좋습니다. 이를 수행하는 방법은 다음과 같습니다.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}