1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224
|
%
%% 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...)
|