编译 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 解析它们也需要几秒钟的时间。