使用 pdflatex 编译文档时,可以使用 设置文档的 PDF CreationDate \pdfinfo{...}
。我想自动将其设置为\date{...}
文档中提供的日期。
其中一种方法如下。
\documentclass{article}
\usepackage[en-US]{datetime2}
\title{My Title}
\author{A. U. Thor}
\date{\DTMdisplaydate{2011}{12}{13}{-1}}
%\date{Winter 2011} % compiles, but results in blank CreationDate
%\date{\DTMdate{2011-12-13}} % compiles, but results in blank CreationDate due to robustness
\makeatletter
{\DTMsetstyle{pdf}
\pdfinfo{
/Title (\@title)
/CreationDate (\@date 000000-05'00')
}}
\makeatother
\begin{document}
\maketitle % typesets date in a US-style, as expected
\end{document}
但是这个解决方案似乎有几个不太理想的地方。首先,我需要编写代码\@date 000000-05'00'
来将日期转换为带时区的完整时间(需要时区以避免日期以 UTC 定义,然后在美国显示为早一天)。其次,我需要使用 来\DTMdisplaydate
扩展\DTMdate
宏。
由于这似乎是一件相当标准的事情,我想知道其他 pdflatex 用户开发了什么解决方案。
答案1
我个人的方法是像这样保存这个日期:
\documentclass{article}
\usepackage[en-US]{datetime2}
\DTMsavetimestamp{creation}{2011-12-13T00:00:00-05:00}
\title{My Title}
\author{A. U. Thor}
\date{\DTMusedate{creation}}
\makeatletter
{\DTMsetstyle{pdf}
\pdfinfo{
/Title (\@title)
/CreationDate (\DTMuse{creation})
}}
\makeatother
\begin{document}
\maketitle % typesets date in a US-style, as expected
\end{document}
您可以提供这样的包装器命令:
\documentclass{article}
\usepackage[en-US]{datetime2}
\newcommand{\mydate}[1]{%
\DTMsavetimestamp{creation}{#1T00:00:00-05:00}%
\date{\DTMusedate{creation}}%
{\DTMsetstyle{pdf}%
\pdfinfo{
/CreationDate (\DTMuse{creation})
}}%
}
\title{My Title}
\author{A. U. Thor}
\mydate{2011-12-13}
\makeatletter
\pdfinfo{
/Title (\@title)
}
\makeatother
\begin{document}
\maketitle % typesets date in a US-style, as expected
\end{document}
如果您的时区为负数,则至少需要版本 1.5.3(2018-07-20)以避免在时区之前datetime2
意外插入的错误。\relax