实验:
在 LaTeX () 中编译包含 PSTricks 代码的文件latex.exe
会生成一个自包含的 DVI,其中嵌入了该 PSTricks 代码。
但如果文件包含 EPS 图像,则生成的 DVI 不再是自包含的。如果您删除 EPS 图像并使用 DVI 查看器打开 DVI,则查看器将不会显示任何图像。
问题
为什么 LaTeX ( latex.exe
) 不能将导入的 EPS 图像嵌入到 DVI 文件中?
答案1
DVI 从来都不是自包含的:它不包含字体。除此之外:pstricks 包将代码放入 dvi(通过 \special 命令)。它还能做什么?它不能引用外部文件。图形包不包括 eps,因为它不是必需的。驱动程序 (dvips) 无论如何都必须获取字体。因此它也可以加载 eps。
答案2
dvi
是一种与设备无关的格式,其原因一切除了默认文本被引用而不是嵌入之外。如果有人有另一个目录结构,dvi 将毫无用处。它只在同一台机器上才有意义。
答案3
DVI 格式比 Postscript 更老,无法描述 Postscript。它确实有一个扩展机制,即 DVI 特殊代码,但 DVI 规范没有为其提供语义,因此它们依赖于 DVI 渲染器中的特殊非标准扩展才能发挥作用。
dvips 程序确实重视某些 DVI 专用指令:它允许使用它们对 Postscript 代码进行编码,这些代码现在称为 Postscript 专用指令。还有其他 DVI 扩展,例如 hyperref 包使用的 Hypertex 专用指令或 eepic 使用的 TPIC 专用指令。这些扩展使用文本进行编码,用于标识专用指令类型的初始字符确保了不同扩展提供的 DVI 专用指令不会发生冲突。在某种程度上,这是个好运气:DVI 专用指令没有类似命名空间机制来确保不会发生冲突。
Ulrike 的回答提到了 pstricks 软件包,它使用这些 Postscript 特有功能,其他一些软件包也是如此,例如 Beamer 的 DVI 渲染器。但对于无法识别 Postscript 的 dvips 编码的 DVI 渲染器来说,使用 DVI 特有功能毫无意义,通常会被忽略。
由于 Postscript 不是 DVI 的“原生”语言,因此不嵌入它是合理的:一方面,这样可以更节省内存,因为 Postscript 不需要转义。实现这一点的标准是使用 dvips 引入的 psfile DVI 专用文件。