我在使用词汇表(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=def
和sort=use
会覆盖 中的排序键\newglossaryentry
。
Ulrike 提到这\underline
并不可靠。您可以使用包提供的\underline
命令\uline
ulem
\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 命令的文本参数中。