The Problem

I have the following MWE which does the pageranging wrong:

\index{Eine Seite|(}\index{Drei Seiten|(}
\index{Eine Seite|)}
\index{Zwei Seiten|(}\index{Zweimalig}
\index{Zwei Seiten|)}\index{Zweimalig}
\index{Drei Seiten|)}

Compiled with xelatex main && xindy -M texindy -M range-pages -C utf8 -L german-duden main.idx && xelatex main it creates the following index:

Drei Seiten, 1–3
Eine Seite, 1
Zwei Seiten, 1, 2
Zweimalig, 1, 2

This seems odd to me, since it suggests, that I have at least two independent entrys of "Zwei Seiten" on the pages 1 and 2.

Using makeindex instead creates an index as I would do it by "hand":

Drei Seiten, 1–3
Eine Seite, 1
Zwei Seiten, 1–2
Zweimalig, 1, 2

Here we can see clearly, that "Zwei Seiten" has an explanation that begins at page 1 and ends at page 2 whilest "Zweimalig" is mentioned independently at least two times at pages 1 and 2.

How can I make xindy behave exactly as makeindex does with the page-ranges? I still need xindys caption of the lettergroup and unicode capabilities (If there weren't the last requirement I had already switched to makeindex).

Exactly the same behaviour means:

  • If we have a spanning index (\index{a|(}\index{a|)} that spans multiple pages, I want to see a range like "1-2" or "2-5" or whatever.
  • If there are onetime mentions (\index{a}) on consecutive pages, I want to have them listed separated by commas like "1, 2", "2, 3, 4", but I am fine if large numbers of 5 or more consecutive pages would be consolidated to a range.

Before answering or commenting Please compare the output of xindy and makeindex especially with "Zweimalig" und "Zwei Seiten", I want the output of makeindex but want to use xindy!

  • As far as I can remember, by default, xindy only forms a range if it spans three or more consecutive pages. This can be changed using the min-range-length in a style file. Jul 30, 2014 at 13:01
  • Yupp, but than also "Zweimalig" is displayed as "1–2" which I explicitely consider as wrong!
    – NobbZ
    Jul 30, 2014 at 13:02
  • Your assertion that you want the output of xindy to be exactly like makeindex contradicts your request for non-range forming. xindy and makeindex only behave differently in the case of two sequential pages. makeindex will convert 1,2,3 to 1--3. Aug 1, 2014 at 9:57

1 Answer 1


I don't have a range-pages module in my xindy, it is called page-ranges.xdy.


(define-location-class "arabic-page-numbers"
               ("arabic-numbers") :min-range-length 1)

to the module or to a copy to change the minimal range (the code is from the ff-ranges.xdy). As far as I know new modules must be either in the main texmf-root or in the current directory as xindy doesn't search other trees with kpathsea.

  • OK, range-pages 's pages-range was a typo. But again setting min-range-length does also typeset a range for "Zweimalig" while makeindex does not. So I don't want a range here. Please read the bullet point list where I describe how I want a single index and an index-range to be treated differently!
    – NobbZ
    Aug 1, 2014 at 8:35

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .