我目前正在写一篇充满数学方程式的论文,我总是收到警告
Package hyperref Warning: Token not allowed in a PDF string (PDFDocEncoding):
我已读到解决方案是\texorpdfstring
针对每个部分使用,但我想知道是否可以对整个文档使用一个命令,这肯定会提高文件的可读性.tex
。
答案1
既然你提到了方程式,这里有一个包含一些方程式的 MWE:
\documentclass{report}
\usepackage[colorlinks]{hyperref}
\begin{document}
\tableofcontents
\chapter{A Sample Chapter \ensuremath{\sin a+\cos b=c}}
\chapter{Another Sample Chapter $\sin a + \cos b = c$}
\end{document}
这会产生大量警告,例如:
Package hyperref Warning: Token not allowed in a PDF string (PDFDocEncoding):
(hyperref) removing `\mathop' on input line 9.
Package hyperref Warning: Token not allowed in a PDF string (PDFDocEncoding):
(hyperref) removing `\mathgroup' on input line 9.
Package hyperref Warning: Token not allowed in a PDF string (PDFDocEncoding):
(hyperref) removing `\symoperators' on input line 9.
在每种情况下,警告都会标识有问题的令牌。您可以\pdfstringdefDisableCommands
在创建书签时禁用这些令牌。
在 MWE 中,第一个标题使用\ensuremath
(不推荐,但是为了说明目的)。可以禁用此功能,以便它忽略其参数,如下所示:
\documentclass{report}
\usepackage[colorlinks]{hyperref}
\pdfstringdefDisableCommands{\let\ensuremath\@gobble}
\begin{document}
\tableofcontents
\chapter{A Sample Chapter \ensuremath{\sin a+\cos b=c}}
\chapter{Another Sample Chapter $\sin a + \cos b = c$}
\end{document}
现在,这会抑制第一个(但不会抑制第二个)的警告\chapter
,并且方程式会从书签中删除。您可以对其他有问题的命令使用类似的方法。您可以\@gobble
在\let
分配中使用以丢弃参数(如上所示)或\@firstofone
丢弃命令并将参数放入书签中,或者\@empty
丢弃没有参数的命令。
第二种情况\chapter
更成问题。您是想完全放弃方程式(如\ensuremath
上面的第一种情况)还是想尝试近似书签中的方程式?以下操作将使\sin
和\cos
仅显示sin
和,cos
但您仍会收到有关数学移位的警告:
\documentclass{report}
\usepackage[colorlinks]{hyperref}
\pdfstringdefDisableCommands{%
\let\ensuremath\@gobble
\def\sin{sin }%
\def\cos{cos }%
}
\begin{document}
\tableofcontents
\chapter{A Sample Chapter \ensuremath{\sin a+\cos b=c}}
\chapter{Another Sample Chapter $\sin a + \cos b = c$}
\end{document}
这只留下警告:
Package hyperref Warning: Token not allowed in a PDF string (PDFDocEncoding):
(hyperref) removing `math shift' on input line 17.
Package hyperref Warning: Token not allowed in a PDF string (PDFDocEncoding):
(hyperref) removing `math shift' on input line 17.
但是,您至少会获得一组更易理解的书签,如下所示: