diff options
author | Karl Berry <karl@freefriends.org> | 2006-01-12 23:58:20 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2006-01-12 23:58:20 +0000 |
commit | 7f9543ffaf295484b99beae71350a519562df613 (patch) | |
tree | 9f62f18931debebd553795c14ce7f06ed970d78f /Master/texmf-dist | |
parent | c84b0c25046baf31ab61cc0a70b5ea4d2b372f58 (diff) |
ltxindex
git-svn-id: svn://tug.org/texlive/trunk@1055 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist')
-rw-r--r-- | Master/texmf-dist/tex/latex/ltxindex/ltxindex.sty | 235 |
1 files changed, 235 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/latex/ltxindex/ltxindex.sty b/Master/texmf-dist/tex/latex/ltxindex/ltxindex.sty new file mode 100644 index 00000000000..6e42246fa5c --- /dev/null +++ b/Master/texmf-dist/tex/latex/ltxindex/ltxindex.sty @@ -0,0 +1,235 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% ltxindex.sty, a LaTeX package to typeset indices with GNU's Texindex +% Copyright (C) 2004 by Jose-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. % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% + + +\NeedsTeXFormat{LaTeX2e}[1995/06/01] +\ProvidesPackage{ltxindex} + [2004/06/30 v0.1] +\message{indexing, texindex style} + +\RequirePackage{multicol} + +% Index generation facilities + +% Define the texinfo user-accessible indexing commands for backwards +% compatability. + +\def\cindex{\cpindex} +\def\pindex{\pgindex} +\def\vindex{\vrindex} +\def\tindex{\tpindex} +\def\kindex{\kyindex} +\def\findex{\fnindex} + + +% \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. + +\def\newindex#1{\csname newindex#1\endcsname} + +% Yes I know this could be done shorter, but safer?? + +\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} + +% \synindex{foo}{bar} makes index foo feed into index bar. +\def\synindex#1#2{\expandafter\xdef \csname @#1index\endcsname{% + \noexpand\csname @#2index\endcsname}% +\expandafter \chardef \csname @#1indexfile\endcsname=\csname @#2indexfile\endcsname} + +% \syncodeindex{foo}{bar} similar, but put all entries made for index foo +% inside bold. +\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}}% +} + +% 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} +% \printindex{fn} + +\newskip\secondaryindent +\secondaryindent=0.5cm + +% In case index foo is undefined, or sorted index foo.??s is empty... +\ifx\putwordIndexNonexistent\undefined \gdef\putwordIndexNonexistent{(Index is nonexistent)}\fi +\ifx\putwordIndexIsEmpty\undefined \gdef\putwordIndexIsEmpty{(Index is empty)}\fi + +\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{multicols}{2} + \input \jobname.#1s + \end{multicols} + \fi +\fi +\closein 1 +} + +% These macros are used by the sorted index file itself. +% Change them to control the appearance of the index. + +\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 +}} + +%%% Args are the skip and penalty (usually negative) +\def\dobreak#1#2{\par\ifdim\lastskip<#1\removelastskip\penalty#2\vskip#1\fi} + +% Now we set up the default concept index... +\newindex{cp} + +% ...and two useful macros to save typing time +\newcommand{\indexcp}[1]{#1\cpindex{#1}} +\newcommand{\subindexcp}[2]{#1\cpsubindex{#2}{#1}} + +% et voil\`a! +\endinput |