包选项和 \RequirePackage:命令顺序和选项冲突吗?

包选项和 \RequirePackage:命令顺序和选项冲突吗?

命令的选项如何\RequirePackage与其他地方为同一包指定的选项交互?

以下是示例:pdfx如果使用 -option 加载包a-1b,则执行命令\RequirePackage[pdftex,pdfa]{hyperref}。但是,稍后在我的 LaTeX 源文件中,我可能还会执行命令\usepackage[pdfa=true,linkbordercolor={0 0 1}]{hyperref}。我应该将 -command 放在文档中的什么位置,\usepackage[a-1b]{pdfx}以免它与我的hyperref-command 发生任何冲突?pdfx\RequirePackage-command 加载的选项与我在 -command 中指定的选项不同,这是否\usepackage[...]{hyperref}会导致问题?

相关的:

答案1

基本上,该包仅加载一次,并带有当时指定的选项。如果先前指定了指定的选项,则任何后续使用\RequirePackage或的\usepackage选项都会被忽略,否则会产生错误。通常将选项放在上是可行的\documentclass,因此它们是所有包都可见的全局选项。


选项冲突错误的帮助文本建议将冲突包放在全局选项中,\documentclass但这实际上并不是很好的建议。(人们可能会认为这是一个 latex 错误)。有效的方法是使用类似

\documentclass{article}


\PassOptionsToPackage{pdfa=true,linkbordercolor={0 0 1}}{hyperref}
\usepackage[a-1b]{pdfx}
\usepackage[pdfa=true]{hyperref}

\begin{document}
a
\end{document}

\PassOptionsToPackage实际上并不加载包,但确实安排了如果加载了包,它将获得这些选项以及加载时明确列出的任何其他选项。因此,如果您怀疑一个或多个包正在内部加载包,并且想要确保它具有某些选项,则可以使用此方法。在hyperrefmhp 的答案中建议的替代方案也很好的情况下,请避免使用包选项并改用机制hypersetup。但是,并非所有包都提供在以这种方式加载包后设置选项的方法。

答案2

多次加载具有不同(即可能冲突)选项的包很容易导致选项冲突。幸运的是,hyperref包不需要在加载时设置。您可以使用以下方法\hypersetup来设置它们:

\hypersetup{linkbordercolor={0 0 1}}

相关内容