hyperref 令牌不允许警告,可能有错误?

hyperref 令牌不允许警告,可能有错误?

我目前正在使用该hyperref软件包,目前收到很多错误消息。目前所有章节和部分标题都出现同样的错误。我决定尝试制作一个最小示例,目前:

\documentclass{amsbook}

\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{graphicx}
\usepackage{hyperref}
\usepackage[dvipsnames,usenames]{color}

\begin{document}
\pagenumbering{roman}

\chapter{Preface}

\mainmatter
\pagenumbering{arabic}

\part{The}

\end{document}

向我发出以下警告:

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

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

这是软件包的错误hyperref还是因为我没有正确设置?我该如何修复这个问题或让警告消息静音?

答案1

这其实不是一个错误,而是一个无害的“功能”。你可以在书签准备期间禁用有问题的命令来解决这个问题:

\documentclass{amsbook}

\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{graphicx}
\usepackage[dvipsnames,usenames]{color}
\usepackage{hyperref}

\pdfstringdefDisableCommands{%
  \let\enspace\empty  % this causes the warning for \kern
  \let\noindent\empty % this causes the warning for \indent
}

\begin{document}
\frontmatter

\chapter{Preface}

\mainmatter

\part{The}

\end{document}

该宏的\pdfstringdefDisableCommand目的正是:为书签中没有意义的命令添加定义。几个命令已被重新定义为安全版本(例如\<space>),但如果包含所有能想到的命令,编译速度会变慢。因此,只重新定义最常见的命令,其他命令可以在需要时添加。


另外,请注意,文档的前面部分\frontmatter应优先使用。后面\pagenumbering{roman}不需要。\pagenumbering{arabic}\mainmatter

相关内容