假设您想要在.sty
或.cls
文件中设置一些hyperref
选项,以防最终用户加载此包。因为只有在文档的开头您才知道是否hyperref
已加载,所以您必须使用类似以下内容:
\AtBeginDocument{%
\@ifpackageloaded{hyperref}{%
\hypersetup{%
⟨my advised hyperref's options⟩%
}%
}{%
}%
}%
这已经在在自己的包中使用 hypersetup。
但是这种方法的缺点是,如果最终用户有不同的品味并\hypersetup{⟨another hyperref's options⟩}
在其序言中插入,则\AtBeginDocument{\hypersetup{...}}
来自.sty
或.cls
文件的内容将覆盖他的设置。
为了避免这个问题,最终用户可以\hypersetup
在文档正文中而不是在序言中指定自己的选择。但是,假设您不想让最终用户分心,是否可以收集 hyperref 的\hypersetup
参数?
这个想法是在文档开始时获取在级别\usepackage
(使用宏很容易\@ifpackagewith
)或作为\hypersetup
参数指定的可能选项,而不是覆盖它们。
答案1
我想我已经找到了一个针对主要问题的真正答案,但它不是针对根本问题的解决方案(即如何不通过或文件中的声明覆盖最终用户hyperref
的选项):而不是\AtBeginDocument{\hypersetup{...}}
.sty
.cls
\AtBeginDocument{%
\@ifpackageloaded{hyperref}{%
\hypersetup{%
⟨my advised hyperref's options⟩%
}%
}{%
}%
}%
它应该足够使用
\PassOptionsToPackage{%
⟨my advised hyperref's options⟩
}{hyperref}%
hyperref
这些选项只有在加载时才会被考虑,并且只在加载时才会被考虑。因此,⟨another hyperref's options⟩
使用以下方式指定
\hypersetup{⟨another hyperref's options⟩}
或
\usepackage[⟨another hyperref's options⟩]{hyperref}
将覆盖或文件⟨my advised hyperref's options⟩
中指定的内容。.sty
.cls