我看到一个问题这里这个问题和我遇到的问题一模一样,只是语言不同。遗憾的是,由于缺乏清晰度和可重现的 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}
我的术语(显然)按以下顺序排列:
- A B C D
- 醋酸环丙沙星
- 大英广播电视公司
- 计算机辅助设计
但考虑到我的脚本的自然顺序,我想要的排序是:
- 醋酸环丙沙星
- 计算机辅助设计
- 大英广播电视公司
- 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 内部的宏级别上完成的。