如何在ghostscript中将矢量打印到stdout

use*_*479 2 postscript

我想从postscript中获取StandardEncoding向量(PLRM的附录E.6中有一个图形版本,但没有文本).我正在寻找[/ A/B/C/D]行的东西,但实际上我可以将编码向量中的位置与字符命令相关联的任何东西都是好的.

我试过了

(%stdout)
(w)
file
/StandardEncoding
writestring
Run Code Online (Sandbox Code Playgroud)

但它(显然)不起作用/ StandardEncoding不是字符串.如何将这样的矢量打印到标准输出?

lus*_*oog 7

最简单的.

StandardEncoding ==
Run Code Online (Sandbox Code Playgroud)

或者有索引.十进制:

0 StandardEncoding { exch dup =only(: )print 1 add exch == } forall pop
Run Code Online (Sandbox Code Playgroud)

八:

0 StandardEncoding { exch dup 8 3 string cvrs =only(: )print 1 add exch == } forall pop
Run Code Online (Sandbox Code Playgroud)

十六进制:

0 StandardEncoding { exch dup 16 2 string cvrs =only(: )print 1 add exch == } forall pop
Run Code Online (Sandbox Code Playgroud)

此外,您应该知道这/StandardEncoding是一个文字名称(因为/),因此名称本身就位于堆栈上.如果您已经进入下一步并转换为字符串,则只需打印"StandardEncoding"一词.因此,要自动加载(并可能执行)与名称关联的值,请删除斜杠(/)以使名称可执行.这个词StandardEncoding(没有斜线!)成为矢量.斜杠与quoteLisp族语言非常相似.

为了说明,这里有一些打印东西和迭代数组的方法.

StandardEncoding {
    (%stdout)(w)file exch 80 string cvs writestring
    (%stdout)(w)file (\n) writestring
} forall

StandardEncoding
0 1 2 index length 1 sub {  % Arr i
    2 copy get 80 string cvs print  % Arr i
    (\n) print  % Arr i
    pop  % Arr
} for

[ StandardEncoding 0 {
    {
        2 copy get ==only
        ()=
        1 add
    } loop
} stopped cleartomark
Run Code Online (Sandbox Code Playgroud)

最后一个使用无限循环并捕获尝试读取不存在的元素rangecheck时发出信号的错误get.它将在堆栈(StandardEncoding 256 StandardEncoding 256 true)上留下5个值,您可以cleartomark如图所示丢弃它们,或简单地pop pop pop pop pop(或5{pop}repeat).

编辑:进一步播放最后一个例子.这会将错误捕获隔离到预期会引发错误的操作符.隔离预期的错误可以让任何意外的错误打印出常用的诊断信息.

[ StandardEncoding 0 {
    2 copy
    { get } stopped { exit } if
    ==only ()=
    1 add
} loop cleartomark
Run Code Online (Sandbox Code Playgroud)