\newcommand、\begin{math} 和 \newglossaryentry

\newcommand、\begin{math} 和 \newglossaryentry

我有以下代码片段:

\newcommand{\jbv}[0]{j_{bv}}
\newcommand{\txtjbv}[0]{\begin{math}\jbv\end{math}}
\newglossaryentry{jbv}{name={\txtjbv}, sort={a03}, description={Bla}}

我收到以下错误:

    ! Undefined control sequence.
\in@ #1#2->\begingroup \def \in@@ 
                                  ##1#1{}\toks@ \expandafter {\in@@ #2{}{}#1...
l.27 ...3}, description={Bla}}

这似乎是由name={\txtjbv}代码片段的第三行引起的,因为当我只使用时它就起作用了name={jbv}

我如何才能正确获取这些新命令以便在我的文本、方程式中以及作为词汇表名称使用它们?

答案1

math所指的环境是\begin{math}...\end{math}脆弱的(但$...$实际上并非如此),因此在可扩展的环境中可能会破裂。默认情况下,扩张name对于除、descriptiondescriptionpluralsymbol之外的所有字段都有效symbolplural。(例外是为了向后兼容,因为该glossaries包的早期版本必须将名称、描述和符号写入外部词汇表文件,因此这些字段被清理而不是在定义上被扩展。)

因此在这种情况下,在分配字段\begin{math}...\end{math}时不会扩展,但在分配从键中获取默认值的name其他隐式字段(例如)时会扩展。textname

正如 Christian 在评论中提到的,在这种情况下使用它要好得多\ensuremath。虽然\ensuremath在其他情况下可能会导致问题,但它是确保词汇表字段中的数学模式的最便捷方式,以便\gls可以在数学或文本模式下使用。

\documentclass{article}

\usepackage{glossaries}

\makeglossaries

\newcommand{\jbv}[0]{j_{bv}}
\newcommand{\txtjbv}[0]{\begin{math}\jbv\end{math}}
\newglossaryentry{jbv}{name={\ensuremath{\jbv}},sort={a03},description={Bla}}

\begin{document}
In text: \gls{jbv}. In an equation:
\begin{equation}\gls{jbv}\end{equation}

In the glossary:
\printglossaries
\end{document} 

相关内容