我使用 texindy 来生成索引。
有几个索引术语带有前导数字。我希望这些术语按没有前导数字的方式排序。我尝试使用 xindy 样式表中的以下合并规则来实现这一点:
(merge-rule "^[0-9]+ (.*)" "\1" :eregexp)
Texindy 的调用方式如下:
texindy --debug level=2 -L czech -M lang/czech/utf8 -M stylesheet.xdy indexfile.idx
然而,结果表明规则并未得到应用:具有前导数字的术语按数字排序,这导致它们位于索引的最前面。规则优先级似乎存在问题,因为 xindy 应用了一些规则,通过对术语中包含的数字进行零填充来规范化它们。下面的日志示例记录了对一个具有前导数字的术语的完整处理。
apply rules once: '1 Kron 29, 10- 13' => '0000001' ' Kron 29, 10- 13'
apply rules once: ' Kron 29, 10- 13' => 'NIL' 'NIL'
apply rules once: 'Kron 29, 10- 13' => 'NIL' 'NIL'
apply rules once: 'ron 29, 10- 13' => 'NIL' 'NIL'
apply rules once: 'on 29, 10- 13' => 'NIL' 'NIL'
apply rules once: 'n 29, 10- 13' => 'NIL' 'NIL'
apply rules once: ' 29, 10- 13' => 'NIL' 'NIL'
apply rules once: '29, 10- 13' => '0000029' ', 10- 13'
apply rules once: ', 10- 13' => 'NIL' 'NIL'
apply rules once: ' 10- 13' => 'NIL' 'NIL'
apply rules once: '10- 13' => '0000010' '- 13'
apply rules once: '- 13' => 'NIL' 'NIL'
apply rules once: ' 13' => 'NIL' 'NIL'
apply rules once: '13' => '0000013' ''
Final merge-rule result: '1 Kron 29, 10- 13' -> '0000001 Kron 0000029, 0000010- 0000013'
如何解决这个问题?
编辑:最小示例:
文档(document.tex):
\documentclass[a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage{multind}
\makeindex{index}
\begin{document}
This paragraph contains term without a number:
Term\index{index}{Term}
This paragraph contains term beginning with a number:
1st Term\index{index}{1 Term}
Let's add a random\index{index}{random} word to the index.
\printindex{index}{The Testing Index}
\end{document}
xindy 样式表(stylesheet.xdy):
;; ignore leading numbers when sorting and grouping
(merge-rule "^[0-9]+ (.*)" "\1" :eregexp)
编译命令:
pdflatex document
texindy -M stylesheet.xdy index.idx
pdflatex document
预期结果:索引包含两个字母组,R 和 T,T 下有“Term”和“1 Term”
实际结果:索引有三个字母组:R、T 和默认(无字母)。“1 Term”属于默认。
答案1
xindy 语法至少对我来说几乎是神秘的,我总是需要一种反复试验的方法。下面的代码允许以正确的方式对索引词进行排序。我写的规则是:
(sort-rule "^[0-9]* *" "")
它会在排序过程中忽略所有前导数字,也会忽略您在第一个数字后写的所有空格。您不能使用合并规则,因为如果两个关键字映射到同一个合并键上,它们就是相等的,因此在您的示例中,“1 Term”等于“Term”,而在最终索引中,您将只有“Term”关键字。
% arara: xelatex: {shell : yes}
\documentclass[a4paper]{article}
\usepackage[T1]{fontenc}
\begin{filecontents*}{ignorestyle}
;; ignore leading numbers when sorting and grouping
(sort-rule "^[0-9]* *" "")
\end{filecontents*}
\usepackage{imakeidx}
\makeindex[program=xindy,options= -C utf8 -M ignorestyle]
\begin{document}
This paragraph contains term without a number:
Term\index{Term}
This paragraph contains term beginning with a number:
1st Term\index{1 Term}
Let's add a random\index{random} word to the index.
\index{231 Minnie}
\index{1Donald 125 Duck}
\index{1Donald 126 Auck}
\index{ Duffy Duck}
\index{126565Hallo}
\printindex
\end{document}