我有以下代码片段:
\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
对于除、description
、descriptionplural
和symbol
之外的所有字段都有效symbolplural
。(例外是为了向后兼容,因为该glossaries
包的早期版本必须将名称、描述和符号写入外部词汇表文件,因此这些字段被清理而不是在定义上被扩展。)
因此在这种情况下,在分配字段\begin{math}...\end{math}
时不会扩展,但在分配从键中获取默认值的name
其他隐式字段(例如)时会扩展。text
name
正如 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}