【发布时间】:2011-11-24 18:38:52
【问题描述】:
在 postscript 中,cvs *operator* 据说将数字转换为字符串。我应该如何使用它? 我试过了:
100 100 moveto
3.14159 cvs show
或
100 100 moveto
3.14159 cvs string show
但是没有用。
有什么帮助吗?
【问题讨论】:
标签: string numbers postscript
在 postscript 中,cvs *operator* 据说将数字转换为字符串。我应该如何使用它? 我试过了:
100 100 moveto
3.14159 cvs show
或
100 100 moveto
3.14159 cvs string show
但是没有用。
有什么帮助吗?
【问题讨论】:
标签: string numbers postscript
一个常见的习惯用法是使用文字字符串作为模板。
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
【讨论】:
试试3.14159 20 string cvs show。
string 需要一个大小并将创建的字符串留在堆栈上。 cvs 需要一个值和一个字符串来存储转换后的值。
如果您要进行大量字符串转换,则创建一个字符串并在每次转换中重用它可能会更有效:
/s 20 string def
3.14159 s cvs show
【讨论】:
cvs 终止,所以如果你有一个 5 string 并转换首先是-10.0,然后是0.0,字符串包含0.0.0(GPL Ghostscript 9.26)。