POSTSCRIPT® 语言是一种简单的解释性编程语言,具有强大的图形功能。
... 由于文本在大多数应用程序中的重要性,PostScript 语言提供了特殊的功能,可以将字符集组织为字体并有效地绘制字符。
PostScript 语言能完全取代 TeX 吗?
答案1
PostScript 和 TeX 的设计目的不同,因此绝不能用其中一种来代替另一种。然而,从纯理论的角度来看,两者都是图灵完备语言,因此任何能用 TeX 表达的东西也可以用 PostScript 表达,反之亦然。
除此之外,PostScript 被设计为一种页面描述语言,而 TeX 则被设计为一种排版系统(或语言)。PostScript 处理线条、字符、坐标系的旋转、缩放和颜色,而 TeX 处理段落、宏来定义标记语言,并且通常提供 PostScript 未内置的许多高级服务:换行、连字、将段落分成页面、脚注、数学排版。因此,PostScript 的级别要低得多,并且确实是 TeX 引擎的目标语言之一:TeX 被编译为 PostScript 代码(通过 dvips)或 PDF,后者可以被视为 PostScript 的一个子集。
答案2
曾有多次尝试利用 Postscript 的编程能力来实现更全面的文档制作环境。据我所知,它们都达不到 TeX 的行拟合能力。
最基本的是 Postscript Tutorial 中的打字机模拟器(蓝皮书),这一思想在后来的里德著作中得到了扩展(绿皮书和后记中的思考) 来处理字体更改的嵌入式控制代码。这些代码通过重新解释程序来运行溪流,所以我经常称它们为“protocol-prolog”风格。
另一种风格是实现一组具有简短助记符名称的命令,并以 RPN 语法实现文档。示例包括奇闻趣事工具,实用后记这也是设计 PostScript 驱动程序输出的主要技术。(《绿皮书》和《PostScript 思维》也是这方面的好资源。)
上述方法的混合如下所述Anastigmatix 的工具甚至实现了 Knuth-Liang 连字算法。
虽然不如 Anastigmatix 的工具强大,但我尽可能多地窃取他的想法,我自己的努力(披露:这也是我的简历,nudge nudge。)包括上述方法的组合,以及包含文本的字符串中的一组助记符程序和嵌入式控制代码(包括任意的后记代码)。编辑:我的更完整的程序可供审查代码审查网站。正如所料,它也达不到 tex 的线路拟合能力。
问题的另一端是将绘图输出捕获为扁平的 ps 文档。传统的工具是静态.ps(从某种意义上说,still.ps 与 Distiller 的关系就像 cfront 与本机 C++ 编译器的关系,它补充并扩展了现有的可编程性(一方面是 ps 解释器,另一方面是 c 编译器)。这实际上没有什么用,但我觉得很有趣)。ghostscript -sDEVICE=ps2write
(和sDEVICE=pdfwrite
)现在 still.ps 基本上是不必要的,但它仍然是 postscript 编程习语和风格的金矿。
另一个值得注意的例子是朱利安·怀斯曼的品酒餐垫制作代码. 它是一个大型的、可高度定制的 PostScript“文档”,定义了许多布局选择。