%++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++%
% This is file 'ltxtools-index.sty', version 0.0.1, December 2011.         %
%                                                                          %
% This package and accompanying files may be distributed and/or            %
% modified under the conditions of the LaTeX Project Public License,       %
% either version 1.3 of this license or any later version. The latest      %
% version of this license is in http://www.latex-project.org/lppl.txt      %
% and version 1.3 or later is part of all distributions of LaTeX           %
% version 2005/12/01 or later.                                             %
%                                                                          %
% The LPPL maintenance status of this software is 'author-maintained'.     %
%                                                                          %
% This software is provided 'as it is', without warranty of any kind,      %
% either expressed or implied, including, but not limited to, the          %
% implied warranties of merchantability and fitness for a particular       %
% purpose.                                                                 %
%                                                                          %
% Copyright (c) 2011 Ahmed Musa (amusa22@gmail.com).                       %
%++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++%

\@ifpackageloaded{ltxtools}{%
  \@ifpackagelater{ltxtools}{2011/12/12}{}{%
    \@latex@error{Loaded version of ltxtools package is
      not current}\@ehc
  }%
}{%
  \RequirePackage{ltxtools}[2011/12/12]%
}
\UseNormalCatcodes
\StyleFilePurpose{Macros and interfaces for index-related tasks (AM)}
\StyleFileRCSInfo
$Id: ltxtools-index.sty,v 0.0.1 2011/12/12 09:00:00 Ahmed Musa Exp $
\ProvidesPackage{ltxtools-index}[\StyleFileInfo]
\NeedsTeXFormat{LaTeX2e}[2011/06/27]
\loadifnotloaded{ltxtools-doc}[2011/12/12]
\cptloadpackages{%
  ltxkeys||2011/12/12;
  xcolor|table,dvipsnames,hyperref|2007/01/21;
}
\ltsprovidecolorset[x](1){%
  green,0.00,0.59,0.00;brown,0.50,0.25,0.00;
  teal,0.00,0.82,0.82;magenta,0.44,0.00,0.87;
  purple,0.50,0.00,0.25
}
\cptnewvariables{if}[LTS@]{mainidx,noidx}
\ltxkeys@declarekeys*(cmd)[LTS]{ltxtools-index}[LTS@]{%
  stylecolor/xgreen1;
  cmdcolor/xmagenta1;
  speccolor/xteal1;
  texcolor/Maroon;
  macrocolor/blue;
  examplecolor/teal;
}
\ltxkeys@declarekeys*(bool)[LTS]{ltxtools-index}[LTS@]{%
  fancypages/true;
}
\ltxkeys@declareoption*{%
  \ltxkeys@getpvalnopad
  \ltxmsg@warn{Unknown option '\CurrentKey' with
    value '\InnocentVal' ignored}%
}
%\ltxkeys@executeoptions[LTS]<ltxtools-index>{}\relax
\ltxkeys@processoptions*[LTS]<ltxtools-index>\relax
\ltsAtBeginDocument{%
  \ltscolorlet{ltsmacrocolor}{\LTS@macrocolor}%
  \ltscolorlet{ltsspeccolor}{\LTS@speccolor}%
  \ltscolorlet{ltstexcolor}{\LTS@texcolor}%
  \ltscolorlet{ltscmdcolor}{\LTS@cmdcolor}%
  \ltscolorlet{ltsstylecolor}{\LTS@stylecolor}%
  \ltscolorlet{ltsdoccolor}{black}%
}
\robust@def*\ltsdonotindex#1{%
  \cptexpandarg{\ltsfiltermergecsv\LTS@donotindex@hook}
    {\detokenize{#1}}\nofilter
}
\ltsdonotindex{\begingroup,\endgroup,\bgroup,\egroup}
\ltsdonotindex{\def,\edef,\xdef,\global,\long,\let,\newcommand}
\ltsdonotindex{\expandafter,\noexpand,\unexpanded,\string,\csname}
\ltsdonotindex{\if,\ifcase,\else,\fi,\or,\relax,\iftrue,\iffalse}
\ltsdonotindex{draft,final,true,false}

\robust@def*\ltsdollar{\ifmmode\mathdollar\else\texttt{\char`\$}\fi}
\robust@def*\ltsleftbrace{\ifmmode\lbrace\else\texttt{\char`\{}\fi}
\robust@def*\ltsrightbrace{\ifmmode\rbrace\else\texttt{\char`\}}\fi}
\robust@def*\ltsunderscore{%
  \ifmmode\nfss@text{\textunderscore}\else\texttt{\char`\_}\fi
}
\robust@def*\ltstypeset{%
  \begingroup\LTS@sanitize\LTS@testcl\LTS@typeset
}
\robust@def*\LTS@typeset#1#2{%
  \edef\LTS@tempa{\detokenize{#2}}%
  \ifLTS@cl
    \edef\LTS@tempa{\s@expandarg\cptzapspaces\LTS@tempa}%
  \else
    \despacecontent\LTS@tempa
  \fi
  \texttt{\textcolor{#1}{\expandcsonce\LTS@tempa}}%
  \endgroup
}
\robust@def*\ltscmdtypeset{%
  \begingroup
  \LTS@sanitize\LTS@testcl\LTS@cmdtypeset
}
\robust@def*\LTS@cmdtypeset#1{%
  \edef\reserved@a{\ifLTS@cl!\fi}%
  \expandafter\endgroup\expandafter
  \ltstypeset\reserved@a{ltscmdcolor}{#1}%
}
\robust@def*\ltscmdfamily{\color{ltscmdcolor}\ttfamily}
\robust@def*\ltscmdtext{\begingroup\LTS@sanitize\LTS@cmdtext}
\robust@def*\LTS@cmdtext#1{\endgroup\textcolor{ltscmdcolor}{\texttt{#1}}}
\new@def*\ltsheadquoted#1{\ltsneverexpand{\quoted{#1}}}
\new@def*\ltsheadfx#1{\ltsneverexpand{\ltsfx{#1}}}
\new@def*\ltsheadhx#1{\ltsneverexpand{\ltshx{#1}}}
\new@def*\quotedfxx#1{{\NoWrapQuotes\quoted{\ftfxx{#1}}}}% \quotedFx
\new@def*\quotedfx{%
  \begingroup
  \@makeother{\#}\LTS@quotedfx
}
\new@def*\LTS@quotedfx#1{%
  \NoWrapQuotes\quoted{\ltsftfx{#1}}%
  \endgroup
}
\new@def*\quotedhx{%
  \begingroup
  \@makeother{\#}\LTS@quotedhx
}
\new@def*\LTS@quotedhx#1{%
  \NoWrapQuotes\quoted{\ltsfthx{#1}}%
  \endgroup
}
\robust@def*\ltsfx{%
  \def\LTS@currcolor{ltscmdcolor}%
  \begingroup
  \LTS@sanitize\LTS@teststcl\LTS@fx
}
\robust@def\LTS@fx#1{%
  \edef\LTS@tempb{\detokenize{#1}}%
  \ifLTS@cl
    \let\LTS@tempa\cptzapspaces
  \else
    \ifLTS@st
      \let\LTS@tempa\cptzapspaces
    \else
      \let\LTS@tempa\cpttrimspace
    \fi
  \fi
  \cptexpanded{%
    \noexpand\textcolor{\LTS@currcolor}%
      {\noexpand\texttt{\s@expandarg\LTS@tempa\LTS@tempb}}%
  }%
  \endgroup
}
\robust@def*\ampfx#1#{%
  \def\LTS@currcolor{ltscmdcolor}%
  \amp@fx{#1}%
}
\robust@def\amp@fx#1#2{%
  \begingroup
  \edef\LTS@tempb{\detokenize{#2}}%
  \def\test##1##2{\ifinsetTF{##2}{##1}}%
  \cptifcasse\test{#1}
    {!}{\let\LTS@tempa\cptzapspaces}
    {*}{\let\LTS@tempa\cptzapspaces}
  \elseif
    \let\LTS@tempa\cpttrimspace
  \endif
  \cptexpanded{%
    \noexpand\textcolor{\LTS@currcolor}%
      {\noexpand\texttt{\s@expandarg\LTS@tempa\LTS@tempb}}%
  }%
  \endgroup
}
\robust@def*\ltsftfx{%
  \@tempswatrue
  \def\LTS@currcolor{ltscmdcolor}%
  \LTS@teststcl\LTS@footfx
}
\robust@def*\ltsfthx{%
  \@tempswatrue
  \def\LTS@currcolor{ltstexcolor}%
  \LTS@teststcl\LTS@footfx
}
\robust@def*\ltsftfxx{%
  \@tempswafalse
  \def\LTS@currcolor{ltscmdcolor}%
  \LTS@teststcl\LTS@footfx
}
\robust@def*\LTS@footfx#1{%
  \edef\LTS@tempb{\detokenize{#1}}%
  \ifLTS@cl
    \let\LTS@tempa\cptzapspaces
  \else
    \ifLTS@st
      \let\LTS@tempa\cptzapspaces
    \else
      \let\LTS@tempa\cpttrimspace
      \if@tempswa
        \LTS@footfxparse\LTS@tempb
      \fi
    \fi
  \fi
  \cptexpanded{%
    \noexpand\textcolor{\LTS@currcolor}%
      {\noexpand\texttt{\s@expandarg\LTS@tempa\LTS@tempb}}%
  }%
}
\robust@def*\LTS@footfxparse#1{%
  \begingroup
  \s@expandarg\cpt@pophash#1#1%
  \LTS@putspaceafter#1\cpt@leftbracechar
  \edef\x##1{##1\expandcsonce{#1}\@space\LTS@nil}%
  \edef\y##1{\def##1####1\@space####2\LTS@nil}%
  \y\y{%
    \ifblankTF{##2}{%
      \toks@\expandafter{\the\toks@##1}%
    }{%
      \if\@backslashchar\cpt@car##1x\car@nil
        \toks@\expandafter{\the\toks@##1}%
      \else
        \ltsgetlasttsv{##1}%
        \if\last\cpt@leftbracechar
          \toks@\expandafter{\the\toks@##1}%
        \else
          \cptexpanded{\toks@{\the\toks@\unexpanded{##1}\@space}}%
        \fi
      \fi
      \y##2\LTS@nil
    }%
  }%
  \x{\toks@{}\y}%
  \edef#1{\the\toks@}%
  \postgroupdef#1\endgroup
}
\robust@def\LTS@putspaceafter#1#2{%
  \begingroup
  \toks@{}%
  \xifinsetTF{#2}{\detokenize\expandafter{#1}}{%
    \edef\x##1{##1\detokenize\expandafter{#1}#2\LTS@nil}%
    \edef\y##1{\def##1####1#2####2\LTS@nil}%
    \y\y{%
      \ifblankTF{##2}{%
        \toks@\expandafter{\the\toks@##1}%
      }{%
        \cptexpanded{\toks@{\the\toks@##1#2\@space}}%
        \y##2\LTS@nil
      }%
    }%
    \x{\toks@{}\y}%
  }{%
    \toks@\expandafter{\detokenize\expandafter{#1}}%
  }%
  \edef#1{\the\toks@}%
  \postgroupdef#1\endgroup
}
\robust@def*\ltsifcsvfinal{%
  \ifnum\indrisnr>\@ne
    \iflastindris
      \ifLTS@pm\@space and\else,\fi\@space
    \else
      ,\@space
    \fi
  \fi
}
\robust@def*\ltsffx{%
  \LTS@teststclpm{%
    \def\LTS@currcolor{ltscmdcolor}%
    \begingroup\LTS@sanitize\expandafter\endgroup\LTS@ffx
  }%
}
\robust@def*\LTS@ffx#1{%
  \def\do##1{%
    \ltsifcsvfinal
    \edef\LTS@tempa{\s@expandarg\cpttrimspace{\detokenize{##1}}}%
    \texttt{\textcolor{\LTS@currcolor}{\LTS@tempa}}%
  }%
  \indrisloop{#1}\do
}
\robust@def*\ltsftffx{%
  \LTS@teststclpm{%
    \def\LTS@currcolor{ltscmdcolor}%
    \LTS@ftffx
  }%
}
\robust@def*\ltsfthhx{%
  \LTS@teststclpm{%
    \def\LTS@currcolor{ltstexcolor}%
    \LTS@ftffx
  }%
}
\robust@def*\LTS@ftffx#1{%
  \edef\LTS@tempa{\detokenize{#1}}%
  \s@expandarg\cpt@pophash\LTS@tempa\LTS@tempa
  \expandafter\LTS@ffx\expandafter{\LTS@tempa}%
}
\robust@def*\ltshx{%
  \def\LTS@currcolor{ltstexcolor}%
  \begingroup\LTS@sanitize\LTS@teststclpm\LTS@fx
}
\robust@def*\ltshhx{%
  \LTS@teststclpm{%
    \def\LTS@currcolor{ltstexcolor}%
    \begingroup\LTS@sanitize\expandafter\endgroup\LTS@ffx
  }%
}
% Indexing command syntax:
% * (star) -> print #1 only in index, else print also at place of call.
% ' (prime) -> zap spaces, else trim spaces.
\robust@def*\LTS@fxidx#1#2#3{%
  \usename{LTS@mainidx#1}%
  \let\LTS@texttt\texttt
  \def\LTS@currcolor{#2}%
  \LTS@teststclpm{\begingroup\LTS@sanitize\usename{LTS@fxi@#3}}%
}
\robust@def*\ltsfxim{\LTS@fxidx{true}{ltscmdcolor}{a}}
\newletcs\ltsffxim\ltsfxim
\robust@def*\ltsfxi{\LTS@fxidx{false}{ltscmdcolor}{a}}
\newletcs\ltsffxi\ltsfxi
\robust@def*\ltsfxis{\LTS@fxidx{false}{ltscmdcolor}{b}}
\robust@def*\ltshxim{\LTS@fxidx{true}{ltstexcolor}{a}}
\robust@def*\ltshxi{\LTS@fxidx{false}{ltstexcolor}{a}}
\robust@def*\ltshxis{\LTS@fxidx{false}{ltstexcolor}{b}}
\robust@def*\LTS@zaportrim#1{%
  \begingroup
  \edef\x##1{##1{\detokenize{#1}}}%
  \xdef\zaportrim@res{%
    \ifboolTF{LTS@cl}{\x\cptzapspaces}{\x\cpttrimspace}%
  }%
  \endgroup
}
\robust@def*\LTS@fxi@a#1{\LTS@fxi@b{#1}{}}
\robust@def*\LTS@fxi@b#1#2{%
  \endgroup
  \edef\LTS@tempb{\s@expandarg\cpttrimspace{\detokenize{#2}}}%
  \def\do##1{%
    \LTS@zaportrim{##1}%
    \ifLTS@st\else
      \ltsifcsvfinal
      \cptexpandsecond\textcolor
        {{\LTS@currcolor}{\LTS@texttt{\zaportrim@res}}}%
    \fi
    \cptexpanded{\LTS@indexentry{}{\zaportrim@res}{\LTS@tempb}}%
  }%
  \indrisloop{#1}\do
}
\robust@def*\ltsdummyfxim{\LTS@teststclpm\LTS@dummyfxi}
\robust@def*\ltsdummyfxi{\LTS@teststclpm\LTS@dummyfxi}
\robust@def*\LTS@dummyfxi#1{}
\robust@def*\LTS@aidx#1#2#3{%
  \usename{LTS@mainidx#1}%
  \let\LTS@texttt\@iden
  \def\LTS@currcolor{#2}%
  \LTS@teststclpm{%
    \begingroup
    \LTS@sanitize
    \usename{LTS@fxi@#3}%
  }%
}
\robust@def*\ltsaidx{\LTS@aidx{false}{ltsdoccolor}{a}}
\robust@def*\ltsaidxm{\LTS@aidx{true}{ltsdoccolor}{a}}
% Index entries with |see reference ('s' refers to 'see');
% 'm' -> main (with \underbar):
\robust@def*\ltsaidxs{\LTS@aidx{false}{ltsdoccolor}{b}}
\robust@def*\ltsbidx{\LTS@aidx{false}{ltsspeccolor}{a}}
\robust@def*\ltsbidxm{\LTS@aidx{true}{ltsspeccolor}{a}}
\robust@def*\ltsbidxs{\LTS@aidx{false}{ltsspeccolor}{b}}
% Italicize or apply something to the first word.
% Because of the need to sort the entries, it is usually
% more difficult to apply something to the first word.
% Eg, \ltsaiidxs[\emph,Choice keys]{nominations xxx \emph{yyy}}{zzz}
\robust@def*\ltsaiidx{\LTS@aiidx{false}{ltsdoccolor}{a}}
\robust@def*\ltsaiidxm{\LTS@aiidx{true}{ltsdoccolor}{a}}
\robust@def*\ltsaiidxs{\LTS@aiidx{false}{ltsdoccolor}{b}}
\robust@def*\LTS@aiidx#1#2#3{%
  \usename{LTS@mainidx#1}%
  \def\LTS@currcolor{#2}%
  \LTS@teststclpm{\cpt@testopt{\usename{LTS@fxii@#3}}{}}%
}
\robust@def*\LTS@fxii@a[#1]#2{\LTS@fxii@b[#1]{#2}{}}
\robust@def*\LTS@fxii@b[#1]#2#3{%
  \begingroup
  \def\reserved@a##1,##2,##3\LTS@nil{%
    \def\format{##1}\def\mainentry{##2}%
  }%
  \reserved@a#1,,\LTS@nil
  \def\getfirstword##1 ##2\LTS@nil{%
    \def\firstword{##1}\def\rmwords{##2}%
  }%
  \edef\LTS@tempb{\cpttrimspace{#3}}%
  \def\do##1{%
    \edef\LTS@tempc{\cpttrimspace{##1}}%
    \cptthreexp\getfirstword\expandafter\LTS@tempc\@space\LTS@nil
    \ifLTS@st\else
      \ltsifcsvfinal
      \cptexpandsecond\textcolor{{\LTS@currcolor}{\LTS@tempc}}%
    \fi
    \cptexpanded{\LTS@iindexentry{\mainentry}{\LTS@tempc}{\LTS@tempb}}%
  }%
  \indrisloop{#2}\do
  \endgroup
}
\robust@def*\ltsfiles{\LTS@files@a{false}{b}}
\newletcs\ltsfile\ltsfiles
\robust@def*\ltsfilesm{\LTS@files@a{true}{b}}
\robust@def*\ltsfiless{\LTS@files@a{false}{c}}
\robust@def*\LTS@files@a#1#2{%
  \usename{LTS@mainidx#1}%
  \LTS@teststclpm{%
    \begingroup
    \LTS@sanitize
    \cpt@testopt{\usename{LTS@files@#2}}{tex}%
  }%
}
\robust@def*\LTS@files@b[#1]#2{\LTS@files@c[#1]{#2}{}}
\robust@def*\LTS@files@c[#1]#2#3{%
  \endgroup
  \def\LTS@currcolor{ltsstylecolor}%
  \edef\LTS@tempb{\s@expandarg\cptzapspaces{\detokenize{#1}}}%
  \edef\LTS@tempa{\s@expandarg\cptzapspaces{\detokenize{#2}}}%
  \def\do##1{%
    \ifLTS@st\else
      \ltsifcsvfinal
      \cptexpanded{\ltstypeset{ltsstylecolor}{##1.\LTS@tempb}}%
    \fi
    \cptexpanded{\LTS@indexentry{Files}{##1.\LTS@tempb}{#3}}%
  }%
  \indrisloop*\LTS@tempa\do
}
\robust@def*\ltsemphlist{%
  \LTS@teststpm{\begingroup\LTS@sanitize\LTS@emph\emph}%
}
\robust@def*\ltsquotedlist{%
  \LTS@teststpm{\begingroup\LTS@sanitize\LTS@emph\quoted}%
}
\robust@def*\LTS@emph#1#2{%
  \xdef\@gtempa{\ifLTS@st*\fi}%
  \endgroup
  \def\do##1{%
    \ltsifcsvfinal
    \edef\LTS@tempa{\s@expandarg\cpttrimspace{##1}}%
    #1{\LTS@tempa}%
  }%
  \expandafter\indrisloop\@gtempa{#2}\do
}
\new@def*\ltsheadpkg#1{\ltsneverexpand{\ltspkg{#1}}}
\robust@def*\ltspkgnoidx{%
  \LTS@mainidxfalse\LTS@noidxtrue
  \LTS@teststclpm\LTS@pkg@a
}
\newletcs\ltspkgg=\ltspkgnoidx
\robust@def*\ltspkg{%
  \LTS@mainidxfalse\LTS@noidxfalse
  \LTS@teststclpm\LTS@pkg@a
}
\robust@def*\ltspkgm{% |underbar
  \LTS@mainidxtrue\LTS@noidxfalse
  \LTS@teststclpm\LTS@pkg@a
}
\robust@def*\ltspkgs{% |see
  \LTS@mainidxfalse\LTS@noidxfalse
  \LTS@teststclpm\LTS@pkg@b
}
\robust@def*\LTS@pkg@a#1{\LTS@pkg@b{#1}{}}
\robust@def*\LTS@pkg@b#1#2{%
  \edef\LTS@tempa{\s@expandarg\cptzapspaces{\detokenize{#1}}}%
  \edef\LTS@tempb{\s@expandarg\cptzapspaces{\detokenize{#2}}}%
  \def\LTS@currcolor{ltsstylecolor}%
  \def\do##1{%
    \ifLTS@st\else
      \ltsifcsvfinal
      \textcolor{ltsstylecolor}{\texttt{##1}}%
    \fi
    \ifLTS@noidx\else
      \cptexpanded{\LTS@indexentry{Packages}{##1}{\LTS@tempb}}%
    \fi
    \let\LTS@tempc\indrisnr
  }%
  \indrisloop*\LTS@tempa\do
  \ifLTS@st\else
    \ifLTS@pm\@space package\ifnum\LTS@tempc>1 s\fi\fi
  \fi
}
\robust@def*\LTS@indremovescape#1{%
  \ifblankTF{#1}{\cpt@isblankerr\LTS@indremovescape}{}%
  \let\LTS@putbs\cptswfalse
  \edef\LTS@tempa{\s@expandarg\cpttrimspace{\detokenize{#1}}}%
  \if\@backslashchar\expandafter\LTS@car\LTS@tempa x\car@nil
    \let\LTS@putbs\cptswtrue
    \edef\LTS@remscape@res{\expandafter\@gobble\LTS@tempa}%
  \else
    \let\LTS@remscape@res\LTS@tempa
  \fi
}
\robust@def*\ifindexthis#1{%
  \LTS@indremovescape{#1}%
  \xifinsetTF{,\cptoxdetok\LTS@tempa,}{,\LTS@donotindex@hook,}%
  \@gobble\@iden
}
\robust@def*\LTS@decidebackslash#1{%
  \if\LTS@putbs
    \def#1{\texttt{\symbol{'134}}}%
  \else
    \def#1{}%
  \fi
}
\ifcsdefinable\LTS@currcolor\relax
\AfterStartOfDocument{%
  \newletcs\LTS@indexcmd\index
}
\robust@def*\LTS@indexentry#1#2#3{%
  \begingroup
  \ifindexthis{#2}{%
    \let\idxitem@a\LTS@remscape@res
    \ifLTS@mainidx
      \ifblankTF{#3}{}{%
        \ltxmsg@err{Main index entry can't have '|see'}\@ehc
      }%
    \fi
    \ifboolTF{LTS@cl}\LTS@detok@zap\despacecontent\idxitem@a
    \LTS@decidebackslash\idxbs@a
    \ifblankTF{#3}{}{%
      \LTS@indremovescape{#3}%
      \let\idxitem@b\LTS@remscape@res
      \LTS@decidebackslash\idxbs@b
    }%
    \let\x\noexpand
    \cptexpanded{%
      \x\LTS@indexcmd{\ifblankTF{#1}{}{#1>}%
        \idxitem@a=\x\textcolor{\LTS@currcolor}%
        {\x\texttt{\idxbs@a\idxitem@a}}%
        \ifLTS@mainidx|underbar\fi
        \ifblankTF{#3}{}{%
          |see{\x\texttt{\x\textcolor{\LTS@currcolor}%
            {\idxbs@b\idxitem@b}}}%
        }%
      }%
    }%
  }%
  \endgroup
}
\robust@def*\LTS@iindexentry#1#2#3{%
  \ifindexthis{#2}{%
    \cptexpanded{%
      \noexpand\LTS@indexcmd{%
        \ifblankTF{#1}{}{#1>}%
        #2=\noexpand\textcolor{\LTS@currcolor}{%
          \format{\firstword}%
          \ifx\rmwords\@empty\else\@space\rmwords\fi
        }%
        \ifLTS@mainidx|underbar\fi
        \ifblankTF{#3}{}{%
          |see{\noexpand\textcolor{\LTS@currcolor}{#3}}%
        }%
      }%
    }%
  }%
}
\robust@def*\LTS@helv{\fontfamily{phv}\selectfont\color{blue}}
\robust@def\ltsindexpreamble#1{\long\def\LTS@idxpreamble{#1}}
\cptemptify\LTS@idxpreamble
\robust@def*\ltsindexpreambleformat#1{\long\def\LTS@idxpreamblefmt{#1}}
\newletcs\LTS@idxpreamblefmt\relax
\cptnewvariables{count}{ltsindexcolumns}[2]
\AfterStartOfDocument{%
  \renewenvironment{theindex}{%
    \begin{multicols}{\ltsindexcolumns}%
    [\vspace{2\baselineskip}\centerline{\indexname}%
    \LTS@idxpreamblefmt\LTS@idxpreamble][5\baselineskip]%
    \addcontentsline{toc}{section}{Index}%
    \ifLTS@fancypages\pagestyle{fancyplain}\fi
    \def\indexspace{\endgraf\vskip5\p@\@plus\p@\@minus\p@}%
    \def\@idxitem{%
      \endgraf\vskip-.5\baselineskip\@plus\p@\@minus\p@
      \hangindent40\p@
    }%
    \patchcs\endtrivlist{%
      \if@newlist
        \@noitemerr
        \global\@newlistfalse
      \fi
    }{%
      \if@newlist
        \ltxmsg@warn{Nested center environment possibly
          occurred\on@line}%
        \global\@newlistfalse
      \fi
    }{}{}%
    \let\item\@idxitem
    \small
  }{%
    \end{multicols}%
    \@ignoretrue
  }%
}

\endinput
