
Um einen nicht trivialen TeX-Ausdruck zu indizieren expr
, verwenden wir den Befehl \index{str@expr}
, wobei str
eine vereinfachte (normalerweise einfaches ASCII-) Darstellung von ist, die expr
zum Sortieren verwendet werden soll.
Wird jedoch str@expr
in einer Fußnote falsch analysiert:
\documentclass{report}
\usepackage{imakeidx}
\makeindex
\def\gnu{\texttt{Gnu}}
\def\gnat{\texttt{Gnat}}
\begin{document}
Some text\index{Gnu@\gnu}\index{Gnat@\gnat}.
\pagebreak
Some more text\index{Gnu@\gnu}.\footnote
{A footnote.\index{Gnat@\gnat}}
\printindex
\end{document}
Dies erzeugt die folgende .idx
Datei
\indexentry{Gnu@\gnu}{1}
\indexentry{Gnat@\gnat}{1}
\indexentry{Gnu@\gnu}{2}
\indexentry{Gnat@\texttt {Gnat}}{2}
Die beiden Indexeinträge für „Gnat“ unterscheiden sich und \Gnat
erscheinen daher zweimal im Index, wie im folgenden Screenshot gezeigt:
Wie lässt sich \footnote
der \index
Befehl ändern und was kann man dagegen tun?
Antwort1
Es handelt sich nicht so sehr um die @
Konstruktion, sondern um die Erweiterung von Kontrollsequenzen. Ein Workaround basierend aufhttps://groups.google.com/forum/#!topic/comp.text.tex/_Hwo6Hapcngschlägt vor, einen Befehl bereitzustellen, mit dem wir den Backslash im Indexeintrag in der Fußnote über schützen können \def\indexprotect#1{\string#1}
. Wie Ulrike Fischer anmerkt, \string
ist dies bereits gut genug, um dies allein zu tun:
\documentclass{report}
\usepackage{imakeidx}
\makeindex
\def\gnu{\texttt{Gnu}}
\def\gnat{\texttt{Gnat}}
\begin{document}
Some text\index{Gnu@\gnu}\index{Gnat@\gnat}.
\pagebreak
Some more text\index{Gnu@\gnu}.\footnote
{A footnote.\index{Gnat@\string\gnat}}
\printindex
\end{document}
Antwort2
Die Lösung von @Andrew Swann und @Ulrike Fischer (verwenden Sie , \string
um den Backslash in zu umgehen expr
) funktioniert gut, erfordert aber wiederholte Arbeit in allen betroffenen Fußnoten oder Bildunterschriften. Daher die im Kommentar von @egreg erwähnte Lösung,
\usepackage{bigfoot}
wodurch das Problem ein für alle Mal gelöst wird, erscheint mir vorzuziehen.