在postscript中, cvs * 运算符 *被称为将数字转换为字符串。我该怎么用? 我试过了:
100 100 moveto
3.14159 cvs show
或
100 100 moveto
3.14159 cvs string show
但它不起作用。
任何帮助?
答案 0 :(得分:13)
尝试3.14159 20 string cvs show
。
string
需要大小并将创建的字符串保留在堆栈中。 cvs
需要一个值和一个字符串来存储转换后的值。
如果您正在进行大量的字符串转换,那么创建一个字符串并在每次转换中重复使用它可能更有效:
/s 20 string def
3.14159 s cvs show
答案 1 :(得分:12)
常见的习语是使用文字字符串作为模板。
1.42857 ( ) cvs show
您甚至可以通过向cvs提供更大字符串的各种子字符串来进行格式化输出。
%0123456.......
(2/7 = ) dup 6 7 getinterval
2.85714 exch cvs pop show
但是Ghostscript Style Guide禁止这个。它几乎是我们发布的唯一已发布的Postscript风格指南。 (A discussion about this在comp.lang.postscript中。)因此,一个常见的建议是在需要时分配一个新的字符串,让垃圾收集器获得保留。
4.28571 7 string cvs show
作为最后的手段,真正懒惰的黑客会劫持=string
,=
和==
使用的内置128字节缓冲区输出数字(当然,使用我们的朋友cvs
)。
5.71428 =string cvs show
如果你喜欢那个,你可以将它与=
的其他技巧结合起来:立即评估名称。
{ 7.14285 //=string cvs show } % embed =string in this procedure
这样可以减少额外的微秒,并使交互式检查代码变得更加困难。在此过程中调用==
将不会显示您使用=string
的事实;它看起来就像任何其他字符串一样。
来自a post by Helge Blischke in comp.lang.postscript的行李箱的另一招。这是获得零填充整数的简单方法。
/bindec % <integer> bindec <string_of_length_6>
{
1000000 add 7 string cvs 1 6 getinterval
}bind def