在我的 MWE 中,\hypersetup 在 \cleardoublepage 之后被调用。但是 \hypersetup 在 \cleardoublepage 之后不能正常工作,即文档属性中没有 PDF 元数据。
\documentclass{book}
\usepackage{hyperref}
\usepackage{blindtext}
\begin{document}
\blindtext
\cleardoublepage
\blindtext
\hypersetup{pdftitle={test}}
\end{document}
答案1
hyperref 调用命令来设置第一页之后的元数据。因此,下一页上的每个 \hypersetup 都会被忽略。您可以使用基元设置标题,但随后您需要确保内容是有效的 pdf。并且您最好从 hyperref 命令中删除元数据,以避免信息字典中有两个标题:
\documentclass{book}
\usepackage[]{hyperref}
\usepackage{blindtext}
\usepackage{xpatch}
\makeatletter
\xpatchcmd\PDF@FinishDoc{/Title(\@pdftitle)}{}{}{\fail}%
\makeatletter
\begin{document}
\blindtext
\cleardoublepage
\blindtext
\pdfinfo{/Title (test)}
\end{document}
但总的来说,我认为最好稍后更改强制您设置数据的任何内容。
答案2
使用机制的一个例子aux
:
\documentclass{article}
\usepackage{hyperref}
% usage of pdftitle in preamle is overwritten
\hypersetup{pdftitle={preamble}}
\makeatletter
\newcommand\setPdfTitle[1]{%
\protected@write\@auxout{}{%
\string\ifx\string\@onlypreamble\string\@notprerr
\string\else
\string\AtBeginDocument{\string\def\string\@pdftitle{#1}}%
\string\fi
}%
}
\makeatother
\begin{document}
a \newpage
\setPdfTitle{set title very late}
b
\end{document}
另一个示例是将执行延迟\PDF@FinishDoc
到文档结束,可以在以下位置找到github 评论。
这两个例子都与引擎无关。