Postscript: how to convert a integer to string?
在 postscript 中,据说 cvs *operator* 将数字转换为字符串。我应该如何使用它?
我试过了:
1 2 | 100 100 moveto 3.14159 cvs show |
或
1 2 | 100 100 moveto 3.14159 cvs string show |
但它没有用。
有什么帮助吗?
一个常见的习惯用法是使用文字字符串作为模板。
1 | 1.42857 ( ) cvs show |
您甚至可以通过向 cvs 显示较大字符串的各种子字符串来进行格式化输出。
1 2 3 | %0123456....... (2/7 = ) dup 6 7 getinterval 2.85714 exch cvs pop show |
但 Ghostscript 风格指南禁止这样做。它几乎是我们唯一发布的 Postscript 样式指南。 (comp.lang.postscript 中对此进行了讨论。)因此,一个常见的建议是在需要时分配一个新字符串,并让垃圾收集器获得它的保留。
1 | 4.28571 7 string cvs show |
作为最后的手段,真正懒惰的黑客会劫持
1 | 5.71428 =string cvs show |
如果你喜欢那个,你可以将它与
1 | { 7.14285 //=string cvs show } % embed =string in this procedure |
这减少了额外的微秒时间,并使交互式检查代码变得更加困难。在此过程中调用
另一个包的技巧,来自 Helge Blischke 在 comp.lang.postscript 中的一篇文章。这是获取零填充整数的简单方法。
1 2 3 4 | /bindec % <integer> bindec <string_of_length_6> { 1000000 add 7 string cvs 1 6 getinterval }bind def |
试试
如果您要进行大量字符串转换,创建一个字符串并在每次转换中重复使用它可能会更有效:
1 2 | /s 20 string def 3.14159 s cvs show |