我想使用 lualatex 将 pdf 元数据添加到我的输出中。我知道如何用 hyperref 来实现,但我只喜欢在需要时包含该包。还有其他方法吗?我可以\pdfinfo
与 pdflatex 一起使用,也可以\special
与 xelatex 一起使用,但我无法让它们与 lualatex 一起使用:
\documentclass{article}
% Works with pdflatex but gives error with lualatex:
%\pdfinfo{ /Title (My Story) /Author (Me) }
% Works with xelatex, but does not work with lualatex:
%\special { pdf:docinfo << /Title (My Story) /Author (Me)>> }
\begin{document}
I lived.
\end{document}
答案1
使用原语的问题在于它们不受管理。这意味着,如果您的代码出于某种原因多次设置信息,则最终会在信息字典中出现重复条目:
<< /Title (My Story) /Author (Me) /Title (My other Story) /Author (some one else) >>
这是不允许的。
这就是 PDF 管理存在的原因之一。它可以处理这个问题。使用其低级命令,您可以像这样插入标题:
\DocumentMetadata{}
\documentclass{article}
\ExplSyntaxOn
\pdfmanagement_add:nnn{Info}{Title}{(My~Story)}
\pdfmanagement_add:nnn{Info}{Author}{(Me)}
\pdfmanagement_add:nnn{Info}{Title}{(My~other~Story)}
\pdfmanagement_add:nnn{Info}{Author}{(Someone)}
\ExplSyntaxOff
\begin{document}
aaa
\end{document}
最后一个设置将获胜。请注意,您的任务是确保字符串在 PDF 中有效,因此您必须添加括号并转义非 ASCII 等。
使用 latex-lab 中的新标题模块会更加容易。这需要当前最新的 tex 系统:
\DocumentMetadata{testphase=title}
\documentclass{article}
\title{my story}
\author{me}
\begin{document}
aaa
\end{document}
答案2
根据 Udi Fogiel 的有益评论,我解决了这个问题:
\documentclass{article}
\usepackage{iftex}
\ifluatex
% From section 3.2.2 of Luatex manual:
\pdfextension info { /Title (My Story) /Author (Me) }
\else\ifxetex
\special { pdf:docinfo << /Title (My Story) /Author (Me)>> }
\else\ifpdftex
\pdfinfo{ /Title (My Story) /Author (Me) }
\fi\fi\fi
\begin{document}
I lived.
\end{document}