Moin moin,
Zitat von
0815georg
! Missing \endcsname inserted.
\sigma
l.10300 ...ndex{generator}[of a $\sigma$-algebra].
wär praktisch wenn solche Sachen auch noch funktionieren würden, beim normalen "\index" Befehl gehts auch,
der normale \index-Befehl versucht auch nicht, aus seinem Argument einen Befehlsnamen zu basteln.
Da muss wohl eine andere Taktik her:
Code:
\documentclass{article}
\usepackage{makeidx}
\makeindex
\newwrite\myout
\newif\ifmyfound
\makeatletter
\newcommand*\my@index{}
\newcommand*\my@iindex{}
\newcommand*\my@tmpa{}
\newcommand*\my@tmpb{}
\newcommand*\my@list{}
\newcommand*\my@lookup{}
\newcommand*\mycheck[4]{%
\myfoundfalse
\edef\my@tmpa{#2}%
\edef\my@list{\csname#1\endcsname}%
\@for\my@lookup:=\my@list\do{%
\edef\my@tmpb{\my@lookup}%
\ifx\my@tmpa\my@tmpb
\myfoundtrue
\fi
}%
\ifmyfound
#3% gefunden
\else
#4% nicht gefunden
\fi
}%\mycheck{Liste}{Was}{wenn gefunden}{wenn nicht gefunden}
\newcommand*\myaddtolist[2]{%
\@ifundefined{#1}{% wenn Liste bisher undefiniert
\expandafter\edef\csname#1\endcsname{#2}% erster Listeneintrag
}{%
\mycheck{#1}{#2}{% wenn `Was' bereits in Liste
% nichts tun;-)
}{% sonst Liste um Eintrag `Was' ergänzen:
\expandafter\edef\csname#1\endcsname{\csname#1\endcsname,#2}%
}%
}%
}% \myaddtolist{Liste}{Was}
\newcommand*\myprintlist[1]{% Testausgabe der Liste
\@ifundefined{#1}{Liste `#1' existiert nicht.\par}{%
Liste `#1':\par\medskip
\edef\my@list{\csname#1\endcsname}%
\@for\my@lookup:=\my@list\do{%
(\my@lookup)\par
}%
\bigskip
}%
}%\myprintlist{Liste}
\InputIfFileExists{\jobname.mix}{}{%
\typeout{\jobname.mix doesn't exist yet.}%
\typeout{Another LaTeX run may be required before trying MakeIndex.}%
}%
\immediate\openout\myout=\jobname.mix
\AtEndDocument{\immediate\closeout\myout}%
\def\my@iindex#1[#2][#3]{%
\ifx\relax#2\relax % wenn es kein zweites Argument gibt
\index{#1}% eh nur auf Hauptebene im Index
\else % es gibt ein zweites Argument
\ifx\relax#3\relax % wenn es kein drittes Argument gibt,
\mycheck{my@sub}{#1}{% prüfe, ob es den selben Haupteintrag an anderer Stelle gibt
\index{#1!#2}% wenn ja, ist das zweite Argument ein Subeintrag
}{%
\index{#1 #2}% wenn nicht, dann das zweite Argument an den Haupteintrag hängen
}%
\else % es gibt auch ein drittes Argument
\mycheck{my@ssub}{#1@#2}{% prüfe, ob es den selben Untereintrag an anderer Stelle gibt
\mycheck{my@sub}{#1}{% wenn ja: prüfe, ob es den selben Haupteintrag an anderer Stelle gibt
\index{#1!#2!#3}% Haupteintrag + Subeintrag + Subsubeintrag
}{% kein passender Haupteintrag woanders:
\index{#1 #2!#3}% das zweite Argument mit an den Haupteintrag hängen, damit wird das dritte Argument zu einem Subeintrag
}%
}{% kein gleichlautender Subeintrag an anderer Stelle zu finden
\mycheck{my@sub}{#1}{% wenn es einen passenden Haupteintrag gibt
\index{#1!#2 #3}% wird das dritte Argument Teil des Subeintrags
}{% sonst
\index{#1 #2 #3}% werden beide optionalen Argumente Teil des Haupteintrags
}%
}%
\fi % drittes Argument nichtexistent oder doch
\mycheck{my@ssub@tmp}{#1@#2}{% wenn es den selben Subeintrag bereits (zur Laufzeit) gegeben hat
\immediate\write\myout{\string\myaddtolist{my@ssub}{#1@#2}}% dies in der Liste `Subeinträge gesamt' vermerken
}{}%
\myaddtolist{my@ssub@tmp}{#1@#2}% den momentanen Subeintrag in der Liste `Subeintrage zur Laufzeit' ergänzen
\fi % zweites Argument nichtexistent oder doch
\mycheck{my@sub@tmp}{#1}{% wenn es den selben Haupteintrag bereits (zur Laufzeit) gegeben hat
\immediate\write\myout{\string\myaddtolist{my@sub}{#1}}% diesen Haupteintrag in der Liste `Haupteinträge gesamt' ergänzen
}{}% und unabhängig davon
\myaddtolist{my@sub@tmp}{#1}% den momentanen Haupteintrag in der Liste `Haupteinträge zur Laufzeit' erganzen
}%\my@iindex{Eintrag}[Subeintrag][Subsubeintrag], eckige Klammern hier nicht optional
\def\my@index#1[#2]{% sammelt das zweite optionale Argument für \myindex ein
\@ifnextchar[%]
{\my@iindex{#1}[#2]}{\my@iindex{#1}[#2][]}%
}
\newcommand*\myindex[1]{%
\@ifnextchar[%]
{\my@index{#1}}{\my@index{#1}[]}%
}%\myindex{Eintrag}[Subeintrag][Subsubeintrag], eckige Klammern samt Inhalt hier optional
\makeatother
\begin{document}
bla\myindex{tight}[measure]
\myindex{foo}[a]
\myindex{foo}[b]
\myindex{blubb}
\myindex{drei}[zwei][eins]
\myindex{drei}[zwei][zwei]
\myindex{vier}[null][nichtig]
\myindex{x}[y]
\myindex{x}[y][z]
\myindex{y}
\myindex{y}[z]
\myindex{z}[a][b]
\myindex{z}[a]
\myindex{generator}[of a $\sigma$-algebra]
\printindex
\end{document}
MfG
Lesezeichen