超链接警告--PDF字符串中不允许使用代币

当编译一个beamer演示文稿并使用以下author命令时

\author{Name \\ \texttt{my.email@domain.com}}

我在我的日志文件中得到了以下超文本警告

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

Package hyperref Warning: Token not allowed in a PDF string (PDFDocEncoding):
(hyperref)                removing `\new@ifnextchar' on input line 15.

我知道这与hyperref设置PDF元数据有关,其中的换行符没有什么意义,应该删除。

试图设置

\hypersetup{pdfauthor={Name}}

并没有改变情况,似乎hyperref仍然在寻找作者的命令。

我怎样才能得到所需的作者姓名与电子邮件的显示,并使hyperref满意?

解决办法

有一个名为 "texorpdfstring "的宏,它需要两个参数,第一个参数用于(La)TeX,第二个参数用于pdf,所以类似于

\author{A.U. Thor\texorpdfstring{\\ foo@bar.baz}{}} 

应该可以。

该命令没有在文件序言中定义,所以在这种情况下,必须在begin{document}之后指定author{}

(是的,我已经回避了这个问题,我不知道在我的头顶上是否允许把`url放在另一个参数里面...)

评论(0)

虽然Ulrich'的答案是正确的,也是可行的,但有一个更普遍、更透明的方法来解决这个问题。

来自hyperref包的pdfstringdefDisableCommands命令可以用来重新定义PDF书签字符串中通常不支持的命令。

在OP的例子中,违规的命令是texttt`,可以通过这种方式重新定义它们来做其他事情。

\pdfstringdefDisableCommands{%
  \def\\{}%
  \def\texttt#1{}%
}

然后,可以在文件中指定作者,而不必特别注意。

\author{Name \\ \texttt{my.email@domain.com}}

并将按原样格式化,但随后在PDF信息字符串中作为姓名放入。

评论(0)

人们还可以添加

\PassOptionsToPackage{unicode}{hyperref}
\PassOptionsToPackage{naturalnames}{hyperref}

在 "documentclass{beamer}"之前,删除许多因国家(非英语)章节标题而产生的信息,如

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

P.S. 通常情况下,即使是一个简单的演示,也会有几千条这样的信息,即使是在一个现代的盒子上,许多IDE都需要额外的几秒钟来解析这些信息。

评论(0)