% \def\filename{amsmidx.dtx} % \def\fileversion{2.02} % \def\filedate{2007/09/25} % % \iffalse meta-comment % % American Mathematical Society % Technical Support % Publications Technical Group % 201 Charles Street % Providence, RI 02904 % USA % tel: (401) 455-4080 % (800) 321-4267 (USA and Canada only) % fax: (401) 331-3842 % email: tech-support@ams.org % % Copyright 1995, 2004, 2009, 2010 American Mathematical Society. % % This work may be distributed and/or modified under the % conditions of the LaTeX Project Public License, either version 1.3c % of this license or (at your option) any later version. % The latest version of this license is in % http://www.latex-project.org/lppl.txt % and version 1.3c or later is part of all distributions of LaTeX % version 2005/12/01 or later. % % This work has the LPPL maintenance status `maintained'. % % The Current Maintainer of this work is the American Mathematical % Society. % % \fi % % \iffalse %<*driver> \documentclass{amsdtx} \begin{document} \title{The \pkg{amsmidx} package} \author{American Mathematical Society\\Barbara Beeton} \date{Version \fileversion, \filedate} \DocInput{amsmidx.dtx} \end{document} % % \fi % % \maketitle % % \MakeShortVerb\| % % \section{Introduction} % % This package provides the facility to produce multiple indexes % with \amslatex/ document classes (particularly \fn{amsbook} and % the AMS author packages for books), superseding the built-in % index facility which can accommodate only one index. This may % in the future be incorporated as an option into the \amslatex/ % document classes. % % This package is based on \pkg{multind.sty} by F.W. Long. % % \StopEventually{} % % Standard file identification. % \begin{macrocode} \NeedsTeXFormat{LaTeX2e}[1995/06/01] \ProvidesPackage{amsmidx}[2007/09/25 v2.02 multiple indexes for AMS classes] % \end{macrocode} % % \section{User instructions} % % In the preamble, invoke \cn{makeindex} with a file name to provide % as many indexes as desired: %\begin{verbatim} % \makeindex{filename-a} % \makeindex{filename-b} %\end{verbatim} % This will initiate the creation of \fn{filename-a.idx} etc. % % In the body of the text, use the \cn{index} command with two % arguments %\begin{verbatim} % \index{filename-a}{index term} %\end{verbatim} % as appropriate to populate the \fn{.idx} files. % % In the \cn{backmatter} segment of the driver file, insert the % \cn{Printendex} command to print the indexes; the second argument % gives the title to be printed at the top of the index: %\begin{verbatim} % \Printindex{filename-a}{First Index} % \Printindex{filename-b}{Second Index} %\end{verbatim} % % On the first pass, the \fn{.idx} files will be created. Process % each \fn{.idx} file with \textit{MakeIndex} to generate an \fn{.ind} % file, which will then be read in by \cn{Printindex}. Whenever any % page references change, be sure to run \textit{MakeIndex} again, % and process the entire job with \latex/ once more to get the correct % page references in the indexes. % % To include a paragraph of comments below the index title, insert % the text as an \cn{indexcomment} before the relevant \cn{Printindex}: %\begin{verbatim} % \indexcomment{Text of comments} % \Printindex{...}{...} %\end{verbatim} % The \cn{indexcomment} text will be cleared after use. % % % \section{Implementation} % % \begin{macro}{\makeindex} % Redefine \cn{makeindex} to create a new \fn{.idx} file with the % name provided by argument |#1|. % \begin{macrocode} \renewcommand{\makeindex}[1]{% \begingroup \makeatletter \if@filesw \expandafter\newwrite\csname #1@idxfile\endcsname \expandafter\immediate\openout \csname #1@idxfile\endcsname #1.idx\relax \typeout{Writing index file #1.idx }\fi \endgroup} % \end{macrocode} % \end{macro} % % \begin{macro}{\index} % Redefine \cn{index} to specify into which file/index the term is % to be placed. Argument |#1| identifies the file, |#2| provides % the text of the term to be indexed. % \begin{macrocode} \renewcommand{\index}[1]{% \@bsphack \begingroup \def\protect##1{\string##1\space}\@sanitize\@wrindex{#1}} % \end{macrocode} % \end{macro} % % \begin{macro}{\@wrindex} % \cs{@wrindex} checks to make sure that the requested file is available, % and writes an entry into the file or emits an error message. % \begin{macrocode} \renewcommand{\@wrindex}[2]{% \let\thepage\relax \xdef\@gtempa{% \@ifundefined{#1@idxfile}{% \PackageError{\@packagename}{% The requested file, #1@idxfile.idx, does not exist;\MessageBreak index term #2 will not be be written out.% }% }{% \expandafter\write\csname #1@idxfile\endcsname {\string\indexentry{#2}{\thepage}}% }% }% \endgroup\@gtempa \if@nobreak \ifvmode\nobreak\fi\fi \@esphack } % \end{macrocode} % \end{macro} % % \begin{macro}{\printindex} % \begin{macro}{\Printindex} % Redefine \cs{printindex} to specify the file to be included; provide % an alternate command \cs{Printindex} that specifies both the file and % the index title to be printed. Argument |#1| identifies the file, % |#2| provides the title. Also modify some formatting commands to % improve the appearance of index entries, especially long ones in % the presence of three index levels. % \begin{macrocode} \renewcommand{\printindex}[1]{\@input{#1.ind}} \newcommand{\Printindex}[2]{% \begingroup \cleardoublepage \def\indexname{#2}% \raggedright \hyphenpenalty=10000 \renewcommand{\seename}{see~also} \renewcommand{\subitem}{\par\hangindent 3em\hspace*{1em}} \@input{#1.ind}% \endgroup } % \end{macrocode} % \end{macro} % \end{macro} % % \begin{macro}{\indexcomment} % \begin{macro}{\indexchap} % Format comments in a block somewhat narrower than the full page % width, and redefine \cn{indexchap} to insert the block below the % title, before starting the two-column index. Clear out % \cs{indexcomment} after use. % \begin{macrocode} \newdimen\@indexcommentwidth \@indexcommentwidth=\textwidth \ifdim\@indexcommentwidth > 26pc \advance\@indexcommentwidth-6pc \else \advance\@indexcommentwidth-4pc \fi \newcommand{\indexcomment}[1]{% \def\theindexcomment{% \vskip\baselineskip \parbox[t]{\@indexcommentwidth}{\normalsize\mdseries#1}% }% } \let\theindexcomment\@empty \renewcommand{\indexchap}[1]{% \global\topskip 7.5pc\relax \twocolumn[\fontsize{\@xivpt}{18}% \vskip\topskip\vskip-\baselineskip\hbox{}% adjust top space \bfseries\centering #1\par \ifx\theindexcomment\@empty \else \theindexcomment \global\let\theindexcomment\@empty \fi ]% \global\topskip 34\p@ } % \end{macrocode} % \end{macro} % \end{macro} % % The usual \cs{endinput} to ensure that random garbage at the end of % the file doesn't get copied by \fn{docstrip}. % \begin{macrocode} \endinput % \end{macrocode} % % \CheckSum{131} % \Finale