\footnote rompe @-constructs en \index

\footnote rompe @-constructs en \index

Para indexar una expresión TeX no trivial expr, usamos el comando \index{str@expr}, donde strhay una representación simplificada (generalmente ASCII simple) que exprse usará para ordenar.

Sin embargo, str@exprse analiza incorrectamente dentro de una nota al pie:

\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}

Esto genera el siguiente .idxarchivo

\indexentry{Gnu@\gnu}{1}
\indexentry{Gnat@\gnat}{1}
\indexentry{Gnu@\gnu}{2}
\indexentry{Gnat@\texttt  {Gnat}}{2}

Las dos entradas del índice para 'Gnat' difieren y, por lo tanto, \Gnataparecen dos veces en el índice, como se muestra en esta captura de pantalla:

ingrese la descripción de la imagen aquí

¿Cómo se \footnotemodifica el \indexcomando y qué se puede hacer al respecto?

Respuesta1

No se trata tanto de la @construcción sino de la ampliación de las secuencias de control. Una solución alternativa basada enhttps://groups.google.com/forum/#!topic/comp.text.tex/_Hwo6Hapcngsugiere proporcionar un comando que podamos usar para proteger la barra invertida en la entrada del índice en la nota al pie a través de \def\indexprotect#1{\string#1}. Como señala Ulrike Fischer, \stringya es lo suficientemente bueno para hacerlo por sí solo:

Salida de muestra

\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}

Respuesta2

La solución de @Andrew Swann y @Ulrike Fischer (úsela \stringpara escapar de la barra invertida en expr) funciona bien, pero requiere un esfuerzo repetido en todas las notas a pie de página o subtítulos correspondientes. Por lo tanto, la solución mencionada en el comentario de @egreg,

\usepackage{bigfoot}

que solucione el problema de una vez por todas, me parece preferible.

información relacionada