Listing

Entries are collected into ‘\jobname.idx’, processed externally, and loaded from ‘\jobnmae.xdi’. We load an index with a command of the form ‘\Index

<..indexes..>+
 \def\Index{%
   \def\--{\IndexEntry}%
   \openin15=\jobname.xdi
   \ifeof15      \write\:idx{ \pageno=\the\pageno}
   \else
      {\a:index \input \jobname.xdi \b:index }
   \fi}
 -_-_-

<..indexes..>+
 \def\IndexEntry#1#2#3#4{%
    \gdef\:temp{#1}\let\:tempa=\empty
    \ifx \:temp\prev:A  \gdef\:temp{#2}\ifx \:temp\prev:B
       \let\:tempa=\relax
    \fi\fi
    \ifx \:tempa\relax ,\else
       \gdef\:temp{#1}\ifx \:temp\prev:A \else  \c:index #1\d:index\fi
       \def\:temp{#2}\ifx \:temp\space
       \else   \hfill\break    \e:index#2\f:index\fi
    \fi
    \g:index #4\h:index
    \gdef\prev:A{#1}\gdef\prev:B{#2}%
 }
 \NewConfigure{index}{8}
 -_-_-