erstkiffelheft/ltablex.sty

238 lines
5.9 KiB
Plaintext
Raw Normal View History

2011-11-07 20:33:32 +01:00
%%
%% This is file ltablex.sty (v1.0, November 1995)
%%
%%
%% Author: Anil K. Goel (akgoel@uwaterloo.ca)
%%
%%
%% Copyright (C) QNX Software Systems Ltd. 1995
%% All rights reserved.
%% Please send any comments/suggetions to: latex@qnx.com
%%
%% This system is distributed in the hope that it will be useful
%% to others, but WITHOUT ANY WARRANTY; without even the implied
%% warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
%%
%%
%% The file modifies the tabularx environment to
%% combine the features of the tabularx package
%% (auto-sized columns in a fixed width table)
%% with those of the longtable package
%% (multi-page tables).
%%
%% The tables are typeset using the tabularx environment
%% and the longtable environment is used internally to
%% handle multi-page tables. The \setlongtables feature
%% is used, and, therefore, the document should be
%% run through latex twice.
%%
%% Another feature that has been added is to treat the X
%% columns like 'l' columns if the table contents would allow
%% that to happen without exceeding the specified width of
%% the table. In other words, the specified width is
%% treated as the maximum allowed and not the exact width
%% of the table. This feature is the default but can be
%% disabled (or enabled) with \keepXColumns (or \convertXColumns).
%%
%% Caveats:
%% . The document needs to be latexed a couple times in general.
%% . In general, it is necessary to remove the .aux file before
%% the first latex run on the document.
%% . The table should not be larger than TeX's memory capacity
%%
%%
%% Here is a a simple usage example:
%%
%%
%% \documentclass{article}
%%
%% \usepackage{ltablex}
%%
%% \textheight=4in
%%
%% \begin{document}
%%
%% % we want a table that is \textwidth long, has 4 columns, columns 1
%% % and 3 are auto sized with the 3rd columns being 3 times wider than
%% % the first column.
%% %
%%
%%
%% \begin{tabularx}{\linewidth}%
%% {|>{\setlength{\hsize}{.5\hsize}\raggedright\arraybackslash}X| % col 1; auto-sized ragged right
%% c| % col 2; default centered
%% >{\setlength{\hsize}{1.5\hsize}\raggedleft\arraybackslash}X|% col 3; auto-sized ragged left
%% l|} % col 4; default left-justified
%%
%% \caption*{The Table Caption}\\
%% \hline
%% F-Head1 & F-Head2 & F-Head3 & F-Head4\\
%% \hline
%% \hline
%% \endfirsthead
%% \hline
%% Head1 & Head2 & Head3 & Head4\\
%% \hline
%% \hline
%% \endhead
%%
%% \hline
%% \hline
%% Foot1 & Foot2 & Foot3 & Foot4\\
%% \hline
%% \endfoot
%%
%%
%% \hline
%% \hline
%% L-Foot1 & L-Foot2 & L-Foot3 & L-Foot4\\
%% \hline
%% \endlastfoot
%%
%% This is a very long sentence not likely to fit&
%% not too long&
%% This is another very long sentence not likely to fit&
%% not long\\
%%
%% \hline
%% filler & filler & filler & filler\\
%%
%% \hline
%% This is a very long sentence not likely to fit&
%% not too long&
%% This is another very long sentence not likely to fit&
%% not long\\
%%
%% \hline
%% This is a very long sentence not likely to fit&
%% not too long&
%% This is another very long sentence not likely to fit&
%% not long\\
%%
%% \hline
%% This is a very long sentence not likely to fit&
%% not too long&
%% This is another very long sentence not likely to fit&
%% not long\\
%%
%% \end{tabularx}
%%
%% \begin{tabularx}{\linewidth}{|c|X|c|}
%% \hline
%% a &convert X to l & b\\
%% \hline
%% \end{tabularx}
%%
%% \keepXColumns
%% \begin{tabularx}{\linewidth}{|c|X|c|}
%% \hline
%% a &retain X & b\\
%% \hline
%% \end{tabularx}
%%
%% \convertXColumns
%% \begin{tabularx}{\linewidth}{|c|X|c|}
%% \hline
%% a &convert X to l & b\\
%% \hline
%% \end{tabularx}
%%
%%
%% \end{document}
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{ltablex}[1995/11/06 v1.0 Modified tabularx]
\RequirePackage{longtable}[1994/12/08]
\RequirePackage{tabularx}[1994/02/03]
\newif\ifTX@convertX@
\TX@convertX@true
\newcommand\keepXColumns{
\TX@convertX@false
}
\newcommand\convertXColumns{
\TX@convertX@true
}
\renewcommand\TX@endtabularx{%
\expandafter\TX@newcol\expandafter{\tabularxcolumn{\TX@col@width}}%
\let\verb\TX@verb
\def\@elt##1{\global\value{##1}\the\value{##1}\relax}%
\edef\TX@ckpt{\cl@@ckpt}%
\let\@elt\relax
\TX@old@table=\maxdimen
\TX@col@width=\TX@target
\global\TX@cols=\@ne
\TX@typeout@
{\@spaces Table Width\@spaces Column Width\@spaces X Columns}%
%
% define \endhead, etc. to be \\ so that in this part
% of the process they are just rows
%
\let\savecaption\caption
\def\caption{\\}
\let\saveendhead\endhead
\def\endhead{\\}
\let\saveendfirsthead\endfirsthead
\def\endfirsthead{\\}
\let\saveendfoot\endfoot
\def\endfoot{\\}
\let\saveendlastfoot\endlastfoot
\def\endlastfoot{\\}
%
%
\ifTX@convertX@
\TX@trial{\def\NC@rewrite@X{\NC@find l}}
\ifdim\wd\@tempboxa<\TX@target
\TX@newcol{l}
\else
\TX@convertX@false
\fi
\fi
\ifTX@convertX@
\relax
\else
\TX@trial{\def\NC@rewrite@X{%
\global\advance\TX@cols\@ne\NC@find p{\TX@col@width}}}%
\loop
\TX@arith
\ifTX@
\TX@trial{}%
\repeat
\fi
{\let\@footnotetext\TX@ftntext\let\@xfootnotenext\TX@xftntext
% we may as well set \LTchunksize to be \maxdimen as the whole
% thing is already in memory anyway so we may as well do it in one
% chunk. if it is too big for one chunk we are already dead..
\LTchunksize\maxdimen
%
% restore \endhead, etc.
%
\let\caption\savecaption
\let\endhead\saveendhead
\let\endfirsthead\saveendfirsthead
\let\endfoot\saveendfoot
\let\endlastfoot\saveendlastfoot
%
\expandafter\longtable
\the\toks@
\endlongtable
}%
\global\TX@ftn\expandafter{\expandafter}\the\TX@ftn
\ifnum0=`{\fi}%
\end{tabularx}
}
%
% activate column width reading from the .aux file
%
\setlongtables