hyperref 和 graphicx 的驱动程序规范

hyperref 和 graphicx 的驱动程序规范

当使用hyperref并通过pdflatex或进行编译时dvips,我不需要使用 指定驱动程序\usepackage{hyperref}。但是当通过 进行编译时,dvipdfm这会失败,我必须使用 指定驱动程序\usepackage[dvipdfm]{hyperref}。使用 时也会发生类似的情况graphicx

为什么会这样?有没有办法修复hyperrefgraphicx包,这样就dvipdfm不需要每次都手动指定了?

答案1

简短的回答是“不,您总是需要将其指定dvipdfm为驱动程序选项”。要解释原因,您需要记住 TeX 不直接处理颜色、超链接或包含图形等内容。相反,这些都留给驱动程序来处理。每个驱动程序都有自己的做事方式,因此所需的指令dvips与(或其他驱动程序)的指令不同dvipdfm。这些指令被称为“特殊指令”,因为它们包含在使用\special原语的 TeX 文件中。使用 pdfLaTeX 时情况略有不同,因为有一整套 PDF 特定的原语可以完成相同的工作。我将在下文中将所有这些称为“特殊指令”。

那么为什么可以hyperref检测graphicxpdfLaTeX相对 dvips但不是dvips 相对 dvipdfm? 在 (La)TeX 级别,可以看到正在使用直接 PDF 输出,因为原语\pdfoutput将被设置为1。因此,确定使用哪些特殊项的代码可以检查此值并做出简单的决定:如果是1,则使用特殊项直接创建 PDF。另一方面,如果值为 ,0则有更多可能性。正如您所说,两个主要的是dvipsdvipdfm。无法判断在 LaTeX 文件中将使用其中哪一个,并且它们需要不同的特殊项。因此做出了一个决定,dvips假设除非用户说不是这样。这就是为什么你需要明确地说出dvipdfm这个选项:一旦设置,和都graphicx应该hyperref采用这个设置。

相关内容