hyperref:PDF 字符串中不允许使用标记(PDFDocEncoding):(不重复)如何包含日期 \today?

hyperref:PDF 字符串中不允许使用标记(PDFDocEncoding):(不重复)如何包含日期 \today?

我已经离开 Beamer 几年了,现在我回来回顾我以前整理的笔记(代码样本)并制作一些新的演示文稿。

当我编译代码时,我收到以下警告:

hyperref: Token not allowed in a PDF string (PDFDocEncoding): sample.tex

我知道这个警告已经在这里被提出并回答了”Hyperref 警告 - PDF 字符串中不允许使用令牌“还有这里”Hyperref-不允许使用令牌[重复]“。

我针对同一警告提出疑问,因为我找不到如何在函数中包含日期\today而不产生警告的答案。

在我的代码示例中,如果我包含该函数,\today则会收到警告,如果我删除该函数并手动添加日期(例如 2018 年 4 月 23 日),则代码可以很好地编译。

样本更新 2:最小工作示例)

\documentclass[xcolor=pdftex,dvipsnames,table]{beamer}
\usepackage{lmodern}% http://ctan.org/pkg/lm (For special Fonts)

\author[First Last Name]{Date: \today} % (optional, for multiple authors)

\begin{document}
  \titlepage
\end{document}

所以我的问题是,有没有办法包含该\today函数而不收到警告?我不想抑制警告,我知道有原因的警告。我想问是否有人看到我做错了什么,并且知道除了手动更新日期之外的任何解决方法。

答案1

的默认定义\today是可扩展的,但加载beamer会改变它:

\documentclass[xcolor=pdftex,dvipsnames,table]{beamer}
\usepackage{lmodern}% http://ctan.org/pkg/lm (For special Fonts)

\show\today

\author[First Last Name]{Date: \today} % (optional, for multiple authors)

\begin{document}
  \titlepage
\end{document}

显示 的定义\today

> \today=macro:
->\ifcase \month \or \translate {January}\or \translate {February}\or \translat
e {March}\or \translate {April}\or \translate {May}\or \translate {June}\or \tr
anslate {July}\or \translate {August}\or \translate {September}\or \translate {
October}\or \translate {November}\or \translate {December}\fi \space \number \d
ay , \number \year .
l.4 \show\today

\translate命令很强大,因此无法扩展,这就是问题所在。一个简单的解决方案是加载datetime2,然后\today重新变为可扩展的:

\documentclass[xcolor=pdftex,dvipsnames,table]{beamer}
\usepackage{lmodern}% http://ctan.org/pkg/lm (For special Fonts)

\usepackage[en-US]{datetime2}

\author[First Last Name]{Date: \today} % (optional, for multiple authors)

\begin{document}
  \titlepage
\end{document}

此示例还要求datetime2-english这是单独安装的。

相关内容