我想让章节标题中的数学符号自动转换为书签中的纯文本。我找到了这个答案,它确实清除了“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{