home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Computer Club Elmshorn Atari PD
/
CCE_PD.iso
/
pc
/
0500
/
CCE_0544.ZIP
/
CCE_0544
/
SUPERTAB
/
SUPERTAB.DOC
next >
Wrap
Text File
|
1992-05-31
|
22KB
|
470 lines
% @stylefile{Super tabular
% shortpackagename = {supertab},
% longpackagename = {supertabular},
% baseformats = {\LaTeX 2.09},
% version = {3.6f},
% date = {1992-03-11},
% author = {Theo Jurriens,
% TAJ@HGRRUG5,
% P.O Box 800,
% 9700 AV Groningen},
% abstract = {This file provides the supertabular environment, which
% is an extension to the standard tabular environment.
% Large tabulars are automatically split across pages.
% Seperate commands for the table-head and table-tail
% are provided, in order to repeat these on each page.}
% infauthor = {Johannes Braams,
% J.L.Braams@research.ptt.nl,
% PTT Research,
% P.O. Box 421,
% 2260 AK Leidschendam}
% infdate = {1990-10-16}}
%
%----------------------------------------------------------------------------
%
% supertabular sty
% original idea: Theo Jurriens 1988
% TAJ@hgrrug5 P.O Box 800, 9700 AV Groningen
%
% revised by: Johannes Braams
% JL_Braams@pttrnl.nl PTT Research Leidschendam (NL)
%
% 11.02.92 - Bug found by Michael Heissmeier when p{...} is used.
% V 3.6f A change in LaTeX.tex didn't find its way into supertabular.
% 01.08.91 - Take height of tabletail into account when computing the
% V 3.6e maximum tableheight; add tolerance on first (partial) page
% of the supertabular.
% 27.06.91 - Cured bug that made the first part of the table one line
% V 3.6d shorter than the others. Appeared when supertabular was
% used in a twocolumn environment.
% 26.06.91 - Made \@process@tablecaption a global macro. Previous caption
% V 3.6c turned up on a table without one.
% 27.05.91 - Replaced \clearpage with \newpage to make supertabulars work
% V 3.6b in a twocolumn environment. This also prevents all floats
% from being printed.
% 15.02.91 - Because of the check for the use of tablefirsthead the
% V 3.6a combination of an \hline in the head and an \hline as the first
% thing in the data went wrong. The \futurelet in the definition
% of \hline found \fi instead of \hline, so no \doublerulesep
% was added.
% Also had to modify the way the environments were defined.
% The blank space (from the CR after the argument of \supertabular)
% has to be gobbled. This can only be done using a construction
% like \def\command#1 {...}. So removed the use of \newenvironment
% 04.02.91 - Added the commands \topcaption, \bottomcaption and \tablecaption
% V 3.6 to include a caption within the supertabular environment. The
% default behaviour is to put the caption before the actual start
% of the table.
% - Also added \tablefirsthead and \tablelasttail to let the
% user specify a different head for the first page of the table
% and for consecutive pages as well as different tails for first
% pages and the last one. If these commands are not used, the
% default behaviour will be to use the value of \tablehead end
% \tabletail
% - Removed the need for the \noalign{\global\let\\=\@stabularcr}
% commands by storing and resetting \@stabularcr
%
% 16.10.90 Added the supertabular* environment that was in an earlier
% V 3.5 version (2.0) by the original author
% Reintroduced the version numbering
%
% revised by: Gabriele Kruljac
% kruljac@ds0mpi11 Max-Planck-Institute Stuttgart
%
%
% 06.06.89 Correction: now care is taken of probably existing onecolumn
% head (title or tables ...) in twocolumn sty.
%
% 10.05.89 Correction: the new \\ definition has been added to the
% begin of each `sub'-tabular
% Added: algorithm to produce the tabulars in twocolumn style
%
% 06.04.89 Correction: put \global statement in \end{supertabular}
% into \noalign
%
% 22.02.89 Correction: restore the original meaning of \\ with
% \end{supertabular}
%
% (Feb 89) The whole algorithm has been changed, so that I can use
% the most features of a normal tabular:
% \\ for new line, including \\[#1]
% p{...} in the preamble ...
% Account is taken to \baselinestretch and \arraystretch
% -I'm not counting the lines because of too much rounding errors
% but instead I add the (estimated) used space in pt.
% -The tablehead is taken into this algorithm of proofing, so
% I really know how much space the head uses.
% -When no p-arg is given I add a variable \midlineheight to
% calculate the used space. To calculate \midlineheight I
% take the \baselineskip, which is active when the supertabular
% starts (\baselineskip includes the \value of \baselinestretch)
% and multiply it with \arraystretch.
% -When a p-arg is given the text will be stored in a box. So
% I know the height I have to add. Also I reduce the maximum
% pagesize, so that the last parbox on a page can get up to
% max 4 lines without producing an overfull vbox.
% -To do so I had to make some additions to LaTeX's tabular
% commands. These new commands got a leading `s'.
%
% Weak points:
% -When the material of a normal entry (not a p-arg) becomes
% larger than the estimated \midlineheight, overfull vboxes
% will be produced at all.
% -When the last p-arg on a page gets more than 4 lines
% (probably even more than 3 lines) it will result in an
% overfull vbox.
% Also some combinations of \baselinestretch \arraystretch and
% a large font may lead to one line too much.
% -if accidentally the last line of the tabular produces
% a newpage, on the next page the tabletail will be written
% immediately after the tablehead. Depending on the contents
% this may result in an error message regarding misplaced
% \noalign.
%
% A quick but not very elegant solution: shrink \maxsize by
% \noalign{\global\maxsize=...pt} after the first \\ of the
% supertabular.
%
%------------------------------------------------------------------------------
% Added the user-commands \topcaption and \bottomcaption which set the boolean
% @topcaption to determine where to put the tablecaption. The default
% is to put the caption on the top of the table
%
\newif\if@topcaption \@topcaptiontrue
\def\topcaption{\@topcaptiontrue\tablecaption}
\def\bottomcaption{\@topcaptionfalse\tablecaption}
%
% Added the command \tablecaption, with the use of the definition
% of the \caption and \@caption commands from latex.tex.
% This command has to function exactly like \caption does except it
% has to store its argument (and the optional argument) for later
% processing WITHIN the supertabular environment
% JB
%
\long\def\tablecaption{\refstepcounter{table} \@dblarg{\@xtablecaption}}
\long\def\@xtablecaption[#1]#2{%
\long\gdef\@process@tablecaption{\@stcaption{table}[#1]{#2}}}
\global\let\@process@tablecaption\relax
%
%
% This is a redefinition of LaTeX's \@caption, \@makecaption is
% called within a group so as not to return to \normalsize globally.
% also a fix is made for the `feature' of the \@makecaption of article.sty and
% friends that a caption ALWAYS gets a \vskip 10pt at the top and NONE at the
% bottom. If a user wants to precede his table with a caption this results
% in a collision.
%
\long\def\@stcaption#1[#2]#3{\par%
\addcontentsline{\csname ext@#1\endcsname}{#1}%
{\protect\numberline{\csname the#1\endcsname}{\ignorespaces #2}}
\begingroup
\@parboxrestore
\normalsize
\if@topcaption \vskip -10pt \fi % 'fix'
\@makecaption{\csname fnum@#1\endcsname}{\ignorespaces #3}\par
\if@topcaption \vskip 10pt \fi % 'fix'
\endgroup}
%
% % \tablehead activates the new tabular \cr
% % commands
\def\@tablehead{}
\def\tablehead#1{\gdef\@tablehead{#1}}
\def\tablefirsthead#1{\gdef\@table@first@head{#1}}
%
%+
% If the user uses an extra amount of tabular-data (like \multicolumn)
% in \verb=\tabletail= \TeX\ starts looping because of the definition
% of \verb=\nextline=. So make \verb=\\= act like just a \verb=\cr=
% inside this tail to prevent the loop.
% Save and restore the value of \verb=\\=
%-
\def\@tabletail{}
\def\tabletail#1{%
\gdef\@tabletail{\noalign{\global\let\@savcr=\\\global\let\\=\cr}%
#1\noalign{\global\let\\=\@savcr}}}
\def\tablelasttail#1{\gdef\@table@last@tail{#1}}
%
\newdimen\maxsize % maximum pagesize
\newdimen\actsize % actual pagesize
\newdimen\twocolsize % needed for correct max height if twocolumn
\newdimen\parboxheight % height plus depth of a parbox-argument
\newdimen\addspace % stores the value of \\[#1]
\newdimen\midlineheight % estimated size of a normal line
\newdimen\pargcorrection % to set page height tolerance if p-arg
\newdimen\computedimens % computation variable
\newbox\tabparbox
%
% %%%% Redefine original LaTeX tabular \cr commands. %%%%
% %%%% New tabular \cr commands get a leading `s' %%%%
%
% % Insert \nextline command for counting
\def\@stabularcr{{\ifnum0=`}\fi\@ifstar{\@sxtabularcr}{\@sxtabularcr}}
\def\@sxtabularcr{\@ifnextchar[{\@sargtabularcr}%
{\ifnum0=`{\fi}\cr\nextline}}
%
% % contents of command unchanged
\def\@sargtabularcr[#1]{\ifnum0=`{\fi}\ifdim #1>\z@
\unskip\@sxargarraycr{#1}\else \@syargarraycr{#1}\fi}
%
% % here copy the value #1 of [ ] of \\
% % to \addspace
\def\@sxargarraycr#1{\@tempdima #1\advance\@tempdima \dp \@arstrutbox%
\vrule \@height\z@ \@depth\@tempdima \@width\z@ \cr%
\noalign{\global\addspace=#1}\nextline}
%
% % command will be called when \\[0pt]
\def\@syargarraycr#1{\cr\noalign{\vskip #1\global\addspace=#1}\nextline}
%
% %%%% Redefine original LaTeX p-arg commands. %%%%
% %%%% New commands get a leading `s' %%%%
%
% % reduce maximum pagesize to have
% % a small tolerance for last entry
\def\@sstartpbox#1{\global\advance\maxsize by -\pargcorrection
\global\pargcorrection=0pt
% % put text into box to save height
\setbox\tabparbox%
\vtop\bgroup\hsize#1\@arrayparboxrestore}
%
% 11/03/92 JB: The following change didn't find its way into the
% \@sendpbox command. This caused a difference in linespacing
% between a supertabular and a normal tabular.
% \def\@endpbox{\unskip\strut\par\egroup\hfil}
% % 14 Jan 89: Def of \@endpbox changed from
% % \def\@endpbox{\par\vskip\dp\@arstrutbox\egroup\hfil}
% % so vertical spacing works out right if the last line of a `p' entry
% % has a descender.
\def\@sendpbox{\unskip\strut\par\egroup%
\computedimens=\ht\tabparbox%
\advance\computedimens by \dp\tabparbox%
\ifnum\parboxheight<\computedimens
\global\parboxheight=\computedimens
\fi
\computedimens=0pt
\box\tabparbox\hfil}
%
% %%%% Here start really new supertabular commands %%%%
%
% % estimate height of normal line
% % regarding \array- and \baselinestretch
\def\calmidlineheight{\midlineheight=\arraystretch \baslineskp
\global\advance\midlineheight by 1pt
\global\pargcorrection=4\midlineheight}
%
\def\calpage{\global\actsize=\pagetotal % where am I on the actual page?
\twocolsize=\textheight % added 06.06.89
\advance\twocolsize by -\@colroom % "
\advance\actsize by \twocolsize % "
\global\advance\actsize by \midlineheight
\maxsize=\textheight % start a new page when 90% of
\multiply \maxsize by 9 % the page are used
\divide\maxsize by 10
% Add a litle tolerance on the firsat (partial) page V3.6e
\advance\actsize 2\midlineheight
\ifnum\actsize > \maxsize
\clearpage
\global\actsize=\pagetotal
\fi
\maxsize=\textheight % now set \maxsize with tolerance
%+
% measure the height of the tabletail and substract from \maxsize
%-
\setbox\@tempboxa=\vbox{\@arrayparboxrestore%
\begin{tabular}{\tableformat}\@tabletail\end{tabular}}
\global\advance\maxsize by-\ht\@tempboxa}
% Here is the definition of supertabular
% modified JB (15.2.91)
\def\supertabular#1 {% % before it was \edef\tableformat,
% % but gave error with @{\hspace{..}} !
\def\tableformat{\string#1} % store preamble
\global\starfalse % remember this is the normal version
%
% % Check if we have to insert a caption
\if@topcaption\@process@tablecaption
\fi
% % save old \\ moved from below V3.6e
\global\let\@oldcr=\\
%
\def\baslineskp{\baselineskip}
\calmidlineheight% estimate height of a normal line
\calpage % calculate max. pagesize and startpoint
%
% % save old \@tabularcr
\let\@@tabularcr\@tabularcr% Added JB 4/2/91
% % Now insert the definition of \@stabularcr
\let\@tabularcr\@stabularcr
% % activate new parbox algorithm
\let\@@startpbox=\@sstartpbox
\let\@@endpbox=\@sendpbox
%
% Moved the check for the use of \tablefirsthead to befor the start of
% the tabular environment in order to make the \futurelet inside \hline
% do its work correctly (15.02.91)
%
\ifx\@table@first@head\undefined
\let\@@tablehead=\@tablehead
\else
\let\@@tablehead=\@table@first@head
\fi% Added JB 4/2/91
% % start normal tabular environment
\begin{tabular}{\tableformat}%
\@@tablehead}% Added JB 15/2/91
%
% % this is \end{supertabular}
\def\endsupertabular{%
\ifx\@table@last@tail\undefined%
\@tabletail%
\else%
\@table@last@tail%
\fi% Added JB 4/2/91
%removed JB \noalign{\global\let\\=\@oldcr}%
% \let\@@startpbox=\@startpbox%
% \let\@@endpbox=\@endpbox%
\end{tabular}
% % restore old \@tabularcr
\let\@tabularcr\@@tabularcr % Added JB 4/2/91
% % Check if we have to insert a caption
\if@topcaption
\else
\@process@tablecaption
% % restore to default behaviour
\@topcaptiontrue
\fi
%+
% Restore the meaning of \verb=\\= to the one it had before the start
% of this environment. Also re-initialize some control-sequences
%-
\global\let\\=\@oldcr
\let\@table@first@head\undefined % For the next ocurrence
\let\@table@last@tail\undefined % of this environment
\global\let\@process@tablecaption\relax
}
%
% % Here is the definition of supertabular*
\newif\ifstar
\newdimen\tabularwidth
\@namedef{supertabular*}#1#2 {% modified JB (15.2.91)
% % before it was \edef\tableformat,
% % but gave error with @{\hspace{..}} !
\def\tableformat{\string#2} % store preamble
\tabularwidth=#1 % The total width of the tabular
\global\startrue % remember this is the *-version
%
% % Check if we have to insert a caption
\if@topcaption\@process@tablecaption\fi
%
\def\baslineskp{\baselineskip}
\calmidlineheight% estimate height of a normal line
\calpage % calculate max. pagesize and startpoint
%
%
% % save old \@tabularcr
\let\@@tabularcr\@tabularcr% Added JB 4/2/91
% % Now insert the definition of \@stabularcr
\let\@tabularcr\@stabularcr% Added JB 4/2/91
% % save old \\
\global\let\@oldcr=\\
%
% % activate new parbox algorithm
\let\@@startpbox=\@sstartpbox
\let\@@endpbox=\@sendpbox
%
% The same modification as for \tabular 15.2.91
\ifx\@table@first@head\undefined
\let\@@tablehead\@tablehead
\else
\let\@@tablehead\@table@first@head
\fi% Added JB 4/2/91
% % start normal tabular environment
\begin{tabular*}{\tabularwidth}{\tableformat}%
%
%removed JB \noalign{\global\let\\=\@stabularcr}
\@@tablehead}%
% % this is \end{supertabular*}
\@namedef{endsupertabular*}{%
\ifx\@table@last@tail\undefined%
\@tabletail%
\else%
\@table@last@tail%
\fi% Added JB 4/2/91
%removed JB \noalign{\global\let\\=\@oldcr}%
\end{tabular*}
% % restore old \@tabularcr
\let\@tabularcr\@@tabularcr
% \let\@@startpbox=\@startpbox%
% \let\@@endpbox=\@endpbox%
% Check if we have to insert a caption
\if@topcaption
\else
\@process@tablecaption
% restore to default behaviour
\@topcaptiontrue
\fi
%+
% Restore the meaning of \verb=\\= to the one it had before the start
% of this environment. Also re-initialize some control-sequences
%-
\global\let\\=\@oldcr
\let\@table@first@head\undefined % For the next ocurrence
\let\@table@last@tail\undefined % of this environment
\global\let\@process@tablecaption\relax}
%
\def\nextline{% %%% algorithm to calculate the pagebreaks %%%
\noalign{\ifnum\parboxheight<\midlineheight
% V3.6e, non-empty line, but empty parbox, then \parboxheight might
% be non-zero, but too small thereby breaking the algorithm.
% % if no p-arg add `normal' line height
\advance\actsize by \midlineheight
% % \addspace is value #1 of \\[#1]
\global\advance\actsize by \addspace
\else
% % if p-arg add height of box and more
\global\advance\actsize by \parboxheight
\divide\parboxheight by 11\relax
\global\advance\actsize by \parboxheight%
\global\parboxheight=0pt
\fi
\global\addspace=0pt}%
% % when page becomes full:
\ifnum\actsize<\maxsize
%
% This line is necessary because the tablehead has to be inserted *after*
% the \if\else\fi-clause. For this purpose \next is used. In the middle
% of tableprocessing it shoud be an *empty* macro (*not* \relax).
% (15.2.91)
\noalign{\global\let\next\@empty}
\else
% % output \tabletail, close tabular
% % output all material and start a
% % fresh new page
\@tabletail
\ifstar% % Added 16-10-90
\end{tabular*}%
\else%
\end{tabular}%
\fi
\if@twocolumn% % added 10.05.89
\if@firstcolumn% %
\newpage% %
\else% %
\clearpage% %
\fi% %
\twocolsize=\textheight% % added 06.06.89
\advance\twocolsize by -\@colroom% % "
\global\actsize=\twocolsize% % "
% The following lined added 27/6/91 like in the definition of \calpage
\global\advance\actsize by \midlineheight
\else %
\clearpage %
\global\actsize=\midlineheight%
\fi %
\let\next\@tablehead% % Added 15.2.91
\ifstar% % Added 16-10-90
\begin{tabular*}{\tabularwidth}{\tableformat}%
\else%
\begin{tabular}{\tableformat}%
\fi%
%removed JB \noalign{\global\let\\=\@stabularcr} % added 10.05.89
%removed JB \@tablehead%
\fi\next}% % Added \next 15.2.91