我使用包裹glossaries
,我有
\renewcommand*{\glsnamefont}[1]{\makefirstuc{#1}}
在我的序言中,按照文档中的建议,使词汇表中的每个条目都以大写字母开头。但我有一些条目以 inline-math 命令开头,例如
\longnewglossaryentry{k-nearest-neighbor-method}{%
name={$k$-nearest neighbor method},%
sort={k-nearest-neighbor method}%
}{%
Explanation here.
}
汇编的第二次运行在命令gls
中的-file中失败\glossentry
,用于各自的条目
! Missing { inserted. <to be read again> $
gls
如果我删除-file 并移除条目定义中的,编译就没问题$...$
。但我需要 inline-math 才能获得正确的排版。
相反,在这里将某个字母转换为大写是没有意义的。虽然实际上有一个大写的“K”,但这应该被视为例外。
更新:我找到了部分解决方案(至少错误消失了)。而不是$...$
可以将“k”包装到 中\ensuremath{k}
。该\makefirstuc
命令可以跳过嵌套宏并将嵌套宏的参数转换为大写。这意味着\makefirstuc{\ensuremath{k}}
扩展为\ensuremath{K}
并且编译器错误消失。但主要问题仍然悬而未决。我如何才能完全禁用\makefirstuc
此条目,因为我不想在这里进行任何转换。
答案1
根据上述评论中 egreg 的建议,我找到了解决方案。您甚至不需要定义新的宏,只需以空开头即可,{}
然后将其吃掉\makefirstuc
。但需要单独设置变量text
,以便引用参考文献时使用正确的间距。总之,完整的解决方案是
\longnewglossaryentry{k-nearest-neighbor}{%
name={{}$k$-nearest-neighbor},% Start with empty token so that \makefirstuc ignores the inline math
text={$k$-nearest-neighbor},% Must be set separately without leading {} to avoid false additional spaces in citing
sort={k-nearest-neighbor}% The sort algorithm needs a plain-text variant
}{%
Explanantion here.%
}