使用词汇表包定义特殊单位 - 处理兆兆和千兆

使用词汇表包定义特殊单位 - 处理兆兆和千兆

我正在使用该软件包设置我的首字母缩略词列表glossaries,并遇到了特定单位的挑战 - FLOPS,即每秒浮点运算次数。在我的文档中,我使用 FLOPS、GFLOPS 和 TFLOPS,其中 G 和 T 分别表示 10^9 和 10^{12}。

目前,我的首字母缩略词列表中有三个单独的条目,但我更希望有一个 FLOPS 条目,并附有解释 GFLOPS 和 TFLOPS 的描述。这样,第一次出现 FLOPS、GFLOPS 或 TFLOPS 时,它会被展开,但出现的那个只会以其首字母缩略词打印出来。举个例子,而不是这样:

A trillion (10^{12}) floating point operations per second (TFLOPS) is 1000 times larger than a billion (10^9) floating point operations per second (GFLOPS).

我想拥有:

A trillion (10^{12}) floating point operations per second (TFLOPS) is 1000 times larger than a 1 GFLOPS.

我想象这可能通过对 FLOPS 词汇表条目进行某种特殊格式化来完成,例如\gls传递指数的可选参数,但我不知道如何实现这一点。

答案1

我觉得我找到了解决问题的方法。我受到启发此 tex.stackexchange 帖子。以下是演示该解决方案的 MWE:

\documentclass{article}

\usepackage[acronyms,nonumberlist,numberline]{glossaries}

\glsaddkey
  {longgiga}
  {billion ($10^{9}$) \glsentrylong{\glslabel}}
  {\glsentrylonggiga}
  {\Glsentrylonggiga}
  {\glslonggiga}
  {\Glslonggiga}
  {\GLSlonggiga}
\glsaddkey
  {shortgiga}
  {G\glsentryshort{\glslabel}}
  {\glsentryshortgiga}
  {\Glsentryshortgiga}
  {\glsshortgiga}
  {\Glsshortgiga}
  {\GLSshortgiga}
\glsaddkey
  {longtera}
  {trillion ($10^{12}$) \glsentrytext{\glslabel}}
  {\glsentrylongtera}
  {\Glsentrylongtera}
  {\glslongtera}
  {\Glslongtera}
  {\GLSlongtera}
\glsaddkey
  {shorttera}
  {T\glsentryshort{\glslabel}}
  {\glsentryshorttera}
  {\Glsentryshorttera}
  {\glsshorttera}
  {\Glsshorttera}
  {\GLSshorttera}

\newglossarystyle{acronymglossarystyle}{%
\setglossarystyle{super}%
  \renewcommand{\glossentry}[2]{%
    \glsentryitem{##1}\glstarget{##1}{\glossentryname{##1}} &
    \Glsentrylong{##1}\space\ifglshasfield{useri}{##1}{--- \space\Glsentryuseri{##1}\space}{}##2\tabularnewline
  }% 
\setlength{\glsdescwidth}{0.75\linewidth}%
}

% This is my test case - FLOPS.
\newacronym[user1={The prefixes T and G are used to indicate $10^{12}$ and $10^9$ FLOPS}]{FLOPS}{FLOPS}{floating point operations per second}

\newcommand{\glsSI}[2]{%
  \ifglsused{#2}{\csname glsshort#1\endcsname{#2}}{\csname glslong#1\endcsname{#2} (\csname glsshort#1\endcsname{#2})\glsunset{#2}}%
}
\newcommand{\GlsSI}[2]{%
  \ifglsused{#2}{\csname Glsshort#1\endcsname{#2}}{\csname Glslong#1\endcsname{#2} (\csname glsshort#1\endcsname{#2})\glsunset{#2}}%
}
\newcommand{\GLSSI}[2]{%
  \ifglsused{#2}{\csname GLSshort#1\endcsname{#2}}{\csname GLSlong#1\endcsname{#2} (\csname GLSshort#1\endcsname{#2})\glsunset{#2}}%
}

\makeglossaries

\begin{document}

$200$ \glsSI{giga}{FLOPS}. $1000$ \gls{FLOPS}. \glsSI{giga}{FLOPS} and \glsSI{tera}{FLOPS}

\printglossary[type=\acronymtype,style=acronymglossarystyle]

\end{document}

我花了额外的精力来完善这个\glsSI函数,因为否则的话,就需要一个针对 giga、tera、mega、kilo 和其他单位的新函数。唯一需要的就是将这两个\glsaddkey语句包装成一个命令,例如\SIPrefixForGlossary{giga}{G}。任何添加了该命令的答案都会被标记为答案。

相关内容