summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/plain/misc/idxmac.tex
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2006-01-12 23:46:46 +0000
committerKarl Berry <karl@freefriends.org>2006-01-12 23:46:46 +0000
commitb1c871653d37d9c6fd0f97b048dca051b5b1db27 (patch)
tree3f925e95aa3461b9ecb75df861259a7f71bc3f23 /Master/texmf-dist/tex/plain/misc/idxmac.tex
parent82770e7491344072d5dd54ce9a78546eebe99c3f (diff)
trunk/Master/texmf-dist/tex/plain
git-svn-id: svn://tug.org/texlive/trunk@621 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/plain/misc/idxmac.tex')
-rw-r--r--Master/texmf-dist/tex/plain/misc/idxmac.tex200
1 files changed, 200 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/plain/misc/idxmac.tex b/Master/texmf-dist/tex/plain/misc/idxmac.tex
new file mode 100644
index 00000000000..3782293b690
--- /dev/null
+++ b/Master/texmf-dist/tex/plain/misc/idxmac.tex
@@ -0,0 +1,200 @@
+%
+% idxmac.tex
+%
+% Most of the code in this file are excerpts from latex.tex and manmac.tex.
+% The actual style of the index environment \beginindex ... \endindex
+% at the end of this file is left empty.
+%
+%
+\def\makeatletter{\catcode`\@=11\relax}
+\def\makeatother{\catcode`\@=12\relax}
+\makeatletter
+\newif\if@filesw \@fileswtrue
+\newif\if@nobreak \@nobreakfalse
+\def\@makeother#1{\catcode`#112\relax}
+\def\newwrite{\alloc@7\write\chardef\sixt@@n}
+\newwrite\@unused
+\def\typeout#1{{\let\protect\string\immediate\write\@unused{#1}}}
+
+% ****************************************
+% * PAGE NUMBERING *
+% ****************************************
+%
+% Page numbers are produced by a page counter, used just like any other
+% counter. The only difference is that \c@page contains the number of
+% the next page to be output (the one currently being produced), rather
+% than one minus it. Thus, it is normally initialized to 1 rather than
+% 0. \c@page is defined to be \count0, rather than a count assigned by
+% \newcount.
+%
+% The user sets the pagenumber style with the \pagenumbering{FOO}
+% command, which sets the page counter to 1 and defines \thepage to be
+% \FOO. For example, \pagenumbering{roman} causes pages to be numbered
+% i, ii, etc.
+
+% Numbering commands for definitions of \theCOUNTER and \list arguments.
+% \fnsymbol produces the standard footnoting symbols: asterisk, dagger, etc.
+% They can be used only in math mode.
+
+\def\arabic#1{\@arabic{\@nameuse{c@#1}}}
+\def\roman#1{\@roman{\@nameuse{c@#1}}}
+\def\Roman#1{\@Roman{\@nameuse{c@#1}}}
+\def\alph#1{\@alph{\@nameuse{c@#1}}}
+\def\Alph#1{\@Alph{\@nameuse{c@#1}}}
+\def\fnsymbol#1{\@fnsymbol{\@nameuse{c@#1}}}
+
+\def\@arabic#1{\ifnum #1>0 \number #1\fi}
+\def\@roman#1{\romannumeral #1}
+\def\@Roman#1{\expandafter\uppercase\expandafter{\romannumeral #1}}
+\def\@alph#1{\ifcase#1\or a\or b\or c\or d\else\@ialph{#1}\fi}
+\def\@ialph#1{\ifcase#1\or \or \or \or \or e\or f\or g\or h\or i\or j\or
+ k\or l\or m\or n\or o\or p\or q\or r\or s\or t\or u\or v\or w\or x\or y\or
+ z\else\@ctrerr\fi}
+\def\@Alph#1{\ifcase#1\or A\or B\or C\or D\else\@Ialph{#1}\fi}
+\def\@Ialph#1{\ifcase#1\or \or \or \or \or E\or F\or G\or H\or I\or J\or
+ K\or L\or M\or N\or O\or P\or Q\or R\or S\or T\or U\or V\or W\or X\or Y\or
+ Z\else\@ctrerr\fi}
+\def\@fnsymbol#1{\ifcase#1\or *\or \dagger\or \ddagger\or
+ \mathchar "278\or \mathchar "27B\or \|\or **\or \dagger\dagger
+ \or \ddagger\ddagger \else\@ctrerr\fi\relax}
+
+\countdef\c@page=0 \c@page=1
+\def\cl@page{}
+\def\pagenumbering#1{\global\c@page \@ne \gdef\thepage{\csname @#1\endcsname
+ \c@page}}
+\pagenumbering{arabic}
+
+% \@bsphack ... \@esphack
+% used by macros such as \index and \begin{@float} ... \end{@float}
+% that want to be invisible -- i.e.,
+% not leave any extra space when used in the middle of text. Such
+% a macro should begin with \@bsphack and end with \@esphack
+% The macro in question should not create any text, nor change the
+% mode.
+%
+% \@bsphack ==
+% BEGIN
+% \dimen\@savsk := \lastskip
+% if hmode then \@savsf := \spacefactor fi
+% END
+%
+% \@esphack ==
+% BEGIN
+% if hmode
+% then \spacefactor := \@savsf
+% if \dimen\@savsk > 0pt then \ignorespaces
+% \global\ignoretrue fi
+% fi
+% END
+%
+
+\newdimen\@savsk
+\newcount\@savsf
+
+\def\@bsphack{\@savsk\lastskip
+ \ifhmode\@savsf\spacefactor\fi}
+
+\def\@esphack{\relax\ifhmode\spacefactor\@savsf
+ {}\ifdim \@savsk >\z@ \global\ignoretrue \ignorespaces
+ \fi \fi}
+
+% The command \@sanitize changes the catcode of all special characters
+% except for braces to 'other'. It can be used for commands like
+% \index that want to write their arguments verbatim. Needless to
+% say, this command should only be executed within a group, or chaos
+% will ensue.
+
+\def\@sanitize{\@makeother\ \@makeother\\\@makeother\$\@makeother\&%
+\@makeother\#\@makeother\^\@makeother\^^K\@makeother\_\@makeother\^^A%
+\@makeother\%\@makeother\~}
+
+% ****************************************
+% * INDEX COMMANDS *
+% ****************************************
+%
+% \makeindex ==
+% BEGIN
+% if \@filesw = T
+% then open file \jobname.IDX as \indexfile
+% \index == BEGIN \@bsphack
+% \begingroup
+% re-\catcode special characters to 'other'
+% \wrindex
+% fi
+% END
+%
+% \wrindex{ITEM} ==
+% BEGIN
+% write of {\indexentry{ITEM}{page number}}
+% \endgroup
+% \@esphack
+% END
+
+% INITIALIZATION:
+%
+% \index == BEGIN \@bsphack
+% \begingroup
+% re-\catcode special characters (in case '%' there)
+% \index
+% END
+%
+% \index{ITEM} == BEGIN \endgroup \@esphack END
+%
+\def\makeindex{\if@filesw \newwrite\@indexfile
+ \immediate\openout\@indexfile=\jobname.idx
+ \def\index{\@bsphack\begingroup\@sanitize\@wrindex\@indexfile}
+ \typeout{Writing index file \jobname.idx }\fi}
+
+\def\@wrindex#1#2{\let\thepage\relax
+ \xdef\gtempa{\write#1{\string
+ \indexentry{#2}{\thepage}}}\endgroup\gtempa
+ \if@nobreak \ifvmode\@nobreak\fi\fi\@esphack}
+
+\def\index{\@bsphack\begingroup\@sanitize\@index}
+\def\@index#1{\endgroup\@esphack}
+
+\def\makeglossary{\if@@filesw \newwrite\@glossaryfile
+ \immediate\openout\@glossaryfile=\jobname.glo
+ \def\glossary{\@bsphack\begingroup\@sanitize\@wrindex\@glossaryfile}\typeout
+ {Writing glossary file \jobname.glo }\fi}
+
+\def\glossary{\@bsphack\begingroup\@sanitize\index}
+
+\newdimen\pagewidth
+\pagewidth=\hsize
+\newbox\partialpage
+\def\begindoublecolumns{\begingroup
+ \output={\global\setbox\partialpage=\vbox{\unvbox255\bigskip}}\eject
+ \output={\doublecolumnout} \hsize=14pc \vsize=89pc
+ \let\item\@idxitem}
+\def\enddoublecolumns{\output={\balancecolumns}\eject
+ \endgroup \pagegoal=\vsize}
+\def\doublecolumnout{\splittopskip=\topskip \splitmaxdepth=\maxdepth
+ \dimen@=44pc \advance\dimen@ by-\ht\partialpage
+ \setbox0=\vsplit255 to\dimen@ \setbox2=\vsplit255 to\dimen@
+ \onepageout\pagesofar
+ \unvbox255 \penalty\outputpenalty}
+\def\pagesofar{\unvbox\partialpage
+ \wd0=\hsize \wd2=\hsize \hbox to\pagewidth{\box0\hfil\box2}}
+\def\balancecolumns{\setbox0=\vbox{\unvbox255} \dimen@=\ht0
+ \advance\dimen@ by\topskip \advance\dimen@ by-\baselineskip
+ \divide\dimen@ by2 \splittopskip=\topskip
+ {\vbadness=10000 \loop \global\setbox3=\copy0
+ \global\setbox1=\vsplit3 to\dimen@
+ \ifdim\ht3>\dimen@ \global\advance\dimen@ by1pt \repeat}
+ \setbox0=\vbox to\dimen@{\unvbox1}
+ \setbox2=\vbox to\dimen@{\unvbox3}
+ \pagesofar}
+
+\def\@idxitem{\par\hangindent 40pt}
+\def\subitem{\par\hangindent 40pt \hskip 20pt}
+\def\subsubitem{\par\hangindent 40pt \hskip 30pt}
+\def\indexspace{\par \vskip 10pt plus 5pt minus 3pt\relax}
+
+\def\beginindex{\begingroup\let\item\@idxitem
+% Output opening routines go here
+}
+\def\endindex{
+% Output closing routines go here.
+\endgroup}
+\makeatother