避免“Package hyperref 警告:PDF 字符串中不允许使用令牌”警告的方法

避免“Package hyperref 警告:PDF 字符串中不允许使用令牌”警告的方法

我知道这个问题被问到近80次最好的解决方案可能是使用\texorpdfstring{...}{...},但我不想让文档内部变得混乱,所以我在考虑此解决方案

\pdfstringdefDisableCommands{%
  \def\${}%
  \def\alpha{alpha}%
}

但这并不能改变事实

\section{$\alpha$}

发出警告

包 hyperref 警告:PDF 字符串(PDFDocEncoding)中不允许使用标记:(hyperref)删除“数学移位”[...]

所以问题是:在分段处理数学时我可以使用\pdfstringdefDisableCommands{...}来避免使用吗?\texorpdfstring{...}{...}

答案1

这里我使用\(...\)代替$...$。避免警告。

\documentclass{article}
\usepackage{hyperref}
\pdfstringdefDisableCommands{%
%  \def${}%
  \def\alpha{alpha}%
  \def\({}%
  \def\){}%
  \def\texttt#1{<#1>}%
}
\begin{document}
\section{\texttt{xyz}\(\alpha\)}
\end{document} 

在此处输入图片描述

或者在替换中添加更多描述:

\documentclass{article}
\usepackage{hyperref}
\pdfstringdefDisableCommands{%
  \def\alpha{alpha}%
  \def\({Math:[}%
  \def\){]}%
  \def\texttt#1{<#1>}%
}
\begin{document}
\section{\texttt{xyz}\(\alpha\)}
\end{document} 

在此处输入图片描述

答案2

由于我正在使用unicode-math包,所以我实际上在我的工作中这样做:

\documentclass{article}
\usepackage[unicode]{hyperref}
\usepackage{unicode-math}
\newcommand\pdfmath[1]{\texorpdfstring{$#1$}{#1}}
\begin{document}
\section{\pdfmath{α}}
\end{document}

或者,正如 Heiko Oberdiek 所建议的,如果你不喜欢unicode-math,你可以这样做:

\documentclass{article}
\usepackage[unicode,psdextra]{hyperref}
\newcommand\pdfmath[1]{\texorpdfstring{$#1$}{#1}}
\begin{document}
\section{\pdfmath{\alpha}}
\end{document}

虽然不是最理想的,但比普通的要好一点\texorpdfstring。所以,所有这些只是如果你像我一样不喜欢\(\)作为数学的界限(但也看到https://tex.stackexchange.com/a/513/56823以及特别是下面关于此的评论),否则你最好参考 Steven + Heiko 的答案。;)

相关内容