%% %% This is file `mdwtab.sty', %% generated with the docstrip utility. %% %% The original source files were: %% %% mdwtab.dtx (with options: `mdwtab') %% footnote.dtx (with options: `macro') %% doafter.dtx (with options: `macro') %% %% IMPORTANT NOTICE %% %% mdwtab package -- another rewrite of the tabular environment, etc. %% Copyright (c) 1996 Mark Wooding %% %% This program is free software; you can redistribute it and/or modify %% it under the terms of the GNU General Public License as published by %% the Free Software Foundation; either version 2 of the License, or %% (at your option) any later version. %% %% This program is distributed in the hope that it will be useful, %% but WITHOUT ANY WARRANTY; without even the implied warranty of %% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the %% GNU General Public License for more details. %% %% You should have received a copy of the GNU General Public License %% along with this program; if not, write to the Free Software %% Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. %% \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{mdwtab} [1996/05/16 1.05 Table typesetting with style] %% \CharacterTable %% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z %% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z %% Digits \0\1\2\3\4\5\6\7\8\9 %% Exclamation \! Double quote \" Hash (number) \# %% Dollar \$ Percent \% Ampersand \& %% Acute accent \' Left paren \( Right paren \) %% Asterisk \* Plus \+ Comma \, %% Minus \- Point \. Solidus \/ %% Colon \: Semicolon \; Less than \< %% Equals \= Greater than \> Question mark \? %% Commercial at \@ Left bracket \[ Backslash \\ %% Right bracket \] Circumflex \^ Underscore \_ %% Grave accent \` Left brace \{ Vertical bar \| %% Right brace \} Tilde \~} %% %% \newcount\tab@state \newcount\tab@columns \newtoks\tab@preamble \newtoks\tab@shortline \toksdef\tab@pretext 4 \toksdef\tab@posttext 6 \toksdef\tab@userpretext 8 \newdimen\extrarowheight \newdimen\tabextrasep \newdimen\arrayextrasep \newdimen\smarraycolsep \newdimen\smarrayextrasep \newdimen\tab@width \newdimen\col@sep \newdimen\tab@endheight \newskip\tab@leftskip \newskip\tab@rightskip \newif\iftab@firstcol \newif\iftab@initrule \newif\iftab@rule \newif\iftab@vgap \tabextrasep\z@ \arrayextrasep\jot \smarraycolsep\thr@@\p@ \smarrayextrasep\z@ \let\tab@extrasep\tabextrasep \let\tab@penalty\relax \def\@maybe@unskip{\ifhmode\hskip-\@ne\lastskip\relax\fi} \def\q@delim{\q@delim} \chardef\tab@startstate 0 \chardef\tab@loopstate 1 \chardef\tab@rulestate 1 \chardef\tab@prespcstate 2 \chardef\tab@prestate 3 \chardef\tab@colstate 4 \chardef\tab@poststate 5 \chardef\tab@postspcstate 6 \chardef\tab@limitstate 7 \def\tab@append#1#2{#1\expandafter{\the#1#2}} \def\tab@prepend#1#2{% \toks@{#2}#1\expandafter{\the\expandafter\toks@\the#1}% } \def\tab@commit{% \iftab@firstcol\else% \expandafter\tab@append\expandafter\tab@preamble% \expandafter{\tab@tabtext}% \fi% \toks@\expandafter{\tab@midtext}% \tab@preamble\expandafter{% \the\expandafter\tab@preamble% \the\expandafter\tab@pretext% \the\expandafter\tab@userpretext% \the\expandafter\toks@% \the\tab@posttext% }% \tab@firstcolfalse% \tab@pretext{}% \tab@userpretext{}% \tab@posttext{}% } \def\tab@setstate#1{% \ifnum#1=\tab@state\else% \def\@tempa{\tab@setstate@i{#1}}% \@tempa% \fi% } \def\tab@setstate@i#1{% \global\advance\tab@state\@ne% \ifnum\tab@state>\tab@limitstate% \global\tab@state\tab@loopstate% \fi% \ifnum\tab@state=\tab@prespcstate% \iftab@initrule% \tab@initrulefalse% \else% \tab@looped% \tab@commit% \tab@append\tab@shortline{&\omit}% \fi% \fi% \ifnum#1=\tab@state% \let\@tempa\relax% \else% \csname tab@default@\number\tab@state\endcsname% \fi% \@tempa% } \@namedef{tab@default@2}{% \iftab@rule% \tab@append\tab@pretext{\hskip\col@sep}% \fi% } \@namedef{tab@default@4}{% \tab@err@misscol% \tab@append\tab@pretext{\tab@bgroup\relax}% \tab@append\tab@posttext{\relax\tab@egroup\hfil}% \tab@append\tab@shortline{\hfil}% \advance\tab@columns\@ne% } \@namedef{tab@default@6}{% \tab@append\tab@posttext{\hskip\col@sep}% \tab@ruletrue% } \def\tab@extracol#1#2{\tab@extracol@i#1#2\extracolsep{}\extracolsep\end} \def\tab@extracol@i#1#2\extracolsep#3#4\extracolsep#5\end{% \ifx @#3@% \def\@tempa{#1{#2}}% \else% \def\@tempa{#1{#2\tabskip#3\relax#4}}% \fi% \@tempa% } \def\tabruletype#1{\tab@extracol\tabruletype@i{#1}}% \def\tabruletype@i#1{% \iftab@initrule% \let\tab@tok\tab@pretext% \else% \let\tab@tok\tab@posttext% \fi% \ifnum\tab@state=\tab@rulestate% \tab@append\tab@tok{\hskip\doublerulesep\begingroup#1\endgroup}% \expandafter\tab@append\expandafter\tab@shortline\expandafter{% \expandafter\hskip\expandafter\doublerulesep% \expandafter\tab@ckr\expandafter{\the\tab@columns}% {\begingroup#1\endgroup}% }% \else% \tab@setstate\tab@rulestate% \tab@append\tab@tok{\begingroup#1\endgroup}% \expandafter\tab@append\expandafter\tab@shortline\expandafter{% \expandafter\tab@ckr\expandafter{\the\tab@columns}% {\begingroup#1\endgroup}% }% \fi% \tab@ruletrue% } \def\tabspctype#1{\tab@extracol\tabspctype@i{#1}}% \def\tabspctype@i#1{% \tab@rulefalse% \ifnum\tab@state>\tab@prespcstate% \tab@setstate\tab@postspcstate% \let\tab@tok\tab@posttext% \else% \tab@setstate\tab@prespcstate% \let\tab@tok\tab@pretext% \fi% \tab@append\tab@tok{\begingroup#1\endgroup}% } \def\tabcoltype#1#2{% \ifnum\tab@state=\tab@colstate% \global\advance\tab@state\@ne% \fi% \advance\tab@columns\@ne% \tab@setstate\tab@colstate% \tab@append\tab@pretext{#1}% \tab@append\tab@posttext{#2}% \tab@append\tab@shortline{\hfil}% } \def\tabuserpretype#1{% \tab@setstate\tab@prestate% \tab@prepend\tab@userpretext{#1}% } \def\tabuserposttype#1{% \tab@setstate\tab@poststate% \tab@prepend\tab@posttext{#1}% } \def\tab@push#1#2{% \toks@{{#2}}% \expandafter\def\expandafter#1\expandafter{\the\expandafter\toks@#1}% } \def\tab@pop#1{\expandafter\def\expandafter#1\expandafter{\@gobble#1}} \def\tab@head#1{\expandafter\tab@head@i#1\relax} \def\tab@head@i#1#2\relax{#1} \def\tab@colstack{{tabular}} \def\colset{\colpop\colpush} \def\colpush{\tab@push\tab@colstack} \def\colpop{\tab@pop\tab@colstack} \def\tab@colset{\tab@head\tab@colstack} \def\tab@initread{% \global\tab@state\tab@startstate% \tab@preamble{}% \tab@shortline{}% \def\tab@tabtext{&}% \def\tab@midtext{\ignorespaces####\@maybe@unskip}% \tab@pretext{}% \tab@userpretext{}% \tab@posttext{}% \let\tab@multicol\@empty% \def\tab@startpause{\penalty\postdisplaypenalty\medskip}% \def\tab@endpause{\penalty\predisplaypenalty\medskip}% \tab@columns\z@% \let\tab@looped\relax% \tab@ruletrue% \tab@initruletrue% \tab@firstcoltrue% } \def\tab@readpreamble#1{% \tab@doreadpream{#1}% \iftab@initrule\global\tab@state\tab@prespcstate\fi% \tab@setstate\tab@rulestate% \tab@commit% } \def\tab@doreadpream#1{\tab@mkpreamble#1\q@delim} \def\tab@mkpreamble{\futurelet\@let@token\tab@mkpreamble@i} \def\tab@mkpreamble@i{% \ifx\@let@token\@sptoken% \expandafter\tab@mkpreamble@spc% \else% \expandafter\tab@mkpreamble@ii% \fi% } \def\tab@mkpreamble@ii{% \ifx\@let@token\q@delim% \def\@tempa{\let\@let@token}% \else% \ifcat\bgroup\noexpand\@let@token% \tab@err@oddgroup% \def\@tempa##1{\tab@mkpreamble}% \else% \let\@tempa\tab@mkpreamble@iii% \fi% \fi% \@tempa% } \def\tab@mkpreamble@iii#1{% \@ifundefined{\tab@colset!col.\string#1}{% \tab@err@undef{#1}\tab@mkpreamble% }{% \@nameuse{\tab@colset!col.\string#1}% }% } \@namedef{tab@mkpreamble@spc} {% \@ifundefined{\tab@colset!col. }{% \tab@mkpreamble% }{% \@nameuse{\tab@colset!col. }% }% } \def\coldef{\@ifnextchar[\coldef@i{\coldef@i[\tab@colset]}} \def\coldef@i[#1]#2#3#{\coldef@ii[#1]{#2}{#3}} \def\coldef@ii[#1]#2#3#4{% \expandafter\def\csname#1!col.\string#2\endcsname#3{% #4\tab@mkpreamble% }% } \def\collet{\@ifnextchar[\collet@i{\collet@i[\tab@colset]}} \def\collet@i[#1]#2{% \@ifnextchar=% {\collet@ii[#1]{#2}}% {\collet@ii[#1]{#2}=}% } \def\collet@ii[#1]#2={% \@ifnextchar[% {\collet@iii[#1]{#2}}% {\collet@iii[#1]{#2}[\tab@colset]}% } \def\collet@iii[#1]#2[#3]#4{% \expandafter\let\csname#1!col.\string#2\expandafter\endcsname% \csname#3!col.\string#4\endcsname% } \def\newcolumntype#1{\@ifnextchar[{\nct@i{#1}}{\nct@i#1[0]}} \def\nct@i#1[#2]{\@ifnextchar[{\nct@ii{#1}[#2]}{\nct@iii{#1}{[#2]}}} \def\nct@ii#1[#2][#3]{\nct@iii{#1}{[#2][#3]}} \def\nct@iii#1#2#3{% \expandafter\let\csname\tab@colset!col.\string#1\endcsname\relax% \expandafter\newcommand\csname\tab@colset!col.\string#1\endcsname#2{% \tab@deepmagic{#1}% \tab@mkpreamble% #3% }% } \def\newcol@#1[#2]{\nct@iii{#1}{[#2]}} \def\tab@deepmagic#1{% \csname NC@rewrite@\string#1\endcsname\NC@find\tab@@magic@@% } \def\NC@find#1\tab@@magic@@{} \colset{tabular} \coldef l{\tabcoltype{\kern\z@\tab@bgroup}{\tab@egroup\hfil}} \coldef c{\tabcoltype{\hfil\tab@bgroup}{\tab@egroup\hfil}} \coldef r{\tabcoltype{\hfil\tab@bgroup}{\tab@egroup}} \coldef T#1{\tab@aligncol{#1}{\tab@btext}{\tab@etext}} \coldef M#1{\tab@aligncol{#1}{\tab@bmaths}{\tab@emaths}} \def\tab@aligncol#1#2#3{% \if#1l\tabcoltype{\kern\z@#2}{#3\hfil}\fi% \if#1c\tabcoltype{\hfil#2}{#3\hfil}\fi% \if#1r\tabcoltype{\hfil#2}{#3}\fi% } \coldef |{\tabruletype{\vrule\@width\arrayrulewidth}} \coldef !#1{\tabruletype{#1}} \coldef @#1{\tabspctype{#1}} \coldef p#1{\tabcoltype% {\savenotes\vtop\tab@bpar{#1}}% {\tab@epar\spewnotes}} \coldef m#1{\tabcoltype% {\savenotes$\vcenter\tab@bpar{#1}}% {\tab@epar$\spewnotes}} \coldef b#1{\tabcoltype% {\savenotes\vbox\tab@bpar{#1}}% {\tab@epar\spewnotes}} \coldef >#1{\tabuserpretype{#1}} \coldef <#1{\tabuserposttype{#1}} \coldef ##1#2{\tabcoltype{#1}{#2}} \coldef *#1#2{% \count@#1% \loop\ifnum\count@>0\relax% \tab@doreadpream{#2}% \advance\count@\m@ne% \repeat% } \def\tab@bpar#1{% \bgroup% \hsize#1\relax% \@arrayparboxrestore% \setbox\z@\vtop\bgroup \global\@minipagetrue% \everypar{% \global\@minipagefalse% \everypar{}% }% } \def\tab@epar{% \ifhmode\par\fi% \unskip% \ifdim\prevdepth<\dp\@arstrutbox% \kern-\prevdepth% \nointerlineskip% \vtop to\dp\@arstrutbox{}% \fi% \egroup% \ifdim\ht\z@<\ht\@arstrutbox% \vbox to\ht\@arstrutbox{}% \kern-\ht\z@% \fi% \unvbox\z@% \egroup% } \def\@mkpream#1{% \endgroup% \colset{tabular}% \tab@initread% \def\tab@multicol{\@arstrut}% \tab@preamble{\tab@multicol}% \def\tab@midtext{\ignorespaces\@sharp\@sharp\@maybe@unskip}% \tab@readpreamble{#1}% \gdef\@preamble{\the\tab@preamble}% \let\tab@bgroup\begingroup% \let\tab@egroup\endgroup% \begingroup% } \def\showpream#1{% \tab@initread% \tab@readpreamble{#1}% \showthe\tab@preamble% \showthe\tab@shortline% } \def\showcol#1{% \expandafter\show\csname\tab@colset!col.\string#1\endcsname% } \def\tab@array{% \tab@width\z@% \let\tab@bgroup\tab@bmaths% \let\tab@egroup\tab@emaths% \@tabarray% } \def\tab@btext{\begingroup} \def\tab@bmaths{$} \def\tab@etext{\endgroup} \def\tab@emaths{\m@th$} \def\array{% \col@sep\arraycolsep% \let\tab@extrasep\arrayextrasep% \tab@normalstrut% \tab@array% } \def\endarray{% \crcr% \egroup% \tab@right% \tab@restorehlstate% } \def\smarray{% \extrarowheight\z@% \col@sep\smarraycolsep% \let\tab@extrasep\smarrayextrasep% \def\tab@bmaths{$\scriptstyle}% \def\tab@btext{\begingroup\scriptsize}% \setbox\z@\hbox{\scriptsize\strut}% \dimen@\ht\z@\dimen\tw@\dp\z@\tab@setstrut% \tab@array% } \let\endsmarray\endarray \providecommand\tabstyle{} \def\@tabular#1{% \tabstyle% \tab@width#1% \let\tab@bgroup\tab@btext% \let\tab@egroup\tab@etext% \col@sep\tabcolsep% \let\tab@extrasep\tabextrasep% \tab@normalstrut% \@tabarray% } \def\tabular{\@tabular\z@} \expandafter\let\csname tabular*\endcsname\@tabular \let\endtabular\endarray \expandafter\let\csname endtabular*\endcsname\endarray \def\tab@setstrut{% \setbox\@arstrutbox\hbox{% \vrule% \@height\arraystretch\dimen@% \@depth\arraystretch\dp\strutbox% \@width\z@% }% } \def\tab@normalstrut{% \dimen@\ht\strutbox\advance\dimen@\extrarowheight% \dimen\tw@\dp\strutbox% \tab@setstrut% } \let\@arrayleft\relax% \let\@arrayright\relax% \def\@tabarray{% \let\@arrayleft\relax% \let\@arrayright\relax% \@ifnextchar[\@array{\@array[c]}% } \def\@array[#1]#2{% \edef\tab@restorehlstate{% \global\tab@endheight\the\tab@endheight% \gdef\noexpand\tab@hlstate{\tab@hlstate}% }% \def\tab@hlstate{n}% \colset{tabular}% \tab@initread% \def\tab@midtext{\tab@setcr\ignorespaces####\@maybe@unskip}% \def\tab@multicol{\@arstrut\tab@startrow}% \tab@preamble{\tab@multicol\tabskip\z@skip}% \tab@readpreamble{#2}% \tab@leftskip\z@skip% \tab@rightskip\z@skip% \tab@setposn{#1}% \ifdim\tab@width=\z@% \def\tab@halign{}% \else% \def\tab@halign{to\tab@width}% \fi% \lineskip\z@\baselineskip\z@% \m@th% \def\tabularnewline{\tab@arraycr\tab@penalty}% \tab@setcr% \let\par\@empty% \everycr{}\tabskip\tab@leftskip% \tab@left\halign\tab@halign\expandafter\bgroup% \the\tab@preamble\tabskip\tab@rightskip\cr% } \def\tab@setposn#1{% \def\tab@left{% \savenotes% \leavevmode\hbox\bgroup$\@arrayleft\vcenter\bgroup% }% \def\tab@right{% \egroup% \m@th\@arrayright$\egroup% \spewnotes% }% \global\tab@endheight\z@% \@tempswafalse% \let\tab@penalty\relax% \if#1t% \def\tab@left{% \savenotes% \leavevmode\setbox\z@\hbox\bgroup$\@arrayleft\vtop\bgroup% }% \def\tab@right{% \egroup% \m@th\@arrayright$\egroup% \tab@raisebase% \spewnotes% }% \gdef\tab@hlstate{t}% \global\tab@endheight\ht\@arstrutbox% \else\if#1b% \def\tab@left{% \savenotes% \leavevmode\setbox\z@\hbox\bgroup$\@arrayleft\vbox\bgroup% }% \def\tab@right{% \egroup% \m@th\@arrayright$\egroup% \tab@lowerbase% \spewnotes% }% \gdef\tab@hlstate{b}% \else% \if#1L\@tempswatrue\fi% \if#1C\@tempswatrue\fi% \if#1R\@tempswatrue\fi% \fi\fi% \if@tempswa\ifhmode% \ifinner\tab@err@unbrh\@tempswafalse\else\par\fi% \fi\fi% \if@tempswa\ifmmode\tab@err@unbmm\@tempswafalse\fi\fi% \if@tempswa\ifx\@arrayleft\relax\else% \tab@err@unbext\@tempswafalse% \fi\fi% \if@tempswa% \def\tab@left{\vskip\parskip\medskip}% \def\tab@right{\par\@endpetrue\global\@ignoretrue}% \tab@leftskip\@totalleftmargin% \tab@rightskip\hsize% \advance\tab@rightskip-\linewidth% \advance\tab@rightskip-\@totalleftmargin% \ifdim\tab@width=\z@% \if#1L\else\advance\tab@leftskip\z@\@plus10000fill\fi% \if#1R\else\advance\tab@rightskip\z@\@plus10000fill\fi% \else% \dimen@\linewidth% \advance\dimen@-\tab@width% \if#1L\advance\tab@rightskip\dimen@\fi% \if#1R\advance\tab@leftskip\dimen@\fi% \if#1C% \advance\tab@leftskip.5\dimen@% \advance\tab@rightskip.5\dimen@% \fi% \fi% \def\tab@penalty{\penalty\@M}% \tab@width\hsize% \fi% } \def\tab@hlstate{n} \def\tab@addruleheight#1{% \if\tab@hlstate n\else% \global\advance\tab@endheight#1\relax% \fi% } \def\tab@startrow{% \if\tab@hlstate t% \gdef\tab@hlstate{n}% \else\if\tab@hlstate b% \global\tab@endheight\dp\@arstrutbox% \fi\fi% } \def\tab@raisebase{% \global\advance\tab@endheight-\ht\z@% \raise\tab@endheight\box\z@% } \def\tab@lowerbase{% \global\advance\tab@endheight-\dp\z@% \lower\tab@endheight\box\z@% } \def\tabpause#{% \noalign{\ifnum0=`}\fi% \@parboxrestore% \tab@startpause% \vskip-\parskip% \parshape\@ne\@totalleftmargin\linewidth% \noindent% \doafter\tabpause@i% } \def\tabpause@i{% \nobreak% \tab@endpause% \ifnum0=`{\fi}% } \long\def\multicolumn#1#2#3{% \multispan{#1}% \begingroup% \tab@multicol% \tab@initread% \tab@preamble{}% \long\def\tab@midtext{#3}% \let\tab@looped\tab@err@multi% \tab@readpreamble{#2}% \the\tab@preamble% \endgroup% \ignorespaces% } \def\ranges#1#2{% \gdef\ranges@temp{#1}% \begingroup% \ranges@i#2 \q@delim% } \def\ranges@i{% \@ifnextchar\q@delim\ranges@done{\afterassignment\ranges@ii\count@}% } \def\ranges@ii{% \@ifnextchar-\ranges@iii{\ranges@do\count@\count@\ranges@v}% } \def\ranges@iii-{\afterassignment\ranges@iv\@tempcnta} \def\ranges@iv{\ranges@do\count@\@tempcnta\ranges@v} \def\ranges@v{% \@ifnextchar,% \ranges@vi% {% \@ifnextchar\q@delim% \ranges@done% {\tab@err@range\ranges@vi,}% }% } \def\ranges@vi,{\afterassignment\ranges@ii\count@} \def\ranges@do#1#2{% \ifnum#1>#2\else% \expandafter\endgroup% \expandafter\ranges@temp% \expandafter{% \the\expandafter#1% \expandafter}% \expandafter{% \the#2% }% \begingroup% \fi% } \def\ranges@done\q@delim{\endgroup} \def\ifinrange#1#2{% \@tempswafalse% \count@#1% \ranges\ifinrange@i{#2}% \if@tempswa% \expandafter\@firstoftwo% \else% \expandafter\@secondoftwo% \fi% } \def\ifinrange@i#1#2{% \ifnum\count@<#1 \else\ifnum\count@>#2 \else\@tempswatrue\fi\fi% } \def\hline{% \tab@dohline% \noalign{\ifnum0=`}\fi% \tab@penalty% \futurelet\@let@token\hline@i% } \def\hline@i{% \ifx\@let@token\hline% \vskip\doublerulesep% \tab@addruleheight\doublerulesep% \fi% \ifnum0=`{\fi}% } \def\tab@dohline{% \multispan{\tab@columns}% \leaders\hrule\@height\arrayrulewidth\hfil% \tab@addruleheight\arrayrulewidth% \cr% } \renewcommand\vline[1][\arrayrulewidth]{\vrule\@width#1\relax} \def\cline#1{% \noalign{\kern-.5\arrayrulewidth\tab@penalty}% \omit% \global\tab@state\@ne% \ranges\cline@i{#1}% \cr% \noalign{\kern-.5\arrayrulewidth\tab@penalty}% } \def\cline@i#1#2{% \ifnum#1<\tab@state\relax% \tab@@cr% \noalign{\kern-\arrayrulewidth\tab@penalty}% \omit% \global\tab@state\@ne% \fi% \@whilenum\tab@state<#1\do{% \hfil\tab@@tab@omit% \global\advance\tab@state\@ne% }% \ifnum\tab@state>\@ne% \kern-\arrayrulewidth% \fi% \@whilenum\tab@state<#2\do{% \tab@@span@omit% \global\advance\tab@state\@ne% }% \leaders\hrule\@height\arrayrulewidth\hfill% } \def\tab@@cr{\cr} \def\tab@@tab@omit{&\omit} \def\tab@@span@omit{\span\omit} \def\tab@checkrule#1{% \count@#1\relax% \expandafter\ifinrange% \expandafter\count@% \expandafter{\tab@xcols}% {\tab@checkrule@i}% {}% } \def\tab@checkrule@i#1{\setbox\z@\hbox{#1}\hb@xt@\wd\z@{}} \def\vgap{% \noalign{\nobreak}% \omit% \global\let\vgap@after\@empty% \iffalse{\fi\ifnum0=`}\fi% \@ifnextchar[\vgap@i\vgap@simple% } \def\vgap@i[#1]{\vgap@spec{#1}} \def\vgap@spec#1#2{% \gdef\tab@xcols{#1}% \global\let\tab@ckr\tab@checkrule% \vgap@do{#2}% } \def\vgap@simple#1{% \global\let\tab@ckr\@gobble% \vgap@do{#1}% } \def\vgap@do#1{% \ifnum0=`{}\fi% \global\tab@vgaptrue% \the\tab@shortline% \vrule\@height#1\@width\z@% \global\tab@vgapfalse \tab@addruleheight{#1}% \cr% \noalign{\nobreak}% \vgap@after% } \def\hlx#1{\hlx@loop#1\q@delim} \def\hlx@loop#1{% \ifx#1\q@delim\else% \@ifundefined{hlx@cmd@\string#1}{% \expandafter\hlx@loop% }{% \csname hlx@cmd@\string#1\expandafter\endcsname% }% \fi% } \def\hlxdef#1{\@namedef{hlx@cmd@#1}} \hlxdef h#1{% \noalign{% \ifx#1h% \def\@tempa{\hline\hline\hlx@loop}% \else% \def\@tempa{\hline\hlx@loop#1}% \fi% \expandafter }% \@tempa% } \hlxdef b{\noalign{\kern-\arrayrulewidth}\hlx@loop} \hlxdef /{% \noalign{\ifnum0=`}\fi% \@ifnextchar[\hlx@cmd@break@i{\hlx@cmd@break@i[0]}% } \def\hlx@cmd@break@i[#1]{\pagebreak[0]\ifnum0=`{\fi}\hlx@loop} \hlxdef v{% \noalign{\nobreak}% \omit% \iffalse{\fi\ifnum0=`}\fi% \global\let\vgap@after\hlx@loop% \@ifnextchar[\hlx@vgap@i{\hlx@vgap@ii\vgap@simple}% } \def\hlx@vgap@i[#1]{% \ifx!#1!% \def\@tempa{\hlx@vgap@ii\vgap@simple}% \else% \def\@tempa{\hlx@vgap@ii{\vgap@spec{#1}}}% \fi% \@tempa% } \def\hlx@vgap@ii#1{% \@ifnextchar[{\hlx@vgap@iii{#1}}{\hlx@vgap@iii{#1}[\doublerulesep]}% } \def\hlx@vgap@iii#1[#2]{#1{#2}} \hlxdef s{% \noalign{\ifnum0=`}\fi% \nobreak% \@ifnextchar[\hlx@space@i{\hlx@space@i[\doublerulesep]}% } \def\hlx@space@i[#1]{% \vskip#1% \tab@addruleheight{#1}% \ifnum0=`{\fi}% \hlx@loop% } \hlxdef c#1{\cline{#1}\hlx@loop} \hlxdef .#1\q@delim{% \ifx @#1@\else% \PackageWarning{mdwtab}{% Ignoring \protect\hlx\space command characters following a `.'\MessageBreak command% }% \fi% \ignorespaces% } \def\@arraycr{\tab@arraycr{}} \def\tab@arraycr#1{\tab@cr{\tab@tabcr{#1}}{}{}} \def\tab@tabcr#1#2{% \dimen@#2% \advance\dimen@\tab@extrasep% \ifdim\dimen@>\z@% \ifvmode% \unskip\kern-\prevdepth% \nointerlineskip\expandafter\hbox% \else% \@maybe@unskip\expandafter\@firstofone% \fi% {\advance\dimen@\dp\@arstrutbox\vrule\@depth\dimen@\@width\z@}% \fi% \global\dimen\@ne\dimen@% \cr% \noalign{% #1% \ifdim\dimen\@ne<\z@\vskip\dimen\@ne\relax\fi% }% \@gobble% } \def\tab@setcr{\let\\\tabularnewline} \def\tab@cr#1#2#3{% \relax% \iffalse{\fi\ifnum0=`}\fi% \@ifstar{\tab@cr@i{#1}{#3}}{\tab@cr@i{#1}{#2}}% } \def\tab@cr@i#1#2{% \@ifnextchar[{\tab@cr@ii{#1}{#2}}{\tab@cr@ii{#1}{#2}[\z@]}% } \def\tab@cr@ii#1#2[#3]{% \ifnum0=`{}\fi% #1{#3}{#2}% } \begingroup \catcode`.=11 \def\@tempa#1 #2 #3\@@{#1 #2} \xdef\ver@array.sty {1995/11/19 [mdwtab.sty \expandafter\@tempa\ver@mdwtab.sty\@@]} \endgroup \def\tab@error{\PackageError{mdwtab}} \def\tab@err@misscol{% \tab@error{Missing column type}{% I'm lost. I was expecting something describing^^J% the type of the current column, but you seem to^^J% have missed it out. I've inserted a type `l'^^J% column here in the hope that this makes sense.% }% } \def\tab@err@oddgroup{% \tab@error{Misplaced group in table preamble}{% I've found an open brace character in your preamble^^J% when I was expecting a specifier character. I'm^^J% going to gobble the whole group and carry on as if^^J% I'd never seen it.% }% } \def\tab@err@undef#1{% \tab@error{Unknown `\tab@colset' preamble character `\string#1'}{% I don't understand what you meant by typing this^^J% character. Anyway, I'll ignore it this time around.^^J% Just don't you do it again.% }% } \def\tab@err@unbrh{% \tab@error{Can't use unboxed tabular in LR mode}{% You've asked for a tabular or array environment with^^J% `L', `C' or `R' as the position specifier, but you're^^J% in LR (restricted horizontal) mode, so it won't work.^^J% I'll assume you really meant `c' and soldier on.% }% } \def\tab@err@unbmm{% \tab@error{Can't use unboxed tabular in maths mode}{% You've asked for a tabular or array environment with^^J% `L', `C' or `R' as the position specifier, but you're^^J% in maths mode, so it won't work. I'll pretend that^^J% you really typed `c', and that this is all a bad dream.% }% } \def\tab@err@unbext{% \tab@error{Can't extend unboxed tabulars}{% You're trying to use kludgy extensions (e.g.,^^J% `delarray') on an array or tabular with `L', `C'^^J% or `R' as the position specifier. I'll assume you^^J% subconsciously wanted a `c' type all along.% }% } \def\tab@err@multi{% \tab@error{More than one column in a \protect\multicolumn}{% You've put more than one column into a \string\multicolumn^^J% descriptor. It won't work. I have no idea what^^J% will happen, although it won't be pleasant. Hold^^J% on tight now...% }% } \def\tab@err@range{% \tab@error{Expected `,' or `' in range list}{% I was expecting either the end of the range list,^^J% or a comma, followed by another range. I've^^J% inserted a comma to try and get me back on track.^^J% Good luck.% }% } %% %% footnote package -- Save footnotes around boxing environments %% Copyright (c) 1996 Mark Wooding %% %% This program is free software; you can redistribute it and/or modify %% it under the terms of the GNU General Public License as published by %% the Free Software Foundation; either version 2 of the License, or %% (at your option) any later version. %% %% This program is distributed in the hope that it will be useful, %% but WITHOUT ANY WARRANTY; without even the implied warranty of %% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the %% GNU General Public License for more details. %% %% You should have received a copy of the GNU General Public License %% along with this program; if not, write to the Free Software %% Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. %% %% \CharacterTable %% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z %% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z %% Digits \0\1\2\3\4\5\6\7\8\9 %% Exclamation \! Double quote \" Hash (number) \# %% Dollar \$ Percent \% Ampersand \& %% Acute accent \' Left paren \( Right paren \) %% Asterisk \* Plus \+ Comma \, %% Minus \- Point \. Solidus \/ %% Colon \: Semicolon \; Less than \< %% Equals \= Greater than \> Question mark \? %% Commercial at \@ Left bracket \[ Backslash \\ %% Right bracket \] Circumflex \^ Underscore \_ %% Grave accent \` Left brace \{ Vertical bar \| %% Right brace \} Tilde \~} %% \ifx\fn@notes\@@undefined% \newbox\fn@notes% \fi \newdimen\fn@width \let\fn@colwidth\columnwidth \newif\if@savingnotes \def\fn@startnote{% \hsize\fn@colwidth% \interlinepenalty\interfootnotelinepenalty% \reset@font\footnotesize% \floatingpenalty\@MM% Is this right??? \@parboxrestore% \protected@edef\@currentlabel{\csname p@\@mpfn\endcsname\@thefnmark}% \color@begingroup% } \let\fn@endnote\color@endgroup \def\fn@fntext#1{% \global\setbox\fn@notes\vbox{% \unvbox\fn@notes% \fn@startnote% \@makefntext{% \rule\z@\footnotesep% \ignorespaces% #1% \@finalstrut\strutbox% }% \fn@endnote% }% } \def\savenotes{% \begingroup% \if@savingnotes\else% \@savingnotestrue% \let\@footnotetext\fn@fntext% \let\@mpfootnotetext\fn@fntext% \fn@width\columnwidth% \let\fn@colwidth\fn@width% \global\setbox\fn@notes\box\voidb@x% \let\fn@thempfn\thempfn% \let\fn@mpfn\@mpfn% \ifx\@minipagerestore\relax\let\@minipagerestore\@empty\fi% \expandafter\def\expandafter\@minipagerestore\expandafter{% \@minipagerestore% \let\thempfn\fn@thempfn% \let\@mpfn\fn@mpfn% }% \fi% } \def\spewnotes{% \endgroup% \if@savingnotes\else\ifvoid\fn@notes\else\begingroup% \let\@makefntext\@empty% \let\@finalstrut\@gobble% \let\rule\@gobbletwo% \@footnotetext{\unvbox\fn@notes}% \endgroup\fi\fi% } \let\endsavenotes\spewnotes %% %% doafter package -- insert a token really after a group %% Copyright (c) 1996 Peter Schmitt and Mark Wooding %% %% This program is free software; you can redistribute it and/or modify %% it under the terms of the GNU General Public License as published by %% the Free Software Foundation; either version 2 of the License, or %% (at your option) any later version. %% %% This program is distributed in the hope that it will be useful, %% but WITHOUT ANY WARRANTY; without even the implied warranty of %% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the %% GNU General Public License for more details. %% %% You should have received a copy of the GNU General Public License %% along with this program; if not, write to the Free Software %% Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. %% %% \CharacterTable %% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z %% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z %% Digits \0\1\2\3\4\5\6\7\8\9 %% Exclamation \! Double quote \" Hash (number) \# %% Dollar \$ Percent \% Ampersand \& %% Acute accent \' Left paren \( Right paren \) %% Asterisk \* Plus \+ Comma \, %% Minus \- Point \. Solidus \/ %% Colon \: Semicolon \; Less than \< %% Equals \= Greater than \> Question mark \? %% Commercial at \@ Left bracket \[ Backslash \\ %% Right bracket \] Circumflex \^ Underscore \_ %% Grave accent \` Left brace \{ Vertical bar \| %% Right brace \} Tilde \~} %% \let\@@aftergroup\aftergroup \def\doafter#1{% \def\@tempa{\@@aftergroup#1}% \afterassignment\doafter@i\let\@let@token% } \def\doafter@i{% \@let@token% \let\aftergroup\@my@aftergroup% \@@aftergroup\@prepare@after\@tempa% } \def\ag@cnt@local{0 } \let\ag@cnt@global\ag@cnt@local \def\@my@aftergroup{% \begingroup% \count@\ag@cnt@local% \advance\count@\@ne% \xdef\ag@cnt@global{\the\count@\space}% \endgroup% \let\ag@cnt@local\ag@cnt@global% \@@aftergroup\@after@token\@@aftergroup% } \def\@after@token{% \@start@after@group% \@after@token% } \def\@start@after@group{% \begingroup% \count@\ag@cnt@global% \clubpenalty\ag@cnt@local% \let\@after@token\@after@token@i% } \def\@after@token@i{% \advance\count@\m@ne% \ifnum\count@=\clubpenalty% \global\let\ag@cnt@global\ag@cnt@local% \expandafter\@after@aftertoken\expandafter\@after@all% \else% \expandafter\@@aftergroup% \fi% } \let\@after@all\endgroup \def\@prepare@after{% \ifx\ag@cnt@local\ag@cnt@global\else% \expandafter\@prepare@after@i% \fi% } \def\@prepare@after@i#1{% \@start@after@group% \def\@after@all{\@@aftergroup#1\endgroup}% } \def\@after@aftertoken#1{% \let\bgroup\relax\let\egroup\relax% \toks@{#1}% \futurelet\@let@token\@after@aftertoken@i% } \def\@after@aftertoken@i{% \ifcat\noexpand\@let@token{% \@@aftergroup{% \else\ifcat\noexpand\@let@token}% \@@aftergroup}% \else% \def\@tempa##1{\@@aftergroup##1\the\toks@}% \expandafter\expandafter\expandafter\@tempa% \fi\fi% } \endinput %% %% End of file `mdwtab.sty'.