Hyperref 警告 - PDF 字符串中不允许使用令牌

Hyperref 警告 - PDF 字符串中不允许使用令牌

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

\author{Name \\ \texttt{[email protected]}}

我的日志文件中收到以下超链接警告

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 满意?

答案1

有一个恰当的宏,虽然有点冗长,但\texorpdfstring它接受两个参数,第一个参数用于 (La)TeX,第二个参数用于 pdf,所以类似于

\author{A.U. Thor\texorpdfstring{\\ [email protected]}{}} 

应该管用。

该命令未在文档前言中定义,因此在这种情况下\author{}必须在之后指定。\begin{document}

(是的,我回避了这个问题,我不知道是否\url允许将其纳入另一个论点……)

答案2

虽然 Ulrich 的答案是正确的并且有效,但还有一种更通用、更透明的方法来解决这个问题。

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

在 OP 示例中,有问题的命令是\\\texttt,它们可以被重新定义为按以下方式执行其他操作:

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

然后,可以在文档中指定作者,无需任何特殊注意:

\author{Name \\ \texttt{[email protected]}}

并将按原样格式化,但随后放入PDF 信息字符串中。Name <[email protected]>

答案3

还可以添加

\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.

PS 通常,即使是简单的演示,也可能得到多达几千个这样的代码,即使在现代机器上,许多 IDE 解析它们也需要几秒钟的时间。

相关内容