是否可以通过定义全局运算符来简化以下表达式?

是否可以通过定义全局运算符来简化以下表达式?

以下 MWE 是真实场景的简化版本。我想简化(!\psGetNodeCenter{A}\psGetNodeCenter{B} A.x B.x add A.y B.y add)(!A B AddNode)。可以吗?

\documentclass[pstricks,border=12pt]{standalone}
\usepackage{pstricks-add}
\pstVerb
{
    % convert nodes A B to a new node C where C.x=A.x+B.x and C.y=A.y+B.y
    /AddNode {} bind def
}

\begin{document}
\begin{pspicture}[showgrid=top](6,6)
    \pnode(0,3){A}
    \pnode(4,0){B}
    \pnode(!\psGetNodeCenter{A}\psGetNodeCenter{B} A.x B.x add A.y B.y add){C}
    %\pnode(!A B AddNode){C}
    \psline{->}(A)(B)(C)
\end{pspicture}
\end{document}

答案1

一般来说答案是否定的。该(! )构造引入了文字后记,并且在您建议的语法A中将其插入到未加引号的堆栈中,因此您可能会冒着此已被定义为例如具有其他值的变量或试图对某些内容进行操作的函数的风险。

pst-node.tex,用于pstricks定义和操作节点,将节点名称存储在字典中tx@NodeDict,例如节点A存储在中/N@A。如果你愿意努力工作,你可以编写 postscript 代码,获取字符串(A)并通过提取坐标GetCenter,从而实现类似这样的语法(!(A) (B) AddNode)。然而,我不清楚这何时能胜过仅仅定义一个 LaTeX 命令

\newcommand{\pnodeadd}[3]{\pnode(!\psGetNodeCenter{#1}\psGetNodeCenter{#2} 
  #1.x #2.x add #1.y #2.y add){#3}}

并简单地使用

\pnodeadd{A}{B}{C}

代码pst-node以这种方式完成与 postscript 的所有交互,N@A在 postscript 看到它们之前使用 tex 来构建名称等。

相关内容