在nomencl
包中,如何让符号按照在 LaTeX 代码中出现的顺序打印?
答案1
据我所知,nomencl
目前还不支持这种做法。下面是一种比较简单的替代方法。
基本上,它是对命令的重新定义\nomenclature[]{}{}
,忽略排序参数(即 中的可选参数\nomenclature
)并使用基于计数器的排序方法。每当\nomenclature
被调用时,计数器@nomcount
都会增加一。然后我们利用 的makeindex
排序算法,该算法按常规方式(8
< 34
< 111
)处理数字,因此条目将按使用顺序打印。
我提供了一个开关,供您“打开”或“关闭”此排序行为。使用
\settoggle{nomsort}{<bool>}
如果<bool>
设置为true
,则我们激活sort by use
(这是您想要的效果)。如果<bool>
设置为 ,false
则我们返回到 的正常使用nomencl
(使用 的可选参数\nomenclature
等等)。
\documentclass[]{article}
\usepackage{etoolbox}
\usepackage[]{nomencl}
\makenomenclature
\providetoggle{nomsort}
\settoggle{nomsort}{true} % true = sort by use, false = sort as usual
\makeatletter
\iftoggle{nomsort}{%
\let\old@@@nomenclature=\@@@nomenclature
\newcounter{@nomcount} \setcounter{@nomcount}{0}%
\renewcommand\the@nomcount{\two@digits{\value{@nomcount}}}% Ensure 10>01
\def\@@@nomenclature[#1]#2#3{% Taken from package documentation
\addtocounter{@nomcount}{1}%
\def\@tempa{#2}\def\@tempb{#3}%
\protected@write\@nomenclaturefile{}%
{\string\nomenclatureentry{\the@nomcount\nom@verb\@tempa @[{\nom@verb\@tempa}]%
\begingroup\nom@verb\@tempb\protect\nomeqref{\theequation}%
|nompageref}{\thepage}}%
\endgroup
\@esphack}%
}{}
\makeatother
\begin{document}
\nomenclature{$j$}{Appears first}
\nomenclature{$i$}{Appears second}
\nomenclature{$h$}{Appears third}
\nomenclature{$g$}{Appears fourth}
\nomenclature{$f$}{Appears fifth}
\nomenclature{$e$}{Appears sixth}
\nomenclature{$d$}{Appears seventh}
\nomenclature{$c$}{Appears eighth}
\nomenclature{$b$}{Appears ninth}
\nomenclature{$a$}{Appears tenth~(last)}
\printnomenclature
Note that $d$ appears first because it is declared first.
Note also the 10th entry is sorted after the 9th.
\end{document}
不过说实话,使用包来做这件事可能更容易、更一致glossaries
,正如@NicolaTalbot 在评论中提到的那样。
答案2
假设您想使用 nomencl 打印变量 z、y 和 x
z coming first followed by y and x. You key in the code as below:
\nomenclature{$z$}{This is the first variable}
\nomenclature{$y$}{This is the second variable}
\nomenclature{$x$}{This is the third variable}
\printnomenclature
nomenclature 包按字母顺序对变量进行排序。上面给出的输入代码的默认输出将是:
这可能不是想要的。要按输入顺序(按出现的顺序)生成命名法列表,可以通过在可选方括号内包含顺序号来实现。修改后的代码具有更长的变量列表,如下所示:
\nomenclature[[1]]{$z$}{This is the first variable}
\nomenclature[[2]]{$y$}{This is the second variable}
\nomenclature[3]{$x$}{This is the third variable}
\nomenclature[4]{$w$}{This is the fourth variable}
\nomenclature[5]{$v$}{This is the fifth variable}
\nomenclature[6]{$u$}{This is the sixth variable}
\nomenclature[7]{$t$}{This is the seventh variable}
\nomenclature[8]{$s$}{This is the eighth variable}
\nomenclature[9]{$r$}{This is the ninth variable}
\nomenclature[a1]{$q$}{This is the tenth variable}
\nomenclature[a2]{$p$}{This is the eleventh variable}
\printnomenclature
所需的输出如下所示:
请注意方括号内使用的编号方案可以扩展到超过 10 个变量。希望这能有所帮助。谢谢。