以下代码无法与 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 建议使用第二种方法,这种方法适用于一次性条目。最后一种方法是我最初建议的;我不会将其作为一般做法推荐,但它确实准确地说明了问题所在:
\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}