更改 hyperxmp 或 hyperref 导致 pdfdate={\today} 出现错误

更改 hyperxmp 或 hyperref 导致 pdfdate={\today} 出现错误

以下操作以前是可以的。但最新版本的hyperxmp不再能用,并会出现错误:

./hypersetup-bug.tex:9: Argument of \hyxmp@pdf@to@xmp@date has an extra }.
<inserted text> 
                \par 
l.9 }

如何修复或解决这个问题?

\documentclass{article}

\usepackage{hyperxmp} % to add metadata info into pdf
\usepackage[pdfa]{hyperref}
\hypersetup{
  pdfapart=2, 
  pdfaconformance=u,
  pdfdate={\today},
}

\usepackage{kantlipsum}

\begin{document}
\kant[1]
\end{document}

我尝试改变序言以包含以下内容:

\usepackage[main=english]{babel}
\usepackage{datetime2}

这样可以避免错误。但是,我仍然希望能够在文档文本中包含诸如“2020 年 12 月 1 日”之类的日期。不幸的是,timedate2已重新定义\today,我无法从该包的文档中找出将两者作为参数2020-112-01的值,一方面,并​​以某种方式调整日期,以便在文档正文中包含冗长的形式“2020 年 12 月 1 日”。\today\hypersetup

答案1

错误源于pdfdate需要采用特定格式的要求,而不是<monthname> <day>, <year>hyperxmp 文档提及:

XMP 元数据可以包含多个日期(实际上是时间戳,因为它们包含日期和时间部分)。pdfdate指定文档日期。它类似于 LaTeX\date命令,并且像 一样\date默认为文档的构建日期。它必须以 XMP 格式或 PDF 格式指定。

您的日期格式与上述任何一种都不匹配。正如您所发现的,包括datetime2修复了这个问题,因为它突然符合 PDF 日期格式。但是,为了获得所需的文档内日期显示,您需要重新定义日期格式。方法如下:

\documentclass{article}

\usepackage{datetime2}
\DTMusemodule{english}{en-US}

\usepackage{hyperxmp} % to add metadata info into pdf
\usepackage[pdfa]{hyperref}

\hypersetup{
  pdftitle = {A title},
  pdfauthor = {An author},
  pdfapart = 2,
  pdfaconformance = U,
  pdfdate = {\today}
}

\usepackage{lipsum}

% Set a new date style/representation
\DTMnewdatestyle{usdate}{%
  % \DTMdisplaydate{<year>}{<month>}{<day>}{<day of week>}
  \renewcommand{\DTMdisplaydate}[4]{%
    \DTMenglishmonthname{##2} \number##3, \number##1 }%
   \renewcommand{\DTMDisplaydate}{\DTMdisplaydate}% Capitalization of \DTMdisplaydate
}
\DTMsetdatestyle{usdate}% Use the above-defined date for date representation within the document

\begin{document}

\today

\lipsum[1]

\end{document}

相关内容