\footnote は \index 内の @ 構造を分割します

\footnote は \index 内の @ 構造を分割します

重要な TeX 式 をインデックスするにはexpr、 コマンド を使用します\index{str@expr}。ここで、はソートに使用される のstr簡略化された (通常はプレーン ASCII) 表現です。expr

ただし、str@expr脚注内では誤って解析されます。

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

これにより、次の.idxファイルが生成されます

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

「Gnat」の 2 つのインデックス エントリは異なるため、\Gnatこのスクリーンショットに示すように、インデックスに 2 回表示されます。

ここに画像の説明を入力してください

\footnoteコマンドを変更するにはどうすればよいでしょうか\index。また、それに対して何ができるでしょうか。

答え1

これは構造の問題ではなく@、制御シーケンスの拡張の問題です。https://groups.google.com/forum/#!topic/comp.text.tex/_Hwo6Hapcngは、脚注の索引エントリ内のバックスラッシュを保護するために使用できるコマンドを提供することを提案しています\def\indexprotect#1{\string#1}。Ulrike Fischer が指摘しているように、\stringはそれ自体でそれを行うのに十分です。

サンプル出力

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

答え2

@Andrew Swann と @Ulrike Fischer による解決策 (\stringのバックスラッシュをエスケープするために使用expr) はうまく機能しますが、関連するすべての脚注またはキャプションで繰り返し作業が必要になります。したがって、@egreg のコメントで言及されている解決策は、

\usepackage{bigfoot}

この問題を完全に解決するこの方法の方が、私にとっては好ましいように思われます。

関連情報