先前对 Hyperref 警告的修复
大约有 100 个问题涉及在、、hyperref
中使用某些令牌的警告,例如\part
\chapter
\section
\subsection
任何文档类。这些标记会导致 PDF 书签出现问题,可以使用 进行纠正\texorpdfstring
。例如,
\chapter{Find $A$}
固定为\chapter{Find \texorpdfstring{$A$}{A}}
\author{Name\\ [email protected]}
固定为\author{Name\texorpdfstring{\\ [email protected]}{}}
我的问题
我收到警告时任何事物\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
不执行任何操作。但是,更改任何一个文档类别(例如,book
,amsart
等等)或者更改切片(例如,,,\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}