[comp.text.tex] large table macros for TeX - btable.sty

mathas_a@maths.su.oz.au ( Andrew ) (07/06/90)

Several people have expressed an interest in the table macros which
I purported to have. They appear below. They do *not* work in LaTeX;
however after looking at the supertab macros for LaTeX (which several
people told me about), I think that I could modifify them to work 
with LaTeX. Any one who wishes to convert them feel free as I won't
have the time to do this until the end of August.

The basic macros were written primarily by Bob Howlett 
(howlett_r@maths.su.oz.au), with me watching and making the odd 
suggestion and modification. Consequently I have called the macros
the "btable.sty" macros. All credit should go to Bob.

The macros were written to typeset large character tables and 
consequently everything is put into math mode. To take them out of
math mode the definitions of \tableline and \nextbit need to  be
changed in the obvious way (ie. remove the "$"s).

The reason why I wanted these macros was that TeX and LaTeX both
spat the dummy and gave a memory overflow when I asked them to
do my tables by conventional methods. I also tried using the
tabular environment in LaTeX; butm for reasons which I can't 
comprehend (or through ill-use?), there seems to be a limit of 
approximately 15 columns in this evironment  - I needed up to
31 columns. Given this limit, the supertab environment written for LaTeX 
has the same restriction (it uses the tabular environment), and
so it would be worthwhile to convert these macros to LaTeX (they
don't work in LaTeX at the moment because \plainoutput is not 
defined in LaTeX).

These macros do not appear to have any memory restrictions: I ran
what turned out to be 22 pages of 31 column tables through TeX in
one hit without any complaints. As such they meet my specifications -
I hope that they also met yours.
                                                           
Andrew Mathas.

  - smile at a stranger today and help make the world a better 
        place; while you're, at it, why not hug a friend!

%______________________________________________________________________
%% Written by Bob Howlett with modifications by Andrew Mathas 1990.
%%% Table Format:                                                
%%  All entries are formatted in math mode. A horizontal line
%%  is placed under the table header, and a vertical line
%%  separates the first and second columns. The first column
%%  is left justified and all other columns are right justified.
%%  Any row can have an arbitrary number of columns. The macros were
%%  designed for TeXing character tables.
%%% Table Syntax:
% - table begun with \starttable
% - columns separated by &
% - each row ended by &!
% - last row of table ended by &* and followed by \endtable
% - table header specified by \tableheader ...&!
% - if a blank line is wanted in the table put !\gap at the 
%   end of the row
% - to force a page break put !\pagegap at end of row
% - pages are  broken naturally if \pagegap is not used, and the
%   table header is put at the top of the following page.
%%% Column spacing
% - nameskip:   width of the title column
% - colSkip:    width of the columns                 
% - colsep:     separation between columns
% - firstcol:   extra space to the left of the first column (in my 
%       character tables the the first column (as distinct from the
%       left-most column which "labels" each row), contains the 
%       degrees of the characters which are often very large numbers
%       and so I needed more space: eg. psi | xxxxxxx  xxxx  xxxx ...).
\def\nameskip{\kern30pt}
\def\colskip{\kern20pt}       
\def\colsep{\kern3pt}
\def\firstcol{\kern10pt}
%%% Known bug
%   If the row ends with ...& &! then the next row may be
%   added to the end of this row. This can be avoided 
%   by typing  ...&\relax&! instead.
%%  Useful note:
%   set \hsize=\wd0 to make the page width equal the table width

%_________________________btable.sty____________________________________
%% Written by Bob Howlett with modifications by Andrew Mathas 1990.
\let\gap\relax
\newif\ifpagegap
\let\pagegap\pagegaptrue
\def\spacing{height8.5ptdepth4.5pt}%
\def\normalspacing{height8.5pt depth3.5pt}
\def\moreheight{height9.5pt depth4.5pt\let\spacing\normalspacing}
\def\muchmoreheight{height15pt depth4.5pt\let\spacing\normalspacing}
\def\tableheader#1!{\setbox0\hbox{\def\spacing{height8.5ptdepth4.5pt}\tableline#1*}%
    \global\def\TableHeader{\copy0\hrule width\wd0\let\spacing\moreheight}}
\def\starttable{\begingroup\offinterlineskip
    \parskip=0pt\parindent=0pt%
    \output={\plainoutput\TableHeader}
    \TableHeader\startnewline}
\def\startnewline{\hfil\par\futurelet\next\continue}
\def\continue{\ifx\gap\next\message{III}\let\spacing\muchmoreheight\fi%
   \ifx\pagegaptrue\next\vfill\eject\tableline\message{XXX}\pagegapfalse\else\message{CCC}\tableline\fi}
\def\tableline#1&{\noindent%
    \rlap{$#1$}\nameskip\colsep\vrule\spacing\firstcol\nextbit}
\def\nextbit#1&{\colskip\llap{$#1$}\colsep\check}
\def\check#1{\if!#1\expandafter\startnewline\else\if*#1\hfil\else\nextbit#1\relax\fi\fi}
\def\endtable{\endgroup\vskip20pt}
%-------------------------------------------------------------------------------

%A small example: larger examples available upon request (mathas_a@maths.su.oz.au).
\tableheader C_1&C_2&C_3&!
\starttable
\chi&1&0&0&-1&!
\chi&1&0&0&-1&!
\chi&1&0&0&-1&!
\chi&&0&0&-1&!\gap
\chi&1&0&&-1&!
\chi&1&0&&-1&!
\chi&1&0&0&-1&!
\phi&5&8&-1&2&!\pagegap
\psi&1&2&&&!
\alpha&59&0&*
\endtable
\bye                                            
%---------------------------------------------------------------------------------
--
Andrew      - smile at a stranger today and help make the world a better 
                   place; while you're, at it, why not hug a friend!