Seite 1 von 1

Splitindex: Expansion von Makros im Argument von \sindex

Verfasst: Mo 14. Feb 2011, 17:47
von peisistratos
Liebes Forum,

ich habe beobachtet, dass bei der Verwendung von splitindex (ebenso wie bei makeindex) ein Makro als Argument von \sindex nur dann expandiert wird, wenn es sich in einer Fußnote befindet. Dies wirkt sich aber negativ auf die Sortierung im Index aus.

Folgendes Minimalbeispiel
\documentclass[fontsize=12pt]{scrartcl}
\usepackage[ngerman]{babel}

\usepackage[makeindex]{splitidx}
\makeindex

\newcommand{\test}{Test}

\begin{document}

Ein Indexeintrag im Flie\ss text.\sindex{\test} Und nun eine Referenz
in einer Fu\ss note.\footnote{Bla blubb \dots\sindex{\test}}

\printindex

\end{document}
ergibt diese Indexdatei:
\begin{theindex}

  \item \test, 1

  \indexspace

  \item Test, 1

\end{theindex}
Warum ist das so und wie bekomme ich es hin, dass die Makros innerhalb des \sindex-Befehls immer expandiert werden? Oder habe ich etwas übersehen (laut splitindex-Doku gibt es ja nur die Option, dass die Expansion von Makros ausdrücklich verhindert werden soll)?

Mit ganz herzlichem Dank und Grüßen,

Ludwig

Verfasst: Mo 14. Feb 2011, 22:23
von rais
Moin moin,
warum das so ist, kann ich derzeit nicht beantworten, aber evtl. hilft Dir ja sowas:
\documentclass[fontsize=12pt]{scrartcl}
\usepackage[ngerman]{babel}

\usepackage[makeindex]{splitidx}
\makeindex
\newcommand*\esindex[1]{%
  \expandafter\sindex\expandafter{#1}%
}
\newcommand{\test}{Test}

\begin{document}

Ein Indexeintrag im Flie\ss text.\esindex{\test} Und nun eine Referenz
in einer Fu\ss note.\footnote{Bla blubb \dots\sindex{\test}}

\printindex

\end{document}
MfG
Rainer

Verfasst: Di 15. Feb 2011, 01:52
von peisistratos
Lieber Rainer,

vielen Dank für Deinen Hinweis. Da ich aber schon ein größeres Dokument (480 Seiten) vorliegen habe und ich keinen neuen Befehl einführen möchte, habe ich nun mit Deiner Hilfe folgende Lösung gefunden:
\documentclass[fontsize=12pt]{scrartcl}
\usepackage[ngerman]{babel}

\usepackage[makeindex]{splitidx}

\newcommand*{\sindexAlt}{}
\let\sindexAlt\sindex
\renewcommand*\sindex[1]{%
  \expandafter\sindexAlt\expandafter{#1}%
}

\newcommand{\test}{Test}

\begin{document}

Ein Indexeintrag im Flie\ss text.\sindex{\test} Und nun
eine Referenz in einer Fu\ss note.\footnote{Bla blubb
  \dots\sindex{\test}}

\printindex

\end{document}
Der Vollständigkeit halber zusätzlich eine Lösung für mehrere Indices:
\documentclass[fontsize=12pt]{scrartcl}
\usepackage[ngerman]{babel}

\usepackage[makeindex]{splitidx}
\newindex[Index 1]{indexeins}
\newindex[Index 2]{indexzwei}

\newcommand*{\sindexAlt}{}
\let\sindexAlt\sindex
\renewcommand*\sindex[2][]{%
  \expandafter\sindexAlt[#1]{\expandafter #2}%
}
\newcommand{\test}{Test}

\begin{document}

Ein Indexeintrag im Flie\ss text.\sindex[indexeins]{\test} Und nun
eine Referenz in einer Fu\ss note.\footnote{Bla blubb
  \dots\sindex[indexeins]{\test}} Ein Indexeintrag im Flie\ss
text.\sindex[indexzwei]{\test} Und nun eine Referenz in einer Fu\ss
note.\footnote{Bla blubb \dots\sindex[indexzwei]{\test}}

\printindex*

\end{document}
Ganz herzlichen Dank nochmals!

Ludwig