next up previous contents index
Next: 13.3 非 EPS 图形文件 Up: 13. 压缩图形文件和非  EPS  文件的使用 Previous: 13.1 压缩 EPS 文件的例子


13.2 TEX搜索路径和dvips

当 LATEX 遇上一 \includegraphics 命令时,会首先在当前目录下 搜寻图形文件。如果找不到所需的文件, LATEX 将按照 TEX 搜索路径来 寻找。当 DVI 文件转为 PS 文件时, dvips 也是同样地顺序来 搜寻图形文件。这不会有什么问题。然而,如果用 \DeclareGraphicsRule  定义了一个即时转换的命令,那么此命令将会阻止 dvips 在  TEX 搜索路径中寻找图形文件。例如:

\DeclareGraphicsRule{.eps.gz}{eps}{.eps.bb}{`gunzip -c #1}
指定对后缀为 .eps.gz 的文件使用命令 gunzip -c。 假设用下面的命令来插入图形文件,

\includegraphics{file.eps.gz}
那么若 file.eps.gz 和 file.eps.bb 在当前目录下的话, 一切都会很顺利。 LATEX 使用 file.eps.bb 而 dvips  使用 gunzip -c file.eps.gz 来解压缩图形文件。 但是,如果 file.eps.gz 和 file.eps.bb 不在当前目录下, 而是在目录 /a/b/c/ 下(假设该目录已加到 TEX 搜索路径中)。  LATEX 仍然能够找到 /a/b/c/file.eps.bb,但 dvips 在 执行 gunzip -c file.eps.gz 就会出问题。因为 gunzip 找不到  file.eps.gz。假如你的 TEX 软件使用了 kpathsea 库 (比如 teTeX),这个问题可用定义下面的图形 规则来解决。

\DeclareGraphicsRule{.eps.gz}{eps}{.eps.bb}%
                    {`gunzip -c `kpsewhich -n latex tex #1`}
这里使用 \kpsewhich 来为 gunzip 找寻文件。  `kpsewhich -n latex tex #1 使得 dvips 在 TEX 搜索 路径中寻找压缩图形文件,然后把文件的全名(包括目录名)附加到  gunzip -c 命令后,使得即使压缩图形文件不在当前目录下,  gunzip 也可对其进行操作。 虽然上面给出的新的图形规则可以放在 LATEX 文件的开头,但是最好的 用法是把它放到 graphics.cfg 文件中:

\AtEndOfPackage{%
\DeclareGraphicsRule{.eps.gz}{eps}{.eps.bb}%
                    {`gunzip -c `kpsewhich -n latex tex #1`}}
并且保留 \ExecuteOptionsdvips 这一行。 因为旧版本的 dvips 不会搜索 TEX 搜索路径, dvips 无法找到 位于 TEX 搜索路径中的文件,下面的命令利用 kpsewhich 为  dvips 搜索位于 TEX 搜索路径中的非压缩的 EPS 文件。

\DeclareGraphicsRule{.eps}{eps}{.eps}%
                    {`cat `kpsewhich -n latex tex #1`}
(当然最好的解决办法是升级你的 TEX 软件。)


Wang Lei
2000-04-15