%% Copyright (C) 1999 René Seindal (rene@seindal.dk) % This program can redistributed and/or modified under the terms % of the LaTeX Project Public License Distributed from CTAN % archives in directory macros/latex/base/lppl.txt; either % version 1 of the License, or (at your option) any later version. % $Id: indexing.sty,v 1.1 2002/07/28 08:35:09 rene Exp $ -*- latex -*- \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{indexing}[1998/25/10 Definitions for easy indexing] \RequirePackage{multicol} \ProcessOptions %% Alternate for-loop with ; separator \def\@RSfornoop#1\@@#2#3{} \long\def\@RSfor#1:=#2\do#3{% \expandafter\def\expandafter\@RSfortmp\expandafter{#2}% \ifx\@RSfortmp\@empty \else \expandafter\@RSforloop#2; \@nil; \@nil\@@#1{#3}\fi} \long\def\@RSforloop#1; #2; #3\@@#4#5{\def#4{#1}\ifx #4\@nnil \else #5\def#4{#2}\ifx #4\@nnil \else#5\@iRSforloop #3\@@#4{#5}\fi\fi} \long\def\@iRSforloop#1; #2\@@#3#4{\def#3{#1}\ifx #3\@nnil \expandafter\@RSfornoop \else #4\relax\expandafter\@iRSforloop\fi#2\@@#3{#4}} %% Indexing macros. \newif\if@indexing \@indexingfalse \def\indexing{% \@indexingtrue \if@filesw \newwrite\@errout \immediate\openout\@errout \jobname.err \fi } \def\endindexing{\@indexingfalse} \def\genindex{{ \@indexingfalse \ifx\@indexfile\undefined\else \@input{\jobname.ind}% \fi }} \def\theindex{% \chapter*{\indexname}% \addcontentsline{toc}{chapter}{\protect\numberline{}{\indexname}}% {\indexc@mment\par\bigskip} \def\@see@comma,{}% \def\see##1##2{\@ifnextchar ,{\@see@comma}{see \I@normal{##1}}}% \def\indexleader##1{\section*{##1}}% \def\item{\par\hangindent1em}% \def\subitem{\par\hangindent2em\hspace*{1em}}% \def\subsubitem{\par\hangindent3em\hspace*{2em}}% \thispagestyle{plain}% \parindent\z@ \parskip\z@ plus .3\p@\relax \columnsep0.05\hsize \small \footnotesize \spaceskip .3333em plus 1em minus .2222em \xspaceskip .5em plus .5em minus .25em \hyphenpenalty 0 \finalhyphendemerits 0 \begin{multicols}{2}% } \def\endtheindex{% \end{multicols}% } \def\indexc@mment{} \def\indexcomment#1{\def\indexc@mment{{#1}\let\indexc@mment\relax}} \def\noindexmark{\let\I@mark\relax} \def\doindexmark#1{% \def\I@mark{\if@indexing #1\fi}% \def\I@errmark#1{\underline{#1}}% } % Defaults \let\I@mark\relax \def\I@errmark#1{#1} \def\I@expand#1{\uppercase{\def\@tmpa{I@@#1}}% % \typeout{TEST EXP \@tmpa}% \expandafter\@ifundefined\expandafter{\@tmpa}% {\I@idx{? #1}\I@errmark{\text}\I@mark \my@warning{Indexed name `#1' undefined}% % \expandafter\global\expandafter\@namedef\expandafter % {\@tmpa}{{\I@doI {? #1}}}% \if@filesw\ifx\@errout\undefined\else \immediate\write\@errout{\string\idxname{#1}{#1}}% \fi\fi}{}% {\expandafter\@nameuse\expandafter{\@tmpa}}% % Hook handling \uppercase{\def\@tmpa{I@H@#1}}% \expandafter\@ifundefined\expandafter{\@tmpa}{}% {\expandafter\@nameuse\expandafter{\@tmpa}}% % \expandafter\global\expandafter\let\expandafter % \csname\@tmpa\endcsname=\undefined \expandafter\global\expandafter\@namedef\expandafter{\@tmpa}{}% } \def\I@def#1#2{\uppercase{\def\@tmpa{I@@#1}}% % \typeout{TEST DEF \@tmpa} \expandafter\@ifundefined\expandafter{\@tmpa}% {}{\my@warning{Indexed name `#1' redefined}}% \expandafter\global\expandafter\@namedef\expandafter{\@tmpa}{#2}% % \expandafter\expandafter\expandafter % \show\expandafter\csname\@tmpa\endcsname } \def\I@defhook#1#2{\uppercase{\def\@tmpa{I@H@#1}}% % \typeout{TEST DEF HOOK \@tmpa} \expandafter\@ifundefined\expandafter{\@tmpa}% {}{\my@warning{Hook for indexed name `#1' redefined}}% \expandafter\global\expandafter\@namedef\expandafter{\@tmpa}{#2}% % \expandafter\expandafter\expandafter % \show\expandafter\csname\@tmpa\endcsname } \def\I@alias#1#2{\uppercase{\def\@tmpb{I@@#1}}% \uppercase{\def\@tmpa{I@@#2}}% % \typeout{TEST ALIAS \@tmpb\ to \@tmpa}% \expandafter\@ifundefined\expandafter{\@tmpa}% {\my@warning{Indexed name `#1' aliased to undefined `#2'}}{}% \expandafter\let\expandafter\tmp\csname\@tmpa\endcsname \def\next{\global\let}% \expandafter\expandafter\expandafter\next \expandafter\csname\@tmpb\endcsname=\tmp } \def\I{\protect\I@one} \def\I@one{\@ifnextchar -{\I@indexonly}{\I@two}} \def\I@two{\@ifstar{\I@emph}{\I@normal}} % Non-printing version \def\I@indexonly-#1{{% \let\text\relax \let\mark\I@mark \I@expand{#1}% }} % Normal version \def\I@normal#1{{% \def\text{#1}% \let\mark\I@mark \I@expand{#1}% }} % Emphasised version \def\I@emph#1{{% \def\I@type{textbf}% \def\text{#1}% \let\mark\I@mark \I@expand{#1}% }} \def\I@idx#1{{% \if@indexing \@ifundefined{I@type}% {\@RSfor\@tmpa:=#1\do{\index{\@tmpa}}}% {\@RSfor\@tmpa:=#1\do{\index{\@tmpa|\I@type}}}% \fi }} \def\I@xref#1#2{{% \if@indexing \index{#1|see{#2}}% \index{#2}% \fi }} \def\I@see#1#2{{% \if@indexing \index{#1|see{#2}}% \fi }} %% Register index entry: TEXT, INDEX TEXT \def\idxname#1#2{\I@def{#1}{\I@doN {#2}}} \def\I@doN#1{\I@idx{#1}\mark \text} %% Register specially typeset index entry: TEXT, INDEX TEXT, MACRO \def\idxspec#1#2#3{\I@def{#1}{\I@doS {#2}{#3}}} \def\I@doS#1#2{\I@idx{#1}\mark \@nameuse{#2}{\text}} %% Register aliased entry: TEXT, REF'ED TEXT \def\idxalias#1#2{\I@alias{#1}{#2}} %% Register alternate entry: TEXT, ALT TEXT \def\idxalso#1#2{\I@alias{#1}{#2}\I@defhook{#1}{\I@see{#1}{#2}}} %% Register abbreviated index entry: LABEL, TEXT, INDEX TEXT \def\idxabbrev#1#2#3{\I@def{#1}{\I@doA {#2}{#3}}} \def\I@doA#1#2{\def\text{#1}\I@idx{#2}\mark\text}