%7D%7BA%7D%20%E3%81%8C%E5%A5%87%E5%A6%99%E3%81%AA%20NA.x%20%E3%81%A8%20NA.y%20%E3%82%92%E7%94%9F%E6%88%90%E3%81%99%E3%82%8B%E3%81%AE%E3%81%AF%E3%81%AA%E3%81%9C%E3%81%A7%E3%81%97%E3%82%87%E3%81%86%E3%81%8B%3F.png)
\documentclass[preview,border=2cm]{standalone}
\usepackage{pst-tools}
\usepackage{pst-node}
\psset{saveNodeCoors}
\begin{document}
\section*{With pnode}
\begin{pspicture}(3,3)
\pnode(1,1){A}
\rput(0,3){\psPrintValue{N-A.x}}
\rput(0,0){\psPrintValue{N-A.y}}
\end{pspicture}
\section*{With nodexn}
\begin{pspicture}(3,3)
\nodexn{(1,1)}{A}
\rput(0,3){\psPrintValue{N-A.x}}
\rput(0,0){\psPrintValue{N-A.y}}
\end{pspicture}
\end{document}
編集
検査によって変数\nodexn
の存在が尊重されず、初期化されていないままになっていると強く信じています。saveNodeCoors
N-<node_name>.x
N-<node_name>.y
\documentclass[preview,border=1cm]{standalone}
\usepackage{pst-tools}
\usepackage{pst-node}
\psset{saveNodeCoors}
\begin{document}
\psLoop{5}{%
\begin{pspicture}(3,3)
\pnode(1,1){A}
\rput(0,2){\psPrintValue{N-A.x}}
\rput(0,1){\psPrintValue{N-A.y}}
%
\nodexn{(1,1)}{B}
\rput(2,2){\psPrintValue{N-B.x}}
\rput(2,1){\psPrintValue{N-B.y}}
\end{pspicture}
\qquad}
\end{document}
答え1
これは のバグではありません\nodexn
が、 のバグとみなすことができますsaveNodeCoors
。例えば を使用した場合にも同じ動作が見られます\pnode(1,1){A}\pnode(A){C}
。このエラーは にも発生します。そのマクロは内部ノードを定義し、その値がおよび\nodexn
に座標を保存するためにロードされるからです。N-<node>.x
N-<node>.y
\documentclass[preview,border=1cm]{standalone}
\usepackage{pst-tools}
\usepackage{pst-node}
\psset{saveNodeCoors}
\begin{document}
\begin{pspicture}(5,3)
\pnode(1,1){A}
\rput(0,2){\psPrintValue{N-A.x}}
\rput(0,1){\psPrintValue{N-A.y}}
%
\nodexn{(1,1)}{B}
\rput(2,2){\psPrintValue{N-B.x}}
\rput(2,1){\psPrintValue{N-B.y}}
%
\pnode(A){C}
\rput(4,2){\psPrintValue{N-C.x}}
\rput(4,1){\psPrintValue{N-C.y}}
\end{pspicture}
\end{document}
つまり、次のようになります。
これは、保存時の PostScript 変換マトリックスがN-<node>.x
、N-<node>.y
新しいノードを保存するときのマトリックスと同じではないために発生します。また、このエラーは、以前のノードから座標をロードするときにのみ表示されます。これは、たとえば、 または で発生します\pnode(A){C}
。 では\nodexn
、座標がロードされる一時ノードが内部的に使用されます。
\pst@newnode
エラーを修正するには、次の変更を行います。
行を置き換える
\ifPst@saveNodeCoors
\ifx\relax#3\relax 0 0 \else #3 \tx@UserCoor \fi
と
\ifPst@saveNodeCoors
\ifx\relax#3\relax
0 0
\else
gsave
tx@Dict begin
STV CP T
end
#3 \tx@UserCoor
grestore
\fi
これらの変更を加えた次の例では、正しい結果が得られます。
\documentclass[preview,border=1cm]{standalone}
\usepackage{pst-tools}
\usepackage{pst-node}
\makeatletter
% the following is the definition from pst-node.tex v 1.30, with the mentioned changes
\def\pst@newnode#1#2#3#4{%
\pst@killglue
\leavevmode
\pst@getnode{#1}\pst@thenode
\pst@Verb{
\ifPst@saveNodeCoors
\ifx\relax#3\relax
0 0
\else
gsave
tx@Dict begin
STV CP T
end
#3 \tx@UserCoor
grestore
\fi
% startGlobal
% \tx@UserCoor
/N-#1.y\space exch def
/N-#1.x\space exch def
% endGlobal
\fi
\pst@nodedict
{#3}
\ifx\psk@name\relax false \else \psk@name true \fi
\pst@thenode
#2
{#4}
\tx@NewNode
end
}%
%
\global\let\psk@name\relax%
\pstree@nodehook%
\global\let\pstree@nodehook\relax}
\makeatother
\psset{saveNodeCoors}
\begin{document}
\begin{pspicture}(5,3)
\pnode(1,1){A}
\rput(0,2){\psPrintValue{N-A.x}}
\rput(0,1){\psPrintValue{N-A.y}}
%
\nodexn{(1,1)}{B}
\rput(2,2){\psPrintValue{N-B.x}}
\rput(2,1){\psPrintValue{N-B.y}}
%
\pnode(A){C}
\rput(4,2){\psPrintValue{N-C.x}}
\rput(4,1){\psPrintValue{N-C.y}}
\end{pspicture}
\end{document}
編集
この問題はpst-node.tex
、バージョンで修正されました1.32 2014-02-03
。