\pgfmathifthenelse를 사용하여 노드 배치

\pgfmathifthenelse를 사용하여 노드 배치

\pgfmathifthenelse명령을 사용하여 그래프에 노드를 배치하려고 하는데 tikz다음 오류가 계속 발생합니다.

"불완전\iffalse"

내 코드는 다음과 같습니다.

    \begin{tikzpicture}

    \def \n {4}
    \def \hradius {2cm}
    \def \vradius {1.2cm}
    \def \nradius {0cm}
    \def \lengths {3,4,6}
    \def \degree {3}
    \node (u) at (0,{2*\vradius}) {$\bullet$};
    \node (v) at (0,{-2*\vradius}) {$\bullet$};
    \node at (0,{2.2*\vradius}) {$u$};
    \node at (0,{-2.2*\vradius}) {$v$};
    \draw[>=latex] (v.center) -- (u.center) node [midway,left]{{$1$}};
    \foreach [count=\i, evaluate=\i as \k] \s in \lengths {
        \pgfmathparse{\s-1}
        \edef \l {\pgfmathresult}
        \pgfmathparse{\k-2}
        \def \xtmp {\pgfmathresult}
        \pgfmathparse{\xtmp+1}
        \edef \xfactor {\pgfmathresult}
        \pgfmathparse{\pgfmathifthenelse{\xtmp=0}{\xfactor {\xtmp}}\pgfmathresult
        \edef \xfinal {\pgfmathresult}
        \foreach \i in {1,...,\l}{
            \pgfmathparse{1/\s}
            \def \inverse {\pgfmathresult}
            \node (\s\i) at ({(\k-2)*\hradius},{((4*\vradius)*\inverse*\i)-2*\vradius}) {\k};
        }
    }

    \end{tikzpicture}

문제가 어디에 있는지 아는 사람이 있나요?

답변1

몇 가지 문제:

  1. 줄에 괄호가 누락되었습니다 pgfmathifthenelse.
  2. 를 사용하는 대신 인라인으로 변수를 설정하도록 모든 명령을 다시 작성할 수 있습니다 \pgfmathresult. \pgfmathparse그렇게 하지만 당신은 사용할 수 있습니다\pgfmathsetmacro<VARIABLE>{<CODE>}

따라서 \pgfmathifthenelse다음과 같이 재작성을 수정할 수 있습니다.

\pgfmathsetmacro\xfinal{(\xtmp==0?(\xfactor):\xtmp)}

어느 것이

\pgfmathsetmacro\xfinal{(<TEST>?(<TRUE>):<FALSE>)}

산출

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

암호

\documentclass[margin=10pt]{standalone}
\usepackage{tikz}

\begin{document}
\begin{tikzpicture}
\def\n{4}
\def\hradius{2cm}
\def\vradius{1.2cm}
\def\nradius{0cm}
\def\lengths{3,4,6}
\def\degree{3}

\node (u) at (0,{2*\vradius}) {$\bullet$};
\node (v) at (0,{-2*\vradius}) {$\bullet$};
\node at (0,{2.2*\vradius}) {$u$};
\node at (0,{-2.2*\vradius}) {$v$};
\draw[>=latex] (v.center) -- (u.center) node [midway,left]{{$1$}};
\foreach [count=\i, evaluate=\i as \k] \s in \lengths {%
    \pgfmathsetmacro\l{\s-1}
    \pgfmathsetmacro\xtmp{\k-2}
    \pgfmathsetmacro\xfactor{\xtmp+1}
    \pgfmathsetmacro\xfinal{(\xtmp==0?(\xfactor):\xtmp)}
    \foreach \i in {1,...,\l}{%
        \pgfmathsetmacro\inverse{1/\s}
        \node (\s\i) at ({(\k-2)*\hradius},{((4*\vradius)*\inverse*\i)-2*\vradius}) {\k};
    }
}
\end{tikzpicture}
\end{document}

관련 정보