xindy:合并规则忽略前导数字

xindy:合并规则忽略前导数字

我使用 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}

在此处输入图片描述

相关内容