我可以强制 hyperref 使用自定义驱动程序吗?

我可以强制 hyperref 使用自定义驱动程序吗?

作为项目让 LaTeX 输出一些有用的东西,我发现自己想写一本新的超链接驱动程序以适应所需的格式。文档解释了驱动程序需要做什么,但没有解释如何让 hyperref 加载新驱动程序而不是给定的驱动程序。查看代码,我看不到明显的钩子,但我可能遗漏了一些东西。目前,我使用钩子加载驱动程序文件\AtBeginDocument,但我担心这可能不太可靠。

那么,我可以让 hyperref 加载自定义驱动程序吗?没有修改hyperref.sty?如果不是,在实际文档开始时手动加载它是否有任何危险?

答案1

我有已通知customdriver关于 此线程,现在已添加选项hyperref 6.83f. 来自其README

Option `customdriver'
---------------------
  The value of option `customdriver' is the name of an external
  driver file without extension `.def'. The file must have
  \ProvidesFile with a version date and number that match the
  date and number of `hyperref', otherwise a warning is given.

  Because the interface, what needs to be defined in the driver,
  is not well defined and quite messy, the option is mainly intended
  to ease developing, testing, debugging the driver part.

答案2

您可以将hyperref.cfg和 行一起使用\def\Hy@driver{myhdriver}。这将加载myhdriver.def。但它只适用于 LaTeX(即 dvi 输出),而不适用于 pdfLaTeX(pdf 输出)。使用 pdfoutputhyperref将强制使用hpdftex.def

答案3

下面的补丁似乎可以解决问题。声明将customdriver其密钥存储在中的选项\HyOpt@CustomDriver。如果该选项非空,则 clobber\Hy@driver在加载驱动程序文件之前进行破坏。编辑:按照 Andrew Stacey 的要求,添加了差异的背景。

*** hyperref-original.sty
--- hyperref-modified.sty
***************
*** 2861,2866 ****
--- 2861,2870 ----
      }%
    \fi
  }
+ \let\HyOpt@CustomDriver\ltx@empty
+ \define@key{Hyp}{customdriver}{%
+   \def\HyOpt@CustomDriver{#1}%
+ }
  \define@key{Hyp}{hyperfigures}[true]{%
    \Hy@boolkey[hyperfigures]{figures}{#1}%
  }
***************
*** 4206,4211 ****
--- 4210,4219 ----
        \fi
      \fi
    \fi
+   \ifx\HyOpt@CustomDriver\ltx@empty
+   \else
+     \let\Hy@driver\HyOpt@CustomDriver
+   \fi
    \Hy@Message{Driver\HyOpt@DriverType: \Hy@driver}%
    \chardef\Hy@VersionChecked=0 %
    \input{\[email protected]}%

用作

\documentclass{article}
\usepackage[customdriver={foo}]{hyperref}
\begin{document}
   \href{foo}{bar}
\end{document}

相关内容