Hey Leute,
Nachdem ich schon lange Suche und meinem Ziel auch schon sehr nahe bin haperts an der letzten Stelle, beim Anwenden von makeindex:-)
Mein Ziel ist es, in einem Dokument teile der Seiten sozusagen dazwischen geschoben aufzunehmen.
Eine Seitennummerierung im Dokument könnte dann für 4 Seiten zB so aussehen:
2
2a
2b
3
Das klappt auch soweit wunderbar, nur wenn ich dann makeindex Aufrufe ignoriert das meine manipulierten Seiten (die anderen werden korrekt übernommen).
Die entscheidende Fehlermeldung lautet:
Es wäre übrigens schön, wenn Du Deinen Fragen in der Regel ein VM beifügen würdest und nicht nur einen Codeschnippsel. Dann hätte man etwas zum Testen in der Hand und müsste sich nicht erst selbst etwas aus den Fingern saugen, das dann am Ende möglicherweise gar nicht passt.
Soo, nach langem Suchen habe ich nun endlich doch die Lösung gefunden.
In \thepage ist die Kombination von Zahlen und Buchstaben nicht ohne weiteres erlaubt.
Man muss ein spezielles Trennzeichen (bei mir default - ) nutzen, damit makeindex das ganze richtig interpretiert.
In einer eigenen .ist Style Datei kann man dieses Trennzeichen mit z.B.
Das funktioniert so nach meinen Infos aber nur bedingt. Da makeindex in der Voreinstellung zuerst auf kleine römische Zahlen, dann auf arabische Zahlen, dann auf Kleinbuchstaben, dann auf große römische Zahlen, dann auf Großbuchstaben testet, könnten c, i, v, m, d und x eventuell falsch sortiert werden. Um das zu ändern, brauchst Du noch ein page_precedence "narRA", wodurch die Reihenfolge verändert wird. Siehe u. a. dazu meine Antwort.
makeindex kann zwar bei den Seitenzahlen mit arabischen Zahlen, kleinen und großen römischen Zahlen und Klein- und Großbuchstaben umgehen, erwartet allerdings, dass bei Kombinationen davon ein Trennzeichen zwischen den unterschiedlichen Zahlenteilen steht. Dieses Trennzeichen kann im MakeIndex-Stil über die Variable page_compositer eingestellt werden. Es sind alle Zeichen außer dem NUL-Zeichen erlaubt. Zeichen, die gleichzeitig als Ziffern verwendet werden können, sollten allerdings besser nicht verwendet werden.
Um zu erkennen, ob ein Zeichen Teil einer Zahl ist waren in früheren Versionen von makeindex eine feste Reihenfolge eingestellt. Dabei wurden zunächst arabische Ziffern dann alle einzelnen Kleinbuchstaben erkannt. Bei mehreren Kleinbuchstaben wurde hingegen geprüft, ob beispielsweise mehrere i aufeinander folgen oder auf das i eine andere kleine römische Ziffer folgte. In dem Fall wurde auf eine römische Zahl erkannt. Dann fand für Großbuchstaben ein ähnlicher Test statt. Problematisch war dabei, dass einzelne römische Ziffern als Buchstaben erkannt und deshalb ggf. falsch einsortiert wurden. Seit einigen Versionen (AFAIK min. 2.12) wird die Reihenfolge, in der die Zahlen geprüft werden, jedoch über die Variable page_precedence erkannt. Der dort angegebene String gibt die Erkennungsreihenfolge an:
r – kleine römische Zahl n – arabische Zahl a – Kleinbuchstabe R – große römische Zahl A – Großbuchstabe
Die oben angegebene Reihenfolge ist gleichzeitig die normale Such-/Testreihenfolge.
Du hast also zwei Probleme.
Da zwischen arabischer Zahl und Kleinbuchstabe bei Dir kein Trennzeichen steht, erkennt MakeIndex keine Zahlengruppen, sondern meldet falsche Zeichen in der Seitenzahl.
Da MakeIndex in der Voreinstellung zuerst kleine römische Zahlen und dann Kleinbuchstaben erkennt, werden c, d, i, m und x eventuell falsch einsortiert.
Da es nicht möglich ist, bei page_compositor nichts anzugeben. Ist das erste Problem nur sehr umständlich zu lösen. Dazu muss man die Seitenzahlen mit einem Trennzeichen versehen, aber dafür sorgen, dass LaTeX dieses Trennzeichen nicht mit anzeigt.
Code, hier editierbar zum Übersetzen:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
% Zuerst `\jobname.mst` erzeugen. Diese wird von makeindex automatisch verwendet.
\begin{filecontents*}{\jobname.mst}
page_precedence "narAR"
page_compositor "."
\end{filecontents*}
\documentclass{article}
\usepackage{scrbase}
\usepackage{scrpage2}
\usepackage{lipsum}
\usepackage{makeidx}\makeindex
\makeatletter
% Der Befehl `\pagewithsuffix` schaltet auf die eingeschobenen Seiten um.
% Er definiert gleichzeitig `\endpagewithsuffix`, das dann wieder zurück
Kommt dann noch hyperref hinzu, so wird die Lösung schnell unübersichtlich und schwer beherrschbar. Daher sei stattdessen ausdrücklich xindy an Stelle von makeindex empfohlen.
Einfache Lösung mit Xindy:
xindy ist makeindex in vielerlei Hinsicht deutlich überlegen.
Bereits das folgende einfache Beispiel zeigt, wie man den neuen Nummerierungsstil, der aus arabischen Zahlen, denen unmittelbar ein Kleinbuchstabe folgt, definieren kann:
Code, hier editierbar zum Übersetzen:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
% Es wird ein neues xindy-Modul angelegt, das die neue Nummerierungsart für
Es wäre übrigens schön, wenn Du Deinen Fragen in der Regel ein VM beifügen würdest und nicht nur einen Codeschnippsel. Dann hätte man etwas zum Testen in der Hand und müsste sich nicht erst selbst etwas aus den Fingern saugen, das dann am Ende möglicherweise gar nicht passt.