我正在尝试创建一个词汇表条目宏,其中的文本不强制执行任何大小写样式。
\newglossaryentry
似乎强制文本为标题大小写,而\MakeLowercase
在我的宏中使用则强制条目为小写。
我只希望条目的大小写与写入的内容相同。有没有办法“恢复”或取消使它们变为标题大小写的命令?
编辑:更具体地说,我使用宏来定义词汇表条目,如下所示:
% Glossary entry macro.
\newcommand{\GlsDef}[2]
{
\newglossaryentry{#1}
{
name={\capitalisewords{#1}}, % As it appears in the glossaries page.
first={\textbf{#1}}, % First time appearance in text.
text={#1}, % Standard appearance in text.
description={#2} % Description in glossaries page.
}
}
然后我使用它:
\GlsDef{foo}{A common placeholder variable name for demo program code.
See also: \Gls{bar}.}
问题是,使用此定义,如果我尝试在句子开头引用 foo,如下所示:\Gls{foo} is capitalized!
它不起作用。first={\textbf{#1}},
但是,如果我删除该行,foo 将按预期变为大写。
答案1
这对我来说很好:
\documentclass{article}
\usepackage[nopostdot]{glossaries}
\makeglossaries
\newcommand{\GlsDef}[2]
{%
\newglossaryentry{#1}%
{
name={\capitalisewords{#1}}, % As it appears in the glossaries page.
first={\textbf{#1}}, % First time appearance in text.
text={#1}, % Standard appearance in text.
description={#2} % Description in glossaries page.
}
}
\GlsDef{foo}{A common placeholder variable name for demo program
code. See also: \Gls{bar}.}
\GlsDef{bar}{Something else.}
\begin{document}
First use upper: \Gls{foo} and \Gls{bar}.
Next use upper: \Gls{foo} and \Gls{bar}.
\printglossaries
\end{document}
得出的结果为:
关于首字母大小写更改命令的注释。
类似于包\Gls
内部使用的命令。其工作原理如下:\makefirstuc
mfirstuc
如果参数不是
\makefirstuc
以命令开头(例如只是\makefirstuc{foo}
),则参数中的第一个内容将转换为大写(例如它只是做\MakeUppercase foo
)。如果 的参数
\makefirstuc
以命令开头,后跟一个组(如\textbf{foo}
),它会将组中的第一个元素转换为大写。(例如\textbf{\MakeUppercase foo}
)。如果参数以不跟组的命令开头(如
\oe foo
),则假定该命令产生一个字符并将大写字母应用于该命令。(例如,\MakeUppercase \oe foo
。)
如果我们添加\showglofirst{foo}
到 MWE(之后foo
已被定义),则以下内容会出现在成绩单中:
> \glo@foo@first=macro:
->\protect \textbf {foo}.
<recently read> \glo@foo@first
这意味着first={\textbf{foo}}
实际上已转换为,first={\protect\textbf{foo}}
因为first
键的扩展已启用。这意味着\Gls{foo}
正在尝试执行\makefirstuc{\protect\textbf{foo}}
。这属于上述第 3 项,因此它相当于 ,\MakeUppercase\protect\textbf{foo}
因此大写字母未应用于foo
。
的 2.01 版mfirstuc
增加了额外的检查。如果的参数\makefirstuc
以 开头,\protect
则丢弃\protect
并重试。因此,对于 v2.01,上述 MWE 可以正常工作。对于 2.01 以下的版本,最简单的修复方法是关闭扩展。这可以针对字段明确执行,方法first
是使用:
\glssetnoexpandfield{first}
现在添加的内容\showglofirst{foo}
在记录中显示以下内容:
> \glo@foo@first=macro:
->\textbf {foo}.
<recently read> \glo@foo@first
这意味着\Gls{foo}
现在可以\makefirstuc{\textbf{foo}}
,这对于旧版本来说工作得很好mfirstuc
。