summaryrefslogtreecommitdiff
path: root/obsolete/macros/latex/contrib/ltxindex/ltxindex.dtx
diff options
context:
space:
mode:
Diffstat (limited to 'obsolete/macros/latex/contrib/ltxindex/ltxindex.dtx')
-rw-r--r--obsolete/macros/latex/contrib/ltxindex/ltxindex.dtx499
1 files changed, 499 insertions, 0 deletions
diff --git a/obsolete/macros/latex/contrib/ltxindex/ltxindex.dtx b/obsolete/macros/latex/contrib/ltxindex/ltxindex.dtx
new file mode 100644
index 0000000000..b82a959c3c
--- /dev/null
+++ b/obsolete/macros/latex/contrib/ltxindex/ltxindex.dtx
@@ -0,0 +1,499 @@
+%\iffalse meta-comment
+% ltxindex.dtx generated using /usr/local/bin/makedtx version 0.9b (c) Nicola Talbot
+% Command line args:
+% -src "ltxindex\.sty=>ltxindex.sty"
+% -doc "README"
+% ltxindex
+% Created on 2006/11/26 15:10
+%
+% ltxindex.sty, a LaTeX package to typeset indices with GNU's Texindex
+% Copyright (C) 2004 by Richard Stallman, Robert J. Chassell,
+% Michael Clarkson, \& Luis Rivera.
+%
+% This program is free software; you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation; either version 2, or (at your option)
+% any later version.
+%
+% This program is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+% GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this program; if not, write to the Free Software
+% Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+%
+% This work has the LPPL maintenance status "unmaintained".
+%
+%\fi
+%\iffalse
+%<*driver>
+\ProvidesFile{ltxindex.dtx}
+%</driver>
+%<ltxindex>\NeedsTeXFormat{LaTeX2e}[1995/06/01]
+%<ltxindex>\ProvidesPackage{ltxindex}
+ [2008/06/06 v0.1c ltxindex: LaTeX indexing, texindex style]
+%<*batchfile>
+\begingroup
+\input docstrip
+\keepsilent
+\usedir{tex/latex/contrib/ltxindex}
+\preamble
+
+ ltxindex.sty, a LaTeX package to typeset indices with GNU's Texindex
+ Copyright (C) 2004 by Richard Stallman, Robert J. Chassell,
+ Michael Clarkson, \& Luis Rivera.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+ WARNING!!! This code is fairly experimental.
+
+\endpreamble
+
+\askforoverwritefalse
+
+\IfFileExists{ltxindex.sty}{}{%
+\generate{\file{ltxindex.sty}{\usepreamble\defaultpreamble
+\usepostamble\defaultpostamble\from{ltxindex.dtx}{ltxindex,package}}
+}}
+\endgroup
+%</batchfile>
+%\fi
+%
+%\iffalse
+%<*driver>
+\documentclass{ltxdoc}
+\newcommand{\texindex}{\texttt{texindex}}
+\newcommand{\ltxindex}{\textsf{ltxindex}}
+\OnlyDescription
+\begin{document}
+ \DocInput{ltxindex.dtx}
+\end{document}
+%</driver>
+%\fi
+%
+% \CheckSum{548}
+%
+% \changes{0.1}{2004/06/30}{First Release.}
+% \changes{0.1b}{2007/12/14}{Made a first dtx file.}
+% \changes{0.1c}{2008/06/06}{Single file release, nomulticol option, dropped support.}
+%
+% \GetFileInfo{ltxindex.dtx}
+%
+% \title{\ltxindex: Making \LaTeX\ indexes with GNU's \texindex%
+% \thanks{This file documents version~\fileversion, as of~\filedate.
+% This package has been orphaned: please adopt a package!}}
+% \author{Luis Rivera}
+% \date{June 6, 2008}
+% \maketitle
+%
+% \ltxindex\ is a simple package to make indices for \LaTeX\
+% documents with \texindex\ instead of |makeindex|.
+% Though missing some important functionality, \texindex\ seems much
+% simpler to use;
+% and if you don't need anything fancy, such an index may be useful.
+%
+% This package only implements the standard indices used by
+% texinfo, and only defines the concept index (cp) by default.
+% You can't define custom indices (yet), and you must set up the fn, ky, pg,
+% tp, and vr indices on your own.
+%
+% \section{Usage}
+%
+% Call this package in the preamble: |\usepackage{ltxindex}|
+%
+% The package implements the following commands,
+%
+% |\cpindex|\marg{concept} indexes \emph{concept}, without typesetting it in the
+% main text.
+%
+% |\cpsubindex|\marg{concept}\marg{subconcept} indexes \emph{subconcept} under
+% \emph{concept}, without typesetting it in the main text.
+%
+% |\indexcp|\marg{concept} typesets \emph{concept} and puts it in the |cp| index.
+%
+% |\subindex|\marg{subconcept}\marg{concept} typesets \emph{subconcept} in the main
+% document and puts it under \emph{concept} in the |cp| index.
+%
+% You may set up fnindex, kyindex, pgindex, tpindex, and vrindex with the
+% command |\newindex|\marg{??}, where |??| is either fn, ky, pg, tp, or vr.
+% This way, you enable commands |\??index|\marg{word}, which allows you to
+% index \emph{word} in the appropriate index.
+% Texinfo's shortcuts |\cindex|, |\findex|, |\kindex|, |\pindex|, |\tindex|, and
+% |\vindex|, are also available.
+%
+% |\synindex|\marg{foo}\marg{bar} subsumes index \emph{foo} under index \emph{bar}.
+%
+% |\syncodeindex|\marg{foo}\marg{bar} is similar, but typesets all entries for
+% index \emph{foo} in boldface.
+%
+% As in Texinfo, all these commands produce auxiliary files |<filename>.??|
+%
+% Once you're done with the main body of your document, you ask
+% \LaTeX\ to typeset the index with the command |\printindex|\marg{??}, wherever
+% you like. Make sure you precede it with some informative heading,
+% like |\section*{Concept Index}|. In short:
+%
+% \begin{description}
+% \item{Run} \LaTeX\ on filename to produce the |.aux| and |.??| files
+% \item{Run} \texindex\ on every unsorted index file (|<filename>.??|) you created
+% for your document (|<filename>.cp|, by default). \texindex\ will
+% create a sorted index file for your index file (|<filename>.cps|, by
+% default).
+% \item{ReRun} \LaTeX\ to incorporate the indices.
+% \item{ReRun} \texindex\ on every index file (to ensure right cross-references).
+% \item{ReRun} \LaTeX\ to put everything in order.
+% \end{description}
+%
+% You may avoid all this work in drafting and proofreading:
+% the package prints ``(Index is empty)'' or ``(Index is nonexistent)''
+% in the appropriate places if the indices are unsorted or
+% undefined.
+%
+% \section{Acknowledgements}
+%
+% As you may see by simple inspection of the code, I just ``borrowed''
+% the code from the old |latexinfo.sty|, available on CTAN, and patched
+% it up to run as a \LaTeX\ package.
+% Thus, all credits should go to Richard Stallman, Robert J. Chassell,
+% \& Michael Clarkson.
+%
+% \section{To Do's and Warnings}
+%
+% \begin{itemize}
+% \item Two column output is somewhat clumsy; you may have to edit the
+% |.??s| file manually to add |\columnbreak|'s in the appropriate places.
+% \item Devise a more general mechanism to create arbitrary indices.
+% \item Write some macros to modify the appearance of the index (by means
+% of some commands or package options).
+% \item PDF is not supported at all.
+% \item Documentation is wanting.
+% \end{itemize}
+%
+% There is something odd about the license of this package: it may
+% be fixed by adding an independent implementation of multicolumns.
+%
+% This package is distributed along the lines of the GNU General Public
+% License version 2.0, in compliance with the original license for
+% |latexinfo.sty|.
+%
+% There are additional conditions imposed on the use ---not the
+% distribution--- of the package, due to the usage of the \textsf{multicol}
+% package, by Frank Mittelbach.
+% Even though \textsf{multicol} is a required file for any \LaTeX\
+% installation, you are \emph{morally} required to pay a license fee if you
+% use it as a part of a proprietary or commercially distributed product
+% based on or using \textsf{multicol}. The \ltxindex\ package is distributed
+% `gratis', so as long as you distribute or use this package for a
+% non-commercial or non-proprietary end product (document or software),
+% you don't acquire this moral obligation.
+% Otherwise, you are morally required to pay that fee, because of the usage
+% of \textsf{multicol}.
+% See the file |multicol.dtx| for details.
+%
+% Confused? Well, just use the package option |nomulticol|.
+% The output will be ugly, but free from moral trouble.
+%
+%\StopEventually{}
+%
+%\section{The Code}
+%
+% This package may require the package \textsf{multicol} to typeset the index
+% in a two column environment. This should be the default behavior, save
+% the case documented above.
+% \begin{macrocode}
+%<*ltxindex>
+\RequirePackage{multicol}
+\newenvironment{ltxmulticols}{\begin{multicols}{2}}{\end{multicols}}
+\DeclareOption{nomulticol}{\renewenvironment{ltxmulticols}{}{}}
+% \end{macrocode}
+% Index generation facilities
+%
+% Define the texinfo user-accessible indexing commands for backwards
+% compatability.
+%
+% \begin{macrocode}
+\def\cindex{\cpindex}
+\def\pindex{\pgindex}
+\def\vindex{\vrindex}
+\def\tindex{\tpindex}
+\def\kindex{\kyindex}
+\def\findex{\fnindex}
+% \end{macrocode}
+%
+% |\newindex{foo}| defines an index named foo.
+% It automatically defines |\fooindex| such that
+% |\fooindex ...rest of line...| puts an entry in the index foo.
+% It also defines |\fooindfile| to be the number of the output channel for
+% the file that accumulates this index. The file's extension is foo.
+% The name of an index should be no more than 2 characters long
+% for the sake of vms.
+% \begin{macrocode}
+\def\newindex#1{\csname newindex#1\endcsname}
+% \end{macrocode}
+%
+% Yes I know this could be done shorter, but safer??
+%
+% \begin{macrocode}
+\def\newindexcp{\if@filesw \newwrite\@cpindexfile
+ \immediate\openout\@cpindexfile=\jobname.cp
+ \def\cpindex{\@bsphack\begingroup
+ \def\protect####1{\string####1\space}\@sanitize
+ \@wrindex\@cpindexfile}%
+ \def\cpsubindex{\@bsphack\begingroup
+ \def\protect####1{\string####1\space}\@sanitize
+ \@wrsubindex\@cpindexfile}%
+ \def\cpindexbold{\@bsphack\begingroup
+ \def\protect####1{\string####1\space}\@sanitize
+ \@wrindexbold\@cpindexfile}
+ \typeout{Writing concepts index file \jobname.cp }%
+ \fi}
+
+\def\cpindex{\@bsphack\begingroup \@sanitize\@index}
+\def\cpsubindex{\@bsphack\begingroup \@sanitize\@index}
+\def\cpindexbold{\@bsphack\begingroup \@sanitize\@index}
+
+\def\@wrindex#1#2{\let\thepage\relax
+ \xdef\@gtempa{\write#1{\string \entry{#2}{\thepage}{#2}}}\endgroup
+ \def\@tempa{}\def\thing{#2}\ifx\thing\@tempa\relax\else\@gtempa\fi
+ \if@nobreak \ifvmode\nobreak\fi\fi\@esphack}
+
+\def\@wrindexbold#1#2{\let\thepage\relax \let\bf\relax
+ \xdef\@gtempa{\write#1{\string \entry{#2}{\b{\thepage}}{#2}}}\endgroup
+ \def\@tempa{}\def\thing{#2}\ifx\thing\@tempa\relax\else\@gtempa\fi
+ \if@nobreak \ifvmode\nobreak\fi\fi\@esphack}
+
+\def\@wrsubindex#1#2#3{\let\thepage\relax
+ \xdef\@gtempa{\write#1{\string \entry{#2 #3}{\thepage}{#2}{#3}}}\endgroup%
+ \@gtempa
+ \if@nobreak \ifvmode\nobreak\fi\fi\@esphack}
+
+\def\@index#1{\endgroup\@esphack}
+
+\def\pgindex{\@bsphack\begingroup \@sanitize\@index}
+\def\newindexpg{\if@filesw \newwrite\@pgindexfile
+ \immediate\openout\@pgindexfile=\jobname.pg
+ \def\pgindex{\@bsphack\begingroup
+ \def\protect####1{\string####1\space}\@sanitize
+ \@wrindex\@pgindexfile}
+ \def\pgindexbold{\@bsphack\begingroup
+ \def\protect####1{\string####1\space}\@sanitize
+ \@wrindexbold\@pgindexfile}
+ \typeout{Writing index file \jobname.pg }\fi}
+
+\def\pgindex{\@bsphack\begingroup \@sanitize\@index}
+\def\pgindexbold{\@bsphack\begingroup \@sanitize\@index}
+
+\def\newindexvr{\if@filesw \newwrite\@vrindexfile
+ \immediate\openout\@vrindexfile=\jobname.vr
+ \def\vrindex{\@bsphack\begingroup
+ \def\protect####1{\string####1\space}\@sanitize
+ \@wrindex\@vrindexfile}
+ \def\vrindexbold{\@bsphack\begingroup
+ \def\protect####1{\string####1\space}\@sanitize
+ \@wrindexbold\@vrindexfile}
+ \typeout{Writing variable index file \jobname.vr }\fi}
+
+\def\vrindex{\@bsphack\begingroup \@sanitize\@index}
+\def\vrindexbold{\@bsphack\begingroup \@sanitize\@index}
+
+\def\newindextp{\if@filesw \newwrite\@tpindexfile
+ \immediate\openout\@tpindexfile=\jobname.tp
+ \def\tpindex{\@bsphack\begingroup
+ \def\protect####1{\string####1\space}\@sanitize
+ \@wrindex\@tpindexfile}
+ \def\tpindexbold{\@bsphack\begingroup
+ \def\protect####1{\string####1\space}\@sanitize
+ \@wrindexbold\@tpindexfile}
+ \typeout{Writing datatype index file \jobname.tp }\fi}
+
+\def\tpindex{\@bsphack\begingroup \@sanitize\@index}
+\def\tpindexbold{\@bsphack\begingroup \@sanitize\@index}
+
+\def\newindexky{\if@filesw
+ \newwrite\@kyindexfile
+ \immediate\openout\@kyindexfile=\jobname.ky
+ \def\kyindex{\@bsphack\begingroup
+ \def\protect####1{\string####1\space}\@sanitize
+ \@wrindex\@kyindexfile}\typeout{Writing key index file \jobname.ky}
+ \fi}
+
+\def\kyindex{\@bsphack\begingroup \@sanitize\@index}
+\def\kyindexbold{\@bsphack\begingroup \@sanitize\@index}
+
+\def\newindexfn{\if@filesw \newwrite\@fnindexfile
+ \immediate\openout\@fnindexfile=\jobname.fn
+ \def\fnindex{\@bsphack\begingroup
+ \def\protect####1{\string####1\space}\@sanitize
+ \@wrindex\@fnindexfile}
+ \def\fnindexbold{\@bsphack\begingroup
+ \def\protect####1{\string####1\space}\@sanitize
+ \@wrindexbold\@fnindexfile}
+ \typeout{Writing function index file \jobname.fn }\fi}
+
+\def\fnindex{\@bsphack\begingroup \@sanitize\@index}
+\def\fnindexbold{\@bsphack\begingroup \@sanitize\@index}
+% \end{macrocode}
+%
+% |\synindex{foo}{bar}| makes index foo feed into index bar.
+%
+% \begin{macrocode}
+\def\synindex#1#2{\expandafter\xdef \csname @#1index\endcsname{%
+ \noexpand\csname @#2index\endcsname}%
+\expandafter \chardef \csname @#1indexfile\endcsname=\csname @#2indexfile\endcsname}
+% \end{macrocode}
+%
+% |\syncodeindex{foo}{bar}| similar, but put all entries made for index foo
+% inside bold.
+%
+% \begin{macrocode}
+\def\syncodeindex#1#2{%
+\expandafter\let\expandafter\synindexfoo\expandafter=\csname#2indfile\endcsname
+\expandafter\let\csname#1indfile\endcsname=\synindexfoo
+\expandafter\xdef\csname#1index\endcsname{% % Define \xxxindex
+\csname#1boldindex\endcsname{#2}}%
+}
+% \end{macrocode}
+%
+% Define the macros used in formatting output of the sorted index material.
+% This is what you call to cause a particular index to get printed.
+% Write |\section*{Function Index}| to |\printindex{fn}|
+%
+% \begin{macrocode}
+\newskip\secondaryindent
+\secondaryindent=0.5cm
+% \end{macrocode}
+%
+% In case index foo is undefined, or sorted index |foo.??s| is empty...
+%
+% \begin{macrocode}
+\ifx\putwordIndexNonexistent\undefined
+ \gdef\putwordIndexNonexistent{(Index is nonexistent)}
+\fi
+\ifx\putwordIndexIsEmpty\undefined
+ \gdef\putwordIndexIsEmpty{(Index is empty)}
+\fi
+% \end{macrocode}
+%
+% The command |\printindex| typesets the index in the appropriate place.
+% This is the piece of code where the \textsf{multicol} package is used,
+% and some replacement is needed.
+%
+% \begin{macrocode}
+\def\printindex#1{
+\def\indexbackslash{\rawbackslashxx}
+\tolerance=9500 \advance\baselineskip -1pt
+\openin 1 \jobname.#1s
+\ifeof 1
+ \putwordIndexNonexistent
+ \else
+ \read 1 to \temp
+ \ifeof 1
+ \putwordIndexIsEmpty
+ \else
+ \begin{ltxmulticols}
+ \input \jobname.#1s
+ \end{ltxmulticols}
+ \fi
+\fi
+\closein 1
+}
+% \end{macrocode}
+%
+% These macros are used by the sorted index file itself.
+% Change them to control the appearance of the index.
+%
+% \begin{macrocode}
+\def\Dotsbox{\hbox to 1em{\hss.\hss}} % Used by index macros
+\def\pline{\hbox to\hsize}
+
+\def\initial#1{%
+{\bigbreak\pline{\large\bf#1\hfill}\kern 2pt\penalty3000}}
+
+\def\entry #1#2{
+{\parfillskip=0in \parskip=0in \parindent=0in \small
+\hangindent=1in \hangafter=1%
+\noindent\hbox{#1}\leaders\Dotsbox\hskip 0pt plus 1filll\relax #2\par
+}}
+
+\def\primary #1{\pline{\small#1\hfil}}
+
+\def\secondary #1#2{
+{\parfillskip=0in \parskip=0in \small
+\hangindent =1in \hangafter=1
+\noindent\hskip\secondaryindent\hbox{#1}\leaders\Dotsbox\hskip 0pt plus 1filll#2\par
+}}
+% \end{macrocode}
+%
+% Args are the skip and penalty (usually negative)
+%
+% \begin{macrocode}
+\def\dobreak#1#2{\par\ifdim\lastskip<#1\removelastskip\penalty#2\vskip#1\fi}
+% \end{macrocode}
+%
+% Now we set up the default concept index...
+%
+% \begin{macrocode}
+\newindex{cp}
+% \end{macrocode}
+%
+% ...and two useful macros to save typing time.
+%
+% \begin{macrocode}
+\newcommand{\indexcp}[1]{#1\cpindex{#1}}
+\newcommand{\subindexcp}[2]{#1\cpsubindex{#2}{#1}}
+% \end{macrocode}
+%
+% Finally, process options.
+%
+% \begin{macrocode}
+\ExecuteOptions{}
+\ProcessOptions
+%</ltxindex>
+% \end{macrocode}
+%
+% et voil\`a!
+%
+%\Finale
+%
+% \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 \~}
+%
+% \typeout{**************************************************}
+% \typeout{*}
+% \typeout{* To finish the installation you have to move the}
+% \typeout{* following file into a directory searched by TeX:}
+% \typeout{*}
+% \typeout{* \space\space ltxindex.sty}
+% \typeout{*}
+% \typeout{* Documentation is in ltxindex.pdf or ltxindex.dvi}
+% \typeout{*}
+% \typeout{* Happy TeXing!}
+% \typeout{**************************************************}
+% \ No newline at end of file