对长格式的首字母缩略词进行样式化,避免使用未定义首字母缩略词的描述字段

对长格式的首字母缩略词进行样式化,避免使用未定义首字母缩略词的描述字段

我正在使用该glossaries软件包,并想像long-short这样修改词汇表的样式(已编辑,它不是来自.tex 编译):

带有我想要实现的目标的评论的想法

仅适用于首字母缩略词(因为我正在处理的实际文档需要将首字母缩略词和普通术语包含在一个词汇表中):

  • 如果可选参数中没有定义该标签,则不要添加任何描述,并将首字母缩略词的缩写形式以粗体显示一行,将长形式以纯文本格式显示,所有这些都在同一行中(即避免在描述字段中留出任何空格)。
  • 否则,请先放置长格式,然后将短格式放在括号内,然后在下面放置给定的描述(如long-short词汇表样式)。

以下 MWE 显示了我目前所得到的信息:

\documentclass[12pt]{article}

\usepackage[xindy]{glossaries}
\usepackage{ifthen}

\makeglossaries

% Style the acronyms
\setacronymstyle{long-short}
\renewcommand*{\acronymsort}[2]{#1} % Order by short form
\renewcommand*{\acronymentry}[1]{%
  \ifthenelse{\equal{\glsentrydesc{#1}}{\glsentrylong{#1}}}{%
    \acronymfont{\glsentryshort{#1} --- \glsentrylong{#1}}%
  }{%
    \acronymfont{\glsentrylong{#1} (\glsentryshort{#1})}%
  }%
}

\newacronym{one}{one}{The number one}
\newacronym{two}{two}{The number two}
\newacronym[description={Just a number with a meaningful description}]{three}{three}{The number three}

\begin{document}
  The numbers \acrshort{one}, \acrshort{two} and \acrshort{three}...
  \setglossarystyle{altlisthypergroup}
  \printglossary[type=main]
\end{document}
  • 词汇表现在显示词汇表术语和首字母缩略词(因为我没有使用acronym该包的选项)。
  • 对于首字母缩略词,我根据描述字段的值,设法对首字母缩略词的长格式和短格式进行样式设置(包的文档指出,样式将long-short首字母缩略词的长格式“复制”到描述字段中如果用户没有定义它)。

编译给定代码的输出是:

编译 MWE 的输出

有没有办法:

  • 避免使用没有用户定义的缩写词的描述字段?
  • 将这些缩写的长格式更改为纯文本格式?

任何帮助都感激不尽:)

答案1

我认为你最好使用glossaries-extra扩展包,允许使用不同的缩写样式。此包内部加载glossaries,但存在一些细微的差别。特别是它使用完全不同的缩写机制。现在每个条目都有一个关联类别(使用键设置category),并且使用以下方法为特定类别设置缩写样式:

\setabbreviationstyle[category-label]{style-name}

其中category-label是类别标签,style-name是样式。然后使用 定义缩写\newabbreviation。其语法与 相同\newacronym。为了更轻松地将文档从基础glossaries包转移到glossaries-extra\newacronym重新定义为内部使用\newabbreviation(与 一起使用category=acronym)。另一个区别是使用\glsxtrshort而不是获得缩写形式\acrshort。(这允许使用不同的缩写字体。)

因此你的 MWE 可以更改为:

\documentclass{article}

\usepackage[xindy]{glossaries-extra}

\makeglossaries

\setabbreviationstyle[withoutdesc]{short-long}
\setabbreviationstyle[withdesc]{long-short-desc}

\newabbreviation[category=withoutdesc]{one}{one}{The number one}
\newabbreviation[category=withoutdesc]{two}{two}{The number two}
\newabbreviation[category=withdesc,
 description={Just a number with a meaningful description}]
 {three}{three}{The number three}

\newglossarystyle{customlist}{%
  \setglossarystyle{listhypergroup}%
  \renewcommand*{\glossentry}[2]{%
    \item[\glsentryitem{##1}%
      \glstarget{##1}{\glossentryname{##1}}]%
    \glsifcategory{##1}{withoutdesc}%
    { --- \glsentrylong{##1}}%
    {%
      \mbox{}\par\nobreak\csuse{@afterheading}%
      \glossentrydesc{##1}%
    }%
    \glspostdescription\space ##2%
  }%
}
\setglossarystyle{customlist}%

\begin{document}
The numbers \glsxtrshort{one}, \glsxtrshort{two} and \glsxtrshort{three}...

\printglossary[type=main]
\end{document}

这将分配两个类别:withdesc带有说明的缩写和withoutdesc不带有说明的缩写。这样可以将一种样式 ( short-long) 应用于不带有说明的缩写,将另一种样式 ( long-short-desc) 应用于带有说明的缩写。

还定义了一种新的词汇表样式,该样式基于listhypergroup检查条目类别的样式(使用\glsifcategory)来确定是否在描述后插入段落分隔符。

我猜你之所以使用 是\acrshort因为你不想在第一次使用时进行扩展。有些缩写样式可以自动为你完成此操作,因此你可以直接使用\gls

short-long在第一种情况下(没有描述的缩写),可以通过将样式替换为以下内容轻松实现short-nolong

\setabbreviationstyle[withoutdesc]{short-nolong}

对于withdesc类别,有一个short-nolong-desc样式,但这会反转字段中的顺序name。没有样式nolong-short-desc,但可以根据现有样式定义样式,如下所示:

\newabbreviationstyle{nolong-short-desc}%
{% base it on short-nolong-desc:
  \GlsXtrUseAbbrStyleSetup{short-nolong-desc}%
}%
{% base it on long-short style:
  \GlsXtrUseAbbrStyleFmts{long-short}%
}

现在可以为类别设置样式withdesc

\setabbreviationstyle[withdesc]{nolong-short-desc}

完整文档如下:

\documentclass{article}

\usepackage[xindy]{glossaries-extra}

\makeglossaries

\newabbreviationstyle{nolong-short-desc}%
{% base it on short-nolong-desc:
  \GlsXtrUseAbbrStyleSetup{short-nolong-desc}%
}%
{% base it on long-short style:
  \GlsXtrUseAbbrStyleFmts{long-short}%
}

\setabbreviationstyle[withoutdesc]{short-nolong}
\setabbreviationstyle[withdesc]{nolong-short-desc}

\newabbreviation[category=withoutdesc]{one}{one}{The number one}
\newabbreviation[category=withoutdesc]{two}{two}{The number two}
\newabbreviation[category=withdesc,
 description={Just a number with a meaningful description}]
 {three}{three}{The number three}

\newglossarystyle{customlist}{%
  \setglossarystyle{listhypergroup}%
  \renewcommand*{\glossentry}[2]{%
    \item[\glsentryitem{##1}%
      \glstarget{##1}{\glossentryname{##1}}]%
    \glsifcategory{##1}{withoutdesc}%
    { --- \glsentrylong{##1}}%
    {%
      \mbox{}\par\nobreak\csuse{@afterheading}%
      \glossentrydesc{##1}%
    }%
    \glspostdescription\space ##2%
  }%
}
\setglossarystyle{customlist}%

\begin{document}
The numbers \gls{one}, \gls{two} and \gls{three}...

\printglossary[type=main]
\end{document}

生成的文档如下所示:

文件图像

您可以提供自己的快捷命令,这样就无需继续设置键category。例如:

% syntax: \mynewabbrv[options]{label}{short}{long}{description}
\newcommand*{\mynewabbrv}[5][]{%
  \ifblank{#5}%
  {\newabbreviation[category=withoutdesc,#1]{#2}{#3}{#4}}%
  {\newabbreviation[category=withdesc,description={#5},#1]{#2}{#3}{#4}}%
}

\mynewabbrv{one}{one}{The number one}{}
\mynewabbrv{two}{two}{The number two}{}
\mynewabbrv{three}{three}{The number three}
 {Just a number with a meaningful description}

这使用etoolbox's\ifblank来确定最后一个参数是否为空。

或者,如果您想保留原来的语法:

\makeatletter
\define@key{mynewabbrv}{description}{\def\mydesc{#1}}
\makeatother

\renewcommand*{\newacronym}[4][]{%
  \def\mydesc{}%
  \setkeys*{mynewabbrv}{#1}%
  \ifdefempty{\mydesc}%
  {\newabbreviation[category=withoutdesc,#1]{#2}{#3}{#4}}%
  {\newabbreviation[category=withdesc,#1]{#2}{#3}{#4}}%
}

\newacronym{one}{one}{The number one}
\newacronym{two}{two}{The number two}
\newacronym[description={Just a number with a meaningful description}]
 {three}{three}{The number three}

这允许description从选项列表中提取密钥。

相关内容