diff options
author | Karl Berry <karl@freefriends.org> | 2006-01-11 23:54:06 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2006-01-11 23:54:06 +0000 |
commit | e89704e0b30a35f981c03c7d7bda4b7cea848c81 (patch) | |
tree | 247b30dafc3ac9afb6d1557f801d3c683b9829fe /Master/texmf-dist/source/latex/index/index.dtx | |
parent | 7333dfd3878a1762d52a045af3a07c2541c37608 (diff) |
trunk/Master/texmf-dist/source/latex/index
git-svn-id: svn://tug.org/texlive/trunk@330 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/source/latex/index/index.dtx')
-rw-r--r-- | Master/texmf-dist/source/latex/index/index.dtx | 1398 |
1 files changed, 1398 insertions, 0 deletions
diff --git a/Master/texmf-dist/source/latex/index/index.dtx b/Master/texmf-dist/source/latex/index/index.dtx new file mode 100644 index 00000000000..4a7ecb77bb4 --- /dev/null +++ b/Master/texmf-dist/source/latex/index/index.dtx @@ -0,0 +1,1398 @@ +% \iffalse +% ==================================================================== +% @LaTeX-style-file{ +% filename = "index.dtx", +% version = "4.02beta", +% date = "20 January 2004", +% time = "21:15:11 EST", +% author = "David M. Jones", +% address = "MIT Laboratory for Computer Science +% Room NE43-316 +% 545 Technology Square +% Cambridge, MA 02139 +% USA", +% telephone = "(617) 253-5936", +% FAX = "(617) 253-3480", +% checksum = "39539 1398 6018 50774", +% email = "dmjones@theory.lcs.mit.edu", +% codetable = "ISO/ASCII", +% keywords = "LaTeX, index", +% supported = "yes", +% docstring = "This is a reimplementation of LaTeX's +% indexing macros to provide better support +% for indexing in LaTeX. For example, it +% supports multiple indexes in a single +% document and provides a more robust \index +% command. +% +% The checksum field above contains a CRC-16 +% checksum as the first value, followed by +% the equivalent of the standard UNIX wc +% (word count) utility output of lines, +% words, and characters. This is produced +% by Robert Solovay's checksum utility.", +% +% } +% ==================================================================== +% +% This file may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.2 +% 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.2 or later is part of all distributions of LaTeX +% version 1999/12/01 or later. +% +% CAUTION: Use only as directed. Do not take internally. May cause +% rash if applied directly to skin. Federal law prohibits distributing +% without a proscription. +% +% \fi +% +%% \CheckSum{755} +%% \CharacterTable +%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z +%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z +%% Digits \0\1\2\3\4\5\6\7\8\9 +%% Exclamation \! Double quote \" Hash (number) \# +%% Dollar \$ Percent \% Ampersand \& +%% Acute accent \' Left paren \( Right paren \) +%% Asterisk \* Plus \+ Comma \, +%% Minus \- Point \. Solidus \/ +%% Colon \: Semicolon \; Less than \< +%% Equals \= Greater than \> Question mark \? +%% Commercial at \@ Left bracket \[ Backslash \\ +%% Right bracket \] Circumflex \^ Underscore \_ +%% Grave accent \` Left brace \{ Vertical bar \| +%% Right brace \} Tilde \~} +% +% \iffalse +% \begin{macrocode} +%<*driver> +\ProvidesFile{index.dtx}[1995/09/28 v4.1beta Improved index support (dmj)] +%</driver> +% \end{macrocode} +% +% \begin{macrocode} +%<*driver> +\documentclass{ltxdoc} +\def\docdate {7 March 1994} +% \end{macrocode} +% We don't want everything to appear in the index +% \begin{macrocode} +\DoNotIndex{\!,\/,\?,\@,\^,\_} +\DoNotIndex{\@@par,\@M,\@auxout,\@bsphack,\@esphack,\@depth,\@ehc} +\DoNotIndex{\@for,\@flushglue,\@gobble,\@gobbletwo,\@height,\@idxitem} +\DoNotIndex{\@ifnextchar,\@ifstar,\@ifundefined,\@input,\@latexerr} +\DoNotIndex{\@makeschapterhead,\@namedef,\@nameuse,\@nil} +\DoNotIndex{\@nobreakfalse,\@restonecolfalse,\@restonecoltrue} +\DoNotIndex{\@tempa,\@tempf,\@temptokena,\@themark,\@width} +\DoNotIndex{\active,\aindex,\baselineskip,\begin,\begingroup,\box} +\DoNotIndex{\c@page,\catcode,\chapter,\char,\chardef,\closeout} +\DoNotIndex{\CodelineIndex,\sp,\sb,\label,\leavevmode,\mark} +\DoNotIndex{\mark,\newinsert,\newwrite,\newtoks,\xdef} +\DoNotIndex{\columnsep,\columnseprule,\columnwidth,\csname,\def} +\DoNotIndex{\dimen,\do,\DocInput,\documentstyle,\edef,\em} +\DoNotIndex{\EnableCrossrefs,\end,\endcsname,\endgroup,\endinput} +\DoNotIndex{\everypar,\expandafter,\filedate,\fileversion} +\DoNotIndex{\footnotesize,\gdef,\global,\glossary,\hangindent} +\DoNotIndex{\if@filesw,\else,\fi} +\DoNotIndex{\if@nobreak,\if@twocolumn,\if@twoside,\fi,\fi,\fi} +\DoNotIndex{\hsize,\hskip} +\DoNotIndex{\ifhmode,\ifmmode,\ifodd,\ifvmode,\ifx,\fi,\fi,\fi,\fi,\fi} +\DoNotIndex{\immediate,\insert,\item,\jobname,\long} +\DoNotIndex{\let,\lineskip,\marginparsep,\marginparwidth,\maxdimen} +\DoNotIndex{\makeatletter,\noexpand,\openout,\protect,\rlap} +\DoNotIndex{\min,\newpage,\nobreak,\normalbaselineskip} +\DoNotIndex{\normallineskip,\p@,\par,\parfillskip,\parindent,\parskip} +\DoNotIndex{\penalty,\relax,\section,\sin,\sloppy,\space,\string} +\DoNotIndex{\tableofcontents,\the,\thepage,\thispagestyle,\toks,\tt} +\DoNotIndex{\twocolumn,\uppercase,\vbox,\vrule,\vskip,\vss} +\DoNotIndex{\write,\z@,\z@skip} +% \end{macrocode} +% Some useful macros and parameter settings: +% \begin{macrocode} + +\setcounter{StandardModuleDepth}{1} + +\GetFileInfo{index.dtx} + +\newcommand*{\email}[1]{$\langle$\texttt{#1}$\rangle$} +\newcommand*{\vdate}[1]{$\langle$#1$\rangle$} +\newcommand*{\bundle}[1]{\texttt{#1}} +\newcommand*{\program}[1]{\textsf{#1}} +\newcommand*{\Ltag}[1]{\texttt{\bslash#1}} +\newcommand*{\Lopt}[1]{\textsf {#1}} +\newcommand*{\Lenv}[1]{\texttt {#1}} +\newcommand*{\cls}[1]{\texttt {#1}} +\newcommand*{\pck}[1]{\texttt {#1}} +\newcommand*{\file}[1]{\texttt {#1}} +\CodelineIndex +% \end{macrocode} +% And the document itself: +% \begin{macrocode} +\begin{document} +\DocInput{index.dtx} +\PrintIndex +% ^^A\PrintChanges +\end{document} +%</driver> +% \end{macrocode} +% +% \fi +% +% \title{A new implementation of \LaTeX's indexing +% commands\thanks{This file has version number \fileversion, +% last revised \filedate, documentation dated \docdate. The +% definitive version of this file is at +% \file{ftp://theory.lcs.mit.edu/pub/tex/index/}.}} +% +% \author{David M. Jones} +% +% \date{\filedate} +% +% \maketitle +% +% \section{Introduction} +% +% This style file reimplements \LaTeX's indexing macros to provide +% better and more robust support for indexes. In particular, it +% provides the following features:\footnote{Earlier versions of +% this package provided a ``shortindexing'' feature (see below for +% description). This feature is now deprecated and will be removed +% in a future release of this package.} +% \begin{enumerate} +% +% \item +% Support for multiple indexes. +% +% \item +% Indexing of items by counters other than the page number. +% +% \item +% A $*$-variant of the \cs{index} command that, in addition to +% putting it's argument in the index, also typesets it in the +% running text. +% +% \item +% The \bundle{showidx} style option has been merged into this file. +% The command \cs{proofmodetrue} can be used to enable the printing +% of index entries in the margin of pages. The size and style of +% font can be controlled with the \cs{indexproofstyle} command. +% +% \item +% A two-stage process, similar to that used to create tables of +% contents, for creating the raw index files. This means that when +% processing a portion of a document using the \cs{includeonly} +% command, the index entries from the rest of the document are not +% lost. +% +% \item +% A more robust \cs{index} command. In particular, it no longer +% depends on \cs{catcode} changes to work properly, so the new +% \cs{index} command can be used in places that the original +% couldn't, such as inside the arguments of other macros. +% +% \end{enumerate} +% +% +% \section{Creating an index with \LaTeX} +% +% Conceptually, there are four stages to creating an index. First, +% \LaTeX\ must be informed of your intention to include an index in +% your document. Second, you must add appropriate markup commands +% to your document to tell \LaTeX\ what to put in the index. +% Third, after \LaTeX\ has been run on your document, the raw index +% information must be processed and turned into a form that \LaTeX\ +% can process to typeset the index. Finally, the finished index +% must be inserted at the appropriate point in your document. +% +% In \LaTeX, these steps are accomplished with the commands +% \cs{makeindex}, \cs{index}, \cs{printindex}, and (typically) with +% the auxiliary program \program{MakeIndex}. For example, assuming +% that your main file is called \file{foo.tex}, \cs{makeindex} +% opens the file \file{foo.idx} and initializes it for holding the +% raw index entries, and \cs{index} is used to add raw index +% entries into \file{foo.idx}. Then the raw index file is +% processed by \program{MakeIndex}, which puts the finished index +% in \file{foo.ind}. Finally, the \cs{printindex} command is used +% in your \LaTeX\ document to indicate where the file +% \file{foo.idx} should be inserted, i.e., where the index should +% appear in your document. +% +% The \bundle{index} package modifies the \cs{makeindex}, +% \cs{index}, and \cs{printindex} commands, as described below. +% +% +% \section{The user interface} +% +% There are four pieces of information associated with each index: +% \begin{enumerate} +% +% \item +% A short, unique tag that identifies the index. +% +% \item +% The extension of the output file where the raw index information +% will be put by \LaTeX. +% +% \item +% The extension of the input file where the processed information +% created by \program{MakeIndex} will be stored to be read in later +% by \LaTeX. +% +% \item +% The title of the index. +% +% \end{enumerate} +% +% \DescribeMacro{\newindex} +% Correspondingly, the \cs{newindex} command has four required +% arguments. For example, to declare an author index, you might +% use the following: +% \begin{verbatim} +% \newindex{aut}{adx}{and}{Name Index}\end{verbatim} +% Here, \texttt{aut} is the tag used to identify the author index, +% and ``Name Index'' is the title of the index. If the name of +% your main file is \file{root.tex}, then \LaTeX\ will write the +% raw index entries to the file \file{root.adx}, and you will +% execute the following \program{MakeIndex} command to process the +% author index: +% \begin{verbatim} +% makeindex -o root.and root.adx\end{verbatim} +% +% By default, the \cs{index} tags its argument with the page number +% (i.e., the value of \cs{thepage}), but occasionaly you may want +% to index items according to a different counter. For example, +% you may want an index that contains figure numbers instead of +% page numbers. To accomodate, this, the \cs{newindex} command +% takes an optional argument, which is the name of the command that +% generates the number that should be included in the index. For +% instance, to include the number of a figure, you might say +% \begin{verbatim} +% \newindex[thefigure]{fig}{fdx}{fnd}{Figures}\end{verbatim} +% +% However, this introduces a new technicality: When creating an +% index with page numbers, the choice of which page number is to be +% written to the \texttt{aux} file should be deferred until the +% page containing the entry is shipped out to the \texttt{dvi} +% file, otherwise the wrong number will sometimes be chosen. +% However, when using counters other than the page counter, one +% normally wants the opposite behaviour: the number written to the +% \texttt{aux} file should be chosen immediately, otherwise every +% item on a given page will be tagged with the number of the last +% item on that page. So, when a counter is specified using the +% optional argument of \cs{newindex}, it is assumed that the +% counter should be evaluated immediately. If for some reason you +% need the choice to be deferred until the page is written to the +% \texttt{dvi} file, you can force this behaviour by putting a $*$ +% {\em after\/} the optional argument: +% \begin{verbatim} +% \newindex[thefigure]*{fig}{fdx}{fnd}{Figures}\end{verbatim} +% (One consequence of this scheme is that if, for some reason, you +% need the choice of page number to be made immediately instead of +% being deferred until a page is shipped out to the \texttt{dvi} +% file, you can acomplish this by beginning your index declaration +% with +% \begin{verbatim} +% \newindex[thepage]*\end{verbatim} +% +% +% \DescribeMacro{\renewindex} +% The \cs{renewindex} command takes the same arguments as the +% \cs{newindex} command and can be used to redefine indexes that +% have been previously declared. +% +% +% \DescribeMacro{\makeindex} +% For backwards compatibility, the \cs{makeindex} command is +% redefined to use \cs{newindex}. It is essentially equivalent to +% \begin{verbatim} +% \newindex{default}{idx}{ind}{Index}\end{verbatim} +% The index labeled \texttt{default} is special: it is the one that +% will be used by \cs{index} and \cs{printindex} unless another +% index is specified (see below). +% +% +% \DescribeMacro{\printindex} +% The \cs{printindex} command is modified by the addition of an +% optional argument, which is the tag of the index that should be +% printed. +% +% +% \DescribeMacro{\index} +% The \cs{index} command is modified in two ways. First, there is +% a $*$-variant of the command that, in addition to putting its +% argument into an index, also typesets it on the page. Second, +% \cs{index} now takes an optional argument to indicate which index +% the new entry should be added to. If given, the optional +% argument should be the identifying tag of a previously-defined +% index. If no such tag is supplied, the \texttt{default} index +% (such as that opened by \cs{makeindex} above) is used. +% +% +% \DescribeMacro{\shortindexingon} +% \DescribeMacro{\shortindexingoff} +% Perhaps the most dubious feature of \bundle{index.sty} is that it +% allows you to define the characters |^| and |_| to be +% abbreviations for \cs{index*} and \cs{index} outside of math +% mode. These abbreviations are enabled by the +% \cs{shortindexingon} command and disabled by the +% \cs{shortindexingoff} command. The scope of both of these latter +% commands is local to the current group. (This might be useful, +% for example, if you wanted the abbreviations turned on throughout +% most of the documentation, but turned off in one particular +% environment.) In addition, +% \DescribeEnv{shortindexingon}\Lenv{shortindexingon} can be used +% as an environment if that seems appropriate. \textbf{Warning: +% This feature is deprecated and will disappear in a future release +% of this package.} +% +% +% \DescribeMacro{\proofmodetrue} +% \DescribeMacro{\proofmodefalse} +% \DescribeMacro{\indexproofstyle} +% As mentioned above, the \bundle{showidx} document-style option +% has been merged into \bundle{index.sty}. It can be turned on +% with \cs{proofmodetrue} and turned off with \cs{proofmodefalse}. +% When it is turned on, all index entries\footnote{Well, most, at +% least. There are some circumstances under which the index +% entries won't show up in the proofs, although they will show up +% in the index.} will be put in the margin of the page where they +% appear. By default, they appear in the typewriter font at +% \cs{footnotesize}, but the user can override this with the +% \cs{indexproofstyle} command; for example, +% \begin{verbatim} +% \indexproofstyle{\footnotesize\it}\end{verbatim} +% will cause them to be put in italics instead. +% +% +% \DescribeMacro{\disableindex} +% There are some circumstances where it might be helpful to +% suppress the writing of a particular index. The +% \cs{disableindex} command is provided for this purpose. It takes +% one argument, a comma-separated list of tags of the indexes that +% should be disabled. This command should come {\em before\/} the +% declarations for the indexes that are being +% disabled\footnote{This limits its usefulness somewhat, but since +% the output file for an index is opened when the index is +% declared, the damage has already been done. We could close the +% file, but we can't prevent a new output stream from being +% allocated and we can't keep the old file from being truncated.}. +% One situation where the \cs{disableindex} command might be useful +% is if there are so many indexes that you are exhausting \TeX's +% supply of output streams\footnote{\TeX\ only has 16 output +% streams, which are allocated with the {\tt\string\newwrite} +% command. The standard \LaTeX\ styles use from 3 to 7 of these, +% which should leave room for up to 9 indexes. Of course, if you +% have extra output files, then there will be fewer output streams +% left for indexes.}. For example, suppose you have 10 indexes, +% but only 5 output streams available for indexes. Then you could +% add a \cs{disableindex} command to the top of your file to +% suppress the writing of all but 5 of the indexes. (Note that the +% index entries would still get written to the \texttt{aux} file; +% they just wouldn't get copied to the individual raw index files +% at the end of the run.) At the end of the run, you could then +% re-run your main file a couple of times with different indexes +% disabled until you had created all of the raw index files. This +% is somewhat clumsy, but safer than any alternative I've come up +% with\footnote{A less clumsy (for the user, at least) solution +% would be to read the \texttt{aux} file multiple times at the end +% of the run, each time writing just one of the raw index files. +% The main disadvantage of this scheme at present is that it would +% require a modification of {\tt\string\enddocument}.}. +% +% +% \section{Caveats} +% +% In order to implement this style file, it's been necessary to +% modify a number of \LaTeX\ commands seemingly unrelated to +% indexing, namely, \cs{@starttoc}, \cs{raggedbottom}, +% \cs{flushbottom}, \cs{addcontents}, \cs{markboth}, and +% \cs{markright}. Naturally, this could cause incompatibilities +% between \bundle{index.sty} and any style files that either +% redefine these same commands or make specific assumptions about +% how they operate. See Section~\ref{sec:thecode} for explanations +% of why these various commands needed modification. +% +% The redefinition of \cs{@starttoc} is particularly bad, since it +% introduces an incompatibility with the AMS document classes. +% This will be addressed soon. +% +% Unfortunately, it's also been necessary to modify the +% \Lenv{theindex} environment, so if you don't like the default +% \LaTeX\ definition, you'll need copy the definition of +% \Lenv{theindex} from this file and modify it appropriately. +% +% In the current implementation, \bundle{index.sty} uses one output +% stream for each index. Since there are a limited number of +% output indexes, this means that there is a limit on the number of +% indexes you can have in a document. See the description of +% \cs{disableindex} for a fuller discussion of this problem and one +% way around it. +% +% +% \section{To do's} +% +% It might be nice if the \cs{index*} command parsed its argument +% so that, for example, instead of writing +% `|\index{sin@$\sin$}$\sin$|', one could write +% `|index*{sin@$\sin$}|'. However, this is fraught with numerous +% dangers, and I'm both too lazy and too cowardly to undertake it +% now. +% +% It would be reasonable to add support for \cs{makeglossary} and +% similar things, if they were well-defined enough to decide what +% the general syntax for defining them should be. +% +% The documentation should be carefully read, edited, and finished, +% especially since it's still based on the 2.09 version, even +% though a few substantial changes have been made for the \LaTeXe\ +% version. +% +% For some truly outlandish ideas, see the file \file{TODO} in the +% distribution. +% +% \StopEventually{} +% +% \section{The code} +% \label{sec:thecode} +% +% As is customary, identify this as a \LaTeXe\ package. +% \begin{macrocode} +%<*style> +\NeedsTeXFormat{LaTeX2e}[1995/06/01] + +\ProvidesPackage{index}[2004/01/20 v4.2beta Improved index support (dmj)] +% \end{macrocode} +% +% \begin{macro}{\disableindex} +% The \cs{disableindex} should come before the declarations of the +% indexes it refers to. (Question: If an index has been disabled, +% should it show up in index proofs? Maybe there should be a +% separate command to disable index proofs on and index-by-index +% basis.) +% \begin{macrocode} +\def\disableindex#1{% + \@for\@tempa:=#1\do{% + \@namedef{disable@\@tempa}{}% + \@ifundefined{tf@\@tempa}{}{% + \PackageWarningNoLine{index}{It's too late to disable + the `\@tempa' index;\MessageBreak + \jobname.\@tempa\space has already + been opened for output. You \MessageBreak + should put the \string\disableindex\space command + before\MessageBreak + the declaration of the `\@tempa' index}% + }% + }% +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\if@newindex} +% \begin{macro}{\newindex} +% \begin{macro}{\renewindex} +% The \cs{newindex} and \cs{renewindex} commands are defined on +% analogy with the \cs{[re]newcommand} macros. Each index is +% identified by a unique tag, which is specified in the first +% required argument of \cs{newindex}. Much of the information +% about the index labeled \meta{tag} is kept in the macro +% \cs{idx@}\meta{tag}, so we can check to see if a particular index +% has already been defined by checking whether \cs{idx@}\meta{tag} +% is defined. \cs{newindex} and \cs{renewindex} both check to see +% if their first argument is already associated with an index and +% then either issue an appropriate error message or call +% \cs{def@index}. +% +% The \cs{if@newindex} flag will be used to keep \cs{renewindex} +% from re-allocating \cs{write} and \cs{toks} registers later. The +% \cs{if@tempswa} switch will be used to determine whether the +% \cs{write}s for this index should be done \cs{immediate}ly or +% not. +% \begin{macrocode} +\newif\if@newindex + +\def\newindex{% + \@tempswafalse + \@ifnextchar[{\@tempswatrue\x@newindex}{\x@newindex[thepage]}% +} + +\def\x@newindex[#1]{% + \@ifstar {\@tempswafalse\y@newindex{#1}} + {\y@newindex{#1}}% +} + +\def\y@newindex#1#2{% + \@ifundefined{idx@#2}% + {\@newindextrue\def@index{#1}{#2}}% + {% + \@latexerr{Index type `\string#2' already defined}\@ehc + \expandafter\@gobble\@gobbletwo + }% +} + +\def\renewindex{% + \@tempswafalse + \@ifnextchar[{\@tempswatrue\x@renewindex}{\x@renewindex[thepage]}% +} + +\def\x@renewindex[#1]{% + \@ifstar {\@tempswafalse\y@renewindex{#1}} + {\y@renewindex{#1}}% +} + +\def\y@renewindex#1#2{% + \@ifundefined{idx@#2}% + {% + \@newindextrue + \@latexerr{Index type `\string#2' not defined}\@ehc + }% + {\@newindexfalse}% + \def@index{#1}{#2}% +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@preamblecmds} +% Neither \cs{newindex}, \cs{renewindex}, nor \cs{disableindex} +% should be used anywhere except inside style files or in the +% preamble of a document, so we add them to the \cs{@preamblecmds} +% list. +% \begin{macrocode} +\@onlypreamble\newindex +\@onlypreamble\renewindex +\@onlypreamble\disableindex +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\def@index} +% \cs{def@index} does most of the work. First, it picks up the +% first three arguments of the \cs{[re]newindex} command and stores +% the second two in an appropriate \cs{idx@} macro. The title of +% the index is treated differently, however, since it is +% potentially fragile in a particularly odd way. To prevent +% mishaps, it is stored in a token register. In addition to +% stashing away the information about the index, \cs{def@index} +% also opens an appropriate output file if we are writing auxiliary +% files (i.e., unless \cs{nofiles} is in effect). +% +% \begin{macrocode} +\def\def@index#1#2#3#4{% + \@namedef{idx@#2}{#3:#4:#1}% + \expandafter\let\csname if@immediate@#2\endcsname\if@tempswa + \if@filesw + \if@newindex + \expandafter\newtoks\csname idxtitle@#2\endcsname + \fi + \@ifundefined{disable@#2}{% + \if@newindex + \expandafter\newwrite\csname tf@#2\endcsname + \else + \immediate\closeout\@nameuse{tf@#2}% + \fi + \immediate\openout\@nameuse{tf@#2}\jobname.#3 % + \PackageInfo{index}{Writing index file \jobname.#3}% + } + {\PackageInfo{index}{Index `#2' disabled -- not opening + \jobname.#3}}% + \fi + \expandafter\csname idxtitle@#2\endcsname +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@second} +% \begin{macro}{\@third} +% These are useful macros for retrieving the second and third field +% of an index specification. +% \begin{macrocode} +\def\@second#1:#2:#3\@nil{#2} + +\def\@third#1:#2:#3\@nil{#3} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@nearverbatim} +% |\@nearverbatim\foo| is much like |\meaning\foo|, +% except that it suppresses the ``\texttt{macro ->}'' string +% produced when \cs{meaning} expands a macro. It is used by +% \cs{@wrindex} to produce an ``almost verbatim'' copy of their +% arguments. This method replaces the use of \cs{@sanitize} from +% latex.tex and allows indexing macros to be used in places (such +% as inside macro arguments) where the original \cs{index} command +% could not. Thanks to Donald Arseneau +% \email{asnd@erich.triumf.ca} for pointing out this trick to me. +% (For more information on this trick, see Dirty Trick \#3 of the +% \TeX book, page 382). +% +% As defined, \@nearverbatim only works on macros. It would be +% nice if it could work with other tokens, but it's more important +% that it work only by expansion, which means we can't put in tests +% to see what the next token is. +% \begin{macrocode} +\def\@nearverbatim{\expandafter\strip@prefix\meaning} +% \end{macrocode} +% \end{macro} +% +% Now we define the \cs{index} macro itself. The following +% definitions are adapted from \bundle{latex.tex} v2.09 \vdate{25 +% March 1992}. +% +% \begin{macro}{\makeindex} +% First we redefine \cs{makeindex} to define the default index +% using \cs{newindex}. We use \cs{edef} to make sure that +% \cs{indexname} gets expanded here. Otherwise we'll get into an +% infinite loop later on when we try to redefine \cs{indexname} +% inside the \cs{theindex} environment. +% +% Unfortunately, this means that if the user changes \cs{indexname} +% in the preamble, the index will come out with the wrong heading. +% \begin{macrocode} +\edef\makeindex{% + \noexpand\newindex{default}{idx}{ind}{\indexname}% +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\if@silentindex} +% \begin{macro}{\if@addtoindex} +% \begin{macro}{\if@proofmode} +% We need three new flags. The first, \cs{if@silentindex}, +% indicates whether the entry should be typeset in running text, as +% well as written out to the index; this is used to implement the +% \cs{index*} command. The second, \cs{if@addtoindex}, indicates +% whether entries should be written to the index; this is used to +% disable the \cs{index} command inside of page headings and tables +% of contents. The third, \cs{ifproofmode}, indicates whether +% index entries should be put in the margin of the page for +% proofing purposes. +% \begin{macrocode} +\newif\if@silentindex\@silentindextrue + +\newif\if@addtoindex\@addtoindextrue + +\newif\ifproofmode\proofmodefalse +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\index} +% \begin{macro}{\p@index} +% \begin{macro}{\x@index} +% \cs{index} will be made self-protecting (a la \cs{em}, etc.) so +% it can be used inside, for example, sectioning commands. +% Unfortunately, to really make \cs{index} robust, we have to +% redefine some of \LaTeX's commands for dealing with tables of +% contents and page headings. (See below.) $*$sigh$*$ +% \begin{macrocode} +\def\index{\protect\p@index} + +\def\p@index{% + \if@silentindex\@bsphack\fi + \@ifstar{\@silentindexfalse\@xindex}{\@silentindextrue\@xindex}% +} + +\def\@xindex{\@ifnextchar[{\@index}{\@index[default]}} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@index} +% \begin{macro}{\@@index} +% \begin{macro}{\@wrindex} +% The following is much more complicated than it should have to be. +% First, note the check to see if \cs{index} is equal to +% \cs{@gobble}. This is so I don't have to redefine +% \cs{@outputpage}, which temporarily disables \cs{label}, +% \cs{index}, and \cs{glossary} by \cs{let}'ing them equal to +% \cs{@gobble}. (For this reason, we have to be very careful to +% make sure that \cs{index} has expanded to \cs{p@index} before it +% gets to \cs{@outputpage}.) Second, note that if +% \cs{if@addtoindex} is false, we don't complain about undefined +% index types. This is because if your page headings, for example, +% are being typeset in all uppercase, you might end up with +% something like \cs{index[AUT]{...}} instead of +% \cs{index[aut]{...}}. +% \begin{macrocode} +\def\@index[#1]{% + \ifx\index\@gobble + \@addtoindexfalse + \fi + \def\@tempf{% + \begingroup + \@sanitize + \@@index{#1}% + }% + \if@addtoindex + \@ifundefined{idx@#1}% + {% + \def\@tempf{% + \@latexerr{Index type `\string#1' undefined}% + \@ehc + \@silentindextrue + \@gobble + }% + }% + {}% + \fi + \@tempf +} + +\def\@@index#1#2{% + \endgroup + \if@addtoindex + \if@filesw\@wrindex{#1}{#2}\fi + \ifproofmode\@showidx{#2}\fi + \fi + \if@silentindex + \expandafter\@esphack + \else + \@silentindextrue#2% + \fi +} + +\def\@wrindex#1#2{% + \begingroup + \def\@tempa{#2}% + \edef\@tempb{\@nameuse{idx@#1}}% + \edef\@tempb{\expandafter\@third\@tempb\@nil}% + \csname if@immediate@#1\endcsname \else + \expandafter\let\csname\@tempb\endcsname\relax + \fi + \edef\@tempa{% + \write\@auxout{% + \string\@writefile{#1}{% + \string\indexentry{\@nearverbatim\@tempa}% + {\@nameuse{\@tempb}}% + }% + }% + }% + \expandafter\endgroup\@tempa + \if@nobreak\ifvmode\nobreak\fi\fi +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\seename} +% \begin{macro}{\see} +% \begin{macro}{\printindex} +% \begin{macro}{\@printindex} +% The following are adapted from \bundle{makeidx.sty}, v2.09 +% \vdate{21 Oct 91}. \cs{index@prologue} adapted from +% \bundle{doc.dtx}. \Lenv{theindex} based on version from +% \bundle{classes.dtx}, v1.3g, 26 June 1995. +% \begin{macrocode} +\providecommand{\seename}{see} + +\providecommand*{\see}[2]{\emph{\seename} #1} + +\@ifclassloaded{article}{% + + \renewenvironment{theindex}{% + \edef\indexname{\the\@nameuse{idxtitle@\@indextype}}% + \if@twocolumn + \@restonecolfalse + \else + \@restonecoltrue + \fi + \columnseprule \z@ + \columnsep 35\p@ + \twocolumn[% + \section*{\indexname}% + \ifx\index@prologue\@empty\else + \index@prologue + \bigskip + \fi + ]% + \@mkboth{\MakeUppercase\indexname}% + {\MakeUppercase\indexname}% + \thispagestyle{plain}% + \parindent\z@ + \parskip\z@ \@plus .3\p@\relax + \let\item\@idxitem + }{% + \if@restonecol + \onecolumn + \else + \clearpage + \fi + } +}{% + \renewenvironment{theindex}{% + \edef\indexname{\the\@nameuse{idxtitle@\@indextype}}% + \if@twocolumn + \@restonecolfalse + \else + \@restonecoltrue + \fi + \columnseprule \z@ + \columnsep 35\p@ + \twocolumn[% + \@makeschapterhead{\indexname}% + \ifx\index@prologue\@empty\else + \index@prologue + \bigskip + \fi + ]% + \@mkboth{\MakeUppercase\indexname}% + {\MakeUppercase\indexname}% + \thispagestyle{plain}% + \parindent\z@ + \parskip\z@ \@plus .3\p@\relax + \let\item\@idxitem + }{% + \if@restonecol + \onecolumn + \else + \clearpage + \fi + } +} + +\def\printindex{\@ifnextchar[{\@printindex}{\@printindex[default]}} + +\def\@printindex[#1]{% + \@ifnextchar[{\@print@index[#1]}{\@print@index[#1][]}% +} + +\long\def\@print@index[#1][#2]{% + \def\@indextype{#1}% + \long\def\index@prologue{#2}% + \@ifundefined{idx@#1}% + {\@latexerr{Index type `\string#1' undefined}\@ehc}% + {% + \edef\@tempa{\@nameuse{idx@#1}}% + \edef\@tempa{% + \noexpand\@input@{\jobname.\expandafter\@second\@tempa\@nil}% + }% + \@tempa + }% +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@indexstar@} +% Now we set things up for +% \cs{shortindexing}.\footnote{\textbf{Warning:} This feature is +% deprecated and will be removed entirely in a future release of +% this package.} First, we define a one-token shorthand for +% \cs{index*}. This will be needed in the definition of +% \cs{idx@activehat}. +% \begin{macrocode} +\def\@indexstar@{\index*} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\idx@activehat} +% \begin{macro}{\idx@activebar} +% Next, we define the values that |^| and |_| will have when +% shortindexing is turned on. +% \begin{macrocode} +\def\idx@activehat{% + \relax + \ifmmode\expandafter\sp\else\expandafter\@indexstar@\fi +} + +\def\idx@activebar{% + \relax + \ifmmode\expandafter\sb\else\expandafter\index\fi +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\shortindexingon} +% \begin{macro}{\shortindexingoff} +% Now we define the \cs{shortindexingon} and \cs{shortindexinoff} +% commands to turn shortindexing on and off (surprise!). +% \cs{shortindexingon} saves the old definitions and \cs{catcode}'s +% of |^| and |_| so they can later be restored by +% \cs{shortindexingoff}. Both of these make their changes local to +% any enclosing group, so they can be used as declarations to +% disable or enable shortindexing temporarily. In addition, +% \Lenv{shortindexingon} can also be used as an environment. +% +% This is potentially very confusing. My basic rationale (if it +% can be described as such) was that under normal circumstances, +% one would put \cs{shortindexingon} in the preamble of one's +% document, and never want to turn it off. \cs{shortindexingoff} +% is an attempt to make allowance for the contingency that someone +% might want to turn shortindexing off, either permanently or +% temporarily. +% \begin{macrocode} +\newif\if@shortindexing + +\begingroup + + \catcode`\^\active + \catcode`\_\active + + \gdef\shortindexingon{% + \@shortindexingtrue + \chardef\old@idxhatcode\catcode`\^\relax + \chardef\old@idxbarcode\catcode`\_\relax + \catcode`\^\active + \catcode`\_\active + \let\old@idxhat ^% + \let\old@idxbar _% + \let^\idx@activehat + \let_\idx@activebar + } + + \gdef\shortindexingoff{% + \if@shortindexing + \@shortindexingfalse + \let^\old@idxhat + \let_\old@idxbar + \catcode`\^\old@idxhatcode + \catcode`\_\old@idxbarcode + \fi + } + +\endgroup +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% Now we take some code from \bundle{showidx.sty} and merge it into +% our new system. There are four reasons for redefining the +% commands here rather than just inputting \bundle{showidx.sty} (or +% requiring the user to do so). First, \bundle{showidx.sty} ends +% with a call to \cs{flushbottom}, which I want to avoid. Second, +% the instructions for successfully using \bundle{showidx.sty} +% along with \bundle{index.sty} would be somewhat tricky. This +% way, I can just tell users not to use \bundle{showidx.sty} at +% all. Third, I need to make some alterations to \cs{@showidx} +% anyway. In particular, (a) I need to add the \cs{@sanitizeat} +% command so this works correctly with AMS-\LaTeX\ and (b) I want +% to add the \cs{indexproofstyle} command so the user can customize +% the size and font used for the index proofs. Finally, +% \bundle{showidx.sty} has at least two annoying bugs in it. See +% the edit-history for version 2.01 for a description. +% +% \begin{macro}{\@indexbox} +% This code is adapted from \bundle{showidx.sty}, v2.09 \vdate{16 +% Jun 1991}. +% \begin{macrocode} +\newinsert\@indexbox + +\dimen\@indexbox\maxdimen +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@sanitizeat} +% The definition of \cs{@sanitizeat} is slightly tricky, since we +% need |@| to be active when this macro is defined, but we also +% need it to be part of the control sequence name. +% \begin{macrocode} +\begingroup + \catcode`\@\active + \expandafter\gdef\csname\string @sanitizeat\endcsname + {\def @{\char`\@}} +\endgroup +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\indexproofstyle} +% \begin{macro}{\@showidx} +% \begin{macro}{\@leftidx} +% \begin{macro}{\@rightidx} +% \begin{macro}{\@mkidx} +% \begin{macro}{\raggedbottom} +% \begin{macro}{\flushbottom} +% \begin{macro}{\@texttop} +% \begin{macrocode} +\newtoks\indexproofstyle + +\indexproofstyle{\footnotesize\reset@font\ttfamily} + +\def\@showidx#1{% + \insert\@indexbox{% + \@sanitizeat + \the\indexproofstyle + \hsize\marginparwidth + \hangindent\marginparsep \parindent\z@ + \everypar{}\let\par\@@par \parfillskip\@flushglue + \lineskip\normallineskip + \baselineskip .8\normalbaselineskip\sloppy + \raggedright \leavevmode + \vrule \@height .7\normalbaselineskip \@width \z@\relax#1\relax + \vrule \@height\z@ \@depth.3\normalbaselineskip \@width\z@\relax + }% + \ifhmode\penalty\@M \hskip\z@skip\fi +} + +\def\@leftidx{\hskip-\marginparsep \hskip-\marginparwidth} + +\def\@rightidx{\hskip\columnwidth \hskip\marginparsep} + +\def\@mkidx{% + \vbox to \z@{% + \rlap{% + \if@twocolumn + \if@firstcolumn \@leftidx \else \@rightidx \fi + \else + \if@twoside + \ifodd\c@page \@rightidx \else \@leftidx \fi + \else + \@rightidx + \fi + \fi + \box\@indexbox + }% + \vss + }% +} + +\def\raggedbottom{% + \def\@textbottom{\vskip\z@ plus.0001fil}% + \let\@texttop\@mkidx +} + +\def\flushbottom{\let\@textbottom\relax \let\@texttop\@mkidx} + +\let\@texttop\@mkidx +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% Now, this next bit really gets up my nose. The only way to make +% sure that the \cs{index} command gets handled correctly when used +% inside of sectioning commands is to redefine a bunch of \LaTeX's +% table of contents and running-heads macros. $*$blech$*$ Fragility +% rears its ugly head again. +% +% These are based on \bundle{latex.tex} 2.09 \vdate{25 March 1992}. +% +% \begin{macro}{\addcontentsline} +% We need to redefine \cs{addcontentsline} to keep it from +% expanding \cs{index} commands too far. In particular, we have +% removed \cs{index} from the list of macros that are set equal to +% \cs{@gobble} and we substitute \cs{@vwritefile} for +% \cs{@writefile}. This latter change also means that we can +% simplify the definition of \cs{protect} somewhat. +% \begin{macrocode} +\CheckCommand\addtocontents[2]{% + \protected@write\@auxout + {\let\label\@gobble \let\index\@gobble \let\glossary\@gobble}% + {\string\@writefile{#1}{#2}}% +} + +\renewcommand{\addtocontents}[2]{% + \protected@write\@auxout + {\let\label\@gobble \let\glossary\@gobble}% + {\string\@writefile{#1}{#2}}% +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@starttoc} +% We need to redefine \cs{@starttoc} to \cs{@addtoindexfalse} so +% that items don't get written to the index from within tables of +% contents. The only change here is the addition of +% \cs{@addtoindexfalse}. +% +% Unfortunately, this will break pretty badly with the AMS document +% classes, since they redefine \cs{@starttoc} to take two arguments +% rather than one. This must be addressed. +% +% \begin{macrocode} +\let\old@starttoc\@starttoc + +\renewcommand{\@starttoc}[1]{% + \begingroup + \@addtoindexfalse + \old@starttoc{#1}% + \endgroup +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\markboth} +% \begin{macro}{\markright} +% Finally, we have to redefine \cs{markboth} and \cs{markright} to +% keep them from disabling the expansion of \cs{index} while +% putting section heads into the \cs{mark}. Otherwise, we'd end up +% with ``\cs{index}'' in the mark, which would cause problems when +% \cs{@outputpage} redefines \cs{index} to be equal to +% \cs{@gobble}. Instead, we want \cs{index} to expand to +% \cs{p@index} in the \cs{mark}, so we retain control over what +% happens in \cs{@outputpage}. +% +% This time, the only change is to remove \cs{index} from the list +% of macros that are \cs{let} equal to \cs{relax}. +% \begin{macrocode} +\CheckCommand*{\markboth}[2]{% + \begingroup + \let\label\relax \let\index\relax \let\glossary\relax + \unrestored@protected@xdef\@themark {{#1}{#2}}% + \@temptokena \expandafter{\@themark}% + \mark{\the\@temptokena}% + \endgroup + \if@nobreak\ifvmode\nobreak\fi\fi} +\CheckCommand*{\markright}[1]{% + \begingroup + \let\label\relax \let\index\relax \let\glossary\relax + \expandafter\@markright\@themark {#1}% + \@temptokena \expandafter{\@themark}% + \mark{\the\@temptokena}% + \endgroup + \if@nobreak\ifvmode\nobreak\fi\fi} + +\renewcommand{\markboth}[2]{% + \begingroup + \let\label\relax \let\glossary\relax + \unrestored@protected@xdef\@themark {{#1}{#2}}% + \@temptokena \expandafter{\@themark}% + \mark{\the\@temptokena}% + \endgroup + \if@nobreak\ifvmode\nobreak\fi\fi} + +\renewcommand{\markright}[1]{% + \begingroup + \let\label\relax \let\glossary\relax + \expandafter\@markright\@themark {#1}% + \@temptokena \expandafter{\@themark}% + \mark{\the\@temptokena}% + \endgroup + \if@nobreak\ifvmode\nobreak\fi\fi} +%</style> +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \section{Edit history} +% +% \begin{description} +% +% \item[v1.00 (4 Mar 1993)] +% initial version, posted to comp.text.tex. +% +% \item[v1.01 (4 Mar 1993)] +% added \cs{renewindex} command and checking to make sure index is +% (or is not) defined in \cs{newindex}, \cs{index} and +% \cs{printindex}. Also tightened up the code in various places +% and added check to make sure file is only loaded once. +% +% \item[v2.00 (24 Mar 1993)] +% added support for \cs{index*}, proofmode, \cs{shortindexingon} +% and \cs{shortindexingoff}. +% +% \item[v2.01 (24 Jun 1993)] +% Fixed 3 bugs. (1) If proofmode was turned on, then something +% like ``\cs{index{WORD}WORD}'' would suppress the hyphenation of +% WORD. This was fixed by adding ``|\penalty\@M\hskip\z@skip|'' to +% the end of \cs{@showidx}. (This is just the definition of +% \cs{allowhyphens} borrowed from \bundle{german.sty}, v2 \vdate{4 +% Nov 1988}). (2) The \cs{hbox} in \cs{@mkidx} was being set at +% its natural width, which had a tendency to interfere with the +% width of the page. The \cs{hbox} is now replaced by \cs{rlap}. +% (3) If the title of an index (i.e., the fourth argument of +% \cs{newindex}) contained a particularly fragile command +% like~\cs{d}, havoc would ensue when \cs{theindex} tried to +% extract the title. Titles are now kept in token registers to +% prevent such unpleasantness. Bugs (2) and (3) were reported by +% Dominik Wujastyk \email{D.Wujastyk@ucl.ac.uk} on 24 June 1993. +% Note that bugs (1) and (2) are actually bugs in showidx.sty, +% v2.09 \vdate{16 Jun 1991}. +% +% \item[v2.02 (25 Jun 1993)] +% Rewrote the code that implements the short indexing commands (|^| +% and |_|) to make index.sty compatible with other style files that +% need to make |^| and |^| active in some contexts. See the code +% for more details. +% +% \item[v2.03 (30 Jun 1993)] +% Once again rewrote the code that implements the short indexing +% commands. Dumped the shortindexing environment and rewrote the +% \cs{shortindexingon} and \cs{shortindxingoff} commands to save +% and restore the \cs{catcode}'s and meanings of |^| and |^| in the +% safest possible (I hope) order. Also added the +% \cs{if@shortindexing} flag to keep \cs{shortindexingoff} from +% doing anything if it is called outside of the scope of a +% \cs{shortindexingon} command. (Question: Should +% \cs{shortindexingon} check that flag before doing anything?) +% +% \item[v2.04 (beta) (14 Jul 1993)] +% Added \cs{disableindex} command. Added \cs{newindex} and +% \cs{renewindex} to \cs{@preamblecmds}. Added \cs{if@newindex} +% flag to \cs{@newindex} to prevent \cs{renewindex} from +% re-allocating new \cs{write} and \cs{toks} registers. Rewrote +% using \bundle{doc.sty} and \program{DocStrip}. Also cleaned up +% the code somewhat. +% +% \item[v3.00 (15 Jul 1993)] +% Made further minor tweaks to code and internal documentation. +% Booted version number up to 3.00 and released on the world. +% +% \item[v3.01 (19 Jul 1993)] +% Fixed \program{DocStrip} CheckSum. +% +% \item[v3.02 (15 Sep 1993)] +% Corrected spelling of \cs{@shortindexingfalse} in definition of +% \cs{shortindexingoff}. Thanks to Hendrik G. Seliger +% \email{hank@Blimp.automat.uni-essen.de} for this bug report. +% Also added redefinitions of \cs{@leftmark} and \cs{@rightmark} to +% fix a bug reported by Dominik Wujastyk +% \email{D.Wujastyk@ucl.ac.uk}. +% +% \item[v3.03 (beta) (20 Feb 1994)] +% Added \cs{long} to the definition of \cs{@ifundefined} to cover +% the unlikely contingency that someone wanted to use, for example, +% |\string\par| in the middle of a control sequence name. Added an +% optional argument to \cs{newindex} to specify which counter to +% use in place of \cs{thepage}. The first change was suggested by +% Martin Schr\"oder \email{l15d@zfn.uni-bremen.de}; the second was +% suggested independently by Schr\"oder and Stefan Heinrich +% H\"oning \email{hoening@pool.informatik.rwth-aachen.de}. The +% \cs{@newindex} command was renamed \cs{def@index}. Also fixed +% the \cs{disableindex} command. +% +% \item[v3.04 (7 Mar 1994)] +% Rewrote the user documentation (Sections 1--5) and released on +% the world. Also deleted some extraneous spaces that had crept +% into some macros. +% +% \item[v4.00beta, (20 Feb 1995)] +% Preliminary conversion to a native \LaTeXe\ package. Fixed +% \cs{@printindex} to work under \LaTeXe\ (bug reported by Carsten +% Folkertsma \email{cai@butler.fee.uva.nl}). Removed much code +% that had been put in to work around various ancient versions of +% \LaTeX~2.09. Added \cs{index@prologue} support (modelled on +% \bundle{doc.sty}) at suggestion of Nick Higham +% \email{higham@ma.man.ac.uk}. +% +% \item[v4.01beta (28 Sep 1995)] +% Rewrote as a \LaTeXe\ package (finally!). Changes too numerous +% to list, but in general deleted some now-superfluous code, +% replaced some tricks by tricks from the \LaTeXe\ kernel, and +% added some bullet-proofing. Much still remains to be done, but +% this should be good enough for testing. +% +% Changed definition of \cs{protect} in \cs{markright} and +% \cs{markboth} to fix bug reported by Dominik Wujastyk. +% +% \item[??? (5 Jan 2004)] +% +% +% \end{description} +% +% \DisableCrossrefs +% +% \section{The sample file} +% +% \begin{macrocode} +%<*sample> +%% latex sample.tex +%% makeindex sample +%% makeindex -o sample.and sample.adx +%% makeindex -o sample.nnd sample.ndx +%% makeindex -o sample.lnd sample.ldx +%% latex sample.tex + +\documentclass{book} +\usepackage{index} + +\listfiles + +\makeindex +\newindex{aut}{adx}{and}{Name Index} +\newindex{not}{ndx}{nnd}{List of Notation} + +\newindex[theenumi]{list}{ldx}{lnd}{Items} + +\shortindexingon + +\proofmodetrue + +\def\aindex{\index*[aut]} + +\begin{document} + +\tableofcontents + +\newpage + +\chapter{Here is a ^[aut]{chapter} title} + +\section{Section header\index[aut]{section}} + +Here is some text.\index{subject} + +Here is \index[not]{notation}some more \index[not]{sin@$\sin$} +text. + +\newpage + +Here is some ^{more} _[not]{notation} text. + +Here is yet more \aindex{text}. + +\section{Another Section header _[aut]{section2}} + +And here is some math: $x^1_b$. + +Here is an ^[aut]{index} entry \fbox{inside an +\index[not]{min@$\min$}fbox} + +\fbox{Here is an ^[aut]{entry} in a box.} + +\section{An indexed list environment} + +\begin{enumerate} + +\item +First item + +\item +Second item\index[list]{second item} + +\item +Third item + +\newpage + +\item +Fourth item + +\item +Fifth item\index[list]{fifth item} + +\item +Sixth item + +\end{enumerate} + +\printindex[not] + +\printindex[aut][Here is a prologue for the author index. +Note that it is set in a single column at the top of the +first page of the index.] + +\printindex[list] + +\printindex + +\end{document} +%</sample> +% \end{macrocode} +% +% \Finale +% +\endinput |