我将其glossaries-extra
用于词汇表。例如,有些键user1…6
可用于提供术语的特殊形式(替代复数、不规则动词等)。这对于英语来说可能就足够了,因为英语中大多数名词只有一种单数形式和一种复数形式,形容词和动词几乎不会改变。
然而,德语有很多不同的形式:名词有四种格(主格、属格、与格和宾格),单数和复数都有,即 8 种不同的形式。现在,如果你有一个由形容词修饰的名词组成的术语,你需要考虑 24 种而不是 8 种形式,因为德语形容词的变格可能会有所不同,这取决于它们前面是带有定冠词(英语中的“the”),还是不定冠词(英语中的“a”/“an”),或者根本没有冠词。
因此,我定义了 22 个新键(24 个减去标准单数和复数形式),如下所示:
% Genitive, no article
\glsaddkey*{gen}{\glsentrylong{\glslabel}}
{\glsentrygen}{\Glsentrygen}
{\glsgen}
{\Glsgen}
{\GLSgen}
% Genitive, definite article
\glsaddkey*{gendef}{\glsgen{\glslabel}}
{\glsentrygendef}{\Glsentrygendef}
{\glsgendef}
{\Glsgendef}
{\GLSgendef}
每个键定义都会创建新的命令(例如\glsgen
或\GLSgendef
)。将这些键添加到我的词汇表后,我总是可以为正确的情况选择正确的命令。
现在,我已定义了几个用于特殊用途的宏,例如引用担任编辑的机构的缩写(因此一部分链接到词汇表,而另一部分链接到参考书目)。一个简单的示例可能是这个宏,它输出缩写的长形式,后跟包含短形式和附加文本的括号:
\newcommand{\glsappendto}[2]{%
\glsxtrlong{#1} (\glsxtrshort{#1}; #2)%
}
在文本中,我希望以正确的语法形式使用这些宏,例如\glsgen{#1} (\glsxtrshort{1}; #2}
当我需要普通属格时,或者glsgendef{#1} …
当我需要定冠词后的属格形式时。但是,我不想为每个需要的宏定义 20 多个新版本(\glsappendtogen
,\glsappendtogendef
等等),这些宏仅在调用的第一个命令上有所不同。
是否可以将宏名的一部分作为参数传递,以便glsappendto
将其用作命令?我的意思是
\newcommand{\glasppendto}[3]{%
\gls#1{#2} (\glsxtrshort{#2}; #3}%
}
然后可以使用如下命令来调用它:
\glsappendto{gen}{label}{additional text}
\glsappendto{gendef}{label}{different additional text}
答案1
回答原始问题(除了其他问题):
可以使用参数生成宏调用或者使用调用名内的其他宏(参考 OP 的示例)
\newcommand{\glasppendto}[3]{%
\csname gls#1\endcsname{#2} (\glsxtrshort{#2}; #3}%
}
或者更普遍地
\csname foo\endcsname
和 一样\foo
如果\foobar
扩展为myprettymacroname
则\csname \foo\endcsname
与 相同\myprettymacroname
。