我正在使用 glossaries-extra 包(https://ctan.org/pkg/glossaries-extra?lang=en) 由 TeX Live 2023 提供,用于在我的整个文档中一致地排版数学方程中的张量。
这些数量可以用粗体符号 (σ表示应力张量)或以指数表示法(σ_{ij} 表示应力张量的分量 ij)。索引应由用户提供,如果未提供索引,则采用默认值。这可以通过在单独的条目中定义张量及其分量来实现(带有额外参数的词汇表条目 软件包作者已经回答了这个问题)
% tensor definition with components in extra entry
\newglossaryentry{Strain}{%
category = {2ndOTnsrs},%
name = {\ensuremath{\boldsymbol{\varepsilon}}},%
description = {strain tensor},%
}
\newglossaryentry{strain}{%
category = {2ndOTnsrs},%
name = {\ensuremath{\varepsilon_{\ijIdx}}},%
description = {components of the \glsdesc{Strain}},%
}
并通过 \gls 之类的命令引用条目
\glsdesc{Strain} \gls{Strain} with components \gls{strain} or \gls{strain}[kl]
产生所需的输出
但是,定义单个条目会更方便
\newglossaryentry{stress}{%
category = {2ndOTnsrs},%
name = {\ensuremath{ \boldsymbol{\sigma}^{} }},%
description = {stress tensor},
components = {\ensuremath{ \sigma_{\ijIdx} }},%
}
并通过 \glstext 类命令引用数量的索引符号
\glsdesc{stress} \gls{stress} with components \glscomp{stress} or \glscomp{stress}[kl]
我当前的解决方案
% save \glsinsert for \glstext-like commands
\renewcommand*{\glsxtrsaveinsert}[2]{\def\glsinsert{#2}}
% replace indices for \gls-like and \glstext-like commands
\let\origglstextformat\glstextformat
\renewcommand{\glstextformat}[1]{%
\ifdefempty{\glsinsert}{}{%
\let\ijIdx\glsinsert% \ijIdx is set to \glsinsert
\def\glsinsert{}% \glsinsert is set to none
}%
\origglstextformat{#1}%
}
产生以下输出
虽然默认索引被提供的插入正确替换,但插入在表达式的末尾重复。
有没有办法可以摆脱 \glstext 类命令表达式末尾的重复插入?