如何获取索引的自定义排序顺序?

如何获取索引的自定义排序顺序?

我看到一个问题这里这个问题和我遇到的问题一模一样,只是语言不同。遗憾的是,由于缺乏清晰度和可重现的 MWE,这个问题被关闭了。这是通过最小化不必要的细节来重新表述这个问题的尝试。

假设在脚本 X 中,正确的字母顺序是{a,c,b,ab}。请注意,ab应该将其视为字母本身(我知道这在英语中没有任何意义,但请暂时假设它)。

现在考虑以下示例:

\documentclass{article}
\usepackage{imakeidx}
\makeindex[title={Index},name={foo}]

\begin{document}
abcd\index[foo]{abcd}.

acbd\index[foo]{acbd}.

bcad\index[foo]{bcad}.

bbcd\index[foo]{bbcd}.

\printindex[foo]
\end{document}

我的术语(显然)按以下顺序排列:

  1. A B C D
  2. 醋酸环丙沙星
  3. 大英广播电视公司
  4. 计算机辅助设计

但考虑到我的脚本的自然顺序,我想要的排序是:

  1. 醋酸环丙沙星
  2. 计算机辅助设计
  3. 大英广播电视公司
  4. A B C D

有没有办法编写自定义规则来获得这样的结果?请注意,编写规则非常重要,因为我要处理的不是有限的列表或少数几个单词。我需要使用规则来自动化相当长的单词列表。

PS:坚持使用imakeidx不是必需的。我对其他软件包持开放态度。我正在编写的脚本无论如何都需要xe/ lualatex,因此既然lualatex需要 lua 解决方案,那么也欢迎使用。基本上任何适用于此的方法都是可以接受的。

答案1

如果我理解你的问题,你想按可以设置复合字符的规则进行排序。 你的示例可以在 OpTeX 中按如下方式配置:

\ii abcd
\ii acbd
\ii bcad
\ii bbcd

\_def\_sortingdataTEST {a c b ^^A} % language TEST, order: a c b ^^A
\_def\_compoundcharsTEST {ab:^^A}  % language TEST, compound char ^^A=ab
\_def\_sortinglang {TEST}          % sorting by language TEST

\makeindex

\bye

运行 OpTeX 两次。第一次:创建索引数据。第二次:使用它。您不需要运行任何外部软件。排序是在 OpTeX 内部的宏级别上完成的。

相关内容