\detokenize 在书签中创建奇怪的字符

\detokenize 在书签中创建奇怪的字符

我想让章节标题中的数学符号自动转换为书签中的纯文本。我找到了这个答案,它确实清除了“pdf 字符串中不允许使用令牌”警告。 在章节标题中自动添加 \texorpdfstring 作为数学模式

但是,正如 egreg 的评论中提到的,书签中的数学符号可能会输出一些奇怪的中文字符。我想知道这是什么原因造成的,如何避免这个问题?

答案1

基本上你无法避免它。\detokenize这不是一个好主意。如果你在标题中使用 catcode 12 反斜杠,无论是\detokenize\string\还是其他什么,你都会破坏书签。你会得到类似的东西\000\040\alp \000h\000a,这简直是垃圾。

我认为没有简单的方法可以改变这种情况。在可以进行替换的地方,hyperref 已经用内部表示替换了一些命令,该表示也使用 catcode 12 反斜杠,因此不可能进行简单的替换,因为它会破坏其他命令,例如\textbackslash。需要使用正则表达式,这会大大减慢编译速度,而收益却很小。

您自然可以做的是将数学内容传递给命令\fake@math,并预定义用来执行合理操作的符号集:

\documentclass{article}
\usepackage{hyperref}

\makeatletter
\pdfstringdefDisableCommands{\let\(\fake@math}
\pdfstringdefDisableCommands{\def\alpha{

相关内容