我想实现\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}
谢谢 :)
答案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}