편집하다

편집하다

나는 필사적으로 이 일을 하려고 노력 중이야

\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-1a-2a-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} 

여기에 이미지 설명을 입력하세요

관련 정보