Hallo

Makeindex kennt bekanntlich nur zwei alpha-numerische Sortierschlüssel, was ziemlich mühsam ist, wenn man gerne nach anderen Kriterien sortieren würde, ohne dies bei jedem einzelnen Index-Eintrag festhalten zu müssen (also jedesmal \index{foo@bar}).

Da es mir momentan um eine genau definierte Anzahl von Index-Einträgen geht (sämtliche Werke eines Autors, die nicht alphabetisch, sondern nach Erscheinungsjahr geordnet werden sollen), habe ich folgendes versucht:

Code:
\documentclass[10pt, a4paper, oneside]{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage{ifthen}
\usepackage{multind}

\newcounter{BookLoop}

% \ActualBook entspricht grob gesagt einem Counter, der die erforderlichen
% Indizes in der gewünschten Reihenfolge enthält
\newcommand{\ActualBook}{%
	\ifcase\value{BookLoop}\or Bli\or Bla\or Blu\or Blo\or Foo\or Bar\fi} 

% \ActualBookNum setzt die Stelle im Indexeintrag in einen Zahlenwert um,
% nach welchem sich dann die Index-Einträge korrekt sortieren lassen
\newcommand{\ActualBookNum}[1]{%
	\setcounter{BookLoop}{0}%
	\whiledo{\value{BookLoop}<7}{%
	\ifthenelse{\equal{#1}{\ActualBook}}{\theBookLoop}{}%
		\stepcounter{BookLoop}}}

% mit \BRef kann im Fliesstext auf ein Buch Verweisen werden:
% Der Titel erscheint im Print-Text, zugleich wird ein Indexeintrag erstellt,
% der - so die Idee - als Alias den oben ermittelten Zahlenwert erhält.
\newcommand{\BRef}[1]{#1\protect\index{Books}{\ActualBookNum{#1}@#1}}

\makeindex{Books}

\begin{document}
Lorem ipsum (\BRef{Foo}) dolor sit amet, (\BRef{Blo}) consetetur 
sadipscing elitr(\BRef{Bla}) , sed diam nonumy eirmod tempor invidunt 
(\BRef{Bli}) ut labore et dolore magna aliquyam erat

\verb+\ActualBookNum+ selber funktioniert, zB hier: \ActualBookNum{Bla}

\newpage

sed diam voluptua. At vero eos et accusam et justo duo dolores et ea 
rebum. (\BRef{Foo}) Stet clita kasd gubergren, no sea takimata sanctus est 
Lorem ipsum dolor sit amet. Lorem ipsum dolor (\BRef{Bli}) sit amet, 
consetetur sadipscing elitr (\BRef{Bar}), sed diam nonumy eirmod tempor 
invidunt ut labore et dolore magna aliquyam erat

\newpage

sed diam voluptua (\BRef{Blo}). At vero eos et accusam et justo duo 
dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est

\printindex{Books}{Verzeichnis der Schriften}Foo

\end{document}
In dieser Form erhalte ich eine Reihe von Fehlermeldungen (in Verbindung mit ledmac 'Missing \endcsname inserted' und 'Undefined control sequence \?'; im vorliegenden Minimalbeispiel 'Illegal parameter number in definition of \@gtempa')

Definiere ich hingegen \BRef mit einem \protect vor \ActualBookNum, also:

Code:
\newcommand{\BRef}[1]{#1\protect\index{Books}{\protect\ActualBookNum{#1}@#1}}
dann läuft alles sauber durch, aber der Index wird dennoch alphabetisch geordnet, weil das \ActualBookNum-Makro im Index nicht mehr expandiert wird und entsprechend in der Books.idx-Datei Einträge folgenden Formats stehen:

Code:
\indexentry{\ActualBookNum {Blo}@Blo}{1}
Erwarten würde ich

Code:
\indexentry{4@Blo}{1}

Ich habe die Sache vorläufig so gelöst, dass ich ein sed-Script über die Books.idx-Datei laufen lasse, welches mir die entsprechenden Änderungen vornimmt, fände es aber schöner, dies in LaTeX selber lösen zu können.

Danke insofern für jeden Hinweis!


gruss u