From 1eac51abebfe200d850284bf921c8012083ff2f9 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Thu, 12 Jan 2006 23:52:42 +0000 Subject: carlisle git-svn-id: svn://tug.org/texlive/trunk@738 c570f23f-e606-0410-a88d-b1316a301751 --- Master/texmf-dist/tex/latex/carlisle/blkarray.sty | 2218 ++++++++++++++++++++ Master/texmf-dist/tex/latex/carlisle/comma.sty | 101 + Master/texmf-dist/tex/latex/carlisle/dotlessj.sty | 106 + Master/texmf-dist/tex/latex/carlisle/fix2col.sty | 303 +++ Master/texmf-dist/tex/latex/carlisle/mylatex.ltx | 211 ++ Master/texmf-dist/tex/latex/carlisle/nopageno.sty | 27 + Master/texmf-dist/tex/latex/carlisle/plain.sty | 251 +++ Master/texmf-dist/tex/latex/carlisle/pspicture.sty | 111 + Master/texmf-dist/tex/latex/carlisle/remreset.sty | 39 + Master/texmf-dist/tex/latex/carlisle/scalefnt.sty | 44 + Master/texmf-dist/tex/latex/carlisle/slashed.sty | 171 ++ Master/texmf-dist/tex/latex/carlisle/typehtml.sty | 899 ++++++++ 12 files changed, 4481 insertions(+) create mode 100644 Master/texmf-dist/tex/latex/carlisle/blkarray.sty create mode 100644 Master/texmf-dist/tex/latex/carlisle/comma.sty create mode 100644 Master/texmf-dist/tex/latex/carlisle/dotlessj.sty create mode 100644 Master/texmf-dist/tex/latex/carlisle/fix2col.sty create mode 100644 Master/texmf-dist/tex/latex/carlisle/mylatex.ltx create mode 100644 Master/texmf-dist/tex/latex/carlisle/nopageno.sty create mode 100644 Master/texmf-dist/tex/latex/carlisle/plain.sty create mode 100644 Master/texmf-dist/tex/latex/carlisle/pspicture.sty create mode 100644 Master/texmf-dist/tex/latex/carlisle/remreset.sty create mode 100644 Master/texmf-dist/tex/latex/carlisle/scalefnt.sty create mode 100644 Master/texmf-dist/tex/latex/carlisle/slashed.sty create mode 100644 Master/texmf-dist/tex/latex/carlisle/typehtml.sty (limited to 'Master/texmf-dist/tex/latex/carlisle') 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 +% +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% \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 +% +% \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 +% + \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> + \ifnum\BAtracing>\thr@@ + \egroup\showbox\BA@first@box + \setbox\BA@first@box=\vbox\bgroup\unvbox\BA@first@box + \fi +% + \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 +% + \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 +% + \BA@get@row + \or +%<*tracing> + \ifnum\BAtracing>\tw@\typeout{1-block}\fi +% + \BA@expafter\xdef{blocktype}{\the\lastpenalty}\unpenalty + \ifnum\lastpenalty=\tw@ +%<*tracing> + \ifnum\BAtracing>\tw@\typeout{discarding 2-endblock}\fi +% + \unpenalty\unpenalty\fi + \BA@place + \or +%<*tracing> + \ifnum\BAtracing>\tw@\typeout{2-endblock}\fi +% + \BA@expafter\xdef{blocktype}{\the\lastpenalty}\unpenalty + \BA@place + \or +%<*tracing> + \ifnum\BAtracing>\tw@\typeout{3-BAnoalign}\fi +% + \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 +% + \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 +% + \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@". This command is then expanded, which may take further +% tokens as arguments. +% The expansion of "\BA@" 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 +%%% 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 +\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:}% + #2\special{html:}}% + \providecommand\hypertarget[2]{\special{html:}% + #2\special{html:}}% + \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}% + \addtocontents{##1}{\protect\contentsline{##2}{##3}{\thepage}}% + \addtocontents{##1}{\protect}}}} +\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{} +\SGMLdef{\@endhtml} +\let\@endhtml\endgroup +\SGMLdef{\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'. -- cgit v1.2.3