使用术语表包时,我收到错误“不正确的字母常数”。我的 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
(尾随空格是命令名称的一部分)。
编辑:另一种方法是使用sanitizesort
package 选项。这会将命令名称(如)转换\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}
使用自定义排序:
\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}