![hyperref 带有 implied=false 给出警告](https://linux22.com/image/261812/hyperref%20%E5%B8%A6%E6%9C%89%20implied%3Dfalse%20%E7%BB%99%E5%87%BA%E8%AD%A6%E5%91%8A.png)
当我使用时收到以下警告beamer
软件包 hyperref 警告:选项“pdftitle”已被使用
我可以根据类使用以下 MWE 重新创建该article
问题
\documentclass{article}
\usepackage[implicit=false]{hyperref}
\AtBeginDocument{\hypersetup{pdftitle=mytitle}}
\begin{document}
Hello world
\end{document}
由于我无法理解(也不想了解)的原因,beamer
需要hyperref
使用 加载implicit=false
。\AtBeginDocument{\hypersetup{pdftitle=mytitle}}
发生在我编写的包中。 鉴于我需要使用 加载,hyperref
并且implicit=false
需要pdftitle
在加载后设置hyperref
,有没有办法避免此警告(不使用包silence
)? 是的,我知道这只是一个警告,并不重要。
可能有帮助,但也可能产生误导的是
\documentclass{article}
\AtBeginDocument{\hypersetup{pdftitle=mytitle}}
\AtBeginDocument{\hypersetup{pdftitle=mytitle}}
\usepackage[implicit=false]{hyperref}
\begin{document}
Hello world
\end{document}
pdftitle
尽管给出了两次,但没有给出警告。
答案1
option 的设置pdftitle
在 中使用\PDF@FinishDoc
。通常它在输出第一页时调用,但使用 option 时则implicit
通过 完成\AtBeginDocument
。
因此,您可以使用\AtBeginDocument
前包hyperref
已加载,或者包etoolbox
有助于钩住\AtEndPreamble
:
\documentclass{article}
\usepackage[implicit=false]{hyperref}
\usepackage{etoolbox}
\AtEndPreamble{\hypersetup{pdftitle=mytitle}}
\begin{document}
Hello world
\end{document}
答案2
再深入挖掘一下,我想我有一个答案。问题是implicit
导致\PDF@FinishDoc
比平时更早运行。的默认行为是禁用设置\PDF@FinishDoc
的能力,而是导致它产生警告。一个简单的解决方法是使用而不是。我猜这有一些缺点,但我不知道它们是什么。另一种可能性是重新定义以便它稍后运行。我犹豫着是否让它稍后运行,因为我猜有理由让它使用更早运行。也可能可以防止被禁用,或者重新启用,设置它,然后再次禁用它。\hypersetup
pdftitle
\pdfinfo{/Title (mytitle)}
\hypersetup{pdftitle=mytitle}
\PDF@FinishDoc
implicit
pdftitle
pdftitle
答案3
我意识到这是一个老问题,但我想补充一点,使用新的lthooks
可以覆盖beamer
将“隐式”设置改为“OFF”:
\AddToHook{ package/before/hyperref }
{
\PassOptionsToPackage{ implicit = true }{ hyperref }
}
这将添加implicit=true
到传递给 的选项的末尾hyperref
。这不会给我的使用带来任何问题beamer
,但由于缺乏文件我不完全确定这是什么真的做。