nomencl 包:按出现顺序排序

nomencl 包:按出现顺序排序

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 个变量。希望这能有所帮助。谢谢。

相关内容