getnodelist를 사용하는 방법은 무엇입니까?

getnodelist를 사용하는 방법은 무엇입니까?

pst-node39페이지의 님의 문서 에서 발췌 :

에 대한 이 매우 짧은 설명은 \getnodelist사용 방법을 이해하는 데 도움이 되지 않습니다.

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

\getnodelistnon-empty 와 함께 사용하는 방법에 대한 예를 들어 주시겠습니까 <next command>?

답변1

출처를 보면 pst-node.tex별차이가 없군요.

\getnodelist{<name>}{\command}(…)(…)…

그리고

\getnodelist{<name>}{}(…)(…)… \command

후자의 예에서도 \PST@root(= <name>) 및 \pst@args(최신 <name>노드 번호 보유)를 문제 없이 사용할 수 있습니다.

첫 번째 버전은 보다 체계적인 구조를 강제합니다(예: \command명시적으로 다음 노드를 사용함). 다른 곳에서 사용하면 예상치 못한 결과가 발생할 수 있습니다.

다음 예를 고려하십시오.

\documentclass[pstricks]{standalone}
\usepackage{pstricks,multido,pst-node}
\makeatletter
\def\myCircles#1{%
    \multido{\iCount=0+1}{\the\numexpr\pst@args+1\relax}{
        \pscircle*(\PST@root\iCount){#1}
    }
}
\makeatother
\begin{document}
    \begin{pspicture}(7,7)
    \getnodelist{P}{\myCircles{.25}}(2,2)(2,5)(5,2)(5,5)
    \end{pspicture}
    \begin{pspicture}(7,7)
    \getnodelist{P}{}(2,2)(2,5)(5,2)(5,5)\myCircles{.25}
    \end{pspicture}
\end{document}

다른 점이 없다. 그들은 정확히 동일한 결과를 산출합니다.

그러나 예를 들어 자체 매크로를 제공하려는 경우 \pstDottedNodes이 매크로의 작성자는 \pstDottedNodes앞에 를 추가할 기회가 없습니다 \myCircles. ( <name>사용자로부터 내부 s를 숨기고 \pstDottedNodes매개변수(반경)가 하나만 있는 경우 더욱 명확해집니다.)

\documentclass[pstricks]{standalone}
\usepackage{pstricks,multido,pst-node}
\makeatletter
\def\pstDottedNodes#1#2{\getnodelist{#1}{\myCircles{#2}}}
\def\myCircles#1{%
    \multido{\iCount=0+1}{\the\numexpr\pst@args+1\relax}{
        \pscircle*(\PST@root\iCount){#1}
    }
}
\makeatother
\begin{document}
\begin{pspicture}(7,7)
\pstDottedNodes{P}{.25}(2,2)(2,5)(5,2)(5,5)
\end{pspicture}
\end{document}

답변2

다음은 일련의 점에서 (닫힌) 다각형을 그리는 방법을 보여주는 질문에 대한 답변을 보여주는 간단한 예입니다.

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

\documentclass{article}
\usepackage{multido,pst-node}% http://ctan.org/pkg/{multido,pst-node}
\makeatletter
\newcounter{mycount}
\newcommand{\drawpolygon}{%
  \setcounter{mycount}{\csname\PST@root nodecount\endcsname}% Extract number of nodes
    \stepcounter{mycount}\pnode(\PST@root 0){\PST@root\themycount}% Add extra node that matches origin node (for closed polygon)
  \multido{\iA=0+1,\iB=1+1}{\value{mycount}}{%
      \psline(\PST@root\iA)(\PST@root\iB)\psdot(\PST@root\iA)}% Draw line + dot
}
\makeatother
\begin{document}
\begin{pspicture}
    \SpecialCoor
    \getnodelist{P}{\drawpolygon}(1,1)(2,1)(2,2)(1,2)
    \degrees[5]
    \rput{0}(4,2){\getnodelist{Q}{\drawpolygon}(1;0)(1;1)(1;2)(1;3)(1;4)}
\end{pspicture}
\end{document}

아이디어는 \getnodelist전화를 사용하는 것입니다\drawpolygon ~ 후에여러 노드를 지정합니다. 각 노드 \getnodelist에는 에 저장된 루트 이름( 에 대한 첫 번째 인수)이 있습니다 \PST@root.

답변3

일부 수정된 Werner 솔루션:

\documentclass{article}
\usepackage{multido,pst-node}

\newcommand\drawpolygon[1]{{%
  \psset{showpoints}
  \multido{\iA=0+1}{\csname#1nodecount\endcsname}{%
    \psline(#1\iA)(#1\the\numexpr\iA+1)}
  \psline(#1 0)(#1\csname#1nodecount\endcsname)}}

\begin{document}
\begin{pspicture}
    \getnodelist{P}{\drawpolygon{P}}(1,1)(2,1)(2,2)(1,2)
    \degrees[5]
    \rput{0}(4,2){\getnodelist{Q}{\drawpolygon{Q}}(1;0)(1;1)(1;2)(1;3)(1;4)}
\end{pspicture}
\end{document}

답변4

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

\documentclass[border=12pt]{standalone}
\usepackage{multido,pst-node}
\makeatletter

\newcommand\psPolygon[2][my@pst@node@name]{\getnodelist{#1}{\my@Polygon{#2}}}

\def\my@Polygon#1{%
    \pscustom[#1]
    {
        \psnline{-}(0,\csname\PST@root nodecount\endcsname){\PST@root}
        \closepath
    }
    \multido{\i=0+1}{\the\numexpr\pst@args+1\relax}{%
        \pscircle*(\PST@root\i){2pt}
    }\ignorespaces
}

\makeatother

\begin{document}
\begin{pspicture}(5,5)
\psPolygon{fillstyle=solid,fillcolor=orange,origin={2.5,2.5}}(0,0)(5,0)(5,5)(0,5)
\end{pspicture}

\qquad

\begin{pspicture}(-2,-2)(2,2)
\degrees[5]
\psPolygon[Karl]{fillstyle=solid,fillcolor=orange}(1;0)(1;1)(1;2)(1;3)(1;4)
\psline(Karl0)(Karl2)
\end{pspicture}

\end{document}

관련 정보