【问题标题】:Including a postscript file into another one?将后记文件包含到另一个文件中?
【发布时间】:2023-03-03 02:42:01
【问题描述】:

我想知道是否有一种标准方法可以将 包含 一个 postscript 文件添加到另一个文件中。 例如,假设我有一个由 3rd 方程序生成的数据文件:

%!PS
\mydata [ 1 2 3 4 5 6       
(...)
1098098
1098099
] def

我想将它包含在一个主要的 PS 文档中

%PS
\processData
{
mydata { (..) } foreach
}

(...)

(data.ps) include %<=== ???

谢谢

【问题讨论】:

    标签: include preprocessor postscript


    【解决方案1】:

    你要的运算符是run

    字符串 运行 - 执行命名文件的内容

    很遗憾,如果解释器设置了 SAFER 选项,则不允许使用 run

    编辑:*Mathematical Illustrations 的作者 Bil​​l Casselman 有一个名为 psinc 的 Perl 脚本,可用于“预处理”您的后记文件,内联所有 (...) run 文件。

    【讨论】:

    • 有一次我将第一个 PS 文件编译成一个图像,然后我可以将它包含在第二个 PS 文件中。虽然这是一个相当复杂的过程,但它确实解决了我们需要解决的问题。
    • 如果只是一次性的,您通常可以将另一个文件的文本直接插入第一个文件(这就是 psinc 所做的)。但对于 .eps 之类的文件,您通常需要为子程序设置一些“环境”,例如缩放或平移。
    • @Travis:有一次我做了一个附言“合并”,只是将打印的页面送回打印机!
    • 哈哈,那对我们来说是行不通的,因为我们将生成的图像作为 PDF 发送,而不是打印到打印机。而且这个过程一天要重复很多次。但是,如果出现这种情况,我将首先建议您的方法。更少的开发工作;)
    【解决方案2】:

    包含 PostScript 的标准方法是使要包含的代码成为 EPS(封装 PostScript)文件。关于必须如何创建封装的 PostScript 以及如何包含它,有一些规则。请参阅 Adob​​e 技术说明 5002“封装 PostScript 文件格式规范”

    简单地对 PostScript 文件执行“运行”可能会很好,但也可能会导致问题。许多 PostScript 文件(尤其是由第三方生成的文件)将包含可能与您自己的名称冲突的过程定义,并且包含的​​程序可能会使解释器处于与执行包含文件时不同的状态。至少您应该围绕通过“运行”包含的代码执行保存/恢复对。

    【讨论】:

    • 一般来说是个好建议。但在这里他需要文件中的数据,而不是图形的副作用。所以保存/恢复是他不应该做的。
    【解决方案3】:

    我建议元解决方案:使用 C 预处理器或 M4 预处理器。它们是强大的工具,它们的强大功能也可以在其他方面得到使用,而不仅仅是文件包含。虽然这不是被问到的,但是使用 Makefile 将是自动化整个工作流程的明智之举。通过结合使用预处理器和 Makefile,您可以优雅地自动化复杂的包含处理等。

    C 预处理器

    包括一个文件:

    #include "other.ps"
    

    预处理命令行:

    cpp -P main.pps main.ps
    

    M4 预处理器

    包括一个文件:

    include(other.ps)
    

    预处理命令行:

    m4 main.pps > main.ps
    

    【讨论】:

    • +1 非常有趣。要使用 C 预处理器,我认为您需要另一个翻译步骤来抑制以 # 开头的行。
    • 你不必抑制 #,预处理器会处理这个。
    • 预处理器输出大量以# 开头的“注释”行,以指示行号和包含的文件,以便编译器适当地生成调试符号。如果没有特殊规定(比如去掉,或者在PS程序中定义#丢弃源码行),我觉得这样是行不通的。
    • 啊,你是这个意思。请检查 man for -P for cpp。 “-P 禁止在预处理器的输出中生成线标记。当在非 C 代码的东西上运行预处理器时,这可能很有用,并且将被发送到可能被线标记混淆的程序。”我实际上已经基于 cpp 构建了一个相当复杂的系统(发票生成)。
    猜你喜欢
    • 1970-01-01
    • 2012-05-01
    • 2011-06-23
    • 2011-10-27
    • 2011-11-24
    • 2017-04-06
    • 1970-01-01
    • 2019-12-09
    相关资源
    最近更新 更多