\texorpdfstring 为整本书

\texorpdfstring 为整本书

我目前正在写一篇充满数学方程式的论文,我总是收到警告

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.

但是,您至少会获得一组更易理解的书签,如下所示:

书签和目录的图片

相关内容