词汇表中的 \makefirstuc 与 babel 中的 \foreignlanguage 发生冲突

词汇表中的 \makefirstuc 与 babel 中的 \foreignlanguage 发生冲突

我写了一份文档,其主要语言是英语。但我有一些词汇表条目,其名称(又称标签)是德语,但描述等又是英语。我使用包glossariesbabel

因此,我的一些词汇表定义如下:

\newglossaryentry{foo}{%
    name={\foreignlanguage{ngerman}{Foo}},%
    description={(ger.) German word for Bar.}%
}

此外,我希望词汇表中的每个条目都以大写字母开头。因此,我重新定义了

\renewcommand*{\glsnamefont}[1]{\makefirstuc{#1}}

在序言中。这会导致编译错误。

! Illegal parameter number in definition of \languagename

相反,如果我用附加项来保护该参数{},即

\renewcommand*{\glsnamefont}[1]{\makefirstuc{{#1}}}

编译成功,但整个条目都是大写的,而不仅仅是第一个字母。但这不是我想要的。

答案1

简单的解决方案是定义一个新的命令来切换语言

\newcommand*{\ngerman}[1]{\foreignlanguage{ngerman}{#1}}

然后将词汇表条目定义为

\newglossaryentry{foo}{%
    name={\ngerman{Foo}},%
    description={(ger.) German word for Bar.}%
}

而是。这样,的第一个参数\foreignlanguage就被隐藏了\makefirstuc。当然,一个可以处理任意双参数宏的更通用的解决方案会更好,但这没问题,因为德语是我在文档中唯一需要的第二种语言。

相关内容