
Para indexar uma expressão TeX não trivial expr
, usamos o comando \index{str@expr}
, onde str
é uma representação simplificada (normalmente ASCII simples) de expr
a ser usada para classificação.
No entanto, str@expr
é analisado incorretamente em uma nota de rodapé:
\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}
Isso gera o seguinte .idx
arquivo
\indexentry{Gnu@\gnu}{1}
\indexentry{Gnat@\gnat}{1}
\indexentry{Gnu@\gnu}{2}
\indexentry{Gnat@\texttt {Gnat}}{2}
As duas entradas de índice para 'Gnat' são diferentes e, portanto, \Gnat
aparecem duas vezes no índice, conforme mostrado nesta captura de tela:
Como \footnote
modifica o \index
comando e o que pode ser feito a respeito?
Responder1
Não é tanto uma questão de @
construção, mas de expansão das sequências de controle. Uma solução alternativa baseada emhttps://groups.google.com/forum/#!topic/comp.text.tex/_Hwo6Hapcngsugere fornecer um comando que possamos usar para proteger a barra invertida na entrada do índice na nota de rodapé por meio de \def\indexprotect#1{\string#1}
. Como aponta Ulrike Fischer \string
já é bom o suficiente para fazer isso por conta própria:
\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}
Responder2
A solução de @Andrew Swann e @Ulrike Fischer (use \string
para escapar da barra invertida expr
) funciona bem, mas requer esforço repetido em todas as notas de rodapé ou legendas envolvidas. Portanto a solução mencionada no comentário de @egreg,
\usepackage{bigfoot}
que resolve o problema de uma vez por todas, parece-me preferível.