无法在 PDF 字符串中使用 datetime2 函数

无法在 PDF 字符串中使用 datetime2 函数
\documentclass{article}
\usepackage[calc,en-US]{datetime2}
\usepackage{hyperref}

\hypersetup{
  pdfinfo={ Month={\DTMmonthname{10}}}
}

\begin{document}
\DTMmonthname{10}
\end{document}    

PDF 包含“十月”,这很好,但元数据包含“10”,而我想要“十月”。

仔细观察,我看到一个警告:

Package hyperref Warning: Token not allowed in a PDF string (PDFDocEncoding):
(hyperref)                removing `\DTMmonthname' on input line 7.

这解释了为什么\DTMmonthname{10}被简单的替换10,但是我如何解析这个函数然后将生成的字符串保存在元数据中?


我简单尝试了以下操作,正如预期的那样,“无效果”被保存在元数据中。

\hypersetup{
  pdfinfo={ 
    Month={\texorpdfstring{\DTMmonthname{10}{No effect}}}
  }
}

我见过很多例子,人们想要在 tex 中使用特殊符号(比如下标),但在 PDF 字符串中接受更简单的符号,但这不是我在这里想要的。“October”不包含任何特殊符号(在其他语言中可能包含,但我坚持使用英语)。

答案1

datetime2 文档说:

如果您希望月份名称或星期名称出现在章节标题中,最好使用语言模块提供的可扩展命令,而不是 datetime2-calc 提供的强大命令。请记住,您不能在 PDF 书签中使用强大命令,并且此类命令可能会阻止使用 \MakeUppercase 的页面样式的标题中的大小写更改

所以答案是使用\DTM<root-language>monthname{x}<root-language>在哪里english

为确保\DTMenglishmonthname{x}可用,请务必通过英语语言选项(en-USen-GBen-CAdatetime2

因为您不再使用\DTMmonthname指向的\DTMenglishmonthname,所以您不再需要传递该calc选项。

\documentclass{article}
\usepackage[en-US]{datetime2}
\usepackage{hyperref}

\hypersetup{pdfinfo={Month={\DTMenglishmonthname{10}}}}

\begin{document}
\DTMenglishmonthname{10}
\end{document}
$ pdftk date.pdf dump_data | grep Month -A1
InfoKey: Month
InfoValue: October

相关内容