编写词汇表条目时不要在任何情况下强制使用大写字母

编写词汇表条目时不要在任何情况下强制使用大写字母

我正在尝试创建一个词汇表条目宏,其中的文本不强制执行任何大小写样式。

\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内部使用的命令。其工作原理如下:\makefirstucmfirstuc

  1. 如果参数不是\makefirstuc以命令开头(例如只是\makefirstuc{foo}),则参数中的第一个内容将转换为大写(例如它只是做\MakeUppercase foo)。

  2. 如果 的参数\makefirstuc以命令开头,后跟一个组(如\textbf{foo}),它会将组中的第一个元素转换为大写。(例如\textbf{\MakeUppercase foo})。

  3. 如果参数以不跟组的命令开头(如\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

相关内容