当使用hyperref
并通过pdflatex
或进行编译时dvips
,我不需要使用 指定驱动程序\usepackage{hyperref}
。但是当通过 进行编译时,dvipdfm
这会失败,我必须使用 指定驱动程序\usepackage[dvipdfm]{hyperref}
。使用 时也会发生类似的情况graphicx
。
为什么会这样?有没有办法修复hyperref
或graphicx
包,这样就dvipdfm
不需要每次都手动指定了?
答案1
简短的回答是“不,您总是需要将其指定dvipdfm
为驱动程序选项”。要解释原因,您需要记住 TeX 不直接处理颜色、超链接或包含图形等内容。相反,这些都留给驱动程序来处理。每个驱动程序都有自己的做事方式,因此所需的指令dvips
与(或其他驱动程序)的指令不同dvipdfm
。这些指令被称为“特殊指令”,因为它们包含在使用\special
原语的 TeX 文件中。使用 pdfLaTeX 时情况略有不同,因为有一整套 PDF 特定的原语可以完成相同的工作。我将在下文中将所有这些称为“特殊指令”。
那么为什么可以hyperref
检测graphicx
pdfLaTeX相对 dvips
但不是dvips
相对 dvipdfm
? 在 (La)TeX 级别,可以看到正在使用直接 PDF 输出,因为原语\pdfoutput
将被设置为1
。因此,确定使用哪些特殊项的代码可以检查此值并做出简单的决定:如果是1
,则使用特殊项直接创建 PDF。另一方面,如果值为 ,0
则有更多可能性。正如您所说,两个主要的是dvips
和dvipdfm
。无法判断在 LaTeX 文件中将使用其中哪一个,并且它们需要不同的特殊项。因此做出了一个决定,dvips
假设除非用户说不是这样。这就是为什么你需要明确地说出dvipdfm
这个选项:一旦设置,和都graphicx
应该hyperref
采用这个设置。