rput 坐标中的数学表达式

rput 坐标中的数学表达式

我习惯\rput[B](1.5,4.1){\( 1 \)}在特定位置写一个数字,现在我想在坐标位置表达一个表达式,例如我的宏的输入在\rput[B](2+#1,4.1){\( 1 \)}哪里,它返回一个错误,有人可以帮忙吗?#1ERROR: Illegal unit of measure (pt inserted).

在此处输入图片描述

答案1

为了允许坐标中的算术,您可以使用逆波兰表示法(简称 RPN)。以下是您可以快速了解的内容可能在…之后

在此处输入图片描述

\documentclass{article}
\usepackage{pstricks}% http://tug.org/PSTricks/main.cgi/
\newcommand{\myput}[2][0]{%
  \rput[B](!1.5 #1 add 4.1){#2}
}
\begin{document}
\begin{pspicture}(5,5)
  \SpecialCoor
  \rput[B](1.5,4.1){$1$}
  \myput[1]{$2$}
\end{pspicture}
\end{document}

RPN 符号(在 PostScript 中使用)在章节中描述54 特殊坐标pstricks 文档,并且需要使用\SpecialCoor

PostScript 中的 RPN 工作原理是维护堆栈。对于坐标,顶部两个条目代表正在使用的 x 和 y 坐标。举例来说,考虑 RPN 计算

2 3 add 4 1 sub mul

我将使用符号[a b c ...]来表示 PostScript 堆栈,其中a项目在底部,在b其上方,在c其上方...

从左到右阅读,采取了以下 PostScript 操作:

  • 2将数字 2 压入堆栈 ~ [2];
  • 3将数字 3 压入堆栈 ~ [2 3];
  • add从堆栈中取出顶部两个元素,并将它们相加,将结果留在堆栈上 ~ [5];
  • 4将数字 4 压入堆栈 ~ [5 4];
  • 1将数字 1 压入堆栈 ~ [5 4 1];
  • sub从堆栈中取出顶部两个元素,然后将它们相减,将结果留在堆栈上~ [5 3]
  • mul从堆栈中取出顶部两个元素,然后将它们相乘,将结果留在堆栈 ~ 中[15]

使用这个,应该清楚的是

1.5 #1 add 4.1
  • 1.5被推入堆栈~ [1.5]
  • #1(第一个/可选参数)被推入堆栈~ [1.5 #1]
  • add弹出前两个元素,将它们相加然后将结果推r回到堆栈~ [r]
  • 4.1被推入堆栈 ~ [r 4.1]

现在\rput,知道它已提供!(RAW PostScript 代码)指令,弹出提供点的 x 和 y 坐标的前两个元素。当然,这需要一些时间来适应。

PostScript 命令的完整列表/参考(包括上述内容)可作为PostScript 语言参考(第三版)。感兴趣的部分包括:

  • 3.4 堆栈(第 45 页),其中包括一个类似上述的例子;
  • 8.1 操作符概要(第 508 页)

然而,当使用节点时,它提供了一种更直观的方式来查看这种算法[nodesep=..,offset=..]

答案2

这应该够了吧:

\documentclass{standalone}

\usepackage{pstricks}
\usepackage{expl3}

\ExplSyntaxOn
\cs_new_eq:NN \calc \fp_eval:n
\ExplSyntaxOff
\newcommand{\xyput}[3]{\rput[B](\calc{#1},\calc{#2}){#3}}

\begin{document}

\begin{pspicture}(5,5)
  \psframe(0,0)(5,5)
  %\rput[B](0,0){0}
  \xyput{0+1}{0+1}{0}
  \xyput{0+4}{0+1}{1}
  \xyput{0+1}{0+4}{2}
  \xyput{0+4}{0+4}{3}
\end{pspicture}

\end{document}

参见下图 带数字的示例

相关内容