当 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 软件。)
|