按出现次数排序的符号索引

按出现次数排序的符号索引

我想创建一个按符号出现次数排序的符号索引。

例如:类似

... $\omega$\index{$\omega$} ... $A^P_k$\index{$A^P_k$} ... $\{\}$\index{$\{\}$}

$\omega$应该生成一个首先提及then$A^P_k$然后 then的索引$\{\}$

我没有找到任何选项makeidx,因此我尝试使用一种解决方法并定义一个可以为我执行此操作的命令:

\newcounter{occurrence}
\newcommand{\is}[1]{\index{\arabic{occurrence}@{#1}}\addtocounter{occurrence}{1}}

事实上,这在某种程度上是有效的,但有些符号会被拒绝(我不知道是哪一个),有些符号将不会被适当打印,例如\is{$\langle \rangle$}导致输入“hAB”。

答案1

问题是,\index当它作为另一个命令的参数出现时,它会扩展其内容,而当它出现在顶层时则不会,因此\is{$\langle\rangle$}.idx文件中,

\indexentry{0@{$\delimiter "426830A \delimiter "526930B $}}{1}

并且,在.ind文件中,

\item {$\delimiter 426830A \delimiter 526930B $}, 1

(请注意双引号丢失了)。

现在 TeX 发现\delimiter后面跟着数字 426830,它是十六进制的"6834E,由于这是正常操作,因此它会排版数学代码"0068:在字体系列 0 的位置"68有一个 h。同样,526930 是十六进制的"80A52,但在位置"80没有字符!所以你得到一个罗马字母 h,后面跟着斜体 A 和 B。哇!

一个解决方法是告诉 TeX 不要解释这些字符:

\newcommand{\is}[1]{%
  \index{\arabic{occurrence}@\detokenize{#1}}%
  \stepcounter{occurrence}}

答案2

您可以通过向命令的参数提供一些附加信息来控制索引中事物的顺序\index

通过书写\index{<sort information by>@<information>},您可以告诉\index将其放入 <information>索引中,但按其排序<sort information by>

例如,使用以下内容:

  • \index{.a omega@$\omega$}
  • \index{.a alpha@$\alpha$}
  • \index{.b APK@$A^P_k$}
  • \index{.c \{\}@$\{\}$}
  • \index{a}
  • \index{A}

索引中的条目应如下:

  • $\alpha$;
  • $\omega$;
  • $A^P_k$;
  • ${}$;
  • A;
  • A。

在这个例子中,我使用.具有数学内容的索引材料作为前缀(它有效地将数学内容强制放在字母前面),并<letter>作为预排序标准。

下面显示了如何调整\index命令,使其按出现次数对索引进行“排序”。此解决方案相当于解决方案发布者埃格尔

\makeatletter

\newcount\index@counter
\let\old@index\index
\def\myindex@#1#2{%
    \old@index{#1@#2}%
}
\def\index#1{%
    \expandafter\myindex@{\the\index@counter}{#1}%
    \advance \index@counter by 1\relax
}
\makeatother

答案3

这是使用 的另一种可能性glossaries。您需要 的最新版本glossaries,但不需要使用makeindex或任何其他外部应用程序。只需运行 LaTeX 两次即可。

\documentclass{article}

\usepackage[index]{glossaries}
\usepackage{glossary-mcols}

\makenoidxglossaries

\newterm[name={\ensuremath{\omega}}]{omega}
\newterm[name={\ensuremath{A^P_k}}]{Apk}
\newterm[name={\ensuremath{\{\}}}]{braces}

\begin{document}
\gls{omega} 

\gls{Apk} 

\gls{braces}

\printnoidxglossary[type=index,style=mcolindex,sort=use]
\end{document}

如果你觉得\ensuremath令人厌恶:

\documentclass{article}

\usepackage[index]{glossaries}
\usepackage{glossary-mcols}

\makenoidxglossaries

\newterm[name={$\omega$},text={\omega}]{omega}
\newterm[name={$A^P_k$},text={A^P_k}]{Apk}
\newterm[name={$\{\}$},text={\{\}}]{braces}

\begin{document}
$\gls{omega}$

$\gls{Apk}$

$\gls{braces}$

\printnoidxglossary[type=index,style=mcolindex,sort=use]
\end{document}

相关内容