\emptyset 不适用于 LuaTex + 词汇表 + unicode-math(错误?)

\emptyset 不适用于 LuaTex + 词汇表 + unicode-math(错误?)

以下代码无法与 LuaTex 配合使用(我收到“未定义控制序列”错误)。如果我注释掉 \usepackage{unicode-math} 或将词汇表名称从 $\emptyset$ 更改为其他名称,它就可以正常工作。这是一个错误吗?我需要所有软件包,我该如何修复它。

% !TEX TS-program = lualatex
\documentclass{article}
\usepackage{unicode-math}

\usepackage{glossaries}
\newglossaryentry{symb}{name={$\emptyset$}, description={description}}

\begin{document}
$\emptyset$, \gls{symb}
\end{document}

答案1

一些(但不是全部)定义unicode-math是在 处执行的\begin{document}。特别\emptyset是 被定义为\varnothing在早期,但 的定义\varnothing发生在文档主体的开头。将词汇表条目的定义移出序言可避免此问题。

处理此问题的其他方法包括

  • \glsnoexpandfields在定义之前发布

  • 添加\protect词汇表条目

    \newglossaryentry{symb}{name={$\protect\emptyset$}, description={description}}
    
  • \varnothing在序言中提供临时定义,例如\let\varnothing\relex在之后\usepackage{unicode-math}

词汇表作者 Nicola Talbot 建议的第一种方法是用于序言中条目的最简单方法。(根据文档,这应该是不必要的,因为文档指出name默认情况下不会扩展字段,但您的示例显示正在扩展。)egreg 建议使用第二种方法,这种方法适用于一次性条目。最后一种方法是我最初建议的;我不会将其作为一般做法推荐,但它确实准确地说明了问题所在:

Sample output

\documentclass{article}
\usepackage{unicode-math}
\let\varnothing\relax

\usepackage{glossaries}
\newglossaryentry{symb}{name={$\emptyset$}, description={description}}

\makeglossaries

\begin{document}
$\varnothing$, $\emptyset$, \gls{symb}

\printglossaries
\end{document}

相关内容