扩展命令中的词汇表缩写/首字母缩略词

扩展命令中的词汇表缩写/首字母缩略词

我想实现\usepackage{glossaries-extra}处理缩写并自动扩展它们。我还创建了一个使用首字母缩略词的数学命令,当命令是缩写的第一次使用时,我遇到了一些困难,无法让命令很好地与缩写配合使用。

平均能量损失

\documentclass{article}
\usepackage{glossaries-extra}

\newabbreviation{ae}{\text{a.e.}}{\text{almost everywhere}}
\newcommand*{\convae}{\xrightarrow{ \gls{ae} }}

\begin{document}
Expected behavior (not using glossaries' abbreviation)
\[
    f_n \xrightarrow{\text{almost everywhere (a.e.)}}
\]
First use of the abbreviation, missing the ``almost everywhere'' and
parentheses. Notice the arrow size
\[
    f_n \convae f.
\]
Second occurrence behaves correctly since acronym is now being used.
\[
    g_n \convae g.
\]

\end{document}

这是输出: MWE 的输出

谢谢 :)

答案1

您在这里看到的是,\xrightarrow实际上对上面的文本进行了两次排版:一次只是为了测量,另一次是实际排版。\gls在第一次传递时将缩写标记为已使用,然后在第二次传递时使用缩写形式。(顺便说一句:\text有完整的四次排版传递。它必须\iffirstchoice@处理这样的问题,但\xrightarrow似乎没有提供这样的切换。)

为了解决这个问题,您可以明确控制设置标记缩写为已使用的标志。另外,让我们将移至\text的定义,\convae这样长格式和短格式之间的空格也会受到它的影响。

\documentclass{article}

\usepackage{glossaries-extra}

\newabbreviation{ae}{a.e.}{almost everywhere}
\makeatletter
  \newcommand*\convae{%
    \ifglsused{ae}{%
      \let\@convae@cleanup\relax
    }{%
      \def\@convae@cleanup{\glsreset{ae}}%
    }%
    \xrightarrow{%
      \text{%
        \gls{ae}%
        \@convae@cleanup
      }%
    }%
    \glsunset{ae}%
  }
\makeatother

\begin{document}

Expected behavior (not using \texttt{glossaries}' abbreviation):
\[
    f_n \xrightarrow{\text{almost everywhere (a.e.)}} f
\]

First use of the abbreviation:
\[
    f_n \convae f
\]

Second use of the abbreviation:
\[
    g_n \convae g
\]

\end{document}

MWE 输出

相关内容