%
%% User documentation and source for ltxtable package
%% (C) 1995 David Carlisle
%
% Save this file as ltxtable.tex, then
% latex ltxtable
%
% This will write the ltxtable.sty package file on to your system
% and produce some rather terse typeset documentation.
%
\begin{filecontents}{ltx1.tex}
\begin{longtable}{|cXX|}
the & head& line\endhead
the & foot& line\endfoot
a&b&b\\
\multicolumn{2}{c}{xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx}&c\\
a&b&b b b b b b b b b b b b b b b b b b b b b b b b b b \\
a a& b b& c c\\
a a& b b&
c c c c c c c c c c c c c c c c c c c c c c c c c c c c c cc cc\\
a a aaaa& b b& c ccccc\\
\end{longtable}
\end{filecontents}
\begin{filecontents}{ltxtable.sty}
%
%% ltxtable package (C) 1995 David Carlisle
%
% User documentation is in the file ltxtable.tex
%
% \begin{macrocode}
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{ltxtable}
[1995/12/11 v0.2 longtable/tabularx merge (DPC)]
% \end{macrocode}
%
% May as get these in, going to need them...
% \begin{macrocode}
\RequirePackage{tabularx,longtable}
% \end{macrocode}
%
% \begin{macrocode}
\def\LTXtable#1#2{%
\begingroup
\TX@target#1\relax
\expandafter\TX@newcol\expandafter{\tabularxcolumn{\TX@col@width}}%
\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}%
% \end{macrocode}
% Need to modify |\TX@trial| so that |longtable| functions are
% Subverted to do the measuring that |tabularx| normally does.
% Also during the trial runs each `chunk' is not unboxed so it just
% gets thrown away when the next chunk starts.
% \begin{macrocode}
\def\TX@trial##1{%
\setbox\@tempboxa=\hbox{%
% \end{macrocode}
% |\multicolum| A sad tale, For now just stop |longtable| messing with
% it, so that |tabularx| can mess with it.
% \begin{macrocode}
\let\LTmulticolumn\multicolumn
% \end{macrocode}
%
% \begin{macrocode}
\def\endlongtable{%
\LT@echunk
\global\setbox\@ne\hbox{\unhbox\@ne}%
\kern\wd\@ne
\LT@get@widths%
\endgroup}%
% \end{macrocode}
%
% \begin{macrocode}
\def\LT@ntabularcr{%
\ifnum0=`{}\fi
\LT@echunk
\LT@get@widths
\LT@bchunk}%
% \end{macrocode}
%
% \begin{macrocode}
\def\LT@argtabularcr[####1]{%
\ifnum0=`{}\fi
\ifdim ####1>\z@
\unskip\@xargarraycr{####1}\else \@yargarraycr{####1}\fi
\LT@echunk
\LT@get@widths
\LT@bchunk}%
% \end{macrocode}
%
% \begin{macrocode}
% Any extra commands. This is used on the first run to count the number
% of {\ttfamily X} columns.
% \begin{macrocode}
##1\relax
% \end{macrocode}
% Added at v1.05: dissable "\write"s during a trial run. This trick is
% from the \TeX{}Book.
% \begin{macrocode}
\let\immediate=\relax\def\write####1####{{\afterassignment}\toks@=}%
% \end{macrocode}
% Turn off warnings (see appendix D). Also prevent them being turned
% back on by setting the parameter names to be registers.
% \begin{macrocode}
\hbadness=\@M\hfuzz=\maxdimen
\let\hbadness=\@tempcnta\let\hfuzz=\@tempdima
% \end{macrocode}
% Make the table, and finish the hbox.
% Since v1.06, "\toks@" contains the preamble specification,
% and possible optional argument, as well as the table body.
% Well it does in |tabularx|, here the body is in an external file so
% just input it.
% \begin{macrocode}
\input{#2}\unskip}%
% \end{macrocode}
% Since v1.05 reset all \LaTeX\ counters, by executing "\TX@ckpt".
% \begin{macrocode}
\TX@ckpt
% \end{macrocode}
% Print some statistics.
% Added "\TX@align" in v1.05, to line up the columns.
% \begin{macrocode}
\TX@typeout@{\@spaces
\expandafter\TX@align
\the\wd\@tempboxa\space\space\space\space\space\@@
\expandafter\TX@align
\the\TX@col@width\space\space\space\space\space\@@
\@spaces\the\TX@cols}}%
% \end{macrocode}
% \end{macro}
\TX@trial{\def\NC@rewrite@X{%
\global\advance\TX@cols\@ne\NC@find p{\TX@col@width}}}%
\let\LT@make@row\LT@blank@row
\loop
\TX@arith
\ifTX@
\TX@trial{}%
\repeat
% \end{macrocode}
% On the last run, may as well run with |\setlongtables|.
% \begin{macrocode}
\let\LT@make@row\relax
\input{#2}%
\endgroup}
% \end{macrocode}
\end{filecontents}
\documentclass{article}
\setlength{\textheight}{5in}
\usepackage{ltxtable}
\tracingtabularx
\begin{document}
\title{ltxtable: longtable meets tabularx}
\author{David Carlisle}
\date{1995/12/11}
\maketitle
Since \texttt{tabularx} was put on the archives in 1992 or so I have
had a constant stream of email messages asking for a merged
\texttt{tabularx}/\texttt{longtable} package.
Well here it is! (First draft, anyway.)
Rules of the game:
\begin{itemize}
\item Put the \texttt{longtable} environment using \texttt{tabularx}
style \texttt{X} column specifiers in a file \emph{file} on its
own. (You can use the \texttt{filecontents} environment to include
it back into the main document file, if you wish.)
\item If you want to input the file at some point, using the
\texttt{X} columns to force the table width to be \emph{width} wide,
go \verb|\LTXtable{|\emph{width}\verb|}{|\emph{file}\verb|}|.
\item \verb|\multicolumn|: If you read the \texttt{tabularx} and
\texttt{longtable} docs you will find that both packages have a lot
of fun with this command. In order to keep my sanity, for this
merger I disable \texttt{longtable}'s version of \verb|\multicolumn|.
This means that the column widths calculated are not always the same
(not as good as) the widths that would be calculated by an
equivalent \texttt{tabularx} environment. Perhaps one day I will do
something about this. Perhaps.
\end{itemize}
\clearpage
\centering
A 300pt rule, just so can see the required width.
\mbox{\vrule width 300pt height 1pt}
First a tabularx
\begingroup
\renewenvironment{longtable}{\noindent\tabularx{300pt}}{\endtabularx}
\def\endhead{\\}\def\endfoot{\rlap{ !!!}\\}
\input{ltx1}
\endgroup
Then a longtable
\LTXtable{300pt}{ltx1}
\end{document}
1995/11/07 v0.1 first release
1995/12/11 v0.2 (Petr Sojka) Typos fixed so the package works!
(Initial release *always* read the same table file,
ignoring the argument...)
|