\footnote unterbricht @-Konstrukte in \index

\footnote unterbricht @-Konstrukte in \index

Um einen nicht trivialen TeX-Ausdruck zu indizieren expr, verwenden wir den Befehl \index{str@expr}, wobei streine vereinfachte (normalerweise einfaches ASCII-) Darstellung von ist, die exprzum Sortieren verwendet werden soll.

Wird jedoch str@exprin 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 .idxDatei

\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 \Gnaterscheinen daher zweimal im Index, wie im folgenden Screenshot gezeigt:

Bildbeschreibung hier eingeben

Wie lässt sich \footnoteder \indexBefehl ä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, \stringist dies bereits gut genug, um dies allein zu tun:

Beispielausgabe

\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 , \stringum 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.

verwandte Informationen