![\nodexn und savedNodeCoors funktionieren nicht gut miteinander](https://rvso.com/image/281606/%5Cnodexn%20und%20savedNodeCoors%20funktionieren%20nicht%20gut%20miteinander.png)
Diese Frage entstand aus dem Versuch, eine andere Frage zu beantworten, die zuvor von @StiffJokes (alias Benutzer:19356) gepostet, aber inzwischen gelöscht wurde.
Jedes der folgenden MWEs erzeugt unterschiedliche Ergebnisse für die pspicture
auf eine Weise, die ich völlig kontraintuitiv finde. Die ersten beiden Beispiele unterscheiden sich nur darin, wie die border
für die standalone
Klasse festgelegt wurde. Das dritte Beispiel verwendet die article
Klasse.
MWE Nr. 1:
\documentclass[pstricks,border=12pt]{standalone}
\usepackage{pst-node}
%% using pgffor just to see what happens at different values
\usepackage{pgffor}
\begin{document}
\begin{pspicture}[showgrid](-1,-1)(3,3)
\psset{saveNodeCoors=true}
\pnode (0,0){A}
\pnode (2,3){B}
\foreach \myp in {0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.00}
{
\pgfmathparse{1-\myp}
\edef\myq{\pgfmathresult}
\nodexn{\myp(A)+\myq(B)}{V}
\qdisk(V){2pt}
\pnode(! N-V.x N-V.y ){D}
\psline(A)(D)
}
\end{pspicture}
\end{document}
Ergebend
MWE Nr. 2:
\documentclass[pstricks,border=1in]{standalone}
\usepackage{pst-node}
%% using pgffor just to see what happens at different values
\usepackage{pgffor}
\begin{document}
\begin{pspicture}[showgrid](-1,-1)(3,3)
\psset{saveNodeCoors=true}
\pnode (0,0){A}
\pnode (2,3){B}
\foreach \myp in {0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.00}
{
\pgfmathparse{1-\myp}
\edef\myq{\pgfmathresult}
\nodexn{\myp(A)+\myq(B)}{V}
\qdisk(V){2pt}
\pnode(! N-V.x N-V.y ){D}
\psline(A)(D)
}
\end{pspicture}
\end{document}
ergebend:
MWE Nr. 3:
\documentclass{article}
\usepackage{pstricks,pst-node}
%% using pgffor just to see what happens at different values
\usepackage{pgffor}
\begin{document}
\begin{pspicture}[showgrid](-1,-1)(3,3)
\psset{saveNodeCoors=true}
\pnode (0,0){A}
\pnode (2,3){B}
\foreach \myp in {0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.00}
{
\pgfmathparse{1-\myp}
\edef\myq{\pgfmathresult}
\nodexn{\myp(A)+\myq(B)}{V}
\qdisk(V){2pt}
\pnode(! N-V.x N-V.y ){D}
\psline(A)(D)
}
\end{pspicture}
\end{document}
ergebend:
Kann mir jemand erklären, was hier vor sich geht? Warum diese Unterschiede? Auf einer Ebene V
sind die Koordinaten für korrekt, da die Punkte dort aufgezeichnet werden, wo sie hingehören. Aber sobald man versucht, ! N-V.x N-V.y
die Koordinaten für das Zentrum zu erfassen, läuft alles drunter und drüber.
Durch Ändern der Koordinaten von Punkten A
und B
der neuen Koordinaten für D
können sich diese drastisch verschieben:
MWE Nr. 4
\documentclass[pstricks,border=12pt]{standalone}
\usepackage{pst-node}
%% using pgffor just to see what happens at different values
\usepackage{pgffor}
\begin{document}
\begin{pspicture}[showgrid](-1,-1)(3,3)
\psset{saveNodeCoors=true}
\pnode (0,0){A}
\pnode (2,0){B}
\foreach \myp in {0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.00}
{
\pgfmathparse{1-\myp}
\edef\myq{\pgfmathresult}
\nodexn{\myp(A)+\myq(B)}{V}
\qdisk(V){2pt}
\pnode(! N-V.x N-V.y ){D}
\psline(A)(D)
}
\end{pspicture}
\end{document}
Antwort1
\nodexn
verwendet intern Hilfsknoten. Und wenn Knoten durch Knoten gesetzt werden, erhält man relative Koordinaten. Je nach Ausdruck \nodexn
funktioniert es nur mit \psGetNodeCenter{Node}
. Ein „einfacher“ Ausdruck ist wie \nodexn{1,1}{A}
(ohne ()
), dann sind die Knotenwerte gleich.
Und übrigens: Es ist sinnvoller, solche Fragen an die PSTricks-Mailingliste zu schreiben.
Antwort2
Ich bin aufgrund der Überprüfung fest davon überzeugt, dass die Existenz der Variablen \nodexn
nicht respektiert wird und sie daher nicht initialisiert wird.saveNodeCoors
N-<node_name>.x
N-<node_name>.y
Der folgende Code erstellt 5 identische pspicture
Aber N-<node_name>.x
und N-<node_name>.y
erzeugt jeweils unterschiedliche Werte.
\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}