在 amsbook 中使用 \part{} 时,hyperref 会发出警告

在 amsbook 中使用 \part{} 时,hyperref 会发出警告

先前对 Hyperref 警告的修复

大约有 100 个问题涉及在、、hyperref中使用某些令牌的警告,例如\part\chapter\section\subsection任何文档类。这些标记会导致 PDF 书签出现问题,可以使用 进行纠正\texorpdfstring。例如,

我的问题

我收到警告时任何事物\part仅当amsbook使用文档类时才放置在里面。

\documentclass{amsbook}
\usepackage{hyperref}
\begin{document}
\part{Test}
\end{document}

产生这些警告

Package hyperref Warning: Token not allowed in a PDF string (Unicode):
(hyperref)                removing `\leavevmode@ifvmode' on input line 7.

Package hyperref Warning: Token not allowed in a PDF string (Unicode):
(hyperref)                \kern 5.0pt
(hyperref)                replaced by space on input line 7.

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

使用\texorpdfstring不执行任何操作。但是,更改任何一个文档类别(例如,bookamsart等等)或者更改切片(例如,,,\chapter等等\section)可消除警告。

添加

显然,该\part命令正在尝试插入一个新页面(和其他内容)amsbook,而这正是令人困扰的地方hyperref

答案1

在此处输入图片描述

hyperref正在为 PDF 制作大纲/书签文本,这必须是纯文本,因此 hyperref 会删除/简化任何 tex 构造。它“知道”的一些命令有时会通过它提供文本替代,\texorpdfstring但在其他情况下,它只会删除未知命令并显示警告。(原始命令仍用于排版标题。)

不幸的是,在设置时amsbook使用了一些意外的(在这种情况下完全无用的)命令,因此触发了此警告。\noindent\part

这修补了命令,以便hyperref理解它。如果amsbook更新,补丁会失败,\ERROR将给出未定义的消息,希望您可以简单地删除补丁,因为这个问题已经在源头上得到了解决。

\documentclass{amsbook}

\usepackage{etoolbox}

\makeatletter
\patchcmd\@part{\protect\enspace\protect\noindent}{\hspace{.5em}}{}{\ERROR}
\makeatother

\usepackage{hyperref}


\begin{document}
\part{Test}
\end{document}

相关内容