为什么 hyperxmp 5.11 不再为 XMP 中的作者生成 dc:creator?

为什么 hyperxmp 5.11 不再为 XMP 中的作者生成 dc:creator?

我最近从使用 texlive2022 切换到 texlive2023,在此过程中,hyperxmp 中的某些功能似乎出现了问题。特别是,如果我使用以下

\documentclass{article}                                                                                                          
\usepackage{hyperxmp}                                                                                                            
\usepackage{hyperref}                                                                                                            
\title{Baking through the ages}                                                                                                  
\author{Larry Fine, Moe Howard}                                                                                                  
\hypersetup{pdftitle={Baking through the ages},                                                                                  
  pdfauthor={A. Baker, C. Kneader},                                                                                              
  pdflang={en},                                                                                                                  
  pdfkeywords={cookies, muffins, cakes},                                                                                         
  pdfpublisher={Baking International}                                                                                            
}                                                                                                                                
\begin{document}                                                                                                                 
\maketitle                                                                                                                       
This is the document.                                                                                                            
\end{document} 

在带有 hyperxmp v5.9 的 texlive2022 下,这将生成可从 pdfauthor 中识别作者的 XMP:

<dc:creator>                                                              
  <rdf:Seq>                                                               
    <rdf:li>A. Baker</rdf:li>                                             
    <rdf:li>C. Kneader</rdf:li>                                           
  </rdf:Seq>                                                              
</dc:creator>

(我特意创建了一个具有不同值的示例,以\author查看 hyperxmp 从哪里获取它)。在带有 hyperxmp v5.11 的 texlive2023 下,它完全省略了此部分<dc:creator,并且作者信息也不存在于其他地方。hyperxmp 5.11 和 hyperxmp 5.9 之间肯定存在差异,但我找不到与 pdfauthor 处理方式直接相关的东西。此时我不知道如何解决问题。有人可以在这里提出问题的根源吗?有人可以在 texlive2023 下尝试该文档,然后检查 pdf 文件以查看该dc:creator字段是否存在吗?您不需要 pdf 工具即可查看它,因为 XMP 包只是 PDF 内的文本。

答案1

hyperxmp尝试改变处理选项的方式hyperref(在包选项和中\hypersetup),因为它想要捕获选项的内容,比如pdfauthorXMP 元数据。

它通过重新定义\ProcessKeyvalOptions注入代码来实现这一点。这不是一个好主意,因为\ProcessKeyvalOptions其他软件包也使用了这种方法,并且在 2022 年发现它可能导致循环:https://tex.stackexchange.com/a/648036/2388

在 5.11 版本中,hyperxmp 尝试修复此问题,并\ProcessKeyvalOptions在第一次使用后重置为原来的含义:

\let\hyxmp@ProcessKeyvalOptions=\ProcessKeyvalOptions
\renewcommand*{\ProcessKeyvalOptions}{%
  \global\let\ProcessKeyvalOptions=\hyxmp@ProcessKeyvalOptions
  \hyxmp@redefine@Hyp
  \hyxmp@ProcessKeyvalOptions
}

但是这个“修复”使得补丁实际上毫无用处,因为hyperref在开始时加载了一个使用太多的包\ProcessKeyvalOptions,因此hyperxmp重新定义丢失了。

您应该报告此错误。作为一种解决方法,只要您在稍后设置所有相关选项,hyperxmp之后加载应该或多或少可以工作。hyperref\hypersetup

另外,您可以通过从\DocumentMetadatapdfmanagement-testphase 代码加载 PDF 管理来设置 XMP 元数据。请参阅l3pdfmeta文档或 https://tug.org/TUGboat/tb43-3/tb135fischer-xmp.pdf关于如何处理 XMP:

\DocumentMetadata{}
\documentclass{article}
\usepackage{hyperref}
\title{Baking through the ages}
\author{Larry Fine, Moe Howard}
\hypersetup{pdftitle={Baking through the ages},
  pdfauthor={A. Baker, C. Kneader},
  pdflang={en},
  pdfkeywords={cookies, muffins, cakes},
  pdfpublisher={Baking International}
}
\begin{document}
\maketitle
This is the document.
\end{document}

相关内容