# [texhax] indexing problem

Uwe Lueck uwe.lueck at web.de
Sun May 21 23:12:42 CEST 2006

As I contributed to the thread some weeks ago --

Oleg Katsitadze <olegkat at gmail.com> schrieb am 20.05.2006 14:12:20:
>
> Hi,
>
> As nobody answered your question, I try to give you some
> clues.  Hope I'm not too late.

late as well --

> Since I am a plain TeX user, I can only guess at what LaTeX
> does and why what you want is not working, but I can't give
> you a proper LaTeX solution.
>
> First of all, take a look at the file with the same basename
> as your document and the extension .idx'.  This is the
> intermediate file where LaTeX dumps all your index entries.
> This should clarify many things for you.
>
> You'll notice that in the entries from the text body, the
> macros like \pie and \ind are written "as is" (unexpanded),
> while in the entries from the footnote these macros are
> replaced by their definitions.
>
> The reason for this is as follows.  Normally, when TeX reads
> an argument of a macro, each token in the argument is parsed
> and converted into internal representation.  This means,
> among other things, that a string like "\ind" in the
> argument will become a single token for the macro \ind, not
> the four characters "\", "i", "n", and "d".
>
> On the other hand, LaTeX's \index macro is designed in a way
> that allows it to read the argument verbatim.  That is, a
> string like "\ind" in the argument of \index remains a
> four-character string "\ind", not the single token for the
> macro \ind.
>
> The consequence of the above is that in the text body, the
> argument of \index becomes a _verbatim_ string, and you can
> see that in the .idx file.  And what happens when \index is
> placed inside \footnote?  Well, \footnote does not read it's
> argument verbatim, therefore all macros (like \ind) in its
> argument become single tokens, not the verbatim strings.
> This means that by the time \index inside \footnote starts
> reading it's argument, all instances of \ind, etc., have
> already been converted into single tokens, and that's what
> \index gets.  When \index then writes its argument to the
> .idx file, these macros are expanded, which you can also see
> in the .idx file for the entries coming from the footnote.
>
> The outcome is that two instances of the same index entry
> appearing in the body and in the footnote are regarded by
> MakeIndex as different.  Even though they result in the same
> text in LaTeX, MakeIndex doesn't know that.
>
> Another consequence is that when you, as you say, define
> \pie as a@\textbf{PROTO-INDO-EUROPEAN}, the sorting doesn't
> work.  This is because, inside text body, \pie is written
> out _verbatim_ and MakeIndex doesn't see what you want it to
> see -- it sees \pie' instead of a@\textbf{PROTO-INDO-EUROPEAN}.

... (well-explained!) ...

> One solution might be making \index parse its argument
> non-verbatim, plus expanding the first token of the argument
> (e.g., \pie).
>
> Unfortunately, I don't know how to do this in LaTeX, but in
> plain TeX you can define something like this:
>
>   \let\oldindex\index
>   \def\index#1{\oldindex{#1}}
>
> (Putting it after \makeindex in LaTeX seems to work, see the
> attached file.)  This works because the redefined \index now
> reads and parses its argument non-verbatim before passing it
> on to the original \index, so \pie will become a token
> regardless of whether it is inside a footnote or text body;
> it will be expanded when \oldindex writes it to the .idx
> file, so MakeIndex will see, e.g.,
>
> But keep in mind that all macros inside the argument of the
> new \index are now expanded when written to the .idx file,
> which might cause problems with some macros.  Furthermore,
> \index and \oldindex read their arguments differently,
> therefore don't mix them.  Finally, probably my solution is
> seriously flawed since I'm not familiar with LaTeX; and
> certainly there are better solutions around (hopefully
> someone will point them out).

... the index package (for LaTeX) provides a well-tested
solution to the problem. (At least I have been using it for
many weeks even with index in footnotes.) ...

> Hope this helps,
> Oleg
>
> PS. In the sample you provided I see lines like this:

[snip]

> PPS. I think there are packages/classes providing \footnote
> which does not read its argument at all (memoir.cls?).  With
> such a package, \index would work the same both in the text
> body and in the footnote, so a better solution might be
> possible.

If I remember correctly, \vfootnote as defined in The TeXbook
is such a variant of \footnote. Maybe footmisc reimplements it.
Sorry, I am away from my PC and my manuals ...

Cheers,
Uwe.