getnodelist の使い方は?

getnodelist の使い方は?

pst-nodeのドキュメント 39 ページから引用:

この非常に短い説明では、\getnodelist私(おそらく他の人も)が使い方を理解するのに役立ちません。

ここに画像の説明を入力してください

\getnodelist空でない場合の使用例を教えていただけますか<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先頭に追加する機会はありません。(内部の をユーザーから隠したい場合や、に 1 つのパラメータ (半径) しかない\myCircles場合は、さらに明らかになります。 )<name>\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

いくつかの修正を加えた Werners のソリューション:

\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}

関連情報