\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-calc 提供的强大命令。请记住,您不能在 PDF 书签中使用强大命令,并且此类命令可能会阻止使用 \MakeUppercase 的页面样式的标题中的大小写更改
所以答案是使用\DTM<root-language>monthname{x}
。<root-language>
在哪里english
。
为确保\DTMenglishmonthname{x}
可用,请务必通过英语语言选项(en-US
,en-GB
,en-CA
)datetime2
。
因为您不再使用\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