软件包“词汇”:临时禁用`

软件包“词汇”:临时禁用`

我使用包裹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.%
}

相关内容