home *** CD-ROM | disk | FTP | other *** search
- % @stylefile{Super tabular
- % shortpackagename = {supertab},
- % longpackagename = {supertabular},
- % baseformats = {\LaTeX 2.09},
- % version = {3.6h},
- % date = {1992-07-03},
- % 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
- % J.L.Braams@research.ptt.nl PTT Research Leidschendam (NL)
- %
- % 10.07.92 - Still a problem in the combination of supertabular with array.sty
- % V 3.6h I overlooked the fact that array doesn't use \@tabulacr anymore
- % and it behaves differently with respect to \@startparbox.
- % 03.07.92 - A problem in the combination of supertabular with array.sty
- % V 3.6g It can be solved by removing the \string from \def\tableformat
- % and passing \tableformat expanded to \tabular.
- % 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}
- \def\@sastartpbox#1{\bgroup\hsize#1%
- \global\advance\maxsize by -\pargcorrection
- \global\pargcorrection=0pt
- \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=\z@
- \box\tabparbox\hfil}
- \def\@saendpbox{\unskip\strut\par\egroup
- \computedimens=\ht\tabparbox
- \advance\computedimens by \dp\tabparbox
- \ifnum\parboxheight<\computedimens
- \global\parboxheight=\computedimens
- \fi
- \computedimens=\z@
- \unvbox\tabparbox\egroup}
- %
- % %%%% Here start really new supertabular commands %%%%
- %
- % % estimate height of normal line
- % % regarding \array- and \baselinestretch
- \def\calmidlineheight{\midlineheight=\arraystretch \baslineskp
- \global\advance\midlineheight by 1\p@
- \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%
- \expandafter\tabular\expandafter{\tableformat}
- \@tabletail\endtabular}
- \global\advance\maxsize by-\ht\@tempboxa}
- % Here is the definition of supertabular
- % modified JB (15.2.91)
- \def\supertabular#1 {\def\tableformat{#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
- %
- \ifx\undefined\@classix % then array.sty is not loaded
- % % 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
- \else
- \let\@@tabularcr\@arraycr
- \let\@arraycr\@stabularcr
- \let\org@startpbox=\@startpbox
- \let\org@endpbox=\@endpbox
- \let\@startpbox=\@sastartpbox
- \let\@endpbox=\@saendpbox
- \fi
- %
- % 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
- \expandafter\tabular\expandafter{\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
- \endtabular
- % % restore old \@tabularcr
- \ifx\undefined\@classix % then array.sty is not loaded
- \let\@tabularcr\@@tabularcr % Added JB 4/2/91
- \else
- \let\@arraycr\@@tabularcr
- \let\@startpbox=\org@startpbox
- \let\@endpbox=\org@endpbox
- \fi
- % % 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 {\def\tableformat{#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
- %
- %
- \ifx\undefined\@classix % then array.sty is not loaded
- % % 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
- \else
- \let\@@tabularcr\@arraycr
- \let\@arraycr\@stabularcr
- \let\org@startpbox=\@startpbox
- \let\org@endpbox=\@endpbox
- \let\@startpbox=\@sastartpbox
- \let\@endpbox=\@saendpbox
- \fi
- %
- % 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
- \expandafter\csname tabular*\expandafter\endcsname
- \expandafter{\expandafter\tabularwidth\expandafter}%
- \expandafter{\tableformat}%
- %
- \@@tablehead}%
- % % this is \end{supertabular*}
- \@namedef{endsupertabular*}{%
- \ifx\@table@last@tail\undefined
- \@tabletail
- \else
- \@table@last@tail
- \fi% Added JB 4/2/91
- \csname endtabular*\endcsname
- % % restore old \@tabularcr
- \ifx\undefined\@classix % then array.sty is not loaded
- \let\@tabularcr\@@tabularcr % Added JB 4/2/91
- \else
- \let\@arraycr\@@tabularcr
- \let\@startpbox=\org@startpbox
- \let\@endpbox=\org@endpbox
- \fi
- % 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
- \csname endtabular*\endcsname
- \else
- \endtabular
- \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
- \expandafter\csname tabular*\expandafter\endcsname
- \expandafter{\expandafter\tabularwidth\expandafter}%
- \expandafter{\tableformat}%
- \else
- \expandafter\tabular\expandafter{\tableformat}%
- \fi
- \fi\next}% % Added \next 15.2.91
-