使用带有算术计数器表达式的节点名称

使用带有算术计数器表达式的节点名称

我想调用一个带有节点名的 PSTricks 宏,该节点名涉及带计数器的算术表达式的结果。

考虑以下不起作用的示例:

\documentclass{article}
\usepackage{pst-node}
\newcounter{mycnt}
\setcounter{mycnt}{2}
\def\nodename#1{%
  A\numexpr\themycnt-#1\relax B}%
\begin{document}
\begin{pspicture}[showgrid](5,5)
  \pnode(5,5){A1B}
  \psdot(\nodename{1})
\end{pspicture}
\end{document}

宏调用\nodename{1}应该在 PSTricks 宏的括号内求值A1B。但上述示例在使用 编译时不起作用latex -> dvips -> ps2pdf。它给出了 Postscript 错误

Error: /undefined in 2-1\relax
Operand stack:
   --dict:51/400(L)--   N@A\numexpr

这表明,并\numexpr没有被评估,而是逐字传递给了 Postscript 文件。

\nodename是否可以这样定义宏,使其在上述示例中起作用?这不得影响宏的使用方式,但必须按 工作\psdot(\nodename{1})。算术表达式涉及计数器。

答案1

\psdot扩展其参数,但\numexpr不可扩展;它在\number或之后扩展\the。在 的上下文中,\numexpr最好使用\value{mycnnt},它指的是“抽象”值,而不是\themycnt指的是其表示。

\documentclass{article}
\usepackage{pst-node}
\newcounter{mycnt}
\setcounter{mycnt}{2}
\newcommand\nodename[1]{%
  A\the\numexpr\value{mycnt}-#1\relax B}

\begin{document}
\begin{pspicture}[showgrid](5,5)
  \pnode(5,5){A1B}
  \psdot(\nodename{1})
\end{pspicture}
\end{document}

相关内容