diff options
author | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
commit | e0c6872cf40896c7be36b11dcc744620f10adf1d (patch) | |
tree | 60335e10d2f4354b0674ec22d7b53f0f8abee672 /help/index.doc |
Initial commit
Diffstat (limited to 'help/index.doc')
-rw-r--r-- | help/index.doc | 1505 |
1 files changed, 1505 insertions, 0 deletions
diff --git a/help/index.doc b/help/index.doc new file mode 100644 index 0000000000..c76b74774b --- /dev/null +++ b/help/index.doc @@ -0,0 +1,1505 @@ +% \iffalse +% ==================================================================== +% @LaTeX-style-file{ +% author = "David M. Jones", +% version = "3.04", +% date = "07 March 1994", +% time = "20:45:05 EST", +% filename = "index.doc", +% 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 = "27647 1505 7071 54892", +% 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.", +% +% } +% ==================================================================== +% \fi +% +% \iffalse +% +% HOW TO INSTALL THIS FILE: +% +% If you have the latest versions of DocStrip and doc.sty installed on +% your system, type "tex index.doc" to unpack the files index.sty and +% sample.tex. Then install index.sty wherever style files belong on +% your system and read the comments at the beginning of sample.tex to +% see how to run the test. Finally, format the documentation by +% executing the following three commands: +% +% latex index.doc +% makeindex -s gind.ist index +% latex index.doc +% +% If you don't already have DocStrip and doc.sty installed on your +% system, you should get them from one of the following sources: +% +% ftp.uni-stuttgart.de:soft/tex/macros/latex/distribs/doc +% pip.shsu.edu:tex-archive/macros/latex/distribs/doc +% ftp.tex.ac.uk:tex-archive//macros/latex/distribs/doc +% +% If for some reason you really can't install the doc package on your +% system, then you can name this file index.sty and use it as a style +% file. However, you will likely notice some slowness in loading this +% file, due to the large number of comments that have to be skipped +% over. +% +% CAUTION: Use only as directed. Do not take internally. May cause +% rash if applied directly to skin. Federal law prohibits +% distributing without a proscription. +% +% __ __ +% / \ / \ +% / \ / \ +% / \ \ / \ \ +% / ) \ / ) \ +% \ ( / \ ( / +% \ \ / \ \ / +% \ / \ / +% \__/ \__/ +% || || +% || || +% ------ ------ +% +% Now the real fun starts. This file is designed to serve 4 (or 5, if +% you prefer) distinct functions: +% +% (1) In the absence of DocStrip, it can be named index.sty and used +% as a LaTeX style file. +% +% (2) It is a DocStrip batch file that can be used to unpack index.sty +% and sample.tex. This function is triggered when the file is used as +% an input file for plain TeX, i.e., when the command "tex index.doc" +% is executed. +% +% (3) It is the driver file for the documentation of index.sty. This +% function is triggered when the file is used as an input file for +% LaTeX, i.e., when the command "latex index.doc" is executed. +% +% (4) It is the source file for steps 2 and 3. +% +% To make this work, we have to be able to determine which of these +% cases we are in and take appropriate action. +% +% The next few lines of code accomplish this. First, note that if +% this file is used as input to the doc.sty \DocInput command, then +% the \iffalse ... \fi will cause this code to be ignored. Similarly, +% the <install> guard prevents this code from being copied into any +% output files by DocStrip. +% +% Next comes the more interesting code. We need two auxiliary +% commands to make sure that the correct commands get executed at the +% correct time. In order to avoid impinging on the user's namespace, +% I use two macro names from index.sty. +% +% \proofmodetrue: This is a no-op, unless we are producing +% documentation (i.e., the user has typed "latex index.doc"), in +% which case it expands to the appropriate initialization code, +% namely a \documentstyle command, plus \MakePercentIgnore to set +% things up for doc.sty, and a call to \csname iffalse\endcsname +% to match the fi that follows. (The earlier iffalse was ignored +% because when that line was read, % was still a comment character +% and not an ignored character.) +% +% \renewindex: This eats its argument unless this file is being used +% as a DocStrip batchfile (i.e., the user has typed "tex +% index.doc"), in which case it simply regurgitates its argument. +% The commands inside the \renewindex commands are just normal +% DocStrip batchfile commands. +% +% Before doing anything else, we check to make sure that \newindex is +% not already defined. If it is, that means this file has already +% been loaded once as a style file (or else someone else has already +% defined a \newindex command), which means we should not load the +% file a second time. (This is the same test that will be used later +% to determine whether or not index.sty has already been loaded. So, +% if you are using index.doc as index.sty, this test will actually be +% made twice, but that should be ok.) +% +% Finally, we determine whether we are inside plain TeX or LaTeX by +% checking to see if \documentstyle is defined. If we are inside +% LaTeX, we check to see if we are being used as a style file or a +% documentation file by checking to see if the \catcode of @ is 11 +% (letter) or not. +% +% The braces around the first two blocks of code below are necessary +% because DocStrip will open this file and start reading it +% line-by-line. The braces ensure that the entire \ifx ... \fi +% structures are picked up at once. +% +% No doubt strange and terrible things will happen if you feed this +% file to any dialect of TeX other than plain TeX or LaTeX. +% +% The blame for much of the following code goes to David Wald +% <wald@theory.lcs.mit.edu>, who forced me to adopt this approach +% after I had already come up with a safer alternative that was almost +% as easy to unpack. If anything goes wrong, it's his fault. +% +% \fi +% +% \iffalse +%<*install> +{\expandafter\ifx\csname newindex\endcsname\relax\else\endinput\fi} +{ + \global\let\proofmodetrue\relax + \expandafter\ifx\csname documentstyle\endcsname\relax + \gdef\renewindex#1{#1} + \else + \gdef\renewindex#1{} + \ifcat a\noexpand @\else + \gdef\proofmodetrue{% + \documentstyle[doc]{article}\MakePercentIgnore + \csname iffalse\endcsname + } + \fi + \fi +} +\renewindex{\def\batchfile{index.doc}} +\renewindex{\input docstrip.tex } +\renewindex{\generateFile{index.sty}{t}{\from{index.doc}{style}}} +\renewindex{\generateFile{sample.tex}{t}{\from{index.doc}{sample}}} +\renewindex{\endinput} +\proofmodetrue +%</install> +% \fi + +\def\fileversion{v3.04} +\def\filedate{7 March 1994} +\def\docdate {7 March 1994} + +%% \CheckSum{760} +%% \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 \~} +%% +% +% \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,\else,\em} +% \DoNotIndex{\EnableCrossrefs,\end,\endcsname,\endgroup,\endinput} +% \DoNotIndex{\everypar,\expandafter,\fi,\filedate,\fileversion} +% \DoNotIndex{\footnotesize,\gdef,\global,\glossary,\hangindent} +% \DoNotIndex{\if@filesw,\if@nobreak,\if@twocolumn,\if@twoside} +% \DoNotIndex{\hsize,\hskip,\ifhmode,\ifmmode,\ifodd,\ifvmode,\ifx} +% \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,\typeout,\uppercase,\vbox,\vrule,\vskip,\vss} +% \DoNotIndex{\write,\z@,\z@skip} +% +% \MakeShortVerb{\=} +% +% \setcounter{StandardModuleDepth}{1} +% +% \newcommand{\email}[1]{$\langle${\tt#1}$\rangle$} +% +% \newcommand{\vdate}[1]{$\langle$#1$\rangle$} +% +% \newcommand{\file}[1]{{\tt#1}} +% +% \newcommand{\bundle}[1]{{\tt#1}} +% +% \newcommand{\program}[1]{{\sf#1}} +% +% \newcommand{\Ltag}[1]{{\tt\bslash#1}} +% +% \CodelineIndex +% +% \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 +% \file{theory.lcs.mit.edu:pub/tex/index.doc}.}} +% +% \author{David M. Jones} +% +% \date{\filedate} +% +% \begin{document} +% +% \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: +% \begin{enumerate} +% +% \item +% Support for multiple indexes. +% +% \item +% Indexing of items by counters other than the page number. +% +% \item +% A $*$-variant of the =\index= command that, in addition to putting +% it's argument in the index, also typesets it in the running text. +% +% \item +% A =\shortindexingon= command that makes =^= and =_= shorthand for +% =\index= and =\index*=, respectively (but only outside of math mode, +% of course). This can be turned of with the =\shortindexingoff= +% command. +% +% \item +% The \bundle{showidx} style option has been merged into this file. +% The command =\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 =\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 =\includeonly= command, +% the index entries from the rest of the document are not lost. +% +% \item +% A more robust =\index= command. In particular, it no longer depends +% on =\catcode= changes to work properly, so the new =\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 +% =\makeindex=, =\index=, =\printindex=, and (typically) with the +% auxiliary program \program{MakeIndex}. For example, assuming that +% your main file is called \file{foo.tex}, =\makeindex= opens the +% file \file{foo.idx} and initializes it for holding the raw index +% entries, and =\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 =\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 =\makeindex=, =\index=, and +% =\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 =\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, =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 =\index= tags its argument with the page number +% (i.e., the value of =\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 =\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 =aux= file should be deferred until the page containing the +% entry is shipped out to the =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 =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 =\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 +% =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 =dvi= file, you +% can acomplish this by beginning your index declaration with +% \begin{verbatim} +% \newindex[thepage]*\end{verbatim} +% +% +% \DescribeMacro{\renewindex} +% The =\renewindex= command takes the same arguments as the +% =\newindex= command and can be used to redefine indexes that have +% been previously declared. +% +% +% \DescribeMacro{\makeindex} +% For backwards compatibility, the =\makeindex= command is redefined +% to use =\newindex=. It is essentially equivalent to +% \begin{verbatim} +% \newindex{default}{idx}{ind}{Index}\end{verbatim} +% The index labeled =default= is special: it is the one that will be +% used by =\index= and =\printindex= unless another index is +% specified (see below). +% +% +% \DescribeMacro{\printindex} +% The =\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 =\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, =\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 =default= index (such as that opened by =\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 =\index*= and =\index= outside of math mode. These +% abbreviations are enabled by the =\shortindexingon= command and +% disabled by the =\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}=shortindexingon= can be used as an +% environment if that seems appropriate. +% +% +% \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 +% =\proofmodetrue= and turned off with =\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 =\footnotesize=, but the user can +% override this with the =\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 =\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 =\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 =\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 =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 =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, =\@starttoc=, =\raggedbottom=, =\flushbottom=, +% =\addcontentsline=, =\markboth=, and =\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. +% +% It's also been necessary to modify the =\theindex= environment, but +% I've tried to do so very conservatively. If your style file uses +% =\indexname= and your definition of =\theindex= doesn't take any +% arguments, you should be ok. Otherwise, you'll need to redefine the +% =\theindex= environment yourself if you don't want the \LaTeX\ +% \bundle{book.sty} default. +% +% 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 =\disableindex= +% for a fuller discussion of this problem and one way around it. +% +% +% \section{To do's} +% +% The entire package should be rewritten as a +% \LaTeX\kern.15em$2_{\textstyle\varepsilon}$ package. +% +% It might be nice if the =\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. +% +% Maybe the user should be given the option of deciding which +% characters are used for the shortindexing abbreviations +% +% It would be reasonable to add support for =\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. +% (In particular, I should add some scathing comments about some of +% the problems that made it necessary to redefine so many of \LaTeX's +% commands. This wouldn't necessarily do any good, but it would make +% me feel better.) +% +% Maybe it would be nice if this package were compatible with plain +% \TeX. +% +% \StopEventually{} +% +% \section{The code} +% \label{sec:thecode} +% +% As is customary, we first make sure the file is loaded only once. +% Then we print an identifying message to the terminal. +% \begin{macrocode} +%<*style> +\@ifundefined{newindex}{}{\endinput} + +\typeout{Style-Option: `index' \fileversion\space <\filedate> (dmj)} +% \end{macrocode} +% +% \begin{macro}{\@ifundefined} +% We begin by redefining the \LaTeX\ command =\@ifundefined= to +% prevent it from expanding its arguments prematurely. This also +% requires us to redefine =\@leftmark= and =\@rightmark= to make them +% =\long=. The following three definitions are borrowed from +% \bundle{amsart.sty}, v1.1b \vdate{31 Jul 1991}. I rely heavily upon +% this more robust definition of =\@ifundefined=. +% \begin{macrocode} +\long\def\@ifundefined#1{% + \expandafter\ifx\csname#1\endcsname\relax + \expandafter\@leftmark + \else + \expandafter\@rightmark + \fi +} + +\long\def\@leftmark#1#2{#1} +\long\def\@rightmark#1#2{#2} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\disableindex} +% The =\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}{}{% + \typeout{index.sty> Warning! It's too late to disable the + `\@tempa' index; the output}% + \typeout{index.sty> file \jobname.\@tempa\space has already + been opened for output. You should}% + \typeout{index.sty> put the \string\disableindex\space + command before the declaration of the}% + \typeout{index.sty> `\@tempa' index.}% + }% + }% +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\if@newindex} +% \begin{macro}{\newindex} +% \begin{macro}{\renewindex} +% The =\newindex= and =\renewindex= commands are defined on analogy +% with the =\[re]newcommand= macros. Each index is identified by a +% unique tag, which is specified in the first required argument of +% =\newindex=. Much of the information about the index labeled +% \meta{tag} is kept in the macro =\idx@=\meta{tag}, so we can check +% to see if a particular index has already been defined by checking +% whether =\idx@=\meta{tag} is defined. =\newindex= and =\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 +% =\def@index=. +% +% The =\if@newindex= flag will be used to keep =\renewindex= from +% re-allocating =\write= and =\toks= registers later. +% \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 =\newindex=, =\renewindex=, nor =\disableindex= should be +% used anywhere except inside style files or in the preamble of a +% document, so we add them to the =\@preamblecmds= list. +% \begin{macrocode} +\begingroup + \def\do{\noexpand\do\noexpand}% + \xdef\@preamblecmds{% + \@preamblecmds + \do\newindex + \do\renewindex + \do\disableindex + } +\endgroup +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\def@index} +% =\def@index= does most of the work. First, it picks up the first +% three arguments of the =\[re]newindex= command and stores the second +% two in an appropriate =\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, =\def@index= also opens an appropriate output file if we are +% writing auxiliary files (i.e., unless =\nofiles= is in effect). +% +% \begin{macro}{\my@newtoks} +% Since we need to declare new token registers on the fly, we need a +% non-=\outer= version of =\newtoks=. +% \begin{macrocode} +\def\my@newtoks{\csname newtoks\endcsname} + +\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\my@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 % + \typeout{index.sty> Writing index file \jobname.#3 }% + } + {\typeout{index.sty> Index `#2' disabled -- not opening + \jobname.#3 }}% + \fi + \expandafter\csname idxtitle@#2\endcsname +} +% \end{macrocode} +% \end{macro} +% \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} +% \begin{macro}{\@meaning} +% =\@nearverbatim\foo= is much like =\meaning\foo=, except that it +% suppresses the ``=macro ->='' string produced when =\meaning= +% expands a macro. It is used by =\@wrindex= and =\@vwritefile= to +% produce an ``almost verbatim'' copy of their arguments. This method +% replaces the use of =\@sanitize= from latex.tex and allows indexing +% macros to be used in places (such as inside macro arguments) where +% the original =\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\@meaning\meaning} + +\def\@meaning#1>{} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% Now we define the =\index= macro itself. The following definitions +% are adapted from \bundle{latex.tex} v2.09 \vdate{25 March +% 1992}. +% +% \begin{macro}{\makeindex} +% First we redefine =\makeindex= to define the default index using +% =\newindex=. We use =\edef= to make sure that =\indexname= gets +% expanded here. Otherwise we'll get into an infinite loop later on +% when we try to redefine =\indexname= inside the =\theindex= +% environment. +% \begin{macrocode} +\edef\makeindex{% + \noexpand\newindex{default}{idx}{ind}{% + \expandafter\ifx\csname indexname\endcsname\relax + Index% + \else + \indexname + \fi + }% +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\if@silentindex} +% \begin{macro}{\if@addtoindex} +% \begin{macro}{\if@proofmode} +% We need three new flags. The first, =\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 =\index*= +% command. The second, =\if@addtoindex=, indicates whether entries +% should be written to the index; this is used to disable the =\index= +% command inside of page headings and tables of contents. The third, +% =\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} +% =\index= will be made self-protecting (a la =\em=, etc.) so it can +% be used inside, for example, sectioning commands. Unfortunately, to +% really make =\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 =\index= is equal to =\@gobble=. +% This is so I don't have to redefine =\@outputpage=, which +% temporarily disables =\label=, =\index=, and =\glossary= by +% =\let='ing them equal to =\@gobble=. (For this reason, we have to +% be very careful to make sure that =\index= has expanded to +% =\p@index= before it gets to =\@outputpage=.) Second, note that if +% =\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 +% =\index[AUT]{...}= instead of =\index[aut]{...}=. +% \begin{macrocode} +\def\@index[#1]{% + \ifx\index\@gobble + \@addtoindexfalse + \fi + \def\@tempf{\@@index{#1}}% + \if@addtoindex + \@ifundefined{idx@#1}% + {% + \def\@tempf{% + \@latexerr{Index type `\string#1' undefined}% + \@ehc + \@silentindextrue + \@gobble + }% + }% + {}% + \fi + \@tempf +} + +\def\@@index#1#2{% + \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\@vwritefile{#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}. +% \begin{macrocode} +\@ifundefined{seename}{\def\seename{see}}{} + +\def\see#1#2{{\em \seename\/} #1} + +\def\printindex{\@ifnextchar[{\@printindex}{\@printindex[default]}} + +\def\@printindex[#1]{% + \def\@indextype{#1}% + \@ifundefined{idx@#1}% + {\@latexerr{Index type `\string#1' undefined}\@ehc}% + {% + \edef\@tempa{\@nameuse{idx@#1}}% + \@input{\jobname.\expandafter\@second\@tempa\@nil}% + }% +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@indexstar@} +% Now we set things up for =\shortindexing=. First, we define a +% one-token shorthand for =\index*=. This will be needed in the +% definition of =\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 =\shortindexingon= and =\shortindexinoff= commands +% to turn shortindexing on and off (surprise!). =\shortindexingon= +% saves the old definitions and =\catcode='s of =^= and =_= so they +% can later be restored by =\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, =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 =\shortindexingon= in the preamble of one's document, and never +% want to turn it off. =\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 redefine =\theindex=. We try to make the minimal possible +% change, but if the user's style doesn't know about =\indexname=, we +% have no alternative but to redefine the entire environment and issue +% a warning. +% +% Thanks to Alan Jeffrey \email{alanje@cogs.sussex.ac.uk} for +% pointing out how the package should behave when =\indexname= is +% already defined and for the code to implement that case. +% \begin{macrocode} +\expandafter\ifx\csname indexname\endcsname\relax + + \typeout{index.sty> Uh oh! It looks like your document style + doesn't use \string\indexname.} + \typeout{index.sty> I'll have to redefine the + \string\theindex\space environment, using} + \typeout{index.sty> the `book' style default.} + + \def\indexname{Index} +% \end{macrocode} +% The following is adapted from \bundle{book.sty} v2.09 \vdate{14 Jan +% 92}. +% \begin{macrocode} + \def\theindex{% + \@restonecoltrue + \if@twocolumn\@restonecolfalse\fi + \columnseprule\z@ \columnsep 35\p@ + \edef\@indexname{% + \expandafter\the\@nameuse{idxtitle@\@indextype}% + }% + \twocolumn[\@makeschapterhead{\@indexname}]% + \@mkboth{\uppercase{\@indexname}}{\uppercase{\@indexname}}% + \thispagestyle{plain}% + \parindent\z@ + \parskip\z@ plus .3\p@\relax\let\item\@idxitem + } + +\else + + \@temptokena={% + \edef\indexname{\the\@nameuse{idxtitle@\@indextype}}% + } + \toks0=\expandafter{\theindex}% + \edef\theindex{\the\@temptokena\the\toks0}% + +\fi +% \end{macrocode} +% +% \begin{macro}{\@vwritefile} +% \begin{macro}{\x@vwritefile} +% \begin{macro}{\y@vwritefile} +% Now we define the =\@vwritefile= macro, which copies information +% from the =aux= file to one of the other auxiliary files. +% =\@vwritefile= performs essentially the same function as +% =\@writefile=, except that it does not expand it second argument +% (i.e., it writes it out verbatim (well, almost verbatim)). +% +% NOTE: There doesn't seem to be any reason why =\@writefile= *should* +% expand its second argument and in fact, we later redefine +% =\addcontentsline= to use =\@vwritefile= instead of =\@writefile=. +% A slight extension of this idea could be used to solve part the +% problem of fragility in sectioning commands. +% +% =\@vwritefile=, like =\@writefile=, should be disabled when the +% =aux= file is being read by =\begin{document}=. To avoid having to +% redefine =\document=, we make the behaviour of =\@vwritefile= +% conditional on the current meaning of =\@writefile=. +% \begin{macrocode} +\def\@vwritefile{% + \ifx\@writefile\@gobbletwo + \expandafter\@gobbletwo + \else + \expandafter\x@vwritefile + \fi +} + +\def\x@vwritefile#1{% + \@ifundefined{tf@#1}{\@gobbletwo}{\y@vwritefile}{#1}% +} + +\long\def\y@vwritefile#1#2{% + \def\@tempa{#2}% + \immediate\write\csname tf@#1\endcsname{\@nearverbatim\@tempa}% +} +% \end{macrocode} +% \end{macro} +% \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 +% =\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 =\@showidx= anyway. In particular, (a) I need to add +% the =\@sanitizeat= command so this works correctly with AMS-\LaTeX\ +% and (b) I want to add the =\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 =\@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} +% Note the cautious way of calling =\reset@font=, which is necessary +% for this to work correctly under both the Old and New Font Selection +% Schemes. +% \begin{macrocode} +\newtoks\indexproofstyle + +\indexproofstyle{\footnotesize\csname reset@font\endcsname\tt} + +\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 =\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. (Incidentally, it should be possible to +% use the =\@nearverbatim= trick to make arguments of sectioning +% commands robust. I'll have to explore this.) +% +% These are based on \bundle{latex.tex} 2.09 \vdate{25 March +% 1992}. +% +% \begin{macro}{\addcontentsline} +% We need to redefine =\addcontentsline= to keep it from expanding +% =\index= commands too far. In particular, we have removed =\index= +% from the list of macros that are set equal to =\@gobble= and we +% substitute =\@vwritefile= for =\@writefile=. This latter change +% also means that we can simplify the definition of =\protect= +% somewhat. +% \begin{macrocode} +\def\addcontentsline#1#2#3{% + \if@filesw + \begingroup + \let\label\@gobble + \let\glossary\@gobble + \def\protect##1{\string##1\space}% + \@temptokena{\thepage}% + \edef\@tempa{% + \write\@auxout{% + \string\@vwritefile{#1}{\string\contentsline{#2}{#3}% + {\the\@temptokena}}% + }% + }% + \@tempa + \endgroup + \if@nobreak\ifvmode\nobreak\fi\fi + \fi +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@starttoc} +% We need to redefine =\@starttoc= to =\@addtoindexfalse= so that items +% don't get written to the index from within tables of contents. The +% only change here is the addition of =\@addtoindexfalse=. +% \begin{macrocode} +\def\@starttoc#1{% + \begingroup + \@addtoindexfalse + \makeatletter + \@input{\jobname.#1}% + \if@filesw + \expandafter\newwrite\csname tf@#1\endcsname + \immediate\openout \csname tf@#1\endcsname \jobname.#1\relax + \fi + \global\@nobreakfalse + \endgroup +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\markboth} +% \begin{macro}{\markright} +% Finally, we have to redefine =\markboth= and =\markright= to keep +% them from disabling the expansion of =\index= while putting section +% heads into the =\mark=. Otherwise, we'd end up with ``=\index='' in +% the mark, which would cause problems when =\@outputpage= redefines +% =\index= to be equal to =\@gobble=. Instead, we want =\index= to +% expand to =\p@index= in the =\mark=, so we retain control over what +% happens in =\@outputpage=. +% +% This time, the only change is to remove =\index= from the list of +% macros that are =\let= equal to =\relax=. +% \begin{macrocode} +\def\markboth#1#2{% + \gdef\@themark{{#1}{#2}}% + \begingroup + \let\protect\noexpand + \let\label\relax + \let\glossary\relax + \mark{\@themark}% + \endgroup + \if@nobreak\ifvmode\nobreak\fi\fi +} + +\def\markright#1{% + \begingroup + \let\protect\noexpand + \let\label\relax + \let\glossary\relax + \expandafter\@markright\@themark{#1}% + \mark{\@themark}% + \endgroup + \if@nobreak\ifvmode\nobreak\fi\fi +} +%</style> +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \section{Glossaries} +% +% +% \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 =\renewindex= command and checking to make sure index is (or +% is not) defined in =\newindex=, =\index= and =\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 =\index*=, proofmode, =\shortindexingon= and +% =\shortindexingoff=. +% +% \item[v2.01 (24 Jun 1993)] +% Fixed 3 bugs. (1) If proofmode was turned on, then something like +% ``=\index{WORD}WORD='' would suppress the hyphenation of WORD. This +% was fixed by adding ``=\penalty\@M\hskip\z@skip='' to the end of +% =\@showidx=. (This is just the definition of =\allowhyphens= +% borrowed from \bundle{german.sty}, v2 \vdate{4 Nov 1988}). (2) The +% =\hbox= in =\@mkidx= was being set at its natural width, which had a +% tendency to interfere with the width of the page. The =\hbox= is +% now replaced by =\rlap=. (3) If the title of an index (i.e., the +% fourth argument of =\newindex=) contained a particularly fragile +% command like~=\d=, havoc would ensue when =\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 +% =\shortindexingon= and =\shortindxingoff= commands to save and +% restore the =\catcode='s and meanings of =^= and =_= in the safest +% possible (I hope) order. Also added the =\if@shortindexing= flag to +% keep =\shortindexingoff= from doing anything if it is called outside +% of the scope of a =\shortindexingon= command. (Question: Should +% =\shortindexingon= check that flag before doing anything?) +% +% \item[v2.04 (beta) (14 Jul 1993)] +% Added =\disableindex= command. Added =\newindex= and =\renewindex= +% to =\@preamblecmds=. Added =\if@newindex= flag to =\@newindex= to +% prevent =\renewindex= from re-allocating new =\write= and =\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 =\@shortindexingfalse= in definition of +% =\shortindexingoff=. Thanks to Hendrik G. Seliger +% \email{hank@Blimp.automat.uni-essen.de} for this bug report. Also +% added redefinitions of =\@leftmark= and =\@rightmark= to fix a bug +% reported by Dominik Wujastyk \email{D.Wujastyk@ucl.ac.uk}. +% +% \item[v3.03 (beta) (20 Feb 1994)] +% Added =\long= to the definition of =\@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 =\newindex= to specify which counter to use in +% place of =\thepage=. The first change was suggested by Martin +% Schroeder \email{l15d@zfn.uni-bremen.de}; the second was suggested +% independently by Schroeder and Stefan Heinrich Hoening +% \email{hoening@pool.informatik.rwth-aachen.de}. The =\@newindex= +% command was renamed =\def@index=. Also fixed the =\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. +% +% \end{description} +% +% \DisableCrossrefs +% +% \section{The sample file} +% +% \begin{macrocode} +%<sample>%% latex sample.tex +%<sample>%% makeindex sample +%<sample>%% makeindex -o sample.and sample.adx +%<sample>%% makeindex -o sample.nnd sample.ndx +%<sample>%% makeindex -o sample.lnd sample.ldx +%<sample>%% latex sample.tex +%<sample> +%<sample>\documentstyle[index]{book} +%<sample> +%<sample>\makeindex +%<sample>\newindex{aut}{adx}{and}{Name Index} +%<sample>\newindex{not}{ndx}{nnd}{List of Notation} +%<sample> +%<sample>\newindex[theenumi]{list}{ldx}{lnd}{Items} +%<sample> +%<sample>\shortindexingon +%<sample> +%<sample>\proofmodetrue +%<sample> +%<sample>\def\aindex{\index*[aut]} +%<sample> +%<sample>\begin{document} +%<sample> +%<sample>\tableofcontents +%<sample> +%<sample>\newpage +%<sample> +%<sample>\chapter{Here is a ^[aut]{chapter} title} +%<sample> +%<sample>\section{Section header\index[aut]{section}} +%<sample> +%<sample>Here is some text.\index{subject} +%<sample> +%<sample>Here is \index[not]{notation}some more \index[not]{sin@$\sin$} +%<sample>text. +%<sample> +%<sample>\newpage +%<sample> +%<sample>Here is some ^{more} _[not]{notation} text. +%<sample> +%<sample>Here is yet more \aindex{text}. +%<sample> +%<sample>\section{Another Section header _[aut]{section2}} +%<sample> +%<sample>And here is some math: $x^1_b$. +%<sample> +%<sample>Here is an ^[aut]{index} entry \fbox{inside an +%<sample>\index[not]{min@$\min$}fbox} +%<sample> +%<sample>\fbox{Here is an ^[aut]{entry} in a box.} +%<sample> +%<sample>\section{An indexed list environment} +%<sample> +%<sample>\begin{enumerate} +%<sample> +%<sample>\item +%<sample>First item +%<sample> +%<sample>\item +%<sample>Second item\index[list]{second item} +%<sample> +%<sample>\item +%<sample>Third item +%<sample> +%<sample>\newpage +%<sample> +%<sample>\item +%<sample>Fourth item +%<sample> +%<sample>\item +%<sample>Fifth item\index[list]{fifth item} +%<sample> +%<sample>\item +%<sample>Sixth item +%<sample> +%<sample>\end{enumerate} +%<sample> +%<sample>\printindex[not] +%<sample> +%<sample>\printindex[aut] +%<sample> +%<sample>\printindex[list] +%<sample> +%<sample>\printindex +%<sample> +%<sample>\end{document} +% \end{macrocode} +% +% \PrintIndex +% \PrintChanges +% +% \Finale +% +% \end{document} +\endinput |