2
1

Ursprüngliches Problem

In dem folgendem Minimalbeispiel ist der Eintrag für den Index „Drei Seiten“ falsch. Er liest sich an der Stelle wie „Seite 13“, statt „Seite 1–3“. Ausserdem liest sich der Index „Zwei Seiten“ ebenfalls nicht so wie ich es mir wünsche, das Komma suggeriert zwei unabhängige Erwähnungen statt eines zusammenhängenden Textes.

Hier einmal wie es aussieht:

Index D Drei Seiten, 13 E Eine Seite, 1 Z Zwei Seiten, 1, 2 Zweimalig, 1, 2

Nutze ich dagegen makeindex wird mir der Index (fast) so erzeugt wie ich es mir wünsche:

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

Was mir bei makeindex fehlt ist die Überschrift des jeweiligen Buchstabens, ausserdem benötige ich im eigentlichen Projekt Unicode-Unterstützung. Da hilft dann makeindex nicht mehr weiter.

MWE:

Open in writeLaTeX
\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}

Kompiliert wird mit

  • xelatex main.tex && xindy -M texindy -C utf8 -L german-duden main.idx && xelatex main.tex bzw.
  • xelatex main.tex && makeindex main.idx && xelatex main.tex

Gesucht wird nach einer Lösung die mir mit xindy die gleiche Auflistung wie mit makeindex erstellt, dabei aber die „Überschriften“ beibehält.

edit, Zusatz mit Teillösung

Auf TSE bin ich auf folgende, teilweise funktionierende Lösung gestoßen:

Ulrike Fischer auf TSE:

It looks as if you must load an ranges module. E.g.

xindy -M texindy -M page-ranges -C utf8 -L german-din test-utf8.idx or xindy -M texindy -M ff-ranges -C utf8 -L german-din test-utf8.idx

(From the latex companion I would have expected the first to be loaded automatically but it doesn't seem to be the case).

Mit Variante 1 erhalte ich „Drei Seiten, 1–3“ (also OK) und „Zwei Seiten, 1, 2“ (also falsch nach meiner Auffassung), Variante 2 liefert mit „Zwei Seiten, 1f“ hier ein richtiges Ergebnis, aber für getrennte Erwähnungen wird auch „1f“ ausgegeben (was dann ja wieder Falsch ist, weil es zusammenhängenden Text suggeriert) und bei 1ff für mehrseitiges geht mir die Information verloren, wie lang der entsprechende Abschnitt nun wirklich ist.

Variante 1 bringt folgendes:

Index D Drei Seiten, 1–3 E Eine Seite, 1 Z Zwei Seiten, 1, 2 Zweimalig, 1, 2

Variante 2:

Index D Drei Seiten, 1ff E Eine Seite, 1 Z Zwei Seiten, 1f Zweimalig, 1f

In beiden Fällen wieder das Problem, dass zwei unabhängige Nennungen gleichbehandelt werden zu einer großen zusammenhängenden Nennung.

Changelog

  • Hinzufügen der Teillösung
  • Leichte Änderung des MWE

gefragt 29 Jul '14, 23:42

NobbZ's gravatar image

NobbZ
33731017
Akzeptiert-Rate: 40%

bearbeitet 30 Jul '14, 01:53

Ich habe die Frage jetzt auch leicht abgeändert auf TSE gestellt: http://tex.stackexchange.com/questions/193949/xindy-and-indexentries-spanning-multiple-pages#193949

(30 Jul '14, 15:08) NobbZ

Nachdem ich auf der Mailingliste zu xindy und auf TSE diese Frage auch gestellt habe, erhielt ich am Ende folgende Antwort:

This is not possible with xindy.

At the markup phase, information about cause of range building is not available any more. One cannot distinguish explicit and implicit page ranges.

Zu deutsch in etwa:

Das ist nicht möglich mit xindy.

Wenn das Markup erstellt wird, ist der Grund warum eine „Range“ erstellt wurde, nicht mehr verfügbar. Man kann hier also nicht mehr zwischen impliziten und expliziten „Range“s unterscheiden.

Ich habe mich dazu entschieden einen entsprechenden Feature-Request bei xindy zu erstellen und bis zur entsprechenden Umsetzung mit dem gegenwärtigen Verhalten zu leben.

Permanenter link

beantwortet 04 Aug '14, 13:45

NobbZ's gravatar image

NobbZ
33731017
Akzeptiert-Rate: 40%

Ich bekomme das von Dir beschriebene erste Ergebnis nur, wenn ich beim Aufruf von texindy Option -r mit angebe. Ohne die Option erhalte ich den Bereich für "Drei Seiten" korrekt als "1–3". In der ind-Datei sieht das so aus:

Open in writeLaTeX
\begin{theindex}
  \providecommand*\lettergroupDefault[1]{}
  \providecommand*\lettergroup[1]{%
      \par\textbf{#1}\par
      \nopagebreak
  }

  \lettergroup{D}
  \item Drei Seiten, 1--3

  \indexspace

  \lettergroup{E}
  \item Eine Seite, 1

  \indexspace

  \lettergroup{Z}
  \item Zwei Seiten, 1, 2
  \item Zweimalig, 1, 2

\end{theindex}

Um auch die Bereiche aus nur zwei Seiten zusammenzufassen, kann man :man-range-length entsprechend heruntersetzen (Voreinstellung ist 2):

Open in writeLaTeX
\begin{filecontents*}{twopage-ranges.xdy}
(define-location-class "arabic-page-numbers"
                       ("arabic-numbers") :min-range-length 1)
\end{filecontents*}
\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}

Nach dem pdflatex-, xelatex- oder lualatex-Lauf und dem Aufruf »texindy -M twopage-ranges test.idx« oder auch »texindy -M twopage-ranges -M ranges test.idx« erhält man dann die ind-Datei:

Open in writeLaTeX
\begin{theindex}
  \providecommand*\lettergroupDefault[1]{}
  \providecommand*\lettergroup[1]{%
      \par\textbf{#1}\par
      \nopagebreak
  }

  \lettergroup{D}
  \item Drei Seiten, 1--3

  \indexspace

  \lettergroup{E}
  \item Eine Seite, 1

  \indexspace

  \lettergroup{Z}
  \item Zwei Seiten, 1--2
  \item Zweimalig, 1--2

\end{theindex}

Wie man allerdings sieht, bleibt es dabei, dass implizite und explizite Bereiche gleich behandelt werden. Wie man das ändern kann, weiß ich im Augenblick auch nicht.

Alle Tests wurden mit

xindy release: 2.5.0
xindy script version: 1.18
xindy kernel version: 3.0
CLISP version 2.49 (2010-07-07) (built on tug [130.225.2.178])
   architecture: I686

von TeX Live 2014 unter Linux durchgeführt. Andere Versionen können eventuell durchaus Bugs haben, die die explizite Angabe von -M ranges immer erforderlich machen.

Permanenter link

beantwortet 30 Jul '14, 08:06

gast3's gravatar image

gast3
(ausgesetzt)
Akzeptiert-Rate: 53%

bearbeitet 30 Jul '14, 08:22

Deine Antwort
Vorschau umschalten

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

Per RSS:

Antworten

Antworten und Kommentare

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs fügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×16
×16
×6

gestellte Frage: 29 Jul '14, 23:42

Frage wurde gesehen: 11,332 Mal

zuletzt geändert: 04 Aug '14, 13:45