带词汇表的符号列表 - 使用 \underline 的问题

带词汇表的符号列表 - 使用 \underline 的问题

我在使用词汇表(TeXLive 2011,词汇表 v3.01)时遇到了一个奇怪的问题,如下例所示:

% compile this with
%    pdflatex example.tex
%    makeindex  -s "example.ist" -t "example.alg" -o "example.acr" "example.acn"
%    pdflatex example.tex

\documentclass{scrartcl}

\usepackage{amsmath}
\usepackage{bm}
\usepackage[acronym,nomain]{glossaries}
\newglossary[slg]{symbolslist}{syi}{syg}{Symbole}
\makeglossaries

\newcommand{\vect}[1]{\bm{#1}}
%\newcommand{\cvect}[1]{\overline{\vect{#1}}}
\newcommand{\cvect}[1]{\underline{\vect{#1}}}

\newglossaryentry{sym:sc}{name={\ensuremath{\cvect{s}}},description={some complex vector},type=symbolslist}

\begin{document}

\gls{sym:sc}

\ensuremath{\underline{\bm{s}}}

\printglossary[type=symbolslist]

\end{document}

在我的文档中,我需要用粗体斜体字母排版复值向量,并在下方添加一行,参见定义\cvect。这按预期工作,除非我尝试将其与glossaries包一起用于符号定义。然后,pdflatex运行因错误而中断missing $

奇怪的是:如果我在 的定义中使用\overline而不是,一切都会按预期工作(参见 的注释版本)。\underline\cvect\cvect

我的第一个想法是,这可能是一个问题\ensuremath,但是,当在没有它的情况下使用它\newglossaryentry(即仅在文档主体中)时,它可以按预期工作。

答案1

\underline不够稳健。尝试以下方法:

\newcommand\cvect{}
\DeclareRobustCommand\cvect[1]{\underline{\vect{#1}}}

答案2

在词汇表的文档中您可以找到以下提示:

种类 此值表示应如何makeindex对此xindy条目进行排序。如果省略,则该值由名称字段给出。通常,如果名称包含命令(例如),最好使用排序键 \ensuremath{\alpha}。请注意,包选项sort=defsort=use会覆盖 中的排序键\newglossaryentry

Ulrike 提到这\underline并不可靠。您可以使用包提供的\underline命令\ulineulem

\usepackage[normalem]{ulem}

\newcommand{\cvect}[1]{\uline{\ensuremath{\vect{#1}}}}

\newglossaryentry{sym:sc}{sort=s,name={\cvect{s}},description={some complex vector},type=symbolslist}

Christoph Spiegel 提到了文档中非常有趣的信息ulem

各种下划线命令本质上是文本,在数学模式下的工作方式并不完全相同。但由于某些字体命令(在 A 中,旧 L TEX 样式(“oldlfont”)既可用于文本也可用于数学,因此数学模式是(以近似方式)处理的。通常,您应该避免在数学中使用 ulem 的命令,但数学可能会出现在 ulem 命令的文本参数中。

相关内容