unicode-math
这是或hyperref
中的一个错误吗LuaLaTeX
?
% !TeX program = lualatex
% !TeX encoding = utf8
\documentclass[14pt]{extarticle}
\usepackage{fontspec}
\usepackage{amsmath}
\setsansfont{CMU Sans Serif}
\setmainfont{CMU Serif}
\setmonofont{CMU Typewriter Text}
\usepackage{unicode-math} % this one DOES NOT cause error without hyperref
\usepackage[english]{babel}
\usepackage{hyperref} % this one DOES NOT cause error without unicode-math
\begin{document}
\section{title $\alpha$}
\end{document}
我收到错误
不正确的字母常数。\section{title $\alpha$}
答案1
书签只能包含相当简单的文本。这意味着 hyperref 必须将 LaTeX 输入转换为有意义的内容。为此,它通常会删除或替换有问题的内容。一般来说,hyperref 至少可以避免此过程中的错误,但它无法处理已分配给字符的命令:https://github.com/latex3/hyperref/issues/63. 遗憾的是 unicode-math 在很多地方都出现了这种情况。
您可以使用\texorpdfstring
hyperref 提供替代方案。例如,直接 unicode 字符 U+1D6FC 适用于大多数 pdf 阅读器。您可以直接输入它,也可以使用以下符号^^
:
\documentclass[14pt]{extarticle}
\usepackage{fontspec}
\usepackage{amsmath}
\setsansfont{CMU Sans Serif}
\setmainfont{CMU Serif}
\setmonofont{CMU Typewriter Text}
\usepackage{unicode-math} %
\usepackage[english]{babel}
\usepackage{hyperref} %
\begin{document}
\section{title \texorpdfstring{$\alpha$}{
答案2
我相信你遇到了 pdf 书签指定方式的一个基本缺陷,而不是其中任何一个的unicode-math
缺陷hyperref
本身。
可以使用设备\texorpdfstring
来解决此缺点。例如,在 LuaLaTeX 下,
\section{title \texorpdfstring{$\alpha$}{$\symit{alpha}$}}
将导致title alpha
(注意:不是 title α
) 出现在书签中。
在旁边:即使x03B1
Unicode 表中的插槽指向 α,并且 CMU Serif 字体在该插槽中有正确的符号,
\section{title \texorpdfstring{$\alpha$}{\symbol{"03B1}}}
根本不起作用,因为书签现在显示title "03B1
。这肯定比 更不令人满意title alpha
,不是吗?(这也是为什么我一开始就认为书签的形成方式存在根本问题。)
这个故事的寓意是什么?也许,我们应该避免在显示为 pdf 书签的命令参数中使用数学模式希腊字母。