问题
我有以下 MWE,它的页面排列错误:
\documentclass{scrartcl}
\usepackage{blindtext}
\usepackage{makeidx}
\makeindex
\begin{document}
\index{Eine Seite|(}\index{Drei Seiten|(}
\blindtext
\index{Eine Seite|)}
\index{Zwei Seiten|(}\index{Zweimalig}
\Blindtext[4]
\index{Zwei Seiten|)}\index{Zweimalig}
\Blindtext[5]
\index{Drei Seiten|)}
\printindex
\end{document}
用xelatex main && xindy -M texindy -M range-pages -C utf8 -L german-duden main.idx && xelatex main
它编译会创建以下索引:
Index
D
Drei Seiten, 1–3
E
Eine Seite, 1
Z
Zwei Seiten, 1, 2
Zweimalig, 1, 2
我觉得这很奇怪,因为这表明我在第 1 页和第 2 页上至少有两个独立的“Zwei Seiten”条目。
而是使用makeindex
创建索引,就像我“手动”做的那样:
Index
Drei Seiten, 1–3
Eine Seite, 1
Zwei Seiten, 1–2
Zweimalig, 1, 2
这里我们可以清楚地看到,“Zwei Seiten”的解释从第 1 页开始到第 2 页结束,而“Zweimalig”在第 1 页和第 2 页至少被独立提及两次。
我怎样才能表现xindy
得好确切地makeindex
页面范围也是如此吗?我仍然需要xindy
字母组标题和 unicode 功能(如果没有最后一个要求,我已经切换到了makeindex
)。
完全相同的行为意味着:
- 如果我们有一个跨越索引(
\index{a|(}\index{a|)}
跨越多个页面,我希望看到“1-2”或“2-5”等范围。 - 如果在连续的页面上有一次提及(
\index{a}
),我希望用逗号分隔它们,如“1,2”,“2,3,4”,但如果将 5 个或更多连续页面合并到一个范围内,我也可以接受。
在回答或评论之前xindy
请将和 的输出makeindex
与“Zweimalig”和“Zwei Seiten”进行比较,我想要的输出makeindex
但想使用xindy
!
答案1
我的xindy中没有range-pages模块,它被称为page-ranges.xdy。
添加
(define-location-class "arabic-page-numbers"
("arabic-numbers") :min-range-length 1)
到模块或副本以更改最小范围(代码来自 ff-ranges.xdy)。据我所知,新模块必须位于主 texmf-root 或当前目录中,因为 xindy 不会使用 kpathsea 搜索其他树。