使用词汇表时字母常数不正确

使用词汇表时字母常数不正确

使用术语表包时,我收到错误“不正确的字母常数”。我的 MWE:

主文件:

\documentclass{article}
\usepackage{glossaries}
\usepackage{amssymb}
\newglossary[slg]{symbolslist}{syi}{syg}{List of Symbols}
\makenoidxglossaries
\loadglsentries{gloss}
\begin{document}
Text
%
\glsaddall
\printnoidxglossary[type=symbolslist]
\end{document}

词汇表条目:

\newglossaryentry{natnumb}{
name={\ensuremath{\mathbb{N}}},
description={The natural numbers $\mathbb{N} = \lbrace 1,2,3,\ldots \rbrace$.},
type=symbolslist
}
\newglossaryentry{natnumbzero}{
name={\ensuremath{\mathbb{N}_0}},
description={The natural nubers with $0$, $\mathbb{N}_0 = \mathbb{N} \cup \lbrace 0 \rbrace$.},
type=symbolslist
}

我可以通过在每个词汇表条目中添加 sort={...} 来解决这个问题,但由于我有很多条目,我不想每次都添加它。还有其他解决方案吗?

答案1

我可以通过在每个词汇表条目中添加 sort={...} 来解决这个问题,但由于我有很多条目,我不想每次都添加它。还有其他解决方案吗?

最简单的解决方案是按定义排序或按使用顺序排序:

\printnoidxglossary[type=symbolslist,sort=def]% order of definition

或者

\printnoidxglossary[type=symbolslist,sort=use]% order of use

另一种方法是定义自己的排序处理程序来删除数学命令。例如:

\documentclass{article}
\usepackage{glossaries}
\usepackage{amssymb}
\newglossary[slg]{symbolslist}{syi}{syg}{List of Symbols}
\makenoidxglossaries

\makeatletter

\newcommand*{\@glo@sortmacro@math}[1]{%
  \@glo@sortentries{\@glo@sorthandler@math}{#1}%
}

\newcommand*{\@glo@sorthandler@math}[2]{%
  \begingroup
  \cslet{ensuremath }{\@firstofone}%
  \cslet{mathbb }{\@firstofone}%
  \let\protect\empty
  \edef\sortA{\glsentrysort{#1}}%
  \edef\sortB{\glsentrysort{#2}}%
  \edef\x{%
    \endgroup
    \noexpand\dtlicompare{\noexpand\dtl@sortresult}%
    {\expandonce\sortB}%
    {\expandonce\sortA}%
  }%
  \x
}

\makeatother

\newglossaryentry{natnumb}{
name={\ensuremath{\mathbb{N}}},
description={The natural numbers $\mathbb{N} = \lbrace 1,2,3,\ldots
\rbrace$.},
type=symbolslist
}
\newglossaryentry{natnumbzero}{
name={\ensuremath{\mathbb{N}_0}},
description={The natural nubers with $0$, $\mathbb{N}_0 = \mathbb{N}
\cup \lbrace 0 \rbrace$.},
type=symbolslist
}

\begin{document}
Text
%
\glsaddall
\printnoidxglossary[type=symbolslist,sort=math]
\end{document}

结果图像

中出现的任何其他命令name同样需要临时重新定义。请注意

  \cslet{ensuremath }{\@firstofone}%
  \cslet{mathbb }{\@firstofone}%

这是因为sort密钥的形式如下:

\protect \ensuremath  {\protect \mathbb  {N}}

这些命令可能看起来像\ensuremath\mathbb,但它们实际上是\ensuremath\mathbb(尾随空格是命令名称的一部分)。

编辑:另一种方法是使用sanitizesortpackage 选项。这会将命令名称(如)转换\mathbb为字符序列\ m a t h b b,因此其行为将与 非常相似makeindex

\documentclass{article}
\usepackage[sanitizesort]{glossaries}
\usepackage{amssymb}
\newglossary[slg]{symbolslist}{syi}{syg}{List of Symbols}
\makenoidxglossaries

\newglossaryentry{natnumb}{
name={\ensuremath{\mathbb{N}}},
description={The natural numbers $\mathbb{N} = \lbrace 1,2,3,\ldots
\rbrace$.},
type=symbolslist
}
\newglossaryentry{natnumbzero}{
name={\ensuremath{\mathbb{N}_0}},
description={The natural nubers with $0$, $\mathbb{N}_0 = \mathbb{N}
\cup \lbrace 0 \rbrace$.},
type=symbolslist
}

\begin{document}
Text
%
\glsaddall
\printnoidxglossary[type=symbolslist]
\end{document}

通过添加一些额外的示例条目,可以观察到这些方法的差异:

使用sanitizesort

\documentclass{article}
\usepackage[sanitizesort]{glossaries}
\usepackage{amssymb}
\newglossary[slg]{symbolslist}{syi}{syg}{List of Symbols}
\makenoidxglossaries

\newglossaryentry{natnumb}{
name={\ensuremath{\mathbb{N}}},
description={The natural numbers $\mathbb{N} = \lbrace 1,2,3,\ldots
\rbrace$.},
type=symbolslist
}
\newglossaryentry{natnumbzero}{
name={\ensuremath{\mathbb{N}_0}},
description={The natural nubers with $0$, $\mathbb{N}_0 = \mathbb{N}
\cup \lbrace 0 \rbrace$.},
type=symbolslist
}

\newglossaryentry{N}{name={\ensuremath{N}},description={sample},
type=symbolslist
}
\newglossaryentry{M}{name={\ensuremath{M}},description={sample},
type=symbolslist
}

\newglossaryentry{Z}{name={\ensuremath{Z}},description={sample},
type=symbolslist
}

\begin{document}
Text
%
\glsaddall
\printnoidxglossary[type=symbolslist]
\end{document}

结果排序图像: MNZ \mathbb{N} \mathbb{N}_0

使用自定义排序:

\documentclass{article}
\usepackage{glossaries}
\usepackage{amssymb}
\newglossary[slg]{symbolslist}{syi}{syg}{List of Symbols}
\makenoidxglossaries

\makeatletter

\newcommand*{\@glo@sortmacro@math}[1]{%
  \@glo@sortentries{\@glo@sorthandler@math}{#1}%
}

\newcommand*{\@glo@sorthandler@math}[2]{%
  \begingroup
  \cslet{ensuremath }{\@firstofone}%
  \cslet{mathbb }{\@firstofone}%
  \let\protect\empty
  \edef\sortA{\glsentrysort{#1}}%
  \edef\sortB{\glsentrysort{#2}}%
  \edef\x{%
    \endgroup
    \noexpand\dtlicompare{\noexpand\dtl@sortresult}%
    {\expandonce\sortB}%
    {\expandonce\sortA}%
  }%
  \x
}

\makeatother

\newglossaryentry{natnumb}{
name={\ensuremath{\mathbb{N}}},
description={The natural numbers $\mathbb{N} = \lbrace 1,2,3,\ldots
\rbrace$.},
type=symbolslist
}
\newglossaryentry{natnumbzero}{
name={\ensuremath{\mathbb{N}_0}},
description={The natural nubers with $0$, $\mathbb{N}_0 = \mathbb{N}
\cup \lbrace 0 \rbrace$.},
type=symbolslist
}

\newglossaryentry{N}{name={\ensuremath{N}},description={sample},
type=symbolslist
}
\newglossaryentry{M}{name={\ensuremath{M}},description={sample},
type=symbolslist
}

\newglossaryentry{Z}{name={\ensuremath{Z}},description={sample},
type=symbolslist
}

\begin{document}
Text
%
\glsaddall
\printnoidxglossary[type=symbolslist,sort=math]
\end{document}

结果顺序的图像: M \mathbb{N} N \mathbb{N}_0 Z

相关内容