\nodexn 和 savingNodeCoors 不能很好地配合

\nodexn 和 savingNodeCoors 不能很好地配合

這個問題源於試圖回答@StiffJokes(又名用戶:19356)之前發布的另一個問題,但現已刪除。

以下每個 MWE 都會以pspicture一種我認為完全違反直覺的方式產生不同的結果。前兩個範例的差異僅在於如何設定類別borderstandalone第三個範例使用該類別article

MWE#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}

導致

在此輸入影像描述

MWE#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}

導致:

在此輸入影像描述

MWE#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}

導致:

在此輸入影像描述

誰能解釋一下這是怎麼回事?為什麼會有這些差異?一方面, 的座標V是正確的,因為這些點被繪製在它們所屬的位置。但是,一旦您嘗試使用! N-V.x N-V.y獲取中心座標,事情就會變得混亂。

透過改變 fo 點的座標AB的新座標D可以發生巨大的變化:

微量元素 #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}

在此輸入影像描述

答案1

\nodexn使用內部輔助節點。當節點由節點設定時,您將獲得相對座標。根據其表達方式,\nodexn它僅適用於\psGetNodeCenter{Node}.一個「簡單」的表達式就像\nodexn{1,1}{A}(沒有()),那麼節點值是相同的。

順便一提:將此類問題寫到 PSTricks 郵件清單更有意義。

答案2

我堅信,通過檢查,不尊重變數\nodexn的存在,並且未初始化。saveNodeCoorsN-<node_name>.xN-<node_name>.y

以下程式碼會建立 5 個相同的pspicturebut 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}

在此輸入影像描述

相關內容