summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/carlisle
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2006-01-12 23:52:42 +0000
committerKarl Berry <karl@freefriends.org>2006-01-12 23:52:42 +0000
commit1eac51abebfe200d850284bf921c8012083ff2f9 (patch)
treebb78fe11f1f768ce29bd25f60052c5ea587509d2 /Master/texmf-dist/tex/latex/carlisle
parente981a6612f28cfef515e09e1ab000e49d496f335 (diff)
carlisle
git-svn-id: svn://tug.org/texlive/trunk@738 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/carlisle')
-rw-r--r--Master/texmf-dist/tex/latex/carlisle/blkarray.sty2218
-rw-r--r--Master/texmf-dist/tex/latex/carlisle/comma.sty101
-rw-r--r--Master/texmf-dist/tex/latex/carlisle/dotlessj.sty106
-rw-r--r--Master/texmf-dist/tex/latex/carlisle/fix2col.sty303
-rw-r--r--Master/texmf-dist/tex/latex/carlisle/mylatex.ltx211
-rw-r--r--Master/texmf-dist/tex/latex/carlisle/nopageno.sty27
-rw-r--r--Master/texmf-dist/tex/latex/carlisle/plain.sty251
-rw-r--r--Master/texmf-dist/tex/latex/carlisle/pspicture.sty111
-rw-r--r--Master/texmf-dist/tex/latex/carlisle/remreset.sty39
-rw-r--r--Master/texmf-dist/tex/latex/carlisle/scalefnt.sty44
-rw-r--r--Master/texmf-dist/tex/latex/carlisle/slashed.sty171
-rw-r--r--Master/texmf-dist/tex/latex/carlisle/typehtml.sty899
12 files changed, 4481 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/latex/carlisle/blkarray.sty b/Master/texmf-dist/tex/latex/carlisle/blkarray.sty
new file mode 100644
index 00000000000..a4b988c1327
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/carlisle/blkarray.sty
@@ -0,0 +1,2218 @@
+%%% blkarray.sty
+%%%
+%%% Copyright David Carlisle 1992 1999
+%%% david@dcarlisle.demon.co.uk
+%%%
+%%% This file may be distributed under the terms of the LPPL.
+%%% See 00readme.txt for details.
+%%%
+%%% Version 0.01 - 0.03 November 1992
+%%% Version 0.04 03 December 1992
+%%% Version 0.05 24 March 1999 (email update only)
+%%%
+%%%
+%%%
+%%% A LaTeX style option extending array and tabular
+%%% HIGHLY VOLATILE, use at your own risk!!!!!!!!
+%%%
+%%%
+%%%
+%%% ====================================================================
+%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%<*x>
+% This file may be used without modification as a style (.sty) file.
+%
+% If you have Mittelbach's doc.sty, this file may be formatted with a
+% command like:
+% latex blkarray.sty
+%
+% If you have the Mittelbach/Duchier/Braams docstrip utility, you may
+% produce a faster loading .sty file. Rename this file to: blkarray.doc
+% Then run this file through *plain* TeX:
+% tex blkarray.doc
+% This should produce the file blkarray.sty.
+% If you do not have plain TeX on your system, you can trick LaTeX into
+% doing the work as follows:
+% latex \def\fmtname{plain} \input blkarray.doc
+% Note that you may need to quote the arguments here to stop your
+% operating system treating the \ characters incorrectly.
+%
+% latex blkarray.doc
+% Will produce a typeset version of the documentation, as above.
+%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\plain{plain}\ifx\fmtname\plain\csname fi\endcsname
+ \def\batchfile{blkarray.doc}
+ \input docstrip
+ \preamble
+
+ Do not distribute the stripped version of this file.
+ The checksum in the header refers to the documented version.
+
+ \endpreamble
+ \generateFile{blkarray.sty}{t}{\from{blkarray.doc}{}}
+ \endinput
+\fi
+%
+\ifcat a\noexpand @\let\next\relax\else\def\next{%
+ \documentclass{article}\usepackage{blkarray,doc}\MakePercentIgnore}\fi\next
+%
+%\def\eatmodule<#1>{}\eatmodule
+%</x>
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% \let\osmall\small\def\small{\osmall\tt}
+% \textwidth=355pt ^^A Allow macrocode text with 72 columns.
+% \CodelineIndex ^^A Code lines numbered.
+% \DisableCrossrefs ^^A No Cross references.
+% \MakeShortVerb{\"} ^^A "\foo" works like \verb+\foo+
+%
+% \title{blkarray.sty}
+% \author{D. P. Carlisle}
+% \begin{document}
+% \maketitle
+%
+% \begin{center}
+% \huge\bf Warning\,!
+% \end{center}
+% \begin{quote}
+% This style option is in the early stages of development. If you want
+% to use an extended {\tt array} or {\tt tabular} in a document,
+% consider using one of the options in the ARRAY package, available from
+% most \TeX-servers.
+%
+% The commands defined in this style are quite likely to have both their
+% user-interface, and their internal definitions changed in later
+% versions.
+% \end{quote}
+%
+%\BAextrarowheight=1pt
+%\BAextraheightafterhline=2pt
+%
+% \section{Introduction}
+% This style option implements an environment, {\tt blockarray}, that
+% may be used in the same way as the {\tt array} or {\tt tabular}
+% environments of standard \LaTeX, or their extended versions defined in
+% {\tt array.sty}. If used in math-mode, {\tt blockarray} acts like
+% {\tt array}, otherwise it acts like {\tt tabular}.
+%
+% The main feature of this style is that it uses a new method of
+% defining column types. In the simplest form, this has been given a
+% syntax matching the "\newcolumntype" command of {\tt array.sty}.\\
+% "\BAnewcolumntype{C}{>{\large}c}"\\
+% defines a column of large centred text.
+%
+% In {\tt array.sty} column specifiers defined via "\newcolumntype" are
+% re-written in a preliminary stage to the primitive types, which are
+% then treated by a completely different mechanism (basically a nested
+% "\if" testing each token against one of the predefined column types,
+% "c", "l", ">", \ldots
+%
+% In {\tt blockarray.sty}, {\em all\/} column specifiers have equal
+% standing, most of the specifiers of Lamport's original are defined
+% using "\BAnewcolumntype", e.g.\\
+% "\BAnewcolumntype{c} {>{\hfil}<{\hfil}}"
+%
+% There are one or two other features built into {\tt blockarray}, these
+% will be introduced in no particular order.
+%
+% \subsection{Explicit Column Separators in the Preamble}
+%
+% As described in the \LaTeX\ book, originally specifiers like "|" and
+% "@"-expressions were always considered to be part of the {\em
+% preceding\/} column (except for expressions before the first column).
+% This can be inconvenient if that column type is going to be over
+% ridden by a "\multicolumn" specification, consider:
+%
+% \begin{minipage}{3in}
+% \begin{verbatim}
+% \begin{tabular}{c|c|c}
+% 11 & 22 & 33 \\
+% 1 &\multicolumn{1}{l|}{2} & 3 \\
+% 11 & 22 & 33
+% \end{tabular}
+% \end{verbatim}
+% \end{minipage}
+% \begin{tabular}{c|c|c}
+% 11 & 22 & 33 \\
+% 1 &\multicolumn{1}{l|}{2} & 3 \\
+% 11 & 22 & 33
+% \end{tabular}
+%
+% The rule needs to be specified again in the "\multicolumn" argument as
+% "{l|}", {\tt blockarray} lets you move the rule into the third column,
+% by specifying "&" in the preamble like so:
+%
+% \begin{minipage}{3in}
+% \begin{verbatim}
+% \begin{blockarray}{c|c&|c}
+% 11 & 22 & 33 \\
+% 1 &\BAmulticolumn{1}{l}{2} & 3 \\
+% 11 & 22 & 33
+% \end{blockarray}
+% \end{verbatim}
+% \end{minipage}
+% \begin{blockarray}{c|c&|c}
+% 11 & 22 & 33 \\
+% 1 &\BAmulticolumn{1}{l}{2} & 3 \\
+% 11 & 22 & 33
+% \end{blockarray}
+%
+% I first came across the idea of having such a feature in an array
+% preamble when Rainer Sch\"opf gave a brief introduction to various
+% enhanced array styles. An implementation by Denys Duchier had a
+% feature like this, however I have not seen that style so I do not know
+% the details.
+%
+% \subsection{Blocks}
+% Sometimes you want whole blocks of the table to have a different
+% format, this is often the case with headings for instance. This can be
+% accomplished using lots of "\multicolumn" commands, but this style
+% lets you specify the format for such a block in the usual syntax for
+% column specifiers:
+%
+% \begin{minipage}{3in}
+% \begin{verbatim}
+% \begin{blockarray}{*{3}{c}}
+% 11 & 22 & 33 \\
+% 1 & 2 & 3 \\
+% \begin{block}{*{3}{>{\bf}l}}
+% 11 & 22 & 33 \\
+% 1 & 2 & 3 \\
+% \end{block}
+% 1 & 2 & 3
+% \end{blockarray}
+% \end{verbatim}
+% \end{minipage}
+% \begin{blockarray}{*{3}{c}}
+% 11 & 22 & 33 \\
+% 1 & 2 & 3 \\
+% \begin{block}{*{3}{>{\bf}l}}
+% 11 & 22 & 33 \\
+% 1 & 2 & 3 \\
+% \end{block}
+% 1 & 2 & 3
+% \end{blockarray}
+%
+% \subsection{Delimiters}
+%
+% People often want to put delimiters around sub-arrays of a larger
+% array, delimiters can now be specified in the preamble argument:
+%
+% \begin{minipage}{3in}
+% \begin{verbatim}
+% \begin{blockarray}{[cc]c\}}
+% 11 & 22 & 33 \\
+% 1 & 2 & 3 \\
+% \begin{block}{(ll)l\}}
+% 11 & 22 & 33 \\
+% 1 & 2 & 3 \\
+% \end{block}
+% 1 & 2 & 3
+% \end{blockarray}
+% \end{verbatim}
+% \end{minipage}
+% \begin{blockarray}{[cc]c\}}
+% 11 & 22 & 33 \\
+% 1 & 2 & 3 \\
+% \begin{block}{(ll)l\}}
+% 11 & 22 & 33 \\
+% 1 & 2 & 3 \\
+% \end{block}
+% 1 & 2 & 3
+% \end{blockarray}
+%
+% Note how in the previous example the nested {\tt block} was not
+% spanned by the $[\ ]$. each section of the `outer' block was
+% separately bracketed. If instead of the {\tt block} environment we use
+% {\tt block*}, then the outer brackets will span the inner block,
+% however it is not possible to specify any delimiters in the argument
+% of {\tt block*}.
+%
+% \begin{minipage}{3in}
+% \begin{verbatim}
+% \begin{blockarray}{[cc]c\}}
+% 11 & 22 & 33 \\
+% 1 & 2 & 3 \\
+% \begin{block*}{lll}
+% 11 & 22 & 33 \\
+% 1 & 2 & 3 \\
+% \end{block*}
+% 1 & 2 & 3
+% \end{blockarray}
+% \end{verbatim}
+% \end{minipage}
+% \begin{blockarray}{[cc]c\}}
+% 11 & 22 & 33 \\
+% 1 & 2 & 3 \\
+% \begin{block*}{lll}
+% 11 & 22 & 33 \\
+% 1 & 2 & 3 \\
+% \end{block*}
+% 1 & 2 & 3
+% \end{blockarray}
+%
+% The delimiters, "( ) [ ] \{ \}" have been pre-defined as column
+% specifiers,
+% however any delimiter, including these ones can be specified using the
+% specifiers "\Left" and "\Right"\\
+% "\Left{"\meta{text}"}{"\meta{delimiter}"}"\\
+% specifies a delimiter together with a `label' which will be vertically
+% centred with respect to the block. Note that the delimiter and the
+% label take up no horizontal space, and so extra space must be left
+% with a "!"- or "@"-expression or the text will over-print adjacent
+% columns.
+%
+% \subsection{Automatic Numbering}
+% A column specifier "\BAenum" specifies that the row number is to be
+% printed (in a "!"-expression) at that point in each row, this number
+% may be accessed with "\label" in the usual way. The number is a
+% standard \LaTeX\ counter, "BAenumi", and so the appearence may be
+% changed by altering the default definition of "\theBAenumi".
+%
+% \subsection{Footnotes}
+% The "\footnote" command may be used inside {\tt blockarray}.
+% Two styles are supported. If the test "BAtablenotes" is true (by
+% default, or after "\BAtablenotestrue") then footnotes will appear at
+% the end of the table, with lines set to the width of the table. If
+% "BAtablenotes" is false, footnotes within the table will be treated as
+% standard footnotes, with the text (usually) appearing at the foot of
+% the page.
+%
+% If table notes are being set, the footnote counter is reset at the
+% start of the table. Also an extended version of "\footnotetext" can be
+% used. As described in the book, "\footnotetext[2]{xxx}" will produce a
+% text marked with the footnote symbol for `2'. However for tablenotes,
+% the optional argument may also be any non-numeric text, in which case
+% it is set directly at the start of the footnote text. So you can go
+% "\footnotetext[\sc source:]{xxx}" or "\footnotetext[\sc note:]{xxx}"
+% anywhere in the table body, before the first numbered footnote.
+%
+% If "BAtablenotes" is false the footnote text will not appear at the
+% foot of the page if the whole {\tt blockarray} environment is in an
+% environment which treats footnotes in a special way (eg another {\tt
+% blockarray}). So if you have a complicated table which requires
+% tablenotes, but for \TeX{}nical reasons you wish to enter it in the
+% {\tt .tex} file as nested {\tt blockarray} environments, you may set
+% "\BAtablenotestrue" for the outer environment, and then locally set it
+% to false before each of the nested environments. This will ensure that
+% footnotes from all parts of the table will be collected together at
+% the end.
+%
+% This table is set with "\BAtablenotestrue".
+%
+% \begin{center}
+% \begin{blockarray}{||c||c|||}
+% ONE\footnotetext[\sc source:]{Chicago Manual of Style.}
+% &
+% TWO\footnote{Note on TWO. This is a reasonably long footnote, to
+% show the line breaking.}
+% \\
+% \begin{blockarray}{|ll|}
+% \footnotetext[\sc source:]{Chicago Manual of Style.}^^A
+% \footnotetext[\sc note:]{The above attribution is incorrect.}^^A
+% l-one & l-two \\
+% l-three\footnote{Footnote to l-three.} & l-four \\
+% \end{blockarray}
+% &
+% \begin{blockarray}{|ll|}
+% \footnotetext[\sc source:]{Chicago Manual of Style.}^^A
+% \footnotetext[\sc note:]{The above attribution is incorrect.}^^A
+% r-one & r-two \\
+% r-three\footnote{Footnote to r-three} & r-four \\
+% \end{blockarray}
+% \\
+% THREE\footnote{Note on THREE.} & FOUR \\
+% \end{blockarray}
+% \end{center}
+%
+% In this example, the outer table is set with "\BAtablenotestrue", but
+% each of the inner tables is set with a local setting
+% "\BAtablenotesfalse".
+%
+% Also the footnotes have been set in a single paragraph. Tablenotes
+% will be set `run in' a paragraph, after a "\BAparfootnotes"
+% declaration.
+% \begin{center}
+%
+% \BAparfootnotes
+% \begin{blockarray}{||c||c|||}%
+% \footnotetext[\sc source:]{Chicago Manual of Style.}^^A
+% \footnotetext[\sc note:]{The above attribution is incorrect.}^^A
+% ONE
+% &
+% TWO\footnote{Note on TWO. This is a reasonably long footnote, to
+% show the line breaking.}
+% \\\BAtablenotesfalse
+% \begin{blockarray}{|ll|}
+% l-one & l-two \\
+% l-three\footnote{Footnote to l-three.} & l-four \\
+% \end{blockarray}
+% &
+% \BAtablenotesfalse
+% \begin{blockarray}{|ll|}
+% r-one & r-two \\
+% r-three\footnote{Footnote to r-three} & r-four \\
+% \end{blockarray}
+% \\
+% THREE\footnote{Note on THREE.} & FOUR\\
+% \end{blockarray}
+% \end{center}
+%
+% \subsection{Non Aligned Material}
+%
+% The primitive "\noalign" command may be used with standard \LaTeX\
+% arrays, but paragraphs inside "\noalign" are broken into lines that
+% are the width of the page, (or at least the current value of "\hsize")
+% not to the final width of the table. Within a {\tt blockarray}
+% "\BAnoalign" specifies material to be packaged into a parbox the same
+% width as the table. This makes a `hole' in the current block.
+% "\BAnoalign*" is similar, but any delimiters in the current block span
+% across the non-aligned paragraphs.
+%
+% \begingroup
+% \catcode`\Z=0
+% \begin{verbatim}
+% \begin{blockarray}{\BAenum!{.\quad}cc\Right{\}}{\tt block 1}}
+% \BAnoalign*{Zldots The paragraphs Zldots}
+% \begin{block}{\BAenum!{.\quad}(rr\Right{\}}{{\tt block 2} Zdots}}
+% \begin{block*}{\BAenum!{.\quad}(ll)}
+% \begin{block}{\BAenum!{.\quad}>{\bf}l\{c\Right{\}}{\tt block 3}}
+% \BAmultirow{50pt}{Zldots Spanning Zldots}
+% \begin{block}{\BAenum!{.\quad}\{l\}l\Right{\}}{\tt block 4}}
+% \BAnoalign{\centering Unlike Zldots}
+% \end{verbatim}
+% \endgroup
+%
+% \begin{blockarray}{\BAenum!{.\quad}cc\Right{\}}{\tt block 1}}
+% ccc &cc\\
+% c &ccccccccc \\
+% \BAnoalign*{\raggedright
+% The paragraphs in a {\tt\bslash BAnoalign*} are set to the final width
+% of the table.}
+% \begin{block}{\BAenum!{.\quad}(rr\Right
+% {\}}{{\tt block 2}, with a nested \tt block*}}
+% rrr&rr \\
+% rrr&r \\
+% \begin{block*}{\BAenum!{.\quad}ll}
+% lll&ll \\
+% l&lll \\
+% \end{block*}
+% r&r \\
+% \end{block}
+% ccc \\
+% \begin{block}{\BAenum!{.\quad}>{\bf}l\{c\Right{\}}{\tt block 3}}
+% LLL&
+% \BAmultirow{50pt}{\centering
+% Spanning all the rows in a block.}
+% \\
+% LL& \\
+% L& \\
+% \end{block}
+% \begin{block}{\BAenum!{.\quad}\{l\}l\Right{\}}{\tt block 4}}
+% ll &l\\
+% \BAnoalign{\centering
+% Unlike {\tt\bslash BAnoalign*}, {\tt\bslash BAnoalign} breaks any
+% delimiters in the current block.}
+% l&lll \\
+% \end{block}
+% c&c
+% \end{blockarray}
+%
+%
+% \bigskip
+%
+% \subsection{Spanning Rows and Columns}
+%
+% The previous table had an example of the use of a "\BAmultirow"
+% command. If an entry contains\\
+% "\BAmultirow{"\meta{dimen}"}{"\meta{par-mode material}"}"\\
+% then the \meta{par-mode material} will appear in a box at least
+% \meta{dimen} wide, spanning all the rows in the current block. If the
+% other entries in that column of the current block are not empty, they
+% will be over printed by the spanning text.
+%
+% There is a column specification corresponding to "\BAmultirow". if\\
+% "\BAmultirow{"\meta{dimen}"}"\\
+% appears in the preamble, then each entry in that column will be
+% packaged as a paragraph, in a box at least \meta{dimen} wide, spanning
+% all the rows in the current block. If this is the last column in the
+% block, you can not use the optional argument to "\\", and no entry in
+% the column must be empty, it must at least have "{}" in it. (If you
+% need to ask why, you don't want to know!)
+%
+% Similarly there is a column specification corresponding to
+% "\BAmulticolumn". if\\
+% "\BAmulticolumn{"\meta{number}"}{"\meta{column specification}"}"\\
+% appears in the preamble to a {\tt block}, then the rows in the block
+% should have less entries than the outer block, the columns
+% will line up as expected.
+%
+% \begin{verbatim}
+% \begin{blockarray}{r|lccr|c}
+% aaa&bbb&ccc&ddd&eee&fff\\
+% \begin{block}{(r|\BAmulticolumn{4}{>{\bf}l}|c)}
+% 111&The second entry in each &333\\
+% \end{block}
+% a&b&c&d&e&f\\
+% \begin{block}{[r|lccr\{\BAmultirow{1in}]}
+% 111&222&333&444&555&Each entry\\
+% 1&2&3&4&5&in this column is packaged as a paragraph.\\
+% 1&2&3&4&5&\relax\\
+% \end{block}
+% a&b&c&d&e&f
+% \end{blockarray}
+% \end{verbatim}
+%
+% \begin{blockarray}{r|lccr|c}
+% aaa&bbb&ccc&ddd&eee&fff\\
+% a&b&c&d&e&f\\
+% \begin{block}{(r|\BAmulticolumn{4}{>{\bf}l}|c)}
+% 111&The second entry in each &333\\
+% 1&row of this block spans 4 &3\\
+% 1&columns of the {\tt blockarray}.&3\\
+% \end{block}
+% a&b&c&d&e&f\\
+% a&b&c&d&e&f\\
+% \begin{block}{[r|lccr\{\BAmultirow{1in}]}
+% 111&222&333&444&555&Each entry\\
+% 1&2&3&4&5&\hbadness10000 in this column is packaged as a paragraph.\\
+% 1&2&3&4&5&\relax\\
+% 1&2&3&4&5&\relax\\
+% 1&2&3&4&5&\relax\\
+% \end{block}
+% a&b&c&d&e&f
+% \end{blockarray}
+%
+% \subsection{Horzontal Lines}
+% For technical reasons (explained in the code section) the
+% standard "\hline" does not work with "blockarray". "\BAhline" may be
+% used in just the same way, although currently it is implemented
+% using\ldots\\
+% "\BAhhline". The "\hhline" from "hhline.sty", would work, but this is
+% a new implementation, more in the spirit of this style.
+%
+% \begin{minipage}{3in}
+% \begin{verbatim}
+% \begin{blockarray}{||c||c&|cc||cc||}
+% \BAhhline{|t:=:t:=&|==#==:t|}
+% 0& 1 & 2 & 3 &4&5\\
+% \BAhline
+% 0& 1 & 2 & 3&4&5\\
+% \BAhline\BAhline
+% 0& 1 & 2 & 3&4&5\\
+% \BAhhline{||-||-..||.-}
+% 0& 1 & 2 & 3&4&5\\
+% \BAhhline{=::=""::"=}
+% 0& 1 & 2 & 3&4&5\\
+% \BAhhline{|b:=:b:=""::"=:b|}
+% \end{blockarray}
+% \end{verbatim}
+% \end{minipage}
+% \begin{blockarray}{||c||c&|cc||cc||}
+% \BAhhline{|t:=:t:=&|==#==:t|}
+% 0& 1 & 2 & 3 &4&5\\
+% \BAhline
+% 0& 1 & 2 & 3&4&5\\
+% \BAhline\BAhline
+% 0& 1 & 2 & 3&4&5\\
+% \BAhhline{||-||-..||.-}
+% 0& 1 & 2 & 3&4&5\\
+% \BAhhline{=::=""::"=}
+% 0& 1 & 2 & 3&4&5\\
+% \BAhhline{|b:=:b:=""::"=:b|}
+% \end{blockarray}
+%
+% Both "\hline" and "\hhline" increase the (minimum) height of the
+% following row by "\BAextraheightafterhline", which defaults to 0pt.
+% {\tt array.sty} introduced a parameter, known in this style as
+% "\BAextrarowheight", which is a length added to the default height of
+% {\em all\/} the rows. One of the stated reasons for introducing this
+% was to stop horizontal lines touching large entries like accented
+% capitals, however increasing all the row heights has an effect rather
+% similar to setting "\arraystretch". This style allows the the extra
+% height just to be added after the horizontal rule.
+%
+% \subsection{Further Thoughts}
+% \begin{itemize}
+% \item
+% The main point of any environment based on "\halign" is to make
+% entries line up. Using this style as currently implemented, it is easy
+% to spoil this alignment by putting different "@" expressions or rules
+% in the same column in different blocks. In practice, if you want
+% different "@" expressions, you need to do boxing tricks to make sure
+% that they all have the same width. This could be done automatically by
+% the "\halign", if the "@"-expressions and rules were put in a separate
+% column. (This fact could be hidden from the user, by a method similar
+% to the multicolumn column specification).
+%
+% \item
+% The "[tcb]" optional argument does not really work at present, I have
+% not done a proper implementation, as I do not know what to do about
+% horizontal rules.
+%
+% Standard \LaTeX\ lines "[t]" and "[b]" up like this:
+% xx
+% \setbox0=\hbox{\begin{tabular}[t]{|c|}1\\2\\3\end{tabular}}\copy0\
+% xx
+% \setbox2=\hbox{\begin{tabular}[b]{|c|}1\\2\\3\end{tabular}}\copy2\
+% xx
+%
+% However if there are horizontal lines, it looks like:
+% xx
+% \setbox4=\hbox{\begin{tabular}[t]{|c|}\hline1\\2\\3\end{tabular}}^^A
+% \copy4\
+% xx
+% \setbox6=\hbox
+% {\begin{tabular}[b]{|c|}1\\2\\3\\\hline\end{tabular}}\copy6\
+% xx
+%
+% I {\em think\/} I want it to look like this:
+% xx
+% \dimen0\dp4
+% \advance\dimen0-\dp0
+% \raise\dimen0 \box4\
+% xx
+% \dimen0\ht6
+% \advance\dimen0-\ht2
+% \lower\dimen0 \box6\
+% xx
+%
+% This would be reasonably easy to achieve in a `full' {\tt blockarray},
+% as each row is taken off and inspected, however I would like an array
+% that only uses the features of the original implementation to be
+% processed by the `quick' system. Any ideas?
+%
+% \item
+% Many user-level commands and parameters defined in this style are
+% named "\BA"\ldots\ This is to avoid clashes with the standard
+% environments, especially if these are nested inside {\tt blockarray}.
+% If {\tt array} and {\tt tabular} were re-defined in terms of {\tt
+% blockarray}, many commands could be renamed, for example,
+% "\BAextrarowheight", "\BAmulticolumn", "\BAhline".
+%
+% \item
+% This style uses a lot of macros, and every use of the {\tt blockarray}
+% uses a lot more. Does it work at all on a PC?
+%
+% \end{itemize}
+%
+%
+% \typeout{End of the Introduction and Examples.}
+% \typein[\answer]%
+% {Do you want an annotated listing of the macro definitions (y/n) ?}
+% \def\next{y}\ifx\answer\next\else\expandafter\stop\fi
+%
+
+% \clearpage
+% \section{The Macros}
+%
+% \subsection{Some General Control Macros}
+% The macros in this section do not have the "BA" prefix, but rather the
+% "GC" prefix, other style files can repeat these definitions without
+% using up \TeX's memory.
+%
+%
+% \LaTeX\ provides "\z@", "\@ne", "\tw@", "\thr@@", but I needed some
+% more\ldots
+% \begin{macrocode}
+\chardef\GC@four=4
+\chardef\GC@five=5
+\chardef\GC@six=6
+% \end{macrocode}
+%
+% \subsubsection{Tests}
+%
+% Tests are like "\ifs" except that instead of the\\
+% "\if"\ldots\meta{true-text}"\else"\meta{false-text}"\fi"\\
+% notation, they have\\
+% "\test"\ldots"{"\meta{true-text}"}{"\meta{false-text}"}"\\
+% They are constructed such that they expand directly to either the
+% \meta{true-text} or \meta{false-text}, without leaving a trailing
+% "\fi".
+%
+% \begin{macrocode}
+\def\GC@newtest#1{%
+ \@namedef{#1true}%
+ {\expandafter\let\csname test#1\endcsname\GC@true}%
+ \@namedef{#1false}%
+ {\expandafter\let\csname test#1\endcsname\GC@false}%
+ \@nameuse{#1false}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\GC@def@testfromif#1#2\fi{%
+ \def#1##1##{#2##1\expandafter\GC@true\else\expandafter\GC@false\fi}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\GC@true#1#2{#1}
+\def\GC@false#1#2{#2}
+% \end{macrocode}
+%
+% This "\testGC@num" is not very good as it does not delimit the
+% \meta{number}s correctly.
+% \begin{macrocode}
+\GC@def@testfromif\testGC@x\ifx\fi
+\GC@def@testfromif\testGC@num\ifnum\fi
+% \end{macrocode}
+%
+% \subsubsection{List Macros}
+%
+% If "\X" is "abc" then "\GC@add@to@front\X{xyz}" is "xyzabc";
+% \begin{macrocode}
+\long\def\GC@add@to@front#1#2{%
+ \def\@tempa##1{\gdef#1{#2##1}}%
+ \expandafter\@tempa\expandafter{#1}}
+% \end{macrocode}
+%
+% and "\GC@add@to@end\X{xyz}" is "abcxyz".
+% \begin{macrocode}
+\long\def\GC@add@to@end#1#2{%
+ \expandafter\gdef\expandafter#1\expandafter{#1#2}}
+% \end{macrocode}
+%
+% \subsection{Allocations}
+%
+% I have given `meaningful names' to plain-\TeX's scratch registers, I
+% am not sure this was a good idea, but it should be OK as long as I
+% always access by name, and do not use, say, "\count4" as a scratch
+% register. I do not like using numbered registers in the code, and can
+% not afford to allocate registers just to get nice names, they are in
+% too short supply already!
+%
+% Only allocate another register if {\tt blockarray} is going to lose
+% control at a point where the register value needs to be saved. (eg
+% inside a "\BAnoalign" anything can happen.
+%
+% "\BAtracing" can be set to any integer, the higher the number, the
+% more gets printed.
+% \begin{macrocode}
+%<*tracing>
+\chardef\BAtracing=0
+%</tracing>
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcounter{BAenumi}\let\BA@row\c@BAenumi
+\countdef\BA@row@shadow=6
+% \end{macrocode}
+%
+% \begin{macrocode}
+\countdef\BA@ftn@shadow=0
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcount\BA@col
+\countdef\BA@col@shadow=2
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcount\BA@block@cnt
+\countdef\BA@block@cnt@shadow=4
+% \end{macrocode}
+%
+% \begin{macrocode}
+\countdef\BA@col@max=8
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newbox\BA@final@box
+\chardef\BA@final@box@shadow=8
+% \end{macrocode}
+%
+% \begin{macrocode}
+\chardef\BA@first@box=0
+% \end{macrocode}
+%
+% \begin{macrocode}
+\chardef\BA@tempbox@a=2
+% \end{macrocode}
+%
+% \begin{macrocode}
+\chardef\BA@tempbox@b=4
+% \end{macrocode}
+%
+% \begin{macrocode}
+\chardef\BA@block@box=6
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newdimen\BA@colsep
+\BA@colsep=\tabcolsep
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newtoks\BA@ftn
+\toksdef\BA@ftnx@shadow=0
+% \end{macrocode}
+
+% \subsection{`Local' Variables}
+%
+% Most of {\tt blockarray} happens inside a "\halign" which means that
+% the different parts have to make global assignments if they need to
+% communicate. However many of these assignments are logically local to
+% {\tt blockarray}, or a sub-environment like {\tt block}. This means
+% that I have to manage the saving and restoring of local values `by
+% hand'.
+%
+% Three different mechanisms occured to me, I have used all of them in
+% this style, mainly just to try them out!
+%
+% \begin{itemize}
+% \item `shadowing' If "\X" is to be assigned globally, but it is to
+% be considered local to a block of code that corresponds to a \TeX\
+% group, then it may be shadowed by a local variable "\Y"\\
+% "\begingroup\Y=\X"\\
+% "\begingroup"\\
+% \meta{arbitrary code making global assignments to {\tt X}}\\
+% "\endgroup"\\
+% "\global\X=\Y\endgroup".\\
+% The inner group is needed to protect "\Y" from being changed.
+%
+% This is effectively the situation in the {\tt blockarray} environment,
+% where the outer group is provided by "\begin"\ldots"\end", and the
+% inner group is provided by an assignment to a box register.
+% \item Generating new command names, according to nesting depth.
+% Instead of directly using "\X", the variable can always be indirectly
+% accessed by "\csname\nesting X\endcsname". Here "\nesting" should
+% expand to a different sequence of tokens for each nested scope in
+% which "\X" is used. "\nesting" might be altered by a local
+% assignment, or sometimes need to be globally incremented at the start
+% of the scope, and globally decremented at the end.
+% \item Maintaining a stack of previous values. Corresponding to a
+% macro, "\X", is a macro"\Xstack" which consists of a list of the
+% values of "\X" in all outer environments. When the local scope ends,
+% this stack is popped, and the top value (which was the value of "\X"
+% before the environment) is globally assigned to "\X".
+% \end{itemize}
+%
+% The first method has the advantage that the variable is normally
+% accessed within the environment, and the code to restore previos
+% values is trivial. The main memory usage is in the save-stack, \TeX's
+% normal place for saving local vaues.
+%
+% Shadowing can only be used when the environment corresonds to a \TeX\
+% group. The {\tt block} environment does not!, "\end{block}" is not in
+% the scope of any local assignments made by "\begin{block}".
+%
+% The second method, has the advantage that, once the access functions
+% are defined, it is easy to declare new local variables, however unless
+% you keep track of what has been produced, these variables will
+% continue to take up memory space, even after the environment has
+% ended. {\tt blockarray} at the moment does not do much clearing up, so
+% after a {\tt blockarray} there are typically five macros per column
+% per block (u-part, v-part, left right and `mid' delimiters) left
+% taking up space. Not to mention macros containing the texts of any
+% non-aligned entries.
+%
+%
+% An extra `"."' will locally be added to "\BA@nesting" as each {\tt
+% blockarray} is entered, this is used as described above.
+% \begin{macrocode}
+\def\BA@nesting{}
+% \end{macrocode}
+%
+% These two macros help in accessing macros that are `local' to the
+% current value of "\BA@nesting".
+% \begin{macrocode}
+\def\BA@expafter#1#2{%
+ \expandafter#1\csname BA@\BA@nesting#2\endcsname}
+\def\BA@use#1{\csname BA@\BA@nesting#1\endcsname}
+% \end{macrocode}
+%
+% These are similar, but for macros which depend on the column and block
+% involved, not just the outer {\tt blockarray} environment.
+% \begin{macrocode}
+\def\BA@col@expafter#1#2{%
+ \expandafter#1%
+ \csname BA@\BA@nesting[\BA@use{blocktype},\the\BA@col]#2\endcsname}
+\def\BA@col@use#1{%
+ \csname BA@\BA@nesting[\BA@use{blocktype},\the\BA@col]#1\endcsname}
+% \end{macrocode}
+%
+% The following macros manage a stack as described in the third method
+% above.
+% \begin{macrocode}
+\def\BA@push@blocktype{%
+\edef\@tempa{{{\BA@use{blocktype}}}}%
+ \BA@expafter\GC@add@to@front{BTstack\expandafter}\@tempa}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\BA@pop@blocktype{%
+\BA@expafter\BA@pop@{BTstack}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\BA@pop@#1{\expandafter\BA@pop@@#1\@@}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\BA@pop@@#1#2\@@{%
+ \BA@expafter\gdef{blocktype}{#1}%
+ \BA@expafter\gdef{BTstack}{#2}}
+% \end{macrocode}
+%
+% \subsection{The Block Environment}
+%
+% \begin{macrocode}
+\def\BA@beginblock#1{%
+ \noalign{%
+ \BA@push@blocktype
+ \global\advance\BA@block@cnt\@ne
+ \penalty\the\BA@block@cnt
+ \BA@expafter\xdef{blocktype\expandafter}\expandafter
+ {\the\BA@block@cnt}%
+ \penalty\@ne
+ \global\BA@col=1
+ \global\BA@expafter\def{blank@row}{\crcr}%
+ \BA@clear@entry
+ \global\let\BA@l@expr\@empty\global\let\BA@r@expr\@empty
+ \BA@colseptrue
+ \BA@parse#1\BA@parseend
+ \ifnum\BA@col@max=\BA@col\else
+ \@latexerr{wrong number of columns in block}\@ehc\fi
+ \global\BA@col\z@}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\BA@endblock{%\crcr
+ \noalign{%
+ \BA@pop@blocktype
+ \penalty\BA@use{blocktype}%
+ \penalty\tw@}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\@namedef{BA@beginblock*}#1{%
+ \noalign{%
+ \BA@push@blocktype
+ \global\advance\BA@block@cnt\@ne
+ \BA@expafter\xdef{blocktype\expandafter}\expandafter
+ {\the\BA@block@cnt}%
+ \global\BA@col=\@ne
+ \global\BA@expafter\def{blank@row}{\crcr}%
+ \BA@stringafter\let\Left\BA@left@warn
+ \BA@stringafter\let\Right\BA@right@warn
+ \BA@clear@entry
+ \global\let\BA@l@expr\@empty\global\let\BA@r@expr\@empty
+ \BA@colseptrue
+ \BA@parse#1\BA@parseend
+ \ifnum\BA@col@max=\BA@col\else
+ \@latexerr{wrong number of columns in block*}\@ehc\fi
+ \global\BA@col\z@}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\BA@left@warn#1#2{%
+ \@warning{Left delimiter, \string#2, ignored}\BA@parse}
+\def\BA@right@warn#1#2{%
+ \@warning{Right delimiter, \string#1, ignored}\BA@parse}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\@namedef{BA@endblock*}{%\crcr
+ \noalign{%
+ \BA@pop@blocktype}}
+% \end{macrocode}
+%
+% \subsection{Multicolumn}
+%
+% First we have the "\multicolumn" command to be used as in original
+% \LaTeX.
+%
+% \begin{macrocode}
+\def\BAmulticolumn#1#2#3{%
+ \multispan{#1}%
+ \global\advance\BA@col#1\relax
+ \edef\BA@nesting{\BA@nesting,}%
+ \BA@expafter\def{blocktype}{0}%
+ {\BA@defcolumntype{&}##1\BA@parseend{%
+ \@latexerr{\string& in multicolumn!}\@ehc\BA@parse\BA@parseend}%
+ \global\BA@expafter\def{blank@row}{\crcr}%
+ \BA@clear@entry
+ \global\let\BA@l@expr\@empty\global\let\BA@r@expr\@empty
+ \BA@colseptrue
+ \BA@parse#2\BA@parseend}%
+ \BA@strut\BA@col@use{u}\ignorespaces#3\BA@vpart}
+% \end{macrocode}
+%
+% Now something more interesting, a "\BAmulticolumn" column
+% specification!
+%
+% \begin{macrocode}
+\def\BA@make@mc#1{%
+ \count@#1\relax
+ \BA@make@mcX
+ \edef\BA@mc@hash{%
+ \noexpand\BA@parse
+ >{\BA@mc@spans}\noexpand\BA@MC@restore@hash
+ \BA@mc@amps\noexpand\BA@MC@switch@amp}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\BA@make@mcX{%
+ \ifnum\count@=\@ne
+ \def\BA@mc@spans{\null}%
+ \let\BA@mc@amps\@empty
+ \else
+ \advance\count@\m@ne
+ \BA@make@mcX
+ \GC@add@to@end\BA@mc@spans{\span}%
+ \GC@add@to@end\BA@mc@amps{&@{}}%
+ \fi}
+% \end{macrocode}
+%
+% \subsection{\tt\bslash BAmultirow}
+%
+% First as a command.
+%
+% \begin{macrocode}
+\long\def\BAmultirow#1{\kern#1\relax
+ \global\BA@quickfalse
+ \BA@col@expafter\gdef{mid}}
+% \end{macrocode}
+%
+% Then as a column specification. (The actual "\BAnewcolumn" comes
+% later)
+%
+% \begin{macrocode}
+\def\BA@mrow@bslash#1{%
+ \kern#1\relax
+ \global\BA@quickfalse
+ \iffalse{\else\let\\\cr\fi\iffalse}\fi
+ \BA@mrow}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\long\def\BA@mrow#1\BA@vpart{%
+ \BA@col@expafter\GC@add@to@end{mid}{\endgraf#1}
+ \BA@vpart}
+% \end{macrocode}
+%
+% \subsection{\tt\bslash BAnoalign}
+%
+% \begin{macrocode}
+\def\BAnoalign{%\crcr
+ \noalign{\ifnum0=`}\fi
+ \global\BA@quickfalse
+ \penalty\the\BA@row
+ \@ifstar
+ {\penalty\GC@four\BA@noalign}%
+ {\penalty\BA@use{blocktype}\penalty\thr@@\BA@noalign}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\long\def\BA@noalign#1{%
+ \long\BA@expafter\gdef{noalign\the\BA@row}{#1}%
+ \ifnum0=`{\fi}}
+% \end{macrocode}
+%
+% \subsection{\tt\bslash\bslash}
+%
+% The following code is taken directly from "array.sty", apart from some
+% name changes. It is very similar to the version in {\tt latex.tex}.
+% Making "\\" into a macro causes problems when you want the entry to be
+% taken as a macro argument. One possibility is to "\let" "\\" be
+% "\span", and then have the \meta{u-part} of a final column parse the
+% optional argument. There is still a problem with "\end{...}". Note
+% that at the moment this style assumes that "\\" is used at the end of
+% all lines except the last, even before "\begin{block}" or
+% "\end{block}", this allows spacing to be specified, and also
+% approximates to the truth about what is actually happening. The idea
+% of making it easier to allow entries to be taken as arguments may be a
+% non-starter if "&" is allowed to become a `short-ref' (ie "\active")
+% character.
+%
+% \begin{macrocode}
+\def\BA@cr{{\ifnum 0=`}\fi
+ \@ifstar \BA@xcr \BA@xcr}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\BA@xcr{\@ifnextchar [%
+ \BA@argcr {\ifnum 0=`{\fi}\cr}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\BA@argcr[#1]{\ifnum0=`{\fi}\ifdim #1>\z@
+ \BA@xargcr{#1}\else \BA@yargcr{#1}\fi}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\BA@xargcr#1{\unskip
+ \@tempdima #1\advance\@tempdima \dp\@arstrutbox
+ \vrule \@depth\@tempdima \@width\z@ \cr}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\BA@yargcr#1{\cr\noalign{%
+ \vskip #1}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newdimen\BAextrarowheight
+\newdimen\BAextraheightafterhline
+\newdimen\BAarrayrulewidth
+ \BAarrayrulewidth\arrayrulewidth
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newdimen\BAdoublerulesep
+ \BAdoublerulesep\doublerulesep
+% \end{macrocode}
+%
+% The B form of the strut is an extra high strut to use after a
+% horizontal rule.
+% \begin{macrocode}
+\def\BA@strut{\unhcopy\@arstrutbox}
+\let\BA@strutA\BA@strut
+\def\BA@strutB{\dimen@\ht\@arstrutbox
+ \advance\dimen@\BAextraheightafterhline
+ \vrule \@height\dimen@ \@depth \dp\@arstrutbox \@width\z@
+ \global\let\BA@strut\BA@strutA}
+% \end{macrocode}
+%
+% \subsection{Begin and End}
+%
+% "\begin{block}" is supposed to expand to "\noalign{...", but the code
+% for "\begin" would place non-expandable tokens before the "\noalign".
+% Within the {\tt blockarray} environment, redefine "\begin" so that if
+% its argument corresponds to a command "\BA@begin"\meta{argument}, then
+% directly directly expand that command, otherwise do a normal "\begin".
+% A matching change is made to "\end".
+% \begin{macrocode}
+\let\BA@@begin\begin
+\let\BA@@end\end
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\BA@begin#1{%
+ \expandafter\testGC@x\csname BA@begin#1\endcsname\relax
+ {\BA@@begin{#1}}%
+ {\csname BA@begin#1\endcsname}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\BA@end#1{%
+ \expandafter\testGC@x\csname BA@end#1\endcsname\relax
+ {\BA@@end{#1}}%
+ {\csname BA@end#1\endcsname}}
+% \end{macrocode}
+%
+% \subsection{The {\tt blockarray} Environment}
+%
+% \begin{macrocode}
+\def\blockarray{\relax
+ \@ifnextchar[{\BA@blockarray}{\BA@blockarray[c]}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\BA@blockarray[#1]#2{%
+ \expandafter\let\expandafter\BA@finalposition
+ \csname BA@position@#1\endcsname
+ \let\begin\BA@begin
+ \let\end\BA@end
+ \ifmmode
+ \def\BA@bdollar{$}\let\BA@edollar\BA@bdollar
+ \else
+ \def\BA@bdollar{\bgroup}\def\BA@edollar{\egroup}%
+ \let\BA@bdollar\bgroup\let\BA@edollar\egroup
+ \fi
+ \let\\\BA@cr
+% \end{macrocode}
+% Currently I use "\everycr" this means that every macro that uses
+% "\halign" that might be used inside a {\tt blockarray} must locally
+% clear "\everycr". The version of {\tt array} in {\tt array.sty} does
+% this, but not the one in {\tt latex.tex}.
+% \begin{macrocode}
+ \everycr{\noalign{%
+ \global\advance\BA@row\@ne
+ \global\BA@col\z@}}%
+% \end{macrocode}
+% The "\extrarowheight" code from {\tt array.sty}.
+% \begin{macrocode}
+ \@tempdima \ht \strutbox
+ \advance \@tempdima by\BAextrarowheight
+ \setbox\@arstrutbox \hbox{\vrule
+ \@height \arraystretch \@tempdima
+ \@depth \arraystretch \dp \strutbox
+ \@width \z@}%
+% \end{macrocode}
+% As explained above various registers which are `local' to {\tt
+% blockarray} are always accessed globally, and so must be shadowed by
+% local copies, so that the values can be restored at the end.
+% \begin{macrocode}
+ \BA@col@shadow=\BA@col
+ \global\BA@col=\@ne
+ \BA@block@cnt@shadow=\BA@block@cnt
+ \global\BA@block@cnt\@M
+ \BA@row@shadow\BA@row
+ \global\BA@row\z@
+ \setbox\BA@final@box@shadow=\box\BA@final@box
+ \global\setbox\BA@final@box=\box\voidb@x
+ \let\BA@delrow@shadow=\BA@delrow
+ \let\testBA@quick@shadow\testBA@quick
+ \global\BA@quicktrue
+% \end{macrocode}
+% If we are using tablenotes, shadow the footnote counter (or possibly
+% mpfootnote), and set up the print style for the table notes.
+% \begin{macrocode}
+ \testBAtablenotes
+ {\edef\BA@mpftn{\csname c@\@mpfn\endcsname}%
+ \@namedef{the\@mpfn}{\BA@fnsymbol{\@nameuse{c@\@mpfn}}}%
+ \BA@ftn@shadow=\BA@mpftn\global\BA@mpftn\z@
+ \BA@ftnx@shadow=\expandafter{\the\BA@ftn}\global\BA@ftn{}%
+ }{}%
+% \end{macrocode}
+% Locally increase "\BA@nesting" so that macros accessed by `the second
+% method' will be local to this environment.
+% \begin{macrocode}
+ \edef\BA@nesting{\BA@nesting.}%
+% \end{macrocode}
+% Now start up the code for this block
+% \begin{macrocode}
+ \BA@expafter\xdef{blocktype}{10000}%
+ \BA@expafter\xdef{BTstack}{\relax}%
+ \global\BA@expafter\def{blank@row}{\crcr}%
+ \setbox\BA@first@box=\vbox{\ifnum0=`}\fi
+ \let\@footnotetext\BA@ftntext\let\@xfootnotenext\BA@xftntext
+ \lineskip\z@\baselineskip\z@
+ \BA@clear@entry
+ \global\let\BA@l@expr\BA@bdollar\global\let\BA@r@expr\BA@edollar
+ \global\let\BA@l@expr\@empty\global\let\BA@r@expr\@empty
+ \BA@colseptrue
+ \BA@parse#2\BA@parseend
+ \BA@col@max=\BA@col
+% \end{macrocode}
+% There had to be a "\halign" somewhere, and here it is!
+%
+% Currently I am using a `repeating preamble' because it was easier, but
+% I think that I should modify the columntypes for {\tt blockarray} (not
+% {\tt block}) so that they construct a preamble with the right number
+% of columns. this would give better error checking, and would give the
+% possibility of modifying the tabskip glue.
+% \begin{macrocode}
+ \tabskip\z@
+ \halign\bgroup\BA@strut%\global\BA@col=\z@
+ \BA@upart##\BA@vpart&&\BA@upart##\BA@vpart\cr
+ \noalign{\penalty\GC@five}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\BA@upart{\global\advance\BA@col\@ne\BA@col@use{u}\ignorespaces}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\BA@vpart{\unskip\BA@col@use{v}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\BA@clear@entry{%
+ \global\BA@col@expafter\let{u}\@empty
+ \global\BA@col@expafter\let{v}\@empty
+ \global\BA@col@expafter\let{left}\relax
+ \global\BA@col@expafter\let{mid}\@empty
+ \global\BA@col@expafter\let{right}\relax
+ \BA@uparttrue}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\let\BA@fnsymbol=\@fnsymbol
+% \end{macrocode}
+%
+% The code to place the footnote texts at the foot of the table, each
+% footnote starting on a new line. This will only be activated if
+% "\BAtablenotestrue".
+% \begin{macrocode}
+\def\BA@expft[#1]#2{%
+ \noindent\strut\ifodd0#11{%
+ \edef\@thefnmark
+ {\BA@fnsymbol{#1}}\@makefnmark}\else{#1}\fi\ #2\unskip\strut\par}
+% \end{macrocode}
+%
+% After a "\BAparfootnotes" declaration, the table notes will be set in
+% a single paragraph, with a good chance of line breaks occuring at the
+% start of a footnote.
+% \begin{macrocode}
+\def\BAparfootnotes{%
+ \def\BA@expft[##1]##2{%
+ \noindent\strut\ifodd0##11{%
+ \edef\@thefnmark{\BA@fnsymbol{##1}}\@makefnmark}\else{##1~}\fi
+ ##2\unskip\strut\nobreak
+ \hskip \z@ plus 3em \penalty\z@\hskip 2em plus -2.5em minus .5em}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\endblockarray{%
+% \end{macrocode}
+% At this point, if no delimiters, "\BAnoalign", or "\BAmultirow" have
+% been used, just finish here, this makes {\tt blockarray} was just
+% about as efficient as {\tt array} If no fancy tricks have been used.
+% \begin{macrocode}
+ \testBA@quick\BA@quick@end\BA@work@back@up
+% \end{macrocode}
+% Now we restore the values that have been `shadowed' by versions that
+% are local to this environment.
+% \begin{macrocode}
+ \global\BA@block@cnt=\BA@block@cnt@shadow
+ \global\BA@col=\BA@col@shadow
+ \global\BA@row=\BA@row@shadow
+ \global\setbox\BA@final@box=\box\BA@final@box@shadow
+ \global\let\BA@delrow=\BA@delrow@shadow
+ \global\let\BA@delrow=\BA@delrow@shadow
+ \global\let\testBA@quick\testBA@quick@shadow
+% \end{macrocode}
+% If tablenotes are being used, reset the shadowed list of footnotes.
+% Otherwise execute the list now, to pass the footnotes on to the outer
+% environment, or the current page.
+% \begin{macrocode}
+ \testBAtablenotes
+ {\global\BA@mpftn=\BA@ftn@shadow
+ \global\BA@ftn=\expandafter{\the\BA@ftnx@shadow}}
+ {\global\BA@ftn\expandafter{\expandafter}\the\BA@ftn}}
+% \end{macrocode}
+%
+% Here is the `quick ending': just position the box as specified by
+% "[tcb]", possibly adding footnotes.
+% \begin{macrocode}
+\def\BA@quick@end{%
+ \crcr
+ \egroup% end of halign
+ \ifnum0=`{\fi}% end of \BA@first@box
+%<*tracing>
+ \ifnum\BAtracing>\z@\typeout{Quick blockarray ends \on@line}\fi
+%</tracing>
+ \leavevmode\BA@finalposition\BA@first@box}
+% \end{macrocode}
+%
+% If any delimiters or noaligns have been used, we must take apart the
+% table built in "\BA@first@box", and reassemble it. This is done by
+% removing the rows one by one, starting with the last row, using
+% "\lastbox".
+% \begin{macrocode}
+\def\BA@work@back@up{%
+ \BA@use{blank@row}%
+ \egroup% end of halign
+ \setbox\@tempboxa=\lastbox
+ \unskip
+ \BA@getwidths
+%<*tracing>
+ \ifnum\BAtracing>\z@\typeout{Full blockarray ends \on@line}\fi
+%</tracing>
+%<*tracing>
+ \ifnum\BAtracing>\thr@@
+ \egroup\showbox\BA@first@box
+ \setbox\BA@first@box=\vbox\bgroup\unvbox\BA@first@box
+ \fi
+%</tracing>
+ \setbox\BA@block@box=\box\voidb@x
+ \BA@check@pen
+ \ifnum0=`{\fi}% end of \BA@first@box
+%<*check>
+ \dimen@=\ht\BA@first@box\advance\dimen@\dp\BA@first@box
+ \ifdim\dimen@>\z@\showthe\dimen@\fi
+%</check>
+ \leavevmode\BA@finalposition\BA@final@box}
+% \end{macrocode}
+%
+% These macros position the final box, they are just first attempts. In
+% particular "[t]" does not work properly because the guard penalty used
+% to terminate the main loop means that "\BA@first@box" always has zero
+% height. Also if the box has been taken apart, "[t]" and "[b]" will
+% cause the position to be based on the {\em centre\/} of the
+% corresponding block.
+%
+% If tablenotes are being used, package the table in a box with the
+% notes.
+% \begin{macrocode}
+\newdimen\BAfootskip
+\BAfootskip=1em
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\BA@position@c#1{\hbox{%
+ \testBAtablenotes
+ {\let\footnotetext\BA@expft
+ \hsize\wd#1\@parboxrestore\footnotesize}%
+ {}%
+ $\vcenter{%
+ \unvbox#1%
+ \testBAtablenotes
+ {\vskip\BAfootskip
+ \the\BA@ftn}{}%
+ }$}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\BA@position@t#1{\vtop{%
+ \testBAtablenotes
+ {\let\footnotetext\BA@expft
+ \hsize\wd#1\@parboxrestore\footnotesize}%
+ {}%
+ \unvbox#1%
+ \testBAtablenotes
+ {\vskip\BAfootskip
+ \the\BA@ftn}{}}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\BA@position@b#1{%
+ \testBAtablenotes
+ {\vbox{%
+ \let\footnotetext\BA@expft
+ \hsize\wd#1\@parboxrestore\footnotesize
+ \unvbox#1%
+ \vskip\BAfootskip
+ \the\BA@ftn}}%
+ {\box#1}}
+% \end{macrocode}
+%
+%
+% \subsection{Fitting the Parts Together}
+%
+% Get the widths of each column. It also faithfully copies the tabskip
+% glue, even though currently this is always 0pt. The width of the
+% column is put into "\BA@delrow" as the argument to the (unexpanded)
+% call to "\BA@lr".
+% \begin{macrocode}
+\def\BA@getwidths{%
+ \setbox\@tempboxa=\hbox{\unhbox\@tempboxa
+ \xdef\BA@delrow{\hskip\the\lastskip}\unskip
+ \let\BA@lr\relax
+ \loop
+ \setbox\BA@tempbox@a=\lastbox
+ \skip\z@=\lastskip\unskip
+ \ifhbox\BA@tempbox@a
+ \xdef\BA@delrow{%
+ \hskip\the\skip\z@\BA@lr{\the\wd\BA@tempbox@a}\BA@delrow}%
+ \repeat}}
+% \end{macrocode}
+%
+% The main mechanism by which {\tt blkarray} leaves information to be
+% used `on the way back' is to leave groups of penalties in the main
+% box.
+% The last penalty in each group (the first to be seen on the way back)
+% is a code penalty, it has the following meanings:\\
+% "\penalty 1" --- "\begin{block}"\\
+% "\penalty 2" --- "\end{block}"\\
+% "\penalty 3" --- "\BAnoalign"\\
+% "\penalty 4" --- "\BAnoalign*"\\
+% "\penalty 5" --- "\begin{blockarray}"\\
+% Note that the {\tt block*} environment does not produce any penalties,
+% this environment is just as efficient as "\multicolumn", and does not
+% require the second phase, coming back via "\lastbox".
+%
+% Above the code penalty may be other penalties, depending on the code,
+% typically these have the values of the blocktype for the block, or the
+% row number.
+% \begin{macrocode}
+\def\BA@check@pen{%
+ \count@=\lastpenalty\unpenalty
+ \ifcase\count@
+% \end{macrocode}
+% Grumble Grumble. "\lastpenalty" should be {\tt void} if the previous
+% thing was not a penalty, and there should be an "\ifvoid\lastpenalty"
+% or something equivalent to test for this. If the user manages to get a
+% "\penalty0" into the main box, it will just have to be discarded.
+% Actually that is not disastrous, but if a rule, mark, special, insert
+% or write gets into that box {\tt blockarray} will go into an infinite
+% loop. Every class of \TeX\ object should have a "\last"\ldots\
+% so that boxes may be taken apart and reconstructed by special styles
+% like this. \TeX\ of course is frozen, so these missing features will
+% never be added (while the system is called \TeX).
+%
+% \begin{macrocode}
+%<*tracing>
+ \ifnum\BAtracing>\tw@\typeout{0-???}\fi
+%</tracing>
+ \BA@get@row
+ \or
+%<*tracing>
+ \ifnum\BAtracing>\tw@\typeout{1-block}\fi
+%</tracing>
+ \BA@expafter\xdef{blocktype}{\the\lastpenalty}\unpenalty
+ \ifnum\lastpenalty=\tw@
+%<*tracing>
+ \ifnum\BAtracing>\tw@\typeout{discarding 2-endblock}\fi
+%</tracing>
+ \unpenalty\unpenalty\fi
+ \BA@place
+ \or
+%<*tracing>
+ \ifnum\BAtracing>\tw@\typeout{2-endblock}\fi
+%</tracing>
+ \BA@expafter\xdef{blocktype}{\the\lastpenalty}\unpenalty
+ \BA@place
+ \or
+%<*tracing>
+ \ifnum\BAtracing>\tw@\typeout{3-BAnoalign}\fi
+%</tracing>
+ \BA@expafter\xdef{blocktype}{\the\lastpenalty}\unpenalty
+ \BA@place
+ \count@=\lastpenalty\unpenalty
+ \global\setbox\BA@final@box=\vbox{%
+ \hsize=\wd\BA@final@box\@parboxrestore
+ \vrule \@height \ht\@arstrutbox \@width \z@
+ \BA@use{noalign\the\count@}
+ \vrule \@width \z@ \@depth \dp \@arstrutbox
+ \endgraf\unvbox\BA@final@box}%
+ \or
+%<*tracing>
+ \ifnum\BAtracing>\tw@\typeout{4-BAnoalign*}\fi
+%</tracing>
+ \count@=\lastpenalty\unpenalty
+ \setbox\BA@block@box=\vbox{%
+ \hsize=\wd\BA@final@box \@parboxrestore
+ \vrule \@height \ht\@arstrutbox \@width \z@
+ \BA@use{noalign\the\count@}
+ \vrule \@width \z@ \@depth \dp \@arstrutbox
+ \endgraf\unvbox\BA@block@box}%
+ \or
+%<*tracing>
+ \ifnum\BAtracing>\tw@\typeout{5-blockarray}\fi
+%</tracing>
+ \BA@expafter\xdef{blocktype}{10000}
+ \BA@place
+ \let\BA@check@pen\relax
+ \fi
+ \BA@check@pen}
+% \end{macrocode}
+%
+% Move a row of the table from the "\BA@first@box" into the block that
+% is being constructed in "\BA@block@box".
+% \begin{macrocode}
+\def\BA@get@row{%
+ \skip@=\lastskip\unskip
+ \advance\skip@\lastskip\unskip
+ \setbox\@tempboxa=\lastbox
+ \setbox\BA@block@box=\vbox{%
+ \box\@tempboxa
+ \vskip\skip@
+ \unvbox\BA@block@box}}
+% \end{macrocode}
+%
+% Place the block that has been constructed in "\BA@block@box", together
+% with any delimiters, or spanning entries which have been assembled
+% into "\BA@delrow", into the final table, which is being constructed in
+% "\BA@final@box".
+% \begin{macrocode}
+\def\BA@place{%
+ \global\setbox\BA@final@box=\vbox{\hbox{%
+ \m@th\nulldelimiterspace=\z@
+ \dimen\z@=\ht\BA@block@box
+ \advance\dimen\z@ by \dp\BA@block@box
+ \divide\dimen\z@\tw@
+ \dimen\tw@=\dimen\z@
+ \advance\dimen\z@ by\fontdimen22 \textfont\tw@
+ \advance\dimen2 by-\fontdimen22 \textfont\tw@
+ \global\BA@col=\z@
+ \delimitershortfall=10pt
+ \delimiterfactor=800
+ \BA@delrow
+ \kern-\wd\BA@block@box
+ \ht\BA@block@box=\dimen\z@ \dp\BA@block@box=\dimen\tw@
+ \box\BA@block@box}
+ \unvbox\BA@final@box}}
+% \end{macrocode}
+%
+%
+% Place the delimiters or spanning entries in position for one column of
+% the current block.
+% \begin{macrocode}
+\def\BA@lr#1{%
+ \global\advance\BA@col\@ne\relax
+ \BA@col@use{left}%
+ \BA@col@expafter\ifx{mid}\@empty
+ \kern#1
+ \else
+ \hbox to #1{%
+ \setbox\BA@tempbox@a
+ \hbox{\let\BA@mrow@bslash\@gobble\BA@col@use{u}\BA@edollar}%
+ \setbox\BA@tempbox@b
+ \hbox{\BA@bdollar\BA@col@use{v}}%
+ \kern\wd\BA@tempbox@a
+ $\vcenter{%
+ \hsize=#1
+ \advance\hsize-\wd\BA@tempbox@a
+ \advance\hsize-\wd\BA@tempbox@b
+ \@parboxrestore\BA@col@use{mid}}$%
+ \kern\wd\BA@tempbox@b}%
+ \fi
+ \BA@col@use{right}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\BA@leftdel#1#2#3{%
+ \llap{%
+ {#1}$\left#2\vrule height \dimen\z@ width\z@ \right.$\kern-#3}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\BA@rightdel#1#2#3{%
+ \rlap{%
+ \kern-#3$\left.\vrule height \dimen\z@ width\z@ \right#1${#2}}}%
+% \end{macrocode}
+%
+% \subsection{Parsing the Column Specifications}
+%
+% A token "x" in the column specification, is interpreted by "\BA@parse"
+% as "\BA@<x>". This command is then expanded, which may take further
+% tokens as arguments.
+% The expansion of "\BA@<x>" is supposed to end with a call to
+% "\BA@parse" which will convert the token following any arguments to a
+% control sequence name. The process is terminated by the token
+% "\BA@parseend" as the coresponding command "\BA@<\BA@parseend>" does
+% some `finishing off', but does not call "\BA@parse".
+%
+% There are two commands to help in defining column types.\\
+% "\BA@defcolumntype" This takes its parameter specification in the
+% primitive "\def" syntax, and allows the replacement text to be
+% anything.\\
+% "\BAnewcolumntype" This takes its parameter specification in \LaTeX's
+% "\newcommand" syntax, and applies "\BA@parse" to the {\em front\/} of
+% the replacement text. This is intended for users to define their own
+% column types in terms of primitive column types, rather than in terms
+% of arbitrary \TeX\ expressions.
+%
+% The preamble argument build up various macros as as follows:
+%
+% Each entry in the "\halign" preamble is of the form\\
+% "\BA@upart#\BA@vpart"\\
+% "\BA@upart" increments "\BA@col", and then expands
+% "\BA@col@use{u}", similarly "\BA@vpart" expands
+% "\BA@col@use{v}".
+%
+% "\BA@col@use{u}" is a macro considered local to the current block
+% and column, it is always accessed via "\BA@col@use" or
+% "\BA@col@expafter". So the preamble entries must result in
+% "\BA@col@use{u}" and "\BA@col@use{v}" being defined to enter
+% any text specified in "@"-expressions, the inter-column space (in the
+% \LaTeX\ tradition, not "\tabskip"), and any declarations in ">" and
+% "<" expressions. Delimiters are not added to these macros as they
+% correspond to the whole block, they are left in the macros
+% "\BA@col@use{left}" and "\BA@col@use{right}" spanning entries from
+% "\BAmultirow" are considered like delimiters, and left in
+% "\BA@col@use{mid}".
+%
+% If the test "\testBA@upart" is true, then the \meta{u-part} is being
+% built. This consists of three different sections.\\
+% 1) The left inter-column text, declared in "!"- and "@"-expressions\\
+% 2) The left inter-column skip.\\
+% 3) Any declarations specified in ">" expressions.
+%
+% Suppose "X" is a column type, which may itself be defined in terms of
+% other column types, then the (equivalent) specifications:\\
+% "@{aaa}>{\foo}X" and ">{\foo}@{aaa}X"\\
+% must result in "aaa", surrounded by
+% {\tt\protect\bslash bgroup}\ldots{\tt\protect\bslash egroup} or
+% {\tt\$}\ldots{\tt\$}, being prepended to the
+% {\em front\/} of the u-part, and "\foo" being appended to the end, so
+% that it is the innermost declaration to be applied to the entries in
+% that column.
+%
+% In order to achieve this, ">" expressions are directly added to the
+% u-part, using "\GC@add@to@front", "@"- and "!"- expressions (and rules
+% from "|") are added to a scratch macro, "\BA@l@expr", using
+% "\GC@add@to@end".
+%
+% When the next "#" column specifier is reached, the "\BA@l@expr" is
+% added to the front of the u-part, It is separated from the
+% ">"-expressions by a \meta{hskip} unless an "@"-expression has
+% occured, either while building the current u-part, or the previous
+% v-part.
+%
+% Building the v-part is similar.
+%
+% This procedure has certain consequences,
+% \begin{itemize}
+% \item "@{a}@{b}" is equivalent to "@{ab}", or more correctly
+% "@{{a}{b}}".
+% \item ">{\a}>{\b}" is equivalent to ">{\b\a}".
+% \item If any "@"-expression occurs between two columns, all
+% "!"-expressions between those columns will be treated identically to
+% "@"-expressions. This differs from {\tt array.sty} where two
+% "!"-expressions are separated by the same skip as the rules specified
+% by "||".
+% \item If any rule "|" occurs, then a following rule will be preceded
+% by the doubleruleskip, unless a "@" or "!"-expression comes between
+% them. In particular "|&|" specifies a double rule, which looks the
+% same as "||", but "\multicolumn" commands can be used to remove one
+% or other of the rules for certain entries.
+% \end{itemize}
+%
+% Create a macro name from a column specifier.
+% \begin{macrocode}
+\def\BA@stringafter#1#2{\expandafter#1\csname BA@<\string#2>\endcsname}
+% \end{macrocode}
+%
+% Execute the specifier, or discard an unknown one, and try the next
+% token.
+% \begin{macrocode}
+\def\BA@parse#1{%
+ \BA@stringafter\testGC@x{#1}\relax
+ {\@latexerr {Unknown column type, \string#1}\@ehc\BA@parse}%
+ {\csname BA@<\string#1>\endcsname}}
+% \end{macrocode}
+%
+% "\def" for column types.
+% \begin{macrocode}
+\def\BA@defcolumntype#1{%
+ \BA@stringafter\def{#1}}
+% \end{macrocode}
+%
+% "\newcommand" for column types.\footnote{Currently does not check that
+% the type is new.}
+% \begin{macrocode}
+\def\BAnewcolumntype{\@ifnextchar[{\BA@nct}{\BA@nct[0]}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\BA@nct[#1]#2#3{%
+ \BA@stringafter\@reargdef{#2}[#1]{\BA@parse#3}}
+% \end{macrocode}
+%
+% These "\if"s will be true if their associated skips are to be added in
+% the current column.
+% \begin{macrocode}
+\newif\ifBA@colsep
+\newif\ifBA@rulesep
+% \end{macrocode}
+%
+% This is true if we do not need to come back up the array.
+% \begin{macrocode}
+\GC@newtest{BA@quick}
+% \end{macrocode}
+%
+
+% This will be true if building the \meta{u-part}, and false if building
+% the \meta{v-part}.
+% \begin{macrocode}
+\GC@newtest{BA@upart}
+% \end{macrocode}
+%
+%
+% \subsection{`Internal' Column-Type Definitions}
+%
+% ">" expressions:\\
+% If we are building the v-part, add a "&", and try
+% again, so that "c<{\a}>{\b}c" is equivalent to "c<{\a}&>{\b}c".\\
+% Otherwise add the expression to the front of the u-part, i.e., the
+% list being built in "\BA@col@use{u}". Note that no grouping is added
+% so that the scope of any declaration includes the column entry.
+% \begin{macrocode}
+\BA@defcolumntype{>}#1{%
+ \testBA@upart
+ {\BA@col@expafter\GC@add@to@front{u}{#1}%
+ \BA@parse}%
+ {\BA@parse &>{#1}}}
+% \end{macrocode}
+%
+% Left delimiters:\\
+% Again add a "&" if required, otherwise just save the delimiter and
+% label as the first two arguments of "\BA@left@del" in the macro
+% "\BA@col@use{left}".
+% \begin{macrocode}
+\BA@defcolumntype{\Left}#1#2{%
+ \testBA@upart
+ {\global\BA@quickfalse
+ \BA@col@expafter\gdef{left}{\BA@leftdel{#1}{#2}}\BA@parse}%
+ {\BA@parse &\Left{#1}{#2}}}
+% \end{macrocode}
+%
+% Right delimiters: As for Left.
+% \begin{macrocode}
+\BA@defcolumntype{\Right}#1#2{%
+ \testBA@upart
+ {\BA@parse ##\Right{#1}{#2}}
+ {\global\BA@quickfalse
+ \BA@col@expafter\gdef{right}{\BA@rightdel{#1}{#2}}\BA@parse}}%
+% \end{macrocode}
+%
+% "&" The end of each column specification is terminated by "&", either
+% by the user explicitly entering "&", or one being added by one of the
+% other rewrites.\\
+% If we are still in the u-part, finish it off with "#".\\
+% Otherwise add another column to the blank row, advance the column
+% counter by one. Finally reset the variables
+% $"\BA@use{u"|"v"|"left"|"mid"|"right}"$
+% \begin{macrocode}
+\BA@defcolumntype{&}{%
+ \testBA@upart
+ {\BA@parse ##&}%
+ {%
+ \BA@expafter\xdef{blank@row}{\BA@use{blank@row}\omit&}%
+ \global\advance\BA@col\@ne
+ \BA@clear@entry
+ \BA@parse}}
+% \end{macrocode}
+%
+% "#" Add a "&" if required.\\
+% Otherwise make the u-part of the current column, and the v-part of the
+% previous one.
+%
+% \begin{macrocode}
+\BA@defcolumntype{#}{%
+ \testBA@upart
+ {%
+% \end{macrocode}
+% Add the intercolumn skips unless a "@" expression has occured since
+% the last "#" entry.
+% \begin{macrocode}
+ \ifBA@colsep
+ \GC@add@to@front\BA@r@expr{\BA@edollar\hskip\BA@colsep}%
+ \GC@add@to@end\BA@l@expr{\hskip\BA@colsep\BA@bdollar}%
+ \else
+ \GC@add@to@front\BA@r@expr{\BA@edollar}%
+ \GC@add@to@end\BA@l@expr{\BA@bdollar}%
+ \fi
+% \end{macrocode}
+% Go back to the previous column. Add "\BA@r@expr" to the end of
+% "\BA@col@use{v}".
+% \begin{macrocode}
+ \global\advance\BA@col\m@ne
+ \BA@col@expafter\GC@add@to@end{v\expandafter}\expandafter
+ {\BA@r@expr}%
+% \end{macrocode}
+% Add the total width of any "@" expressions as the third argument in
+% the right delimiter macro, this will be used to move the delimiters
+% past any inter-column material.
+% \begin{macrocode}
+ \BA@add@rskip
+% \end{macrocode}
+% Repeat for the u-part, and left delimiter of the current column.
+% \begin{macrocode}
+ \global\advance\BA@col\@ne
+ \BA@col@expafter\GC@add@to@front{u\expandafter}\expandafter
+ {\BA@l@expr}%
+ \BA@add@lskip
+% \end{macrocode}
+% Clear these scratch macros ready for the next column.
+% \begin{macrocode}
+ \global\let\BA@l@expr\@empty\global\let\BA@r@expr\@empty
+% \end{macrocode}
+% Reset these tests and ifs, ready for the next inter-column material.
+% \begin{macrocode}
+ \BA@upartfalse
+ \BA@rulesepfalse
+ \BA@colseptrue
+% \end{macrocode}
+% Finally look at the next specifier.
+% \begin{macrocode}
+ \BA@parse}%
+ {\BA@parse &##}}
+% \end{macrocode}
+%
+% "<" Just like ">".
+% \begin{macrocode}
+\BA@defcolumntype{<}#1{%
+ \testBA@upart
+ {\BA@parse ##<{#1}}%
+ {\BA@col@expafter\GC@add@to@front{v}{#1}\BA@parse}}
+% \end{macrocode}
+%
+% "BA" version of "\vline".
+% \begin{macrocode}
+\def\BA@vline{\vrule \@width \BAarrayrulewidth}
+% \end{macrocode}
+%
+% "|" like "!", except that a "\hskip\BAdoublerulesep" is added for
+% consecutive pairs.
+% \begin{macrocode}
+\BA@defcolumntype{|}{%
+ \testBA@upart
+ {\ifBA@rulesep
+ \GC@add@to@end\BA@l@expr{\hskip\BAdoublerulesep\BA@vline}%
+ \else
+ \GC@add@to@end\BA@l@expr{\BA@vline}%
+ \fi}%
+ {\ifBA@rulesep
+ \GC@add@to@end\BA@r@expr{\hskip\BAdoublerulesep\BA@vline}%
+ \else
+ \GC@add@to@end\BA@r@expr{\BA@vline}%
+ \fi}%
+ \BA@ruleseptrue
+ \BA@parse}
+% \end{macrocode}
+%
+% "@" identical to "!", but set "\BA@colsepfalse".
+% \begin{macrocode}
+\BA@defcolumntype{@}#1{%
+ \testBA@upart
+ {\GC@add@to@end\BA@l@expr{\BA@bdollar#1\BA@edollar}}%
+ {\GC@add@to@end\BA@r@expr{\BA@bdollar#1\BA@edollar}}%
+ \BA@colsepfalse
+ \BA@rulesepfalse
+ \BA@parse}
+% \end{macrocode}
+%
+% "!" Just save the expression, and make "\BA@rulesepfalse" so that the
+% next "|" is not preceded by a skip.
+% \begin{macrocode}
+\BA@defcolumntype{!}#1{%
+ \testBA@upart
+ {\GC@add@to@end\BA@l@expr{\BA@bdollar#1\BA@edollar}}%
+ {\GC@add@to@end\BA@r@expr{\BA@bdollar#1\BA@edollar}}%
+ \BA@rulesepfalse
+ \BA@parse}
+% \end{macrocode}
+%
+% "*": "*{3}{xyz}" just produces "xyz*{2}{xyz}" which is then re-parsed.
+% \begin{macrocode}
+\BA@defcolumntype{*}#1#2{%
+ \count@=#1\relax
+ \ifnum\count@>\z@
+ \advance\count@\m@ne
+ \edef\@tempa##1{\noexpand\BA@parse##1*{\the\count@}{##1}}%
+ \else
+ \def\@tempa##1{\BA@parse}%
+ \fi
+ \@tempa{#2}}
+% \end{macrocode}
+%
+% "\BA@parseend" this is added to the end of the users preamble, it acts
+% like a cross between "#" and "&". It terminates the preamble building
+% as it does not call "\BA@parse".
+% \begin{macrocode}
+\BA@defcolumntype{\BA@parseend}{%
+ \testBA@upart
+ {\BA@parse ##\BA@parseend}%
+ {%
+ \ifBA@colsep
+ \GC@add@to@front\BA@r@expr{\BA@edollar\hskip\BA@colsep}%
+ \else
+ \GC@add@to@front\BA@r@expr{\BA@edollar}%
+ \fi
+ \BA@expafter\xdef{blank@row}{\BA@use{blank@row}\omit\cr}%
+ \BA@add@rskip
+ \BA@col@expafter\GC@add@to@end{v\expandafter}\expandafter
+ {\BA@r@expr}}}
+% \end{macrocode}
+%
+% Like {\tt array.sty}
+% \begin{macrocode}
+\def\BA@startpbox#1{\bgroup
+ \hsize #1 \@arrayparboxrestore
+ \vrule \@height \ht\@arstrutbox \@width \z@}
+
+\def\BA@endpbox{\vrule \@width \z@ \@depth \dp \@arstrutbox \egroup}
+% \end{macrocode}
+%
+% Save the "&" and "#" macros, so they can be restored after a
+% multicolumn, which redefines them.
+% \begin{macrocode}
+\BA@stringafter{\let\expandafter\BA@save@amp}{&}
+\BA@stringafter{\let\expandafter\BA@save@hash}{#}
+% \end{macrocode}
+%
+% A column specification of "\BAmulticolumn{3}{c}" is re-written to:\\
+% "c\BA@MC@end", except that the definition of "#" has been changed so
+% that it expands to:\\
+% ">{\null\span\span}\BA@MC@restore@hash&@{}&@{}\BA@MC@switch@amp"\\
+% The 2 "\span"s in the u-part make the entry span 3 columns, the 2
+% "&@{}" increment "\BA@col" without adding any intercolumn skips.
+% The "\BA@MC@restore@hash" specifier just restores "#" to its normal
+% meaning. "\BA@MC@switch@amp" then causes a specifier "&" to generate
+% an error, as the argument to multicolumn may only specify one column.
+% Finally when "\BA@MC@end" is reached, "&" is restored.
+%
+% "\BA@MC@restore@hash" restore the meaning of "#".
+% \begin{macrocode}
+\BA@defcolumntype{\BA@MC@restore@hash}{%
+ \BA@stringafter\let{##}\BA@save@hash
+ \BA@parse}
+% \end{macrocode}
+%
+% Switch the meaning of "&" so it generates an error, and skips all
+% specifiers up to "\BA@MC@end"
+% \begin{macrocode}
+\BA@defcolumntype{\BA@MC@switch@amp}{%
+ \BA@stringafter\let{&}\BA@extra@amp
+ \BA@parse}
+% \end{macrocode}
+%
+% Restore "&".
+% \begin{macrocode}
+\BA@defcolumntype{\BA@MC@end}{%
+ \BA@stringafter\let{&}\BA@save@amp
+ \BA@parse}
+% \end{macrocode}
+%
+% The special definition of "&" while parsing the multicolumn argument.
+% \begin{macrocode}
+\def\BA@mc@extra@amp#1\BA@MC@end{%
+ \@latexerr{\string& in multicolumn!}\@ehc\BA@parse\BA@MC@end}%
+% \end{macrocode}
+%
+% Putting it all together!
+% \begin{macrocode}
+\BA@defcolumntype{\BAmulticolumn}#1#2{%
+ \BA@make@mc{#1}%
+ \BA@stringafter\let{##}\BA@mc@hash
+ \BA@parse#2\BA@MC@end}
+% \end{macrocode}
+%
+% As explained above, in order to position the delimiters on the way
+% back we need the widths of the inter-column texts.
+% \begin{macrocode}
+\def\BA@add@rskip{%
+ \BA@col@expafter\ifx{right}\relax\else
+ \setbox\BA@tempbox@a\hbox{\BA@bdollar\BA@r@expr}%
+ \BA@col@expafter\GC@add@to@end{right\expandafter}\expandafter
+ {\expandafter{\the\wd\BA@tempbox@a}}\fi}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\BA@add@lskip{%
+ \BA@col@expafter\ifx{left}\relax\else
+ \setbox\BA@tempbox@a\hbox{\BA@l@expr\BA@edollar}%
+ \BA@col@expafter\GC@add@to@end{left\expandafter}\expandafter
+ {\expandafter{\the\wd\BA@tempbox@a}}\fi}
+% \end{macrocode}
+%
+% \subsection{User Level Column-Type Definitions}
+%
+% \begin{macrocode}
+\BAnewcolumntype{c} {>{\hfil}<{\hfil}}
+\BAnewcolumntype{l} {>{}<{\hfil}}
+\BAnewcolumntype{r} {>{\hfil}<{}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\BAnewcolumntype[1]{p}{>{\vtop\BA@startpbox{#1}}c<{\BA@endpbox}}
+\BAnewcolumntype[1]{m}{>{$\vcenter\BA@startpbox{#1}}c<{\BA@endpbox$}}
+\BAnewcolumntype[1]{b}{>{\vbox\BA@startpbox{#1}}c<{\BA@endpbox}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\BAnewcolumntype{(} {\Left{}{(}}
+\BAnewcolumntype{)} {\Right{)}{}}
+\BAnewcolumntype{\{} {\Left{}{\{}}
+\BAnewcolumntype{\}} {\Right{\}}{}}
+\BAnewcolumntype{[} {\Left{}{[}}
+\BAnewcolumntype{]} {\Right{]}{}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\BAnewcolumntype{\BAenum} {%
+ !{%
+ {\def\protect{\noexpand\protect\noexpand}%
+ \xdef\@currentlabel{\p@BAenumi\theBAenumi}}
+ \hbox to 2em{%
+ \hfil\theBAenumi}}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\BAnewcolumntype[1]{\BAmultirow}{>{\BA@mrow@bslash{#1}}##}
+% \end{macrocode}
+%
+% \subsection{Footnotes}
+%
+% This test is true if footnote texts are to be displayed at the end of
+% the table.
+% \begin{macrocode}
+\GC@newtest{BAtablenotes}
+\BAtablenotestrue
+% \end{macrocode}
+%
+% Inside the alignment just save up the footnote text in a token
+% register.
+% \begin{macrocode}
+\long\def\BA@ftntext#1{%
+ \edef\@tempa{\the\BA@ftn\noexpand\footnotetext
+ [\the\csname c@\@mpfn\endcsname]}%
+ \global\BA@ftn\expandafter{\@tempa{#1}}}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\long\def\BA@xftntext[#1]#2{%
+ \global\BA@ftn\expandafter{\the\BA@ftn\footnotetext[#1]{#2}}}
+% \end{macrocode}
+
+% \subsection{Hline and Hhline}
+% The standard "\hline" command would work fine `on the way down' but on
+% the way back it throws me into an infinite loop as there is no
+% "\lastrule" to move the rule into the final box. I could just make
+% "\hline" leave a code penalty, and put in the rule on the way back,
+% but this would mean that every array with an "\hline" needs to be
+% taken apart. I hope to make `most' arrays be possible without comming
+% back up the array via "\lastbox". I could do something with
+% "\leaders" which are removable, but for now, I just make "\hline" and
+% "\hline\hline" just call "\hhline" with the appropriate argument.
+% The "\hhline" from {\tt hhline.sty} does work, but needs extra options
+% to deal with "&" etc, but here is a re-implementation, more in the
+% spirit of this style.
+%
+% \begin{macrocode}
+\def\BAhline{%
+ \noalign{\ifnum0=`}\fi
+ \futurelet\@tempa\BA@hline}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\BA@hline{%
+ \ifx\@tempa\BAhline
+ \gdef\BA@hline@@##1{\BAhhline{*{\BA@col@max}{=}}}%
+ \else
+ \gdef\BA@hline@@{\BAhhline{*{\BA@col@max}{-}}}%
+ \fi
+ \ifnum0=`{\fi}%
+ \BA@hline@@}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\BAhhline#1{%
+ \omit
+% \end{macrocode}
+% First set up the boxes used in "\leaders".
+% \begin{macrocode}
+\global\setbox\BA@ddashbox=\BA@HHbox\BAarrayrulewidth\BAarrayrulewidth
+\global\setbox\BA@dashbox=\hbox to \GC@six\BAarrayrulewidth{%
+ \hss
+ \vrule\@height\BAarrayrulewidth \@width\BAarrayrulewidth \@depth\z@
+ \hss}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+ \global\let\BA@strut\BA@strutB
+ \global\BA@rulesepfalse
+ \global\BA@uparttrue
+ \BA@HHparse#1\BA@HHend}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\BA@HHexp#1#2{\expandafter#1\csname aa\string#2\endcsname}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\BA@HHparse{{\ifnum0=`}\fi\BA@HHparsex}
+\def\BA@HHparsex#1{\BA@HHexp\aftergroup{#1}\ifnum0=`{\fi}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\BA@HHexp\def\BA@HHend{%
+ \cr}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newbox\BA@dashbox
+\newbox\BA@ddashbox
+% \end{macrocode}
+%
+% \begin{macrocode}
+\BA@HHexp\def|{%
+ \ifBA@rulesep\hskip\BAdoublerulesep\fi
+ \global\BA@ruleseptrue
+ \vrule\@width\BAarrayrulewidth
+ \BA@HHparse}
+% \end{macrocode}
+%
+% ":" denotes a broken vertical rule, as in "hhline.sty". If the double
+% dots \hbox{\leaders\hbox {\,:\,}\hskip3em} currently produced by
+% \verb|"| turn out to be useful, it might be better to use ":" for
+% them, and something else, perhaps "!" for this feature.
+% \begin{macrocode}
+\BA@HHexp\def:{%
+ \ifBA@rulesep\hskip\BAdoublerulesep\fi
+ \global\BA@ruleseptrue
+ \copy\BA@ddashbox
+ \BA@HHparse}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\BA@HHexp\def-{%
+ \testBA@upart{}{&\omit\global\BA@uparttrue}%
+ \leaders\hrule\@height\BAarrayrulewidth\hfil
+ \global\BA@upartfalse
+ \global\BA@rulesepfalse
+ \BA@HHparse}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\BA@HHexp\def.{%
+ \testBA@upart{}{&\omit\global\BA@uparttrue}%
+ \copy\BA@dashbox\xleaders\copy\BA@dashbox\hfil\copy\BA@dashbox
+ \global\BA@rulesepfalse
+ \global\BA@upartfalse
+ \BA@HHparse}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\BA@HHexp\def"{%
+ \testBA@upart{}{&\omit\global\BA@uparttrue}%
+ \setbox\z@\hbox to \GC@six\BAarrayrulewidth
+ {\hss\copy\BA@ddashbox\hss}%
+ \copy\z@\xleaders\copy\z@\hfil\copy\z@
+ \global\BA@rulesepfalse
+ \global\BA@upartfalse
+ \BA@HHparse}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\BA@HHexp\def={%
+ \testBA@upart{}{&\omit\global\BA@uparttrue}%
+ \copy\BA@ddashbox\xleaders\copy\BA@ddashbox\hfil\copy\BA@ddashbox
+ \global\BA@rulesepfalse
+ \global\BA@upartfalse
+ \BA@HHparse}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\BA@HHexp\def~{%
+ \testBA@upart{}{&\omit\global\BA@uparttrue}%
+ \hfill
+ \global\BA@rulesepfalse
+ \global\BA@upartfalse
+ \BA@HHparse}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\BA@HHexp\def#{%
+ \ifBA@rulesep\hskip\BAdoublerulesep\fi
+ \global\BA@ruleseptrue
+ \vrule\@width\BAarrayrulewidth
+ \BA@HHbox\BAdoublerulesep\BAdoublerulesep
+ \vrule\@width\BAarrayrulewidth
+ \BA@HHparse}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\BA@HHexp\def{t}{%
+ \rlap{\BA@HHbox\BAdoublerulesep\z@}%
+ \BA@HHparse}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\BA@HHexp\def{b}{%
+ \rlap{\BA@HHbox\z@\BAdoublerulesep}%
+ \BA@HHparse}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\BA@HHbox#1#2{\vbox{%
+ \hrule \@height \BAarrayrulewidth \@width #1
+ \vskip \BAdoublerulesep
+ \hrule \@height \BAarrayrulewidth \@width #2}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\BA@HHexp\def&{&\omit\global\BA@uparttrue\BA@HHparse}
+% \end{macrocode}
+%
+%
+% \begin{macrocode}
+\BA@HHexp\def{*}#1#2{%
+ \count@=#1\relax
+ \ifnum\count@>\z@
+ \advance\count@\m@ne
+ \edef\next##1{\noexpand\BA@HHparse##1*{\the\count@}{##1}}%
+ \else
+ \def\next##1{\BA@HHparse}%
+ \fi
+ \next{#2}}
+% \end{macrocode}
+%
+% \end{document}
+\endinput
diff --git a/Master/texmf-dist/tex/latex/carlisle/comma.sty b/Master/texmf-dist/tex/latex/carlisle/comma.sty
new file mode 100644
index 00000000000..26f6c4ac622
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/carlisle/comma.sty
@@ -0,0 +1,101 @@
+
+%%% comma.sty
+%%%
+%%% Copyright 1996 1997 David Carlisle
+%%%
+%%% This file may be distributed under the terms of the LPPL.
+%%% See 00readme.txt for details.
+%%%
+%%% David Carlisle david@dcarlisle.demon.co.uk
+%%%
+\ProvidesPackage{comma}
+ [1997/12/15 v1.2 Insert commas every three digits (DPC)]
+
+%% This package provides a means of producing numbers with a separator
+%% (by default a comma) every three digits.
+%%
+%% Given a LaTeX counter (eg section)
+%%
+%% \renewcommand\thesection{\commaform{section}}
+%%
+%% If section is 12345, \thesection will now print as 12,345
+%%
+%% If you want something other than a comma, for instance a thin
+%% space, or a full word space, redefine \commaformtoken, for instance
+%% \renewcommand\commaformtoken{\,}
+%% \renewcommand\commaformtoken{ }
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% v1.0 1996/09/05
+% v1.1 1997/07/10
+% v1.2 1997/12/15
+
+
+% #1 is the name of a LaTeX counter.
+\def\commaform#1{%
+ \expandafter\@commaform\csname c@#1\endcsname}
+
+% The token to place every three digits.
+\def\commaformtoken{,}
+
+% Internal version.
+% #1 is the number. It may be a TeX count register, eg \count@
+% or an explicit number such as `1234'.
+% v1.1 use \relax not empty so explicit digits need not end with a space
+% token.
+% (This \relax will be eaten by the parser, second two must be \@empty)
+% v1.2 add \@comma@ux for very long digit strings (requested on c.t.t)
+\def\@commaform#1{%
+ \expandafter\@commaaux
+ \expandafter{\expandafter}%
+ \number\@comma@ux#1%
+ \relax\@empty\@empty}
+
+
+% If \@commaform is given a very long digit string then it may be
+% too large for \number, so make sure \number only applies to the first
+% token. This may leave a spurious space token, but it will be eaten
+% by the \@commaaux parsing, which uses non delimited arguments, and
+% so skips space tokens.
+% Added in v1.2.
+\def\@comma@ux#1{#1 }
+
+% Wander down to the end of the number and then see where
+% \relax turns up.
+% #1 List of digits already seen (initially {} )
+% #2#3#4 next three digits (or \@empty) in list.
+\def\@commaaux#1#2#3#4{%
+ \ifx\relax#2%
+ \addcomma#1\relax
+ \else
+ \ifx\relax#3%
+ \addcomma\@empty\@empty#1#2\relax
+ \else
+ \ifx\relax#4%
+ \addcomma\@empty#1#2#3\relax
+ \else
+ \@commaauxafterfi{#1#2#3#4}%
+ \fi
+ \fi
+ \fi}
+
+
+% Get out of the nested \if before recursing down the list of digits.
+% #1 list of digits seen so far.
+\def\@commaauxafterfi#1\fi\fi\fi{%
+ \fi\fi\fi\@commaaux{#1}}
+
+% Go down adding a `comma' every three tokens. The list will have
+% been padded with 0 1 or 2 \@empty at the start so there is
+% definitely a multiple of three tokens before the \relax.
+% #1#2#3 are next three digits
+% #4 is next digit, or \relax to stop
+\def\addcomma#1#2#3#4{%
+ #1#2#3%
+ \if#4\relax
+ \else
+ \commaformtoken
+ \expandafter\addcomma\expandafter#4%
+ \fi}
+
diff --git a/Master/texmf-dist/tex/latex/carlisle/dotlessj.sty b/Master/texmf-dist/tex/latex/carlisle/dotlessj.sty
new file mode 100644
index 00000000000..c91512fb551
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/carlisle/dotlessj.sty
@@ -0,0 +1,106 @@
+
+% dotlessj package
+%%%%%%%%%%%%%%%%%
+% dotless j (\j) for them that wants one.
+
+% Copyright 1997 1998 David Carlisle
+%
+% This file may be distributed under the terms of the LPPL.
+% See 00readme.txt for details.
+%
+% David Carlisle david@dcarlisle.demon.co.uk
+
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{dotlessj}[1998/12/09 v0.03 dotless j package (DPC)]
+
+% 1997/09/10 v0.01 posted to c.t.t
+% 1997/09/11 v0.02 added \jmath support
+% 1998/12/09 v0.03 added \v\j for Christoph Eyrich
+
+\RequirePackage{color}
+
+% use a coloured rule rather than clipping as it is more portable
+% eg the Y&Y dviwindo previewer, and the OzTeX previewer support
+% colour package (and dviwindo can print on colour to non PS devices
+% such as ink jet printers).
+% Disadvantages of using colour are:
+% a) it shows up if the background is not white.
+% b) You have to arrange that the accent is printed after the colour.
+% (Easy to arrange for text accents with LaTeX's
+% \DeclareTextCompositeCommand, but a bit more dangerous for math
+% accents.)
+\def\j@internal{%
+ \setbox\tw@\hbox{\copy\z@
+ \kern-.8\wd\z@
+ {\color{white}%
+ \vrule \@height1.1\ht\z@ \@depth -1.1\ht4 \@width \wd\z@}%
+ \kern-.2\wd\z@}%
+ \ht\tw@\ht4 }
+
+%
+
+% The \jmath definition, set up to be passed to \mathpalette
+\def\jmath@#1#2{%
+ {\m@th\sbox\z@{$#1j$}\sbox4{$#1\imath$}%
+ \j@internal
+ \box\tw@}}%
+
+% The \jmathaccent definition, set up to be passed to \mathpalette
+\def\jmath@x#1#2{%
+ {\m@th\sbox\z@{$#1j$}\sbox4{$#1\imath$}%
+ \j@internal
+ \copy\tw@\kern-\wd\tw@#2{\kern\wd\tw@}}}%
+
+\DeclareRobustCommand\jmathaccent[1]{{\mathpalette\jmath@x{#1}}}
+
+
+\DeclareRobustCommand\jaccent[1]{%
+ {\leavevmode\sbox\z@{j}%
+ \hb@xt@\wd\z@{\hss\clap\j\clap{#1{}}\hss}}}%
+
+% centered version of \rlap \llap.
+\def\clap#1{\hb@xt@\z@{\hss#1\hss}}%
+
+
+% If \jmath is passed to a math accent, need to intercept it and
+% instead pass the accent to \jmathaccent.
+
+\let\j@mathaccent\mathaccent
+
+\def\mathaccent{\afterassignment\j@mathacc@\count@}
+
+\def\j@mathacc@#1#2{%
+ \ifx\jmath#2%
+ \jmathaccent{\j@mathaccent\count@}%
+ \else
+% #1 should be \relax, but put it back, just in case.
+ \j@mathaccent\count@#1{#2}%
+ \fi}
+
+
+% delay everything as \j and friends get defined by encoding files
+% read in by, eg fontenc package.
+
+\AtBeginDocument{%
+%
+\DeclareRobustCommand\j{%
+ {\sbox\z@{j}\sbox4{\i}%
+ \j@internal
+ \leavevmode\box\tw@}}%
+%
+\DeclareRobustCommand\jmath{{\mathpalette\jmath@\relax}}%
+%
+% Could do this for all known encodings, but just do it
+% for the default encoding at begin document, to avoid wasting
+% too much space.
+\DeclareTextCompositeCommand\'{\encodingdefault}{\j}{\jaccent\'}%
+\DeclareTextCompositeCommand\`{\encodingdefault}{\j}{\jaccent\`}%
+\DeclareTextCompositeCommand\"{\encodingdefault}{\j}{\jaccent\"}%
+\DeclareTextCompositeCommand\^{\encodingdefault}{\j}{\jaccent\^}%
+\DeclareTextCompositeCommand\~{\encodingdefault}{\j}{\jaccent\~}%
+\DeclareTextCompositeCommand\.{\encodingdefault}{\j}{j}%
+\DeclareTextCompositeCommand\={\encodingdefault}{\j}{\jaccent\=}%
+\DeclareTextCompositeCommand\v{\encodingdefault}{\j}{\jaccent\v}}
+
+
+
diff --git a/Master/texmf-dist/tex/latex/carlisle/fix2col.sty b/Master/texmf-dist/tex/latex/carlisle/fix2col.sty
new file mode 100644
index 00000000000..15695aa25ef
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/carlisle/fix2col.sty
@@ -0,0 +1,303 @@
+%%
+%% This is file `fix2col.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% fix2col.dtx (with options: `package')
+%%
+%% Source File: fix2col.dtx Copyright 1997 1998 David Carlisle
+%%
+%% This file may be distributed under the terms of the LPPL.
+%% See 00readme.txt for details.
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{fix2col}
+ [1998/08/17 v0.03 Output Routine fixes for two column mode (DPC,FMi)]
+\def\@outputdblcol{%
+ \if@firstcolumn
+ \global\@firstcolumnfalse
+ \global\setbox\@leftcolumn\copy\@outputbox
+ \splitmaxdepth\maxdimen
+ \vbadness\maxdimen
+ \setbox\@outputbox\vsplit\@outputbox to\maxdimen
+ \toks@\expandafter{\topmark}%
+ \xdef\@firstcoltopmark{\the\toks@}%
+ \toks@\expandafter{\splitfirstmark}%
+ \xdef\@firstcolfirstmark{\the\toks@}%
+ \ifx\@firstcolfirstmark\@empty
+ \global\let\@setmarks\relax
+ \else
+ \gdef\@setmarks{%
+ \let\firstmark\@firstcolfirstmark
+ \let\topmark\@firstcoltopmark}%
+ \fi
+ \else
+ \global\@firstcolumntrue
+ \setbox\@outputbox\vbox{%
+ \hb@xt@\textwidth{%
+ \hb@xt@\columnwidth{\box\@leftcolumn \hss}%
+ \hfil
+ \vrule \@width\columnseprule
+ \hfil
+ \hb@xt@\columnwidth{\box\@outputbox \hss}}}%
+ \@combinedblfloats
+ \@setmarks
+ \@outputpage
+ \begingroup
+ \@dblfloatplacement
+ \@startdblcolumn
+ \@whilesw\if@fcolmade \fi{\@outputpage\@startdblcolumn}%
+ \endgroup
+ \fi}
+\def\end@dblfloat{%
+\if@twocolumn
+ \@endfloatbox
+ \ifnum\@floatpenalty <\z@
+ \@largefloatcheck
+ \global\dp\@currbox1sp %
+ \expandafter\@gobble\end@float
+ \fi
+\else
+ \end@float
+\fi
+}
+\def\@testwrongwidth #1{%
+ \ifdim\dp#1=\f@depth
+ \else
+ \global\@testtrue
+ \fi}
+\let\f@depth\z@
+\def\@dblfloatplacement{\global\@dbltopnum\c@dbltopnumber
+ \global\@dbltoproom \dbltopfraction\@colht
+ \@textmin \@colht
+ \advance \@textmin -\@dbltoproom
+ \@fpmin \dblfloatpagefraction\textheight
+ \@fptop \@dblfptop
+ \@fpsep \@dblfpsep
+ \@fpbot \@dblfpbot
+ \def\f@depth{1sp}}
+\def \@doclearpage {%
+ \ifvoid\footins
+ \setbox\@tempboxa\vsplit\@cclv to\z@ \unvbox\@tempboxa
+ \setbox\@tempboxa\box\@cclv
+ \xdef\@deferlist{\@toplist\@botlist\@deferlist}%
+ \global \let \@toplist \@empty
+ \global \let \@botlist \@empty
+ \global \@colroom \@colht
+ \ifx \@currlist\@empty
+ \else
+ \@latexerr{Float(s) lost}\@ehb
+ \global \let \@currlist \@empty
+ \fi
+ \@makefcolumn\@deferlist
+ \@whilesw\if@fcolmade \fi{\@opcol\@makefcolumn\@deferlist}%
+ \if@twocolumn
+ \if@firstcolumn
+ \xdef\@deferlist{\@dbltoplist\@deferlist}%
+ \global \let \@dbltoplist \@empty
+ \global \@colht \textheight
+ \begingroup
+ \@dblfloatplacement
+ \@makefcolumn\@deferlist
+ \@whilesw\if@fcolmade \fi{\@outputpage
+ \@makefcolumn\@deferlist}%
+ \endgroup
+ \else
+ \vbox{}\clearpage
+ \fi
+ \fi
+ \ifx\@deferlist\@empty \else\clearpage \fi
+ \else
+ \setbox\@cclv\vbox{\box\@cclv\vfil}%
+ \@makecol\@opcol
+ \clearpage
+ \fi
+}
+\def \@startdblcolumn {%
+ \@tryfcolumn \@deferlist
+ \if@fcolmade
+ \else
+ \begingroup
+ \let \reserved@b \@deferlist
+ \global \let \@deferlist \@empty
+ \let \@elt \@sdblcolelt
+ \reserved@b
+ \endgroup
+ \fi
+}
+\def\@addtonextcol{%
+ \begingroup
+ \@insertfalse
+ \@setfloattypecounts
+ \ifnum \@fpstype=8
+ \else
+ \ifnum \@fpstype=24
+ \else
+ \@flsettextmin
+ \@reqcolroom \ht\@currbox
+ \advance \@reqcolroom \@textmin
+ \ifdim \@colroom>\@reqcolroom
+ \@flsetnum \@colnum
+ \ifnum\@colnum>\z@
+ \@bitor\@currtype\@deferlist
+ \@testwrongwidth\@currbox
+ \if@test
+ \else
+ \@addtotoporbot
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \if@insert
+ \else
+ \@cons\@deferlist\@currbox
+ \fi
+ \endgroup
+}
+\def\@addtodblcol{%
+ \begingroup
+ \@insertfalse
+ \@setfloattypecounts
+ \@getfpsbit \tw@
+ \ifodd\@tempcnta
+ \@flsetnum \@dbltopnum
+ \ifnum \@dbltopnum>\z@
+ \@tempswafalse
+ \ifdim \@dbltoproom>\ht\@currbox
+ \@tempswatrue
+ \else
+ \ifnum \@fpstype<\sixt@@n
+ \advance \@dbltoproom \@textmin
+ \ifdim \@dbltoproom>\ht\@currbox
+ \@tempswatrue
+ \fi
+ \advance \@dbltoproom -\@textmin
+ \fi
+ \fi
+ \if@tempswa
+ \@bitor \@currtype \@deferlist
+ \@testwrongwidth\@currbox
+ \if@test
+ \else
+ \@tempdima -\ht\@currbox
+ \advance\@tempdima
+ -\ifx \@dbltoplist\@empty \dbltextfloatsep \else
+ \dblfloatsep \fi
+ \global \advance \@dbltoproom \@tempdima
+ \global \advance \@colht \@tempdima
+ \global \advance \@dbltopnum \m@ne
+ \@cons \@dbltoplist \@currbox
+ \@inserttrue
+ \fi
+ \fi
+ \fi
+ \fi
+ \if@insert
+ \else
+ \@cons\@deferlist\@currbox
+ \fi
+ \endgroup
+}
+\def \@addtocurcol {%
+ \@insertfalse
+ \@setfloattypecounts
+ \ifnum \@fpstype=8
+ \else
+ \ifnum \@fpstype=24
+ \else
+ \@flsettextmin
+ \advance \@textmin \@textfloatsheight
+ \@reqcolroom \@pageht
+ \ifdim \@textmin>\@reqcolroom
+ \@reqcolroom \@textmin
+ \fi
+ \advance \@reqcolroom \ht\@currbox
+ \ifdim \@colroom>\@reqcolroom
+ \@flsetnum \@colnum
+ \ifnum \@colnum>\z@
+ \@bitor\@currtype\@deferlist
+ \@testwrongwidth\@currbox
+ \if@test
+ \else
+ \@bitor\@currtype\@botlist
+ \if@test
+ \@addtobot
+ \else
+ \ifodd \count\@currbox
+ \advance \@reqcolroom \intextsep
+ \ifdim \@colroom>\@reqcolroom
+ \global \advance \@colnum \m@ne
+ \global \advance \@textfloatsheight \ht\@currbox
+ \global \advance \@textfloatsheight 2\intextsep
+ \@cons \@midlist \@currbox
+ \if@nobreak
+ \nobreak
+ \@nobreakfalse
+ \everypar{}%
+ \else
+ \addpenalty \interlinepenalty
+ \fi
+ \vskip \intextsep
+ \box\@currbox
+ \penalty\interlinepenalty
+ \vskip\intextsep
+ \ifnum\outputpenalty <-\@Mii \vskip -\parskip\fi
+ \outputpenalty \z@
+ \@inserttrue
+ \fi
+ \fi
+ \if@insert
+ \else
+ \@addtotoporbot
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \if@insert
+ \else
+ \@resethfps
+ \@cons\@deferlist\@currbox
+ \fi
+}
+\def\@xtryfc #1{%
+ \@next\reserved@a\@trylist{}{}%
+ \@currtype \count #1%
+ \divide\@currtype\@xxxii
+ \multiply\@currtype\@xxxii
+ \@bitor \@currtype \@failedlist
+ \@testfp #1%
+ \@testwrongwidth #1%
+ \ifdim \ht #1>\@colht
+ \@testtrue
+ \fi
+ \if@test
+ \@cons\@failedlist #1%
+ \else
+ \@ytryfc #1%
+ \fi}
+\def\@ztryfc #1{%
+ \@tempcnta\count #1%
+ \divide\@tempcnta\@xxxii
+ \multiply\@tempcnta\@xxxii
+ \@bitor \@tempcnta {\@failedlist \@flfail}%
+ \@testfp #1%
+ \@testwrongwidth #1%
+ \@tempdimb\@tempdima
+ \advance\@tempdimb\ht #1%
+ \advance\@tempdimb\@fpsep
+ \ifdim \@tempdimb >\@colht
+ \@testtrue
+ \fi
+ \if@test
+ \@cons\@flfail #1%
+ \else
+ \@cons\@flsucceed #1%
+ \@tempdima\@tempdimb
+ \fi}
+\endinput
+%%
+%% End of file `fix2col.sty'.
diff --git a/Master/texmf-dist/tex/latex/carlisle/mylatex.ltx b/Master/texmf-dist/tex/latex/carlisle/mylatex.ltx
new file mode 100644
index 00000000000..d1ea1ea233d
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/carlisle/mylatex.ltx
@@ -0,0 +1,211 @@
+%%%
+%%% mylatex.ltx
+%%%%%%%%%%%%%%%
+%%%
+%%% Use this file to make a format based on the preamble of any LaTeX
+%%% file
+%%%
+%%% There are no restrictions on the distribution or modification of
+%%% this file, except that other people should not attempt to alter
+%%% the master copy on the ctan archives.
+%%%
+%%% Making the format
+%%%%%%%%%%%%%%%%%%%%%
+%%%
+%%% Given a LaTeX file `abc.tex', use initex as follows:
+%%%
+%%% initex &latex mylatex.ltx abc (Generic TeX)
+%%% initex \&latex mylatex.ltx abc (unix and other TeX's)
+%%% tex /i &latex mylatex.ltx abc (emtex)
+%%%
+%%% If you are on a Mac or using some shell that makes it inconvenient
+%%% to use a command line such as the above examples then you may
+%%% make a file `mylatex.tex' with the single line
+%%% \input mylatex.ltx abc
+%%% and then pass the file mylatex.tex to your (ini)tex shell to produce
+%%% the format, ie something equivalent to initex &latex mylatex.tex.
+%%%
+%%% If you are using OzTeX, see the separate instructions below.
+%%%
+%%% This should make a format file mylatex.fmt which you can then use
+%%% as follows
+%%%
+%%% Using the new format
+%%%%%%%%%%%%%%%%%%%%%%%%
+%%%
+%%% tex &mylatex abc (generic TeX)
+%%% virtex \&mylatex abc (Unix TeX)
+%%%
+%%% This will process your document, abc.tex, just as LaTeX does, but
+%%% quicker as the contents of the preamble will be stored in the
+%%% format file and will not need to be run each time.
+%%%
+%%% If (vir)tex fails to find your mylatex.fmt then it is not searching
+%%% in the current directory, either modify your TEXFORMATS path (or
+%%% equivalent) to search `.' or (on unix/dos) use ./ as in:
+%%% virtex \&./mylatex abc
+%%%
+%%% Making and using the format with OzTeX
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%
+%%% Given a LaTeX file `abc.tex', do this: select `TeX...' from OzTeX's
+%%% TeX menu, and go to the folder containing the file `abc.tex' as if you
+%%% were selecting the file `abc.tex'. Then hit the Cancel button - this
+%%% procedure sets OzTeX's working folder to the one containing abc.tex.
+%%% Next, select iniTeX from the TeX menu, and type:
+%%%
+%%% &latex mylatex.ltx abc
+%%%
+%%% This should make a format file mylatex.fmt which you can save in the
+%%% same folder as the file you're working on.
+%%%
+%%% To use the new format, put this at the very start of the very first
+%%% line of your document:
+%%%
+%%% %&mylatex
+%%%
+%%% Further Notes
+%%%%%%%%%%%%%%%%%
+%%%
+%%% The file abc.tex must contain a line *just* with
+%%% \begin{document}
+%%% Everything up to (but not including) the \begin{document} will
+%%% be saved in the format and not executed in subsequent runs.
+%%%
+%%% If you are modifying the document (or working on a similar document)
+%%% you may wish to add new commands to your document preamble.
+%%% The `mylatex' format normally skips the whole preamble (believing
+%%% it to be pre-loaded) and so such new commands do not take effect.
+%%% You could re-make the format, preloading the new preamble, but that
+%%% might be inconvenient to do every time, and so an alternative scheme
+%%% has been introduced.
+%%% If the preamble contains a comment mylatex (ie a line just
+%%% containing a % white space and the word mylatex) then the mylatex
+%%% format will start reading the preable at that point so any new
+%%% commands can be placed after such a comment and they will be
+%%% executed.
+%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% David Carlisle
+%%% 1994/09/27
+%%%
+%%% Modified 1994/10/21 after comments by
+%%% Volker Kunert <volker@numsun1.mathematik.uni-halle.de>
+%%% Modified 1996/01/26 To fix printout of preloaded files (which
+%%% hasnt worked since December 94 release, and to fix
+%%% incompatibility with \makeindex command.
+%%% Modified 1997/10/04 To generalise the \makeindex support to work
+%%% with any (well most:-) \openout uses in the preamble.
+%%% Modified 1997/10/09 Most? Ross Moore pointed out I just broke
+%%% changebar, so further tinkering. Also useful discussions
+%%% with Ross lead to the following changes.
+%%% Added `mylatex' comment feature.
+%%% Added some font preloading.
+%%% Modified 1998/01/21 Jean-Francois Mertens pointed out that comments
+%%% before the first TeX command were broken by the previous
+%%% version. In particular %&mylatex special comments which
+%%% would be picked up by some TeX versions to automatically
+%%% select the format.
+%%% Modified 1998/10/14 Rowland McDonnell added notes on how to use
+%%% mylatex.ltx with OzTeX
+%%% Modified 1999/01/04 Rowland McDonnell corrected notes on how to
+%%% use mylatex.ltx with OzTeX.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\makeatletter
+
+% Save the original definitions.
+\let\MYLATEXdocument\document
+\let\MYLATEXopenout\openout
+
+% The version of \document to use on the initex run.
+% Just preloads some fonts, puts back \document and \openout,
+% sets up the banner to display the file list of files preloaded,
+% then sets up some special catcodes so the preamble will be
+% skipped on normal runs with the new format.
+\def\document{\endgroup
+% Force some font preloading.
+ {\setbox\z@\hbox{%
+ $$% math (not bold, some setups don't have \boldmath)
+ \normalfont% normal
+ {\ifx\large\@undefined\else\large\fi % large and footnote
+ \ifx\footnotesize\@undefined\else\footnotesize\fi}%
+ {\bfseries\itshape}% bold and bold italic
+ {\itshape}% italic
+ \ttfamily% monospace
+ \sffamily% sans serif
+ }}%
+ \let\document\MYLATEXdocument
+ \let\openout\MYLATEXopenout
+ \makeatother
+ \everyjob\expandafter{\the\everyjob
+ \begingroup
+ \listfiles
+ \expandafter\MYLATEXcustomised\@dofilelist
+ \endgroup}%
+ \@addtofilelist{.}%
+ \catcode`\\=13\relax%
+ \catcode`\#=12\relax%
+ \catcode`\ =9\relax%
+ \dump}
+
+
+% In principle \openout stream= filename need not be space terminated,
+% and need not be immediate, but this covers \makeindex \makeglossary
+% and index package's \newindex which are all the cases of \openout
+% that occur before \begin{document} that I could see.
+% Thanks to Ross Moore for pointing out \AtBeginDocument is too late
+% eg changebar package *closes* the stream in \AtBeginDocument, so need
+% to make sure it is opened before that. Make a special purpose hook.
+%
+\def\openout#1 {%
+ \g@addto@macro\MYLATEXopens{\immediate\openout#1 }}
+\let\MYLATEXopens\@empty
+
+% Templates for ending the `preamble skipping process'.
+\def\MYLATEXbegin{\begin{document}}
+\def\MYLATEXcomment{mylatex}
+
+% Banner for \everyjob.
+\def\MYLATEXcustomised#1#2#3\typeout#4{%
+ \typeout{CUSTOMISED FORMAT. Preloaded files:^^J%
+ \@spaces\@spaces.}#3}
+
+% While the preamble is being skipped, the EOL is active
+% and defined to grab each line and inspect it looking
+% for \begin{document} or mylatex lines.
+% The special catcodes required are not enabled until after the
+% first TeX command in the file, so as to avoid problems with
+% the special processing that TeX does on the first line, choosing
+% the format, or the file name etc.
+{\catcode`\^^M=\active%
+ \catcode`\/=0 %
+ /catcode`\\=13 %
+ /gdef\{/catcode`/\=0 /catcode`/^^M=13 /catcode`/%=9 ^^M}%
+ /long/gdef^^M#1^^M{%
+ /def/MYLATEXline{#1}%
+% If hit a comment `mylatex' then do as if you'd hit \begin{document}
+% except don't run the real \document as a \begin{document} will be
+% coming up later in the file at the end of the preamble.
+ /ifx/MYLATEXline/MYLATEXcomment%
+ /let/MYLATEXbegin/relax%
+ /let/MYLATEXline/relax%
+ /fi%
+% If hit \begin{document} put things back as they should be, run the
+% hook with any save \openouts then do the original \document code.
+ /ifx/MYLATEXline/MYLATEXbegin%
+ /catcode`/^^M=5/relax%
+ /let^^M/par%
+ /catcode`/#=6/relax%
+ /catcode`/%=14/relax%
+ /catcode`/ =10/relax%
+ /expandafter/MYLATEXopens/expandafter/MYLATEXbegin%
+ /else%
+% Otherwise grab the next line to look at.
+ /expandafter^^M%
+ /fi}}%
+
+% Trick lookahead to allow mylatex.ltx and the document filename to be
+% given on the same command line. (initex &latex mylatex.ltx abc.tex)
+\expandafter\input\endinput%
+
diff --git a/Master/texmf-dist/tex/latex/carlisle/nopageno.sty b/Master/texmf-dist/tex/latex/carlisle/nopageno.sty
new file mode 100644
index 00000000000..2aa273e76e0
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/carlisle/nopageno.sty
@@ -0,0 +1,27 @@
+%%
+%% nopageno package: No page numbers in LaTeX documents.
+%%
+%% Copyright 1998 David Carlisle
+%%
+%% This file may be distributed under the terms of the LPPL.
+%% See 00readme.txt for details.
+
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{nopageno}[1989/01/01 no page numbers (DPC)]
+% Actually the above date is probably wrong, I can not remember
+% How long I have had this lying around...
+
+% LaTeX's standard styles use two page styles, one on normal
+% pages and one on `opening' pages with \maketitle or \chapter etc.
+% Unfortunately there is only easy access to changing one of these
+% two so if you want something other than `plain' on the opening
+% pages you must use \thispagestyle{...} on _each_ such page.
+
+% The fancyheadings package does provide a more flexible interface,
+% but if you just want an empty page style on all pages then
+% \usepackage{nopageno}
+% will do the job.
+
+% Another 4 token package...
+\let\ps@plain\ps@empty
+\ps@empty
diff --git a/Master/texmf-dist/tex/latex/carlisle/plain.sty b/Master/texmf-dist/tex/latex/carlisle/plain.sty
new file mode 100644
index 00000000000..aa12bffaa24
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/carlisle/plain.sty
@@ -0,0 +1,251 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% plain.sty
+% %%%%%%%%%
+%
+% Copyright 1990 David Carlisle
+%
+% This file may be distributed under the terms of the LPPL.
+% See 00readme.txt for details.
+
+% Defines a new environment plain, in which plain TeX files should be
+% LaTeX'able.
+% Defines \magnification and \bye to be no-op.
+% Re-enables some plain commands (\line, \eqalign ...)
+% Fakes some other plain commands (\footnote, \topinsert, ... )
+% Keeps LaTeX's font definitions, and output routine.
+%
+% Example use:
+% \begin{plain}
+% \input{Somebodys_nasty_plain_file.tex}
+% \end{plain}
+%
+% You do not have to \input the plain commands, they can be entered
+% directly inside the plain environment.
+%
+% \begin{plain}
+% $$ \eqalign{1+2&=2+1\cr&=3}$$
+% \end{plain}
+
+% Note that this style file is designed to make plain TeX files do
+% something sensible inside LaTeX. The page breaks, widths of lines,
+% fonts used etc may not be the same as obtained from plain TeX.
+
+% If you want exactly the same result from LaTeX as plain TeX use: (!!)
+% latex \&plain Somebodys_nasty_plain_file.tex
+
+% David Carlisle
+% carlisle@cs.man.ac.uk
+% 1990/11/14
+
+% All of the code is from (l)plain.tex except a few definitions
+% which are marked with the comment:
+%DPC
+% and one set of three commands marked with the comment
+%RF (at DPC's request)
+%
+% one place where extraneous \par token, and two places where
+% extraneous spaces appeared corrected RF 2001/09/14
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% 1990/11/14 initial version
+% 1994-5 Robin Fairbairns kindly fixed up a few things
+% 1996/04/22 Add support for plain TeX commands and primitives hit
+% by AMS packages.
+
+%DPC
+% Just to get started...
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{plain}[1996/04/22 Plain TeX emulation (DPC)]
+
+%DPC
+\let\latex@end=\end
+
+%DPC
+% First a few \new's
+\newif\ifus@@latex
+\newif\if@cr@latex
+\newbox\tabs@latex
+\newbox\tabsyet@latex
+\newbox\tabsdone@latex
+
+%DPC
+% AMS packages might squash these, so ...
+\ifx\@@over\@undefined
+ \let\@@over\over
+\fi
+\ifx\@@atop\@undefined
+ \let\@@atop\atop
+\fi
+\ifx\@@above\@undefined
+ \let\@@above\above
+\fi
+\ifx\@@overwithdelims\@undefined
+ \let\@@overwithdelims\overwithdelims
+\fi
+\ifx\@@atopwithdelims\@undefined
+ \let\@@atopwithdelims\atopwithdelims
+\fi
+\ifx\@@abovewithdelims\@undefined
+ \let\@@abovewithdelims\abovewithdelims
+\fi
+
+%DPC
+% The plain environment:
+\def\plain{%
+%
+%DPC
+% put the \ifs and registers back
+\let\ifus@\ifus@@latex
+\let\if@cr\if@cr@latex
+\let\tabs\tabs@latex
+\let\tabsyet\tabsyet@latex
+\let\tabsdone\tabsdone@latex
+%
+\let\centering=\@centering
+%
+% \line changed to \@@line because LaTeX redefines \line
+\let\line\@@line
+% <-- this comment marker inserted by RF 2001-09-14
+% LaTeX has its own tabbing environment, so PLAIN's is disabled.
+\def\cleartabs{\global\setbox\tabsyet\null \setbox\tabs\null}%
+\def\settabs{\setbox\tabs\null \futurelet\next\sett@b}%
+\let\+=\relax % in case this file is being read in twice
+\def\sett@b{\ifx\next\+\let\next\relax
+ \def\next{\afterassignment\s@tt@b\let\next}%
+ \else\let\next\s@tcols\fi\next}%
+\def\s@tt@b{\let\next\relax\us@false\m@ketabbox}%
+\def\tabalign{\us@true\m@ketabbox}% non-\outer version of \+
+\outer\def\+{\tabalign}%
+\def\s@tcols##1\columns{\count@##1 \dimen@\hsize
+ \loop\ifnum\count@>\z@ \@nother \repeat}%
+\def\@nother{\dimen@ii\dimen@ \divide\dimen@ii\count@
+ \setbox\tabs\hbox{\hbox to\dimen@ii{}\unhbox\tabs}%
+ \advance\dimen@-\dimen@ii \advance\count@\m@ne}%
+%
+\def\m@ketabbox{\begingroup
+ \global\setbox\tabsyet\copy\tabs
+ \global\setbox\tabsdone\null
+ \def\cr{\@crtrue\crcr\egroup\egroup
+ \ifus@\unvbox\z@\lastbox\fi\endgroup
+ \setbox\tabs\hbox{\unhbox\tabsyet\unhbox\tabsdone}}%
+ \setbox\z@\vbox\bgroup\@crfalse
+ \ialign\bgroup&\t@bbox####\t@bb@x\crcr}%
+%
+\def\t@bbox{\setbox\z@\hbox\bgroup}%
+\def\t@bb@x{\if@cr\egroup % now \box\z@ holds the column
+ \else\hss\egroup \global\setbox\tabsyet\hbox{\unhbox\tabsyet
+ \global\setbox\@ne\lastbox}% now \box\@ne holds its size
+ \ifvoid\@ne\global\setbox\@ne\hbox to\wd\z@{}%
+ \else\setbox\z@\hbox to\wd\@ne{\unhbox\z@}\fi
+ \global\setbox\tabsdone\hbox{\box\@ne\unhbox\tabsdone}\fi
+ \box\z@}%
+%
+% LaTeX has its own sectioning macros
+\outer\def\beginsection##1\par{\filbreak\bigskip
+ \message{##1}\leftline{\bf##1}\nobreak\smallskip\vskip-\parskip
+ \noindent}%
+%
+% LaTeX change: \bye is eliminated.
+%DPC
+% \bye made a no-op
+\let\bye\relax
+%
+%DPC
+% fake \supereject
+\let\supereject\clearpage
+%
+%DPC
+% \end made no-op unless it is followed by {
+\def\end{\@ifnextchar \bgroup\latex@end\relax}%
+%
+% LaTeX change: \eqalign eliminated, since it is replaced by the
+% eqnarray environment.
+\def\eqalign##1{\null\,\vcenter{\openup\jot\m@th
+ \ialign{\strut\hfil$\displaystyle{####}$&$\displaystyle{{}####}$\hfil
+ \crcr##1\crcr}}\,}%
+%
+% LaTeX: The following \eqalign type macros are eliminated, since
+% they are replaced by the eqnarray environment.
+\def\eqalignno##1{\displ@y \tabskip\centering
+ \halign to\displaywidth{%
+ \hfil$\@lign\displaystyle{####}$\tabskip\z@skip
+ &$\@lign\displaystyle{{}####}$\hfil\tabskip\centering
+ &\llap{$\@lign####$}\tabskip\z@skip\crcr
+ ##1\crcr}}%
+\def\leqalignno##1{\displ@y \tabskip\centering
+ \halign to\displaywidth{%
+ \hfil$\@lign\displaystyle{####}$\tabskip\z@skip
+ &$\@lign\displaystyle{{}####}$\hfil\tabskip\centering
+ &\kern-\displaywidth\rlap{$\@lign####$}\tabskip\displaywidth\crcr
+ ##1\crcr}}%
+%
+%DPC
+% Fake plain's \nopagenumers
+\def\nopagenumbers{\pagestyle{empty}}%
+%
+\def\advancepageno{\ifnum\pageno<\z@ \global\advance\pageno\m@ne
+ \else\global\advance\pageno\@ne \fi}% increase |pageno|
+%
+\countdef\pageno\z@
+%
+%DPC
+% Fake plain's \footnote with internal LaTeX commands
+\def\footnote##1{\def\@thefnmark{##1}\@footnotemark\@footnotetext}%
+%
+%DPC
+% Re-instate the primitive \underline
+%(LaTeX's version generates errors in some valid (plain) contexts)
+\let\underline\@@underline
+%
+%DPC
+% Re-instate plain's \item
+\def\item{\par\hang\textindent}%
+\def\itemitem{\par\indent \hangindent2\parindent \textindent}%
+%
+%DPC
+% Fake plain's \[top|mid|page]insert with LaTeX's figure environment.
+\def\topinsert{\begin{figure}[!tp]}%
+\def\midinsert{\begin{figure}[!htp]}%
+\def\pageinsert{\begin{figure}[p]}%
+\def\endinsert{\end{figure}}%
+%
+% \magnification doesn't work in LaTeX
+%
+%DPC
+% Make \magnification just gobble the next <number>
+\def\magnification{\count@}%
+%
+%RF (at DPC's request)
+% \proclaim \hang and \textindent from plain.tex (since they're now no
+% longer part of 2e kernel, but only compatibility)
+\def\proclaim ##1. ##2\par{\medbreak
+ \noindent{\bf##1.\enspace}{\sl##2\par}%
+ \ifdim\lastskip<\medskipamount \removelastskip\penalty55\medskip\fi}%
+%
+\def\hang{\hangindent\parindent}%
+%
+\def\textindent##1{\indent\llap{##1\enspace}\ignorespaces}%
+%
+%
+%DPC
+% Repair AMS `damage'
+\let\over\@@over
+\let\atop\@@atop
+\let\above\@@above
+\let\overwithdelims\@@overwithdelims
+\let\atopwithdelims\@@atopwithdelims
+\let\abovewithdelims\@@abovewithdelims
+%
+\def\cases##1{\left\{\,\vcenter{\normalbaselines\m@th
+ \ialign{$####\hfil$&\quad####\hfil\crcr##1\crcr}}\right.}%
+\def\matrix##1{\null\,\vcenter{\normalbaselines\m@th
+ \ialign{\hfil$####$\hfil&&\quad\hfil$####$\hfil\crcr
+ \mathstrut\crcr\noalign{\kern-\baselineskip}%
+ ##1\crcr\mathstrut\crcr\noalign{\kern-\baselineskip}}}\,}%
+\def\pmatrix##1{\left(\matrix{##1}\right)}%
+%
+%DPC
+%end of \def\plain
+}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\endinput
diff --git a/Master/texmf-dist/tex/latex/carlisle/pspicture.sty b/Master/texmf-dist/tex/latex/carlisle/pspicture.sty
new file mode 100644
index 00000000000..5b7659798ce
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/carlisle/pspicture.sty
@@ -0,0 +1,111 @@
+%%
+%% This is file `pspicture.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% pspicture.dtx (with options: `package,dvips')
+%%
+%%
+%% Source File `pspicture.dtx'.
+%% Copyright (C) 1992 1999 David Carlisle
+%% This file may be distributed under the terms of the LPPL.
+%% See 00readme.txt for details.
+%%
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{pspicture}
+ [1999/04/11/ v2.02 Picture mode via PS specials (DPC)]
+
+ \def\PS@header#1{\special{header=#1}}
+\PS@header{pspicture.ps}
+ \def\PS@special#1{\special{"#1}}
+{\catcode`t=12\catcode`p=12\gdef\noPT#1pt{#1}}
+\def\strippt#1{\expandafter\noPT\the#1\space}
+\def\@circle#1{%
+ \@tempdimb #1\unitlength
+ \PS@special{%
+ \strippt\@wholewidth
+ \strippt\@tempdimb
+ !C}}
+\def\@dot#1{%
+ \@tempdimb #1\unitlength
+ \PS@special{%
+ \strippt\@tempdimb
+ !D}}
+\def\line(#1,#2)#3{%
+ \@linelen=#3\unitlength
+ \PS@special{%
+ \strippt\@wholewidth
+ #1
+ #2
+ \strippt\@linelen
+ !L}}
+\def\vector(#1,#2)#3{%
+ \@linelen=#3\unitlength
+ \PS@special{%
+ \strippt\@arrowlength
+ \strippt\@wholewidth
+ #1
+ #2
+ \strippt\@linelen
+ !V}}
+\def\oval{%
+ \@ifnextchar[%
+ {\@ov@l}%
+ {\count@=\maxdimen \divide\count@ by \unitlength \@ov@l[\count@]}}
+\def\@ov@l[#1](#2,#3){%
+ \@ifnextchar[{\@oval[#1](#2,#3)}{\@oval[#1](#2,#3)[]}}%
+\def\@oval[#1](#2,#3)[#4]{\begingroup
+ \@tempdimb #1\unitlength
+ \@ovxx #2\unitlength
+ \@ovyy #3\unitlength
+ \def\r{\def\TL{0 }\def\BL{0 }}%
+ \def\l{\def\TR{0 }\def\BR{0 }}%
+ \def\t{\def\BL{0 }\def\BR{0 }}%
+ \def\b{\def\TL{0 }\def\TR{0 }}%
+ \def\TL{1 }\def\BL{1 }\def\TR{1 }\def\BR{1 }%
+ \@tfor\@tempa :=#4\do{\csname\@tempa\endcsname}%
+ \PS@special{%
+ \BR\BL\TR\TL
+ \strippt\@wholewidth
+ \strippt\@tempdimb
+ \strippt\@ovxx
+ \strippt\@ovyy
+ !O}%
+ \endgroup}
+\def\Line(#1,#2){%
+ \@ovxx #1\unitlength
+ \@ovyy #2\unitlength
+ \PS@special{%
+ \strippt\@wholewidth
+ \strippt\@ovxx
+ \strippt\@ovyy
+ !L2}}
+\def\Curve(#1,#2)#3{%
+ \@ovxx #1\unitlength
+ \@ovyy #2\unitlength
+ \PS@special{%
+ \strippt\@wholewidth
+ \strippt\@ovxx
+ \strippt\@ovyy
+ #3
+ !C2}}
+\def\Vector(#1,#2){%
+ \@ovxx #1\unitlength
+ \@ovyy #2\unitlength
+ \PS@special{%
+ \strippt\@arrowlength
+ \strippt\@wholewidth
+ \strippt\@ovxx
+ \strippt\@ovyy
+ !V2}}
+\newdimen\@arrowlength
+\def\arrowlength#1{\@arrowlength #1}
+\arrowlength{8pt}
+ \endinput
+
+
+
+\endinput
+%%
+%% End of file `pspicture.sty'.
diff --git a/Master/texmf-dist/tex/latex/carlisle/remreset.sty b/Master/texmf-dist/tex/latex/carlisle/remreset.sty
new file mode 100644
index 00000000000..b53de583573
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/carlisle/remreset.sty
@@ -0,0 +1,39 @@
+
+% remreset package
+%%%%%%%%%%%%%%%%%%
+
+% Copyright 1997 David carlisle
+% This file may be distributed under the terms of the LPPL.
+% See 00readme.txt for details.
+
+% 1997/09/28 David Carlisle
+
+% LaTeX includes a command \@addtoreset that is used to declare that
+% a counter should be reset every time a second counter is incremented.
+
+% For example the book class has a line
+% \@addtoreset{footnote}{chapter}
+% So that the footnote counter is reset each chapter.
+
+% If you wish to bas a new class on book, but without this counter
+% being reset, then standard LaTeX gives no simple mechanism to do
+% this.
+
+% This package defines |\@removefromreset| which just undoes the effect
+% of \@addtorest. So for example a class file may be defined by
+
+% \LoadClass{book}
+% \@removefromreset{footnote}{chapter}
+
+
+\def\@removefromreset#1#2{{%
+ \expandafter\let\csname c@#1\endcsname\@removefromreset
+ \def\@elt##1{%
+ \expandafter\ifx\csname c@##1\endcsname\@removefromreset
+ \else
+ \noexpand\@elt{##1}%
+ \fi}%
+ \expandafter\xdef\csname cl@#2\endcsname{%
+ \csname cl@#2\endcsname}}}
+
+
diff --git a/Master/texmf-dist/tex/latex/carlisle/scalefnt.sty b/Master/texmf-dist/tex/latex/carlisle/scalefnt.sty
new file mode 100644
index 00000000000..4ab5d3e5a50
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/carlisle/scalefnt.sty
@@ -0,0 +1,44 @@
+
+% scalefnt package
+%%%%%%%%%%%%%%%%%%
+
+% Copyright 1997 David carlisle
+% This file may be distributed under the terms of the LPPL.
+% See 00readme.txt for details.
+
+% 1997/09/28 David Carlisle
+
+% This package defines a command \scalefont. After \scalefont{.75} then
+% the current font and baselineskip will be scaled to 75% of their
+% original size. Any scale factor may be specified.
+
+% If you are using traditional fd files based on bitmap font sizes,
+% LaTeX's font system will round the requested font size to the nearest
+% available size. If you are using scalable fonts, such as the psnfss
+% or type1cm packages, then the requested font size will be used exactly.
+
+% Almost all of the code here is in fact dealing with scaling the stretch
+% components of \baselineskip. This is a bit odd as 99% of documents
+% have a rigid \baselineskip, however the technique may be useful in
+% some contexts, and is left here as an example.
+
+\DeclareRobustCommand\scalefont[1]{%
+ \dimen@\z@
+ \dimen@ii\z@
+ \afterassignment\@scalefont
+ \@tempdima\the\baselineskip\relax\relax\relax\relax\relax
+ \skip@#1\@tempdima\@plus#1\dimen@\@minus#1\dimen@ii
+ \dimen@\f@size\p@
+ \dimen@#1\dimen@
+ \fontsize\dimen@\skip@\selectfont}
+
+\def\@scalefont#1#2#3#4#5{%
+ \if#1p%
+ \afterassignment\@scalefont\dimen@#5%
+ \else
+ \if#1m%
+ \dimen@ii
+ \fi
+ \fi}
+
+
diff --git a/Master/texmf-dist/tex/latex/carlisle/slashed.sty b/Master/texmf-dist/tex/latex/carlisle/slashed.sty
new file mode 100644
index 00000000000..9c39b591bbe
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/carlisle/slashed.sty
@@ -0,0 +1,171 @@
+%% slashed.sty: Produce the `Feynman slashed character' notation
+%% beloved of High Energy Physicists.
+%%
+%% This is a standard LaTeX package, but as many physicists perversely
+%% use use a plain TeX rather than a format designed for document
+%% production, it runs under plain as well.
+%% (Just say \input slashed.sty in that case
+%% rather than \usepackage{slashed}).
+
+%% This began life as me commenting in comp.text.tex
+%% on some code posted by Ben Bullock, which was originally written by
+%% Mike Wade.
+%% In the ensuing newsgroup thread, P? Parker, Axel Thimm
+%% and Maurizio Loreti and others made helpful comments
+%%
+%% David Carlisle
+%%
+%% Copyright 1997 David carlisle
+%% This file may be distributed under the terms of the LPPL.
+%% See 00readme.txt for details.
+
+\ifx\ProvidesPackage\undefined
+ \catcode`\@=11
+\else
+\ProvidesPackage{slashed}
+ [1997/01/16 v0.01 Feynman Slashed Character Notation (DPC)]
+\fi
+
+
+%% Usage \slashed{p} \slashed{D} etc.
+
+%% As \slashed may not put the / quite where you want, you can
+%% customise it for certain arguments. After
+%%
+%% \declareslashed{}{/}{.1}{0}{D}
+%%
+%% Then any later use of \slashed{D} will have the / moved
+%% to the right of centre by 0.1 of the width of `D'.
+%%
+%% The arguments to \declareslashed are:
+%%
+%% #1 A command to apply to the constructed character (for instance
+%% \mathbin to re-make it into a binary relation). (It seems that
+%% For the intended use as the Feynman notation it will only
+%% ever be applied to `ordinary' symbols, and so #1 will be empty
+%% but someone might find use for it.
+%%
+%% #2 The symbol to overprint. Normally / but you can try \not or |
+%% (or \big/ or whatever) to get different effects.
+%%
+%% #3 The overprinted symbol is moved to the right by this fraction
+%% of the width of the symbol #5.
+%%
+%% #4 The overprinted symbol is moved up by this fraction
+%% of the width of the symbol #5.
+%% (Note width not height, so #3 and #4 use the same units)
+%%
+%% #5 The symbol to which these customisations applies.
+
+
+%% The basic guts of the macro just measures the specified character
+%% and a / and arranges to put the centre of the / over the centre
+%% of the character. (This, barring some TeX quibbles, was what the
+%% orignally posted macro did.)
+
+%% The first refinement is to call the macro via \mathpalette so
+%% that it works correctly in subscripts, fractions etc.
+
+%% Remaining problems.
+
+%% The macro puts the middle of the slash through the
+%% middle of the symbol, where `middle' is defined as the centre of the
+%% bounding rectangles. However the eye doesn't necessarily work that
+%% way, for instance $\sla D$ looks to have the slash too far to the
+%% left to me. It is virtually impossible to do such micro positioning
+%% automatically as it depends on the shape of the letters and the
+%% personal judgement of the viewer, and \TeX\ does not have either of
+%% these pieces of information. However one could do something like
+%% the following which allows you to predefine offsets for certain
+%% letters. The offsets are done relative to the size of the symbol
+%% so they work OK in superscrips (or within the scope of a La\TeX\
+%% size change).
+
+%% Some characters just don't work with /. The computer modern math
+%% italic f and / have about the same slope and whatever you do it
+%% just looks horrible. So allow the use of an alternative character
+%% (eg \not, which has a slightly different slope).
+
+% #1 normally /
+% #2 right shift
+% #3 up shift
+% #4 \displaystyle etc (added by \mathpalette)
+% #5 symbol.
+\def\sla@#1#2#3#4#5{{%
+ \setbox\z@\hbox{$\m@th#4#5$}%
+ \setbox\tw@\hbox{$\m@th#4#1$}%
+ \dimen4\wd\ifdim\wd\z@<\wd\tw@\tw@\else\z@\fi
+ \dimen@\ht\tw@
+ \advance\dimen@-\dp\tw@
+ \advance\dimen@-\ht\z@
+ \advance\dimen@\dp\z@
+ \divide\dimen@\tw@
+ \advance\dimen@-#3\ht\tw@
+ \advance\dimen@-#3\dp\tw@
+ \dimen@ii#2\wd\z@
+ \raise-\dimen@\hbox to\dimen4{%
+ \hss\kern\dimen@ii\box\tw@\kern-\dimen@ii\hss}%
+ \llap{\hbox to\dimen4{\hss\box\z@\hss}}}}
+
+% Use offsets of 0 unless a command has been pre-defined
+% with different offsets for this symbol.
+\def\slashed#1{%
+ \expandafter\ifx\csname sla@\string#1\endcsname\relax
+ {\mathpalette{\sla@/00}{#1}}%
+ \else
+ \csname sla@\string#1\endcsname
+ \fi}
+
+% #1 normally empty, can be \mathop etc
+% #2 normally /
+% #3 right shift
+% #4 up shift
+% #5 symbol
+\def\declareslashed#1#2#3#4#5{%
+ \expandafter\def\csname sla@\string#5\endcsname{%
+ #1{\mathpalette{\sla@{#2}{#3}{#4}}{#5}}}}
+
+\catcode`\@=12
+
+%% Now some fine tuning, if you are not using Computer Modern
+%% This is almost certainly wrong. You may think some of these are
+%% wrong anyway.
+
+
+\declareslashed{}{/}{.08}{0}{D}
+\declareslashed{}{/}{.1}{0}{A}
+\declareslashed{}{/}{0}{-.05}{k}
+\declareslashed{}{/}{.1}{0}{\partial}
+\declareslashed{}{\not}{-.6}{0}{f}
+
+\endinput
+
+================================================================
+% test file (plain TeX)
+\input slashed.sty
+
+
+$
+\slashed{D} \slashed{p} \slashed{k} \slashed{r} \slashed{A}
+ \slashed{f}
+\slashed{U} \slashed{\partial}
+$
+
+\bye
+
+================================================================
+% and same again as LaTeX
+
+\documentclass{article}
+\usepackage{slashed}
+
+\begin{document}
+
+$
+\slashed{D} \slashed{p} \slashed{k} \slashed{r} \slashed{A}
+ \slashed{f}
+\slashed{U} \slashed{\partial}
+$
+\end{document}
+
+
diff --git a/Master/texmf-dist/tex/latex/carlisle/typehtml.sty b/Master/texmf-dist/tex/latex/carlisle/typehtml.sty
new file mode 100644
index 00000000000..c07cf79269d
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/carlisle/typehtml.sty
@@ -0,0 +1,899 @@
+%%
+%% This is file `typehtml.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% typehtml.dtx (with options: `package')
+%%
+%% IMPORTANT NOTICE:
+%%
+%% For the copyright see the source file.
+%%
+%% Any modified versions of this file must be renamed
+%% with new filenames distinct from typehtml.sty.
+%%
+%% For distribution of the original source see the terms
+%% for copying and modification in the file typehtml.dtx.
+%%
+%% This generated file may be distributed as long as the
+%% original source files, as listed above, are part of the
+%% same distribution. (The sources need not necessarily be
+%% in the same archive or directory.)
+%%
+%% Source File `typehtml.dtx'.
+%% Copyright (C) 1996 1997 David Carlisle
+%% This file may be distributed under the terms of the LPPL.
+%% See 00readme.txt for details.
+%%
+\NeedsTeXFormat{LaTeX2e}[1995/06/01]
+\ProvidesPackage{typehtml}
+ [1997/11/19 v0.12 HTML printer (DPC)]
+\DeclareOption{html2}{\let\HTML@two@stop\endinput}
+\DeclareOption{netscape}
+ {\def\HTML@not#1{\SGML@w{<#1> is not valid HTML}}}
+\DeclareOption{html3}{\let\HTML@two@stop\relax}
+\DeclareOption{nohyperref}{%
+ \let\HTML@doname\@secondoftwo
+ \def\HTML@dosrc#1#2{\emph{#2}}}
+\DeclareOption{ftnhyperref}{%
+ \let\HTML@doname\@secondoftwo
+ \def\HTML@dosrc#1#2{\emph{#2}\footnote{HREF: \texttt{#1}}}}
+\DeclareOption{hyperref}{%
+ \AtBeginDocument{%
+ \providecommand\href[2]{\special{html:<A href="#1">}%
+ #2\special{html:</A>}}%
+ \providecommand\hypertarget[2]{\special{html:<A name="#1">}%
+ #2\special{html:</A>}}%
+ \let\HTML@doname\hypertarget
+ \let\HTML@dosrc\href}}
+\DeclareOption{dviwindo}{%
+ \def\HTML@dosrc#1#2{{%
+ \leavevmode\sbox\z@{#2}\count@\ht\z@\@tempcnta\wd\z@
+ \if\string##\@car#1\@nil
+ \special{button: \the\@tempcnta\space\the\count@\space
+ "\@gobble#1"}%
+ \else
+ \special{button: \the\@tempcnta\space\the\count@\space
+ launch: typehtml "#1"}
+ \fi
+ \special{color push}\special{color rgb 0 1 0}%
+ \unhbox\z@
+ \special{color pop}}}%
+ \def\HTML@doname#1#2{\leavevmode\special{mark: "#1"}#2}}%
+\DeclareOption{imgalt}{}
+\DeclareOption{imggif}{\SGML@w{img gif support not done yet}}
+\DeclareOption{imgps}{\SGML@w{img ps support not done yet}}
+\DeclareOption{smartquotedbl}{%
+ \def\SGMLquotedbla{%
+ \textquotedblleft\global\let\SGMLquotedbl\SGMLquotedblb}
+ \def\SGMLquotedblb{%
+ \textquotedblright\global\let\SGMLquotedbl\SGMLquotedbla}
+ \let\SGMLquotedbl\SGMLquotedbla
+ \let\SGML@savedeverypar\everypar
+ \newtoks\everypar
+ \SGML@savedeverypar{%
+ \global\let\SGMLquotedbl\SGMLquotedbla\the\everypar}}
+\DeclareOption{straightquotedbl}{%
+ \DeclareTextCommandDefault{\textquotedbl}{{\ttfamily\char`\"}}%
+ \let\SGMLquotedbl\textquotedbl}
+\DeclareOption{chapter}{%
+ \def\HTML@headings{%
+ \chapter\section\subsection%
+ \subsubsection\paragraph\subparagraph}}
+\DeclareOption{chapter*}{%
+ \def\HTML@headings{%
+ {\chapter*}{\section*}{\subsection*}%
+ {\subsubsection*}{\paragraph*}{\subparagraph*}}}
+\DeclareOption{section}{%
+ \def\HTML@headings{%
+ \section\subsection%
+ \subsubsection\paragraph\subparagraph\endgraf}}
+\DeclareOption{section*}{%
+ \def\HTML@headings{%
+ {\section*}{\subsection*}%
+ {\subsubsection*}{\paragraph*}{\subparagraph*}\endgraf}}
+\DeclareOption{subsection}{%
+ \def\HTML@headings{%
+ \subsection%
+ \subsubsection\paragraph\subparagraph\endgraf\endgraf}}
+\DeclareOption{subsection*}{%
+ \def\HTML@headings{%
+ {\subsection*}%
+ {\subsubsection*}{\paragraph*}{\subparagraph*}\endgraf\endgraf}}
+\DeclareOption{bigint}{%
+ \let\HTML@int\int
+ \AtEndOfPackage{\RequirePackage{exscale}}}
+\ExecuteOptions{section*,imgalt,html2,nohyperref,straightquotedbl}
+\ProcessOptions
+\begingroup
+\catcode`\<=\active
+\catcode`\>=\active
+\catcode`\&=\active
+\catcode`\$=\active
+\catcode`\"=\active
+\catcode`\^=\active
+\catcode`\_=\active
+\catcode`\;=\active
+\catcode`\A=\active
+\catcode`\B=\active
+\catcode`\C=\active
+\catcode`\D=\active
+\uccode`\A=`\{%
+\uccode`\B=`\}%
+\uccode`\C=`\|%
+\uccode`\D=`\\%
+\uppercase{\endgroup
+\def\SGMLent@@#1;{\csname SGML@E@#1\endcsname}
+\def\SGML@def@active#1>{%
+ \expandafter\def\csname SGML@#1\endcsname}
+\def\dohtml{%
+ \begingroup
+ \ifx;\@undefined\expandafter\let\expandafter;\string;\fi
+ \ifx>\@undefined\expandafter\let\expandafter>\string>\fi
+ \catcode`\<=\active
+ \catcode`\>=\active
+ \catcode`\&=\active
+ \catcode`\{=\active
+ \catcode`\}=\active
+ \catcode`\$=\active
+ \catcode`\"=\active
+ \catcode`\^=\active
+ \catcode`\_=\active
+ \catcode`\\=\active
+ \catcode`\|=\active
+ \catcode\endlinechar=10
+ \catcode`\%=12
+ \catcode`\#=12
+ \catcode`\;=\active
+ \def\verbatim@nolig@list{\do\`\do\,\do\'\do\-}
+ \def<{\SGMLopen}%
+ \def&{\SGMLent}%
+ \let^\textasciicircum
+ \let~\textasciitilde
+ \def_{\_}%
+ \let$\$%
+ \def"{\SGMLquotedbl}%
+ \def A{\{}%
+ \def B{\}}%
+ \def C{\texttt{|}}%
+ \def D{\texttt{\char`\\}}%
+ \def\addcontentsline##1##2##3{%
+ {\def<{\string<}\def&{\string&}%
+ \addtocontents{##1}{\protect\dotochtml<html>}%
+ \addtocontents{##1}{\protect\contentsline{##2}{##3}{\thepage}}%
+ \addtocontents{##1}{\protect</html>}}}}
+\def\dotochtml{%
+ \dohtml
+ \catcode`\\\z@
+ \catcode`\{\@ne
+ \catcode`\}\tw@}
+\def\SGMLshortend{/}
+\def\SGMLgrab@#1<#2>{%
+ \edef\@tempd{\lowercase{\def\noexpand\@tempd{\gobblespc#2 \relax}}}%
+ \@tempd
+ \ifx\@tempd\SGMLshortend\let\@tempd\@tempc\fi
+ \ifx\@tempb\@tempd
+ \advance\@tempcnta\@ne
+ \else
+ \ifx\@tempc\@tempd
+ \advance\@tempcnta\m@ne
+ \fi
+ \fi
+ \ifnum\@tempcnta=\z@
+ \expandafter\@tempa\expandafter{\the\@temptokena#1}%
+ \else
+ \addto@hook\@temptokena{#1<#2>}%
+ \expandafter\SGMLgrab@
+ \fi}
+\def\SGMLopen#1>{%
+ \SGMLopen@#1 \@nil}
+}
+\def\htmlinput#1{\dohtml\let\@endhtml\relax\input{#1}\endgroup}
+\def\gobblespc#1 #2\relax{#1}
+\def\SGMLgrabber#1#2{%
+ \def\@tempa{#2}%
+ \@tempcnta\@ne
+ \@temptokena{}%
+ \lowercase{\def\@tempb{#1}\def\@tempc{/#1}}%
+ \SGMLgrab@}
+\begingroup
+\catcode`\"=\active
+\uppercase{\endgroup
+\def\SGMLopen@#1 #2\@nil{%
+ \toks@{}%
+ \edef\@tempa{\lowercase{\def\noexpand\SGMLelement{#1}}}\@tempa
+ \if!\@car#1\relax\@nil
+ \toks@{#1 #2}%
+ \SGML@w{Declaration ignored\MessageBreak<\the\toks@>\MessageBreak}%
+ \else
+ \if$#2$\else
+ \replacequotes#2"\@nil"%
+ \SGMLafterfi
+ \expandafter\toks@\expandafter{\expandafter}%
+ \expandafter\SGMLgetattrib\the\toks@ \@nil
+ \fi
+ \expandafter\ifx\csname SGML@\SGMLelement
+ \expandafter\endcsname\relax
+ \SGML@w{<\SGMLelement> undefined}%
+ \else
+ \csname SGML@\SGMLelement
+ \expandafter\expandafter\expandafter\endcsname
+ \fi
+ \fi}
+\def\replacequotes#1"#2"{%
+ \def\@tempb{#2}%
+ \ifx\@tempb\@nnil
+ \addto@hook\toks@{#1}%
+ \else
+ \addto@hook\toks@{#1{#2}}%
+ \expandafter\replacequotes
+ \fi}}
+\def\SGMLafterfi#1\fi{\fi#1}
+\def\SGMLgobbletofi#1\fi{\fi}
+\def\SGMLgetattrib#1 #2{%
+ \ifx\box#1\box\else
+ \SGMLgetval#1=$=\@nil
+ \def\@tempa{#2}%
+ \ifx\@tempa\@nnil
+ \expandafter\SGMLgobbletofi
+ \else
+ \expandafter\SGMLafterfi
+ \fi
+ \SGMLgetattrib#2%
+ \fi}
+\def\SGMLgetval#1=#2=#3\@nil{%
+ \ifcat$#2%
+ \lowercase{\SGML@addattrib\doimplied{#1}}%
+ \else
+ \lowercase{\SGML@addattrib{\do{#1}}}{#2}%
+ \fi}
+\def\SGML@addattrib#1#2{\addto@hook\toks@{#1{#2}}}
+\def\SGML@w{\PackageWarning{typehtml}}
+\def\SGMLdef#1{%
+ \ifcat\noexpand#1\noexpand~%
+ \expandafter\SGML@def@active
+ \else
+ \expandafter\SGML@def
+ \fi}
+\edef\@tempa{\def\noexpand\SGML@def##1\string>}\@tempa{%
+ \expandafter\def\csname SGML@#1\endcsname}
+\expandafter\def\expandafter\SGMLent\expandafter{%
+ \expandafter\protect\csname& \endcsname}
+\expandafter\def\csname& \endcsname{%
+ \futurelet\@let@token\SGMLent@}
+\def\SGMLent@{%
+ \ifx\@let@token\@sptoken
+ \&%
+ \else
+ \expandafter\SGMLent@@
+ \fi}
+\def\SGMLentity#1{%
+ \expandafter\def\csname SGML@E@#1\endcsname}
+\SGMLdef<html>{}
+\SGMLdef</html>{\@endhtml}
+\let\@endhtml\endgroup
+\SGMLdef<title>{\typeout{***TITLE***}\SGMLgrabber{title}\typeout}
+\long\def\@tempa#1#2#3#4#5#6{%
+ \SGMLdef<h1>{\SGMLgrabber{h1}{\HTMLsection{#1}}}%
+ \SGMLdef<h2>{\SGMLgrabber{h2}{\HTMLsection{#2}}}%
+ \SGMLdef<h3>{\SGMLgrabber{h3}{\HTMLsection{#3}}}%
+ \SGMLdef<h4>{\SGMLgrabber{h4}{\HTMLsection{#4}}}%
+ \SGMLdef<h5>{\SGMLgrabber{h5}{\HTMLsection{#5}}}%
+ \SGMLdef<h6>{\SGMLgrabber{h6}{\HTMLsection{#6}}}}
+\expandafter\@tempa\HTML@headings
+\def\HTMLsection#1#2{#1{\ignorespaces#2\unskip}}
+\SGMLdef<head>{}
+\SGMLdef</head>{}
+\SGMLdef<body>{}
+\SGMLdef</body>{}
+\SGMLdef<bodytext>{}
+\SGMLdef</bodytext>{}
+\SGMLdef<p>{\par}
+\SGMLdef</p>{\par}
+\SGMLdef<blockquote>{\begin{quote}}
+\SGMLdef</blockquote>{\end{quote}}
+\SGMLdef<address>{\begin{quote}}
+\SGMLdef</address>{\end{quote}}
+\SGMLdef<ul>{\begin{itemize}}
+\SGMLdef</ul>{\end{itemize}}
+\SGMLdef<ol>{\begin{enumerate}}
+\SGMLdef</ol>{\end{enumerate}}
+\SGMLdef<li>{\item}
+\SGMLdef</li>{}
+\SGMLdef<dl>{%
+ \let\do\dldo
+ \let\doimplied\dlimplied
+ \begin{description}\the\toks@}
+\SGMLdef</dl>{\end{description}}
+\def\dldo#1#2{%
+ \def\@tempa{compact}\def\@tempb{#1}%
+ \ifx\@tempa\@tempb
+ \itemsep\z@
+ \advance\@totalleftmargin-\leftmargin
+ \advance\linewidth\leftmargin
+ \itemindent-\labelsep
+ \leftmargin\z@
+ \parshape \@ne \@totalleftmargin \linewidth
+ \fi}
+\def\dlimplied#1{\dldo{#1}\relax}
+\def\itx#1{\item[#1]}
+\SGMLdef<dt>{\begin{lrbox}\z@\bfseries\let\maybeenddt\enddt}
+\SGMLdef</dt>{\maybeenddt}
+\SGMLdef<dd>{\maybeenddt}
+\SGMLdef</dd>{}
+\def\enddt{\end{lrbox}\item[\unhbox\z@]}
+\let\maybeenddt\relax
+\SGMLdef<a>{\SGMLgrabber{a}\HTML@anchor}
+\def\HTML@anchor#1{{%
+ \let\@tempa\@gobble
+ \def\_{\string_}%
+ \let\do\ado
+ \the\toks@
+ \@tempa{#1}}}
+\def\ado#1#2{%
+ \def\@tempb{name}\def\@tempc{#1}%
+ \ifx\@tempb\@tempc
+ \let\@tempa\@firstofone
+ \def\@tempa{\HTML@doname{#2}}%
+ \else
+ \def\@tempa{\HTML@dosrc{#2}}%
+ \fi}
+\SGMLdef<pre>{%
+ \par
+ \begingroup
+ \parindent\z@
+ \obeylines\verbatim@font\@noligs
+ \frenchspacing\@vobeyspaces}
+\SGMLdef</pre>{\endgroup}
+\SGMLdef<tt>{\SGMLgrabber{tt}\texttt}
+\SGMLdef<b>{\SGMLgrabber{b}\textbf}
+\SGMLdef<i>{\SGMLgrabber{i}\textit}
+\SGMLdef<em>{\SGMLgrabber{em}\emph}
+\SGMLdef<strong>{\SGMLgrabber{strong}\textbf}
+\SGMLdef<code>{\SGMLgrabber{code}\texttt}
+\SGMLdef<samp>{\SGMLgrabber{samp}\textsf}
+\SGMLdef<kbd>{\SGMLgrabber{kbd}\texttt}
+\SGMLdef<var>{\SGMLgrabber{var}\textit}
+\SGMLdef<cite>{\SGMLgrabber{cite}\textit}
+\SGMLdef<form>{\par\medskip}
+\SGMLdef</form>{\par\medskip}
+\SGMLdef<select>{%
+ \let\do\selectdo
+ \the\toks@\par
+ \begin{tabular}{|l|}%
+ \hline\@tempc\\\hline
+ \let\tabularnewline\relax
+ \ignorespaces}
+\def\selectdo#1#2{%
+ \def\@tempa{name}\def\@tempb{#1}%
+ \ifx\@tempa\@tempb\def\@tempc{#2}\fi}
+\SGMLdef</select>{\\\hline\end{tabular}}
+\SGMLdef<option>{%
+ \gdef\optionbul{\phantom{$\bullet$}}%
+ \let\do\optiondo
+ \let\doimplied\optionimplied
+ \the\toks@
+ \tabularnewline
+ \let\tabularnewline\\%
+ \optionbul\space\ignorespaces}
+\SGMLdef</option>{}
+\def\optiondo#1#2{%
+ \def\@tempa{selected}\def\@tempb{#1}%
+ \ifx\@tempa\@tempb\gdef\optionbul{$\bullet$}\fi}
+\def\optionimplied#1{%
+ \def\@tempa{selected}\def\@tempb{#1}%
+ \ifx\@tempa\@tempb\gdef\optionbul{$\bullet$}\fi}
+\SGMLdef<input>{}
+\SGMLdef<img>{{%
+ \let\do\imgdo
+ \def\@tempa{\doimage}%
+ \the\toks@
+ \@tempa}}
+\def\doimage{\textsf{[image]}}
+\def\imgdo#1{\csname img=#1\endcsname}
+\expandafter\def\csname img=align\endcsname#1{%
+ \SGML@w{align=#1 ignored}}
+\expandafter\def\csname img=src\endcsname#1{%
+ \SGML@w{src=#1 ignored}}
+\expandafter\def\csname img=height\endcsname#1{%
+ \SGML@w{height=#1 ignored}}
+\expandafter\def\csname img=alt\endcsname#1{%
+ \def\doimage{#1}}
+\SGMLdef<hr>{\par\smallskip\hrule\smallskip}
+\SGMLdef<br>{\leavevmode\\}
+\SGMLdef<xmp>{%
+ \SGML@pre
+ \def\@tempb{/xmp}%
+ \let\SGMLopen\HTML@xmptest}
+\SGMLdef<listing>{%
+ \SGML@xmp
+ \def\@tempb{/listing}}
+\SGMLdef<plaintext>{%
+ \SGML@xmp
+ \def\@tempb{/plaintext}}%
+\def\HTML@xmptest#1>{%
+ \lowercase{\def\@tempa{#1}}%
+ \ifx\@tempa\@tempb
+ \endgroup
+ \else
+ \SGMLafterfi
+ <#1>%
+ \fi}
+\SGMLentity{amp}{\&}
+\SGMLentity{lt}{\ensuremath{<}}
+\SGMLentity{gt}{\ensuremath{>}}
+\SGMLentity{aacute}{\'a}
+\SGMLentity{Aacute}\'A{}
+\SGMLentity{acirc}{\^a}
+\SGMLentity{Acirc}{\^A}
+\SGMLentity{agrave}{\`a}
+\SGMLentity{Agrave}{\`A}
+\SGMLentity{aring}{\r a}
+\SGMLentity{Aring}{\r A}
+\SGMLentity{atilde}{\~a}
+\SGMLentity{Atilde}{\~A}
+\SGMLentity{auml}{\"a}
+\SGMLentity{Auml}{\"A}
+\SGMLentity{aelig}{\ae}
+\SGMLentity{AElig}{\AE}
+\SGMLentity{ccedil}{\c c}
+\SGMLentity{Ccedil}{\c C}
+\SGMLentity{eth}{\dh}
+\SGMLentity{ETH}{\DH}
+\SGMLentity{eacute}{\'e}
+\SGMLentity{Eacute}{\`E}
+\SGMLentity{ecirc}{\^e}
+\SGMLentity{Ecirc}{\^E}
+\SGMLentity{egrave}{\`e}
+\SGMLentity{Egrave}{\`E}
+\SGMLentity{euml}{\"e}
+\SGMLentity{Euml}{\"E}
+\SGMLentity{iacute}{\'\i}
+\SGMLentity{Iacute}{\'I}
+\SGMLentity{icirc}{\^\i}
+\SGMLentity{Icirc}{\^I}
+\SGMLentity{igrave}{\`\i}
+\SGMLentity{Igrave}{\`I}
+\SGMLentity{iuml}{\"\i}
+\SGMLentity{Iuml}{\"I}
+\SGMLentity{ntilde}{\~n}
+\SGMLentity{Ntilde}{\~N}
+\SGMLentity{oacute}{\'o}
+\SGMLentity{Oacute}{\'O}
+\SGMLentity{ocirc}{\^o}
+\SGMLentity{Ocirc}{\^O}
+\SGMLentity{ograve}{\`o}
+\SGMLentity{Ograve}{\`O}
+\SGMLentity{oslash}{\oe}
+\SGMLentity{Oslash}{\OE}
+\SGMLentity{otilde}{\~o}
+\SGMLentity{Otilde}{\~O}
+\SGMLentity{ouml}{\"o}
+\SGMLentity{Ouml}{\"O}
+\SGMLentity{szlig}{\ss}
+\SGMLentity{thorn}{\th}
+\SGMLentity{THORN}{\TH}
+\SGMLentity{uacute}{\'u}
+\SGMLentity{Uacute}{\'U}
+\SGMLentity{ucirc}{\^u}
+\SGMLentity{Ucirc}{\^U}
+\SGMLentity{ugrave}{\`u}
+\SGMLentity{Ugrave}{\`U}
+\SGMLentity{uuml}{\"u}
+\SGMLentity{Uuml}{\"U}
+\SGMLentity{yacute}{\'y}
+\SGMLentity{Yacute}{\'Y}
+\SGMLentity{yuml}{\"y}
+\ifx\HTML@not\@undefined\else
+\SGMLdef<center>{\HTML@not{center}\begin{center}}
+\SGMLdef</center>{\end{center}}
+\SGMLdef<blink>{\SGMLgrabber{blink}\textbf}
+\SGMLdef<font>{\HTML@not{font}\begingroup
+ \let\do\fontdo\the\toks@}
+\SGMLdef</font>{\endgroup}
+\def\fontdo#1#2{%
+ \def\@tempa{size}\def\@tempb{#1}%
+ \ifx\@tempa\@tempb
+ \font@switch#2\relax\@nil
+ \fi}
+\toks@\expandafter{\set@fontsize{#1}{#2}{#3}}
+\edef\@tempa{%
+ \def\noexpand\set@fontsize##1##2##3{\the\toks@\noexpand\set@fontnum}}
+\@tempa
+\def\set@fontnum{\dimen@\f@size\p@
+ \dimen@\mul@ptsize\dimen@
+ \count@\dimen@ \divide\count@\p@
+ \advance\count@ -5\relax
+ \edef\@fontnum{\number\count@}}
+\def\mul@ptsize{}%
+\def\@fontnum{5}
+\ifcase 0\@ptsize\relax
+ \global\let\mul@ptsize\@empty% case 0, ptsize = 10
+ \or\gdef\mul@ptsize{.9091}% case 1, ptsize = 11
+ \else\gdef\mul@ptsize{.8333}% case 2, ptsize = 12
+\fi
+\def\font@switch#1#2\@nil{\count@\@fontnum\relax
+ \ifx +#1\advance\else\ifx -#1\advance\fi\fi
+ \count@#1#2\relax
+ \ifcase\count@ \tiny\or \tiny\or \scriptsize
+ \or\footnotesize \or\small \or\normalsize \or\large
+ \or\Large \or\LARGE \or\huge \else\Huge \fi}
+\fi
+\HTML@two@stop
+\SGML@w{HTML3 support not finished yet}
+\SGMLdef<math>{\SGMLgrabber{math}\domath}
+\SGMLdef<sup>{^\bgroup\HTMLscriptmap}
+\SGMLdef</sup>{\egroup}
+\SGMLdef<sub>{_\bgroup\HTMLscriptmap}
+\SGMLdef</sub>{\egroup}
+\SGMLdef<box>{\SGMLgrabber{box}\dobox}
+\begingroup
+\catcode`\<=\active
+\catcode`\>=\active
+\catcode`\&=\active
+\catcode`\_=\active
+\catcode`\^=\active
+\catcode`\"=\active
+\gdef\domath#1{%
+ {{\def&{\expandafter\expandafter\expandafter\noexpand\SGMLent@@}%
+ \let<\relax\let>\relax\let_\relax\let^\relax\let"\relax
+ \def\{{<box>}\def\}{</box>}%
+ \xdef\@gtempa{#1}}%
+ \let\do\mathdo
+ \let\doimplied\mathimplied
+ \the\toks@
+ \[%
+ \m@th\nulldelimiterspace\z@
+ \def^{<sup>}%
+ \def_{<sub>}%
+ \@gtempa\]}}
+\gdef\HTMLscriptmap{%
+ \def^{</sup>}%
+ \def_{</sub>}}
+\gdef\dobox#1{%
+ {\let\do\boxdo
+ \let\bigstrut\relax
+ \the\toks@
+ \def^{<sup>}%
+ \def_{<sub>}%
+ \lookleft@#1<left>\@nil}}
+\gdef\lookleft@#1<left>#2\@nil{%
+ \if$#2$%
+ {\left.\bgroup#1\mayberight}%
+ \else
+ \lookbox@#1<box>\@nil#2\@nil
+ \fi}
+\gdef\lookbox@#1<box>#2\@nil#3<left>\@nil{%
+ \if$#2$%
+ {\maybeleft#1\@nil#3\mayberight}
+ \else
+ {#1 \boxtofront#2 <left> #3}%
+ \fi}
+\gdef\boxtofront#1<box>{<box>#1}
+\endgroup
+\def\mathdo#1#2{%
+ \def\@tempa{class-chem}\def\@tempb{#1-#2}%
+ \ifx\@tempa\@tempb
+ \everymath{\fam\z@}\everydisplay{\fam\z@}%
+ \fi}
+\def\mathimplied#1{%
+ \def\@tempa{box}\def\@tempb{#1}%
+ \ifx\@tempa\@tempb
+ \def\[{\center\setbox\z@\hbox\bgroup$\displaystyle}%
+ \def\]{$\egroup\fbox{\box\z@}\endcenter}%
+ \fi}
+\def\boxdo#1#2{%
+ \def\@tempa{size}\def\@tempb{#1}%
+ \ifx\@tempa\@tempb
+ \def\@tempb{#2}
+ \def\@tempa{normal}\ifx\@tempa\@tempb\def\@tempc{1}\fi
+ \def\@tempa{medium}\ifx\@tempa\@tempb\def\@tempc{2}\fi
+ \def\@tempa{large}\ifx\@tempa\@tempb\def\@tempc{3}\fi
+ \def\@tempa{huge}\ifx\@tempa\@tempb\def\@tempc{4}\fi
+ \edef\bigstrut{\vrule\@height\@tempc\ht\strutbox\@width\z@}
+ \fi}
+\SGMLdef<left>{\left.\bgroup}
+\def\mayberight{\egroup\bigstrut\right.}
+\def\maybeleft#1#2\@nil{%
+ \in@{#1}{()[]\SGML@E@rbrace\SGML@E@lbrace}%
+ \ifin@
+ \left#1\bgroup#2%
+ \else
+ \let\SGML@E@int\HTML@bigint
+ #1#2\left.\bgroup\let\SGML@E@int\int
+ \fi}
+\def\righttest#1{%
+ \in@{#1}{()[]\SGML@E@rbrace\SGML@E@lbrace}%
+ \ifin@
+ \right#1\let\mayberight\relax
+ \else
+ \right.\let\mayberight\relax\expandafter#1%
+ \fi}
+\ifx\HTML@int\@undefined
+\let\HTML@bigint\int
+\else
+\def\HTML@int{\int^{\box\tw@}_{\box4}}
+\def\HTML@bigint#1\left.\bgroup{%
+ \def\@tempa{#1}%
+ \setbox\z@\hbox\bgroup
+ \aftergroup\HTMLafterbigint$\displaystyle\bgroup
+ \aftergroup$\aftergroup\egroup}
+\def\HTMLafterbigint{%
+ \dimen@.5\ht\z@
+ \advance\dimen@.5\dp\z@
+ {\SGMLdef<sup>{\setbox\tw@\hbox\bgroup\HTMLscriptmap$\scriptstyle}%
+ \SGMLdef<sub>{\setbox4\hbox\bgroup\HTMLscriptmap$\scriptstyle}%
+ \SGMLdef</sup>{$\egroup}%
+ \SGMLdef</sub>{$\egroup}%
+ \setbox\tw@\box\voidb@x
+ \setbox4\box\voidb@x
+ \@tempa
+ \ifdim\dimen@>\f@size\p@
+ \mathop{\hbox{\DeclareFixedFont\@tempa{OMX}{cmex}{m}{n}\dimen@
+ $\displaystyle\textfont\thr@@\@tempa\HTML@int$}}%
+ \else
+ \HTML@int
+ \fi
+ }\left.\box\z@}
+\fi
+\SGMLdef<over>{\over}
+\SGMLdef<atop>{\atop}
+\SGMLdef<choose>{\choose}
+\SGMLdef<right>{\egroup\bigstrut\righttest}
+\SGMLdef<above>{\SGMLgrabber{above}%
+ {\let\@tempc\overlineop
+ \let\do\abovedo
+ \the\toks@
+ \@tempc}}
+\SGMLdef<below>{\SGMLgrabber{below}%
+ {\let\@tempc\underlineop
+ \let\do\abovedo
+ \the\toks@
+ \@tempc}}
+\def\overlineop#1{\mathop{\overline{#1}}}
+\def\underlineop#1{\mathop{\underline{#1}}}
+\def\abovedo#1#2{%
+ \def\@tempa{sym}\def\@tempb{#1}%
+ \ifx\@tempa\@tempb\def\@tempc{\csname#2\endcsname}\fi}
+\SGMLdef<vec>{\SGMLgrabber{vec}\vec}
+\SGMLdef<bar>{\SGMLgrabber{bar}\bar}
+\SGMLdef<dot>{\SGMLgrabber{dot}\dot}
+\SGMLdef<ddot>{\SGMLgrabber{ddot}\ddot}
+\SGMLdef<hat>{\SGMLgrabber{hat}\hat}
+\SGMLdef<tilde>{\SGMLgrabber{tilde}\tilde}
+\SGMLdef<t>{\SGMLgrabber{t}\mathrm}
+\SGMLdef<bt>{\SGMLgrabber{bt}\mathbf}
+\SGMLdef<text>{\SGMLgrabber{text}\textnormal}%%%%% not in the dtd????
+\SGMLdef<root>{\rootfudge}
+\def\rootfudge#1{%
+ \setbox\rootbox\hbox\bgroup$\m@th\scriptscriptstyle\bgroup#1}
+\SGMLdef<of>{\egroup$\egroup\SGMLgrabber{root}\offudge}
+\SGMLdef</of>{}
+\def\offudge#1{\mathpalette\r@@t{#1}}
+\SGMLdef<sqrt>{\SGMLgrabber{sqrt}\sqrt}
+\newcount\HTMLrow
+\newcount\HTMLcol
+\newcount\HTMLrowspan
+\newcount\HTMLcolspan
+\SGMLdef<array>{{\ifnum`}=0\fi
+ \let\do\arraydo
+ \let\doimplied\arrayimplied
+ \let\HTMLal.%
+ \let\HTMLar.%
+ \global\HTMLrow\z@
+ \let\HTMLabox\vcenter
+ \the\toks@
+ \setbox\z@\vbox\bgroup\halign\bgroup
+ \strut\span\HTMLacolspec\cr\nocr}
+\def\HTMLacolspec{##&&##}
+
+\def\HTMLamakepream#1{%
+ \let\HTMLacolspec\@empty
+ \let\@sharp\relax
+ \lowercase{\@tfor\@tempc:=#1}\do{%
+ \if\@tempc l%
+ \edef\HTMLacolspec{\HTMLacolspec\@sharp\hfill&}%
+ \else
+ \if\@tempc c%
+ \edef\HTMLacolspec{\HTMLacolspec\hfill\@sharp\hfill&}%
+ \else
+ \if\@tempc r%
+ \edef\HTMLacolspec{\HTMLacolspec\hfill\@sharp&}%
+ \else
+ \if\@tempc +%
+ \edef\HTMLacolspec{\HTMLacolspec$+$}%
+ \else
+ \if\@tempc -%
+ \edef\HTMLacolspec{\HTMLacolspec$-$}%
+ \else
+ \if\@tempc =%
+ \edef\HTMLacolspec{\HTMLacolspec$=$}%
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi}%
+ \def\@sharp{########}%
+ \edef\HTMLacolspec{\HTMLacolspec&\@sharp}}
+\SGMLdef</array>{\HTMLendarray}
+\let\HTMLcr\cr
+\def\HTMLendarray{%
+ \endi\crcr\egroup\egroup
+ \ifx\HTMLabox\vtop
+ \setbox\z@\vtop{\unvbox\z@}%
+ \else
+ \ifx\HTMLabox\vcenter
+ \dimen@\ht\z@
+ \advance\dimen@\dp\z@
+ \divide\dimen@\tw@
+ \advance\dimen@-\ht\z@
+ \setbox\z@\hbox{\raise\dimen@\box\z@}%
+ \fi
+ \fi
+ \dimen@=\ht\z@
+ \setbox\z@
+\hbox{$\left\HTMLal\kern-1em\vcenter{\box\z@}\kern-1em\right\HTMLar$}%
+ \advance\dimen@-\ht\z@
+ \raise\dimen@\box\z@
+ \ifnum`{=0\fi}}
+\def\HTMLendarraylabels{%
+ \endi\crcr\strut\cr\egroup\egroup
+ \setbox2=\vsplit\z@ to \baselineskip
+ \setbox\z@\vbox{\unvbox\z@\global\setbox\@ne\lastbox}%
+ \setbox4\hbox{\unhbox\@ne\unskip\global\setbox\@ne\lastbox}%
+ \vcenter{%
+ \box2
+ \hbox{$\kern\wd\@ne
+ \left\HTMLal\kern-\wd\@ne
+ \vcenter{\box\z@}%
+ \right\HTMLar$}}%
+ \ifnum`{=0\fi}}
+\def\nocr{\relax\iffalse{\fi\let\HTMLcr\relax\iffalse}\fi}
+\SGMLdef<row>{%
+ \endi\HTMLcr
+ \global\advance\HTMLrow\@ne
+ \global\HTMLcol\z@}
+\SGMLdef</row>{}
+\SGMLdef<item>{%
+ \let\do\itemdo
+ \gdef\@gtempa{\global\advance\HTMLcol\@ne}%
+ \gdef\@gtempb{}%
+ \gdef\@gtempc{}%
+ \global\HTMLcolspan\@ne
+ \the\toks@
+ \endi%
+ \@gtempc
+ \@gtempa
+ \spanifneeded
+ \@gtempb
+ \setbox\z@\hbox\bgroup$%
+ \def\endi{\unskip$\egroup%
+ \quad\HTMLaleft\box\z@\HTMLaright\quad&}%
+ \ignorespaces}
+\def\spanifneeded{%
+ \edef\@tempa{\noexpand\in@{,\the\HTMLrow/\the\HTMLcol,}{\spanitems}}%
+ \@tempa
+ \ifin@
+ \@firstofone{&}\global\advance\HTMLcol\@ne
+ \expandafter\spanifneeded
+ \fi}
+\SGMLdef</item>{}
+\let\HTMLaleft\hfil
+\let\HTMLaright\hfil
+\let\endi\relax
+\def\arraydo#1#2{%
+ \def\@tempa{#1}\def\@tempb{#2}%
+ \def\@tempc{align}%
+ \ifx\@tempa\@tempc
+ \def\@tempc{top}%
+ \ifx\@tempb\@tempc
+ \let\HTMLabox\vtop
+ \else
+ \def\@tempc{bottom}%
+ \ifx\@tempb\@tempc
+ \let\HTMLabox\vbox
+ \fi
+ \fi
+ \else
+ \def\@tempc{ldelim}%
+ \ifx\@tempa\@tempc
+ \let\HTMLal\@tempb
+ \else
+ \def\@tempc{rdelim}%
+ \ifx\@tempa\@tempc
+ \let\HTMLar\@tempb
+ \else
+ \def\@tempc{labels}%
+ \ifx\@tempa\@tempc
+ \let\HTMLendarray\HTMLendarraylabels
+ \else
+ \def\@tempc{colspec}%
+ \ifx\@tempa\@tempc
+ \HTMLamakepream{#2}%
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi}
+\def\arrayimplied#1{%
+ \def\@tempa{labels}\def\@tempb{#1}%
+ \ifx\@tempa\@tempb
+ \let\HTMLendarray\HTMLendarraylabels
+ \fi}
+\def\itemdo#1#2{%
+ \def\@tempa{#1}\def\@tempb{#2}%
+ \def\@tempc{colspan}%
+ \ifx\@tempa\@tempc
+ \global\HTMLcolspan#2\relax
+ \gdef\@gtempa{\@multispan#2\relax\global\advance\HTMLcol#2\relax}%
+ \else
+ \def\@tempc{align}%
+ \ifx\@tempa\@tempc
+ \def\@tempc{left}%
+ \ifx\@tempb\@tempc
+ \gdef\@gtempb{\let\HTMLaleft\relax}%
+ \else
+ \def\@tempc{right}%
+ \ifx\@tempb\@tempc
+ \gdef\@gtempb{\let\HTMLaright\relax}%
+ \fi
+ \fi
+ \else
+ \def\@tempc{rowspan}%
+ \ifx\@tempa\@tempc
+ \global\HTMLrowspan#2\relax
+ \gdef\@gtempc{%
+ \@tempcnta=\HTMLrow
+ \advance\@tempcnta\HTMLrowspan
+ \loop
+ \@tempcntb=\HTMLcol
+ \advance\@tempcntb\HTMLcolspan
+ \advance\@tempcnta\m@ne
+ \ifnum\@tempcnta>\HTMLrow
+ {\loop
+ \xdef\spanitems{%
+ \spanitems\the\@tempcnta/\the\@tempcntb,}%
+ \advance\@tempcntb\m@ne
+ \ifnum\@tempcntb>\HTMLcol
+ \repeat}%
+ \repeat}%
+ \fi
+ \fi
+ \fi}
+\def\spanitems{,}
+\SGMLentity{thinsp}{\,}
+\SGMLentity{emsp}{\quad}
+\SGMLentity{alpha}{\alpha}
+\SGMLentity{beta}{\beta}
+\SGMLentity{gamma}{\gamma}
+\SGMLentity{Gamma}{\Gamma}
+\SGMLentity{int}{\int}
+\SGMLentity{sum}{\sum}
+\SGMLentity{lbrace}{\lbrace}
+\SGMLentity{rbrace}{\rbrace}
+\SGMLentity{times}{\times}
+\SGMLentity{cup}{\cup}
+\SGMLentity{cap}{\cap}
+\SGMLentity{vee}{\vee}
+\SGMLentity{wedge}{\wedge}
+\SGMLentity{infty}{\infty}
+\SGMLentity{oplus}{\oplus}
+\SGMLentity{ominus}{\ominus}
+\SGMLentity{otimes}{\otimes}
+\SGMLentity{sin}{\sin}
+\SGMLentity{cos}{\cos}
+\SGMLentity{tan}{\tan}
+\SGMLdef<table>{\begin{table}[htp]\centering\begin{tabular}{*{10}c}}
+\SGMLdef</table>{\end{tabular}\end{table}}
+\SGMLdef<tr>{\ifhmode\expandafter\\\fi\relax}
+\SGMLdef</tr>{\\\relax}
+\SGMLdef<td>{\ifvmode\else\expandafter\hiddenamp\fi}
+\def\hiddenamp{&}
+\SGMLdef</td>{}
+\SGMLdef<caption>{\end{tabular}\begingroup\bfseries}
+\SGMLdef</caption>{\endgroup\par\smallskip\begin{tabular}{*{10}{c}}}
+\endinput
+%%
+%% End of file `typehtml.sty'.