我通常将ghostscript视为命令行工具。但是,我对那里出现的如此众多的设置和选项不感到惊讶-这是由于ghostscript是功能强大的PostScript语言解释器(我常常忘记)的事实。例如,在Querying Ghostscript for the default options/settings of an output device (such as 'pdfwrite' or 'tiffg4')中;人们将学习如何检索给定输出设备的默认选项。但是,我想知道的是-这些选项是否与所谓的PostScript词典相关?或者换句话说-什么是PostScript词典; ghostscript有什么设施来查询(并可能)修改此数据? 最佳答案 用最简单的术语来表示:在PostScript中,字典是键(名称)+值对的列表。字典允许PostScript解释器查找键是否存在,并获取其值以在任何过程中使用它。解释器还可以创建键,存储或修改值,甚至可以创建完整的自定义词典(由其处理的PostScript代码决定)。密钥通常是名称类型(但它们也可以是任何其他类型,但null除外)。对于PostScript解释程序的任何实现,必须始终存在以下两个词典:systemdict这持有预定义的PostScript运算符(以及使它们执行PostScript规范期望它们执行的操作的实现)。userdict这是PostScript程序的变量和过程(“过程”是由语言定义的运算符以及程序定义的值和参数的组合构成的函数或子例程)。关于名称的一个词:名称对于其他编程语言来说是唯一的标识符(并且区分大小写)。这些标识符可以是变量或过程名称。它们可以由256个ASCII字符的任意组合组成(但它们不是字符串)。您可能已经知道,PostScript是一种面向堆栈的语言。它使用了几个堆栈:操作数堆栈该堆栈保存每个单个操作数和中间操作的每个结果(将最后一个结果暂时转换为操作数堆栈的最顶部元素)。字典堆栈顾名思义:此堆栈仅包含字典。这样,堆栈为任何键/名称查找定义了当前上下文。执行栈这一个包含可执行对象,即主要是当前正在执行的过程和文件。如果解释器中断当前对象的执行,则会将被中断的对象放入此堆栈中。完全执行完一个对象后,将其从堆栈中删除,并继续执行当前最顶层的对象。图形状态栈该堆栈托管用于弹出图形元素的当前上下文:当前线宽设置,当前字体,当前颜色或灰度值,当前路径...当前图形状态可以保存(gsave)和恢复(grestore)后来。最顶层的图形状态始终是当前图形状态。所有这些堆栈彼此独立。但是,操作数,字典和图形状态堆栈在PostScript程序的控制下(也就是说,可以由它操作)。执行堆栈是解释器的唯一属性。对于每个堆栈都有某些限制(例如可能存储在其上的元素数等)。 PostScript知道可以操作堆栈的运算符:在堆栈上放置一个新元素,删除最上面的元素(pop),复制最上面的元素(dup),重新排列堆栈上元素的顺序(),交换两个最上层元素(roll),以及更多其他元素(PostScript编程的一个很好的介绍是Adobe的“ Bluebook”)。正如我已经说过的,词典有自己的堆栈,该堆栈保存PostScript解释程序可以使用的所有词典。在该堆栈上,可能有单独的字体字典,或者PostScript程序想要创建(使用exch关键字)并私下使用的任意数量的词典,或者某些特定于某些PostScript解释程序的词典,例如Ghostscript 。dict始终是最底端的;上面是systemdict。这两个不能从字典堆栈中删除,所有其他的都可以接受任何堆栈操作运算符(例如userdict,它从堆栈中删除最上面的元素)。每当解释器查找名称时,它都会从最顶层的字典开始搜索该名称的字典。因此,在pop之前搜索userdict。一旦找到名称(键),解释器就会停止搜索并使用该键(或更确切地说,它拥有的值)。这种体系结构的结果是,PostScript程序员可以用自己的变体覆盖systemdict中预定义的任何PostScript运算符。同样,某些词典可以用于PS程序“专用”(不可访问,例如字体词典)或“只读”。更新-更多答案:How can I obtain a list of other dictionaries contained in systemdict or userdict?How can a Ghostscript power user print out dictionary contents?关于dictionary - 什么是PostScript词典,如何进行访问(通过Ghostscript)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11137732/ 10-12 21:53