使用 Lualatex 添加 pdf 元数据(无需 hyperref)

使用 Lualatex 添加 pdf 元数据(无需 hyperref)

我想使用 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}

相关内容