2 %% This is file `tabulary.sty',
3 %% generated with the docstrip utility.
5 %% The original source files were:
7 %% tabulary.dtx (with options: `package')
10 %% File `tabulary.dtx'.
11 %% Copyright (C) 1995 1996 2003 2008 David Carlisle
12 %% This file may be distributed under the terms of the LPPL.
13 %% See 00readme.txt for details.
15 \NeedsTeXFormat{LaTeX2e}
16 \ProvidesPackage{tabulary}
17 [2008/12/01 v0.9 tabulary package (DPC)]
18 \RequirePackage{array}
20 \DeclareOption{debugshow}{\catcode`\Z=9\relax}
22 \def\arraybackslash{\let\\=\@arraycr}
24 \unskip\ifhmode\nobreak\fi\vrule\@width\z@\@height\z@\@depth\dp#1}
28 \let\endTY@final\endtabular
31 \edef\TY@{\@currenvir}%
37 \@whilesw\if@tempswa\fi{%
39 \expandafter\ifx\csname TY@F\the\count@\endcsname\relax
42 \expandafter\let\csname TY@SF\the\count@\expandafter\endcsname
43 \csname TY@F\the\count@\endcsname
44 \global\expandafter\let\csname TY@F\the\count@\endcsname\relax
45 \expandafter\let\csname TY@S\the\count@\expandafter\endcsname
46 \csname TY@\the\count@\endcsname
50 \global\TY@tablewidth\z@
51 \global\TY@linewidth#1\relax
52 Z\message{^^J^^JTable^^J%
53 Z Target Width: \the\TY@linewidth^^J%
54 Z \string\tabcolsep: \the\tabcolsep\space
55 Z \string\arrayrulewidth: \the\arrayrulewidth\space
56 Z \string\doublerulesep: \the\doublerulesep^^J%
57 Z \string\tymin: \the\tymin\space
58 Z \string\tymax: \the\tymax^^J}%
59 \let\@classz\TY@classz
62 \let\TY@@mkpream\@mkpream
65 \if@firstamp \@firstampfalse \else
66 \global\advance\TY@count\@ne
67 \edef\@preamble{\@preamble &}\fi
71 \@addtopreamble{\hskip\col@sep}}%
72 \let\@arrayrule\TY@arrayrule
73 \let\@classvi\TY@classvi
74 \def\@classv{\save@decl
75 \expandafter\NC@ecs\@nextchar\extracolsep{}\extracolsep\@@@
76 \sbox\z@{\d@llarbegin\@nextchar\d@llarend}%
78 \@addtopreamble{\d@llarbegin\the@toks\the\count@\relax\d@llarend}%
80 \global\let\@mkpream\TY@@mkpream
83 \TY@subwidth\arrayrulewidth
84 \@addtopreamble \vline}
85 \def\TY@classvi{\ifcase \@lastchclass
87 \TY@subwidth\doublerulesep
88 \@addtopreamble{\hskip \doublerulesep}\or
93 \setbox\z@\hbox\bgroup
95 \let\equation$\let\endequation$%
97 \let\d@llarbegin\begingroup\let\d@llarend\endgroup
98 \let\@mkpream\TY@mkpream
99 \def\multicolumn##1##2##3{\multispan##1\relax}%
100 \CT@start\TY@tabarray}
101 \def\TY@tabarray{\@ifnextchar[{\TY@array}{\@array[t]}}
102 \def\TY@array[#1]{\@array[t]}
104 \expandafter#1\csname TY@\the\TY@count\endcsname}
107 \advance\dimen@-#1\relax
108 \TY@width\xdef{\the\dimen@}%
109 \global\advance\TY@linewidth-#1\relax}
112 \expandafter\TY@tab\the\toks@
114 {\xdef\TY@save@row{}%
116 \advance\TY@count\m@ne
118 \xdef\TY@save@row{\TY@save@row&\omit}%
120 \endarray\global\setbox1=\lastbox\setbox0=\vbox{\unvbox1
121 \unskip\global\setbox1=\lastbox}\egroup
123 \divide\dimen@\TY@count
125 \TY@warn{tymin too large (\the\tymin), resetting to \the\dimen@}%
128 \setbox\tw@=\hbox{\unhbox\@ne
132 Z \message{ecs=\the\@tempdima^^J}%
133 \global\advance\TY@linewidth-\@tempdima
138 Z \message{Col \the\TY@count: Initial=\the\wd\tw@\space}%
141 Z \message{> max\space}%
143 Z \message{ \@spaces\space}%
146 Z \message{\the\dimen@\space}%
147 \advance\dimen@\wd\tw@
148 Z \message{Final=\the\dimen@\space}%
149 \TY@width\xdef{\the\dimen@}%
152 \global\advance\TY@linewidth-\dimen@
153 \expandafter\xdef\csname TY@F\the\TY@count\endcsname
156 \expandafter\ifx\csname TY@F\the\TY@count\endcsname\z@
158 \global\advance\TY@linewidth-\dimen@
159 \expandafter\xdef\csname TY@F\the\TY@count\endcsname
163 \global\advance\TY@tablewidth\dimen@
164 \global\expandafter\let\csname TY@F\the\TY@count\endcsname
167 \advance\TY@count\m@ne
175 {\expandafter\TY@final\the\toks@\endTY@final}%
178 \@whilesw\if@tempswa\fi{%
180 \expandafter\ifx\csname TY@SF\the\count@\endcsname\relax
183 \global\expandafter\let\csname TY@F\the\count@\expandafter\endcsname
184 \csname TY@SF\the\count@\endcsname
185 \global\expandafter\let\csname TY@\the\count@\expandafter\endcsname
186 \csname TY@S\the\count@\endcsname
192 \let\TY@checkmin\relax
193 \ifdim\TY@tablewidth>\z@
194 \Gscale@div\TY@ratio\TY@linewidth\TY@tablewidth
195 \ifdim\TY@tablewidth <\TY@linewidth
199 \TY@warn{No suitable columns!}%
203 Z \message{^^JLine Width: \the\TY@linewidth,
204 Z Natural Width: \the\TY@tablewidth,
205 Z Ratio: \TY@ratio^^J}%
208 \ifnum\count@<\TY@count
210 \ifdim\csname TY@F\the\count@\endcsname>\tymin
211 \dimen@\csname TY@\the\count@\endcsname
212 \dimen@\TY@ratio\dimen@
214 Z \message{Column \the\count@\space ->}%
215 \global\expandafter\let\csname TY@F\the\count@\endcsname\tymin
216 \global\advance\TY@linewidth-\tymin
217 \global\advance\TY@tablewidth-\csname TY@\the\count@\endcsname
218 \let\TY@checkmin\TY@@checkmin
220 \expandafter\xdef\csname TY@F\the\count@\endcsname{\the\dimen@}%
221 \advance\@tempdima\csname TY@F\the\count@\endcsname
224 Z \dimen@\csname TY@F\the\count@\endcsname\message{\the\dimen@, }%
226 Z \message{^^JTotal:\the\@tempdima^^J}%
228 \let\TY@@checkmin\TY@checkmin
229 \newdimen\TY@linewidth
230 \def\tyformat{\everypar{{\nobreak\hskip\z@skip}}}
235 \def\@testpach{\@chclass
236 \ifnum \@lastchclass=6 \@ne \@chnum \@ne \else
237 \ifnum \@lastchclass=7 5 \else
238 \ifnum \@lastchclass=8 \tw@ \else
239 \ifnum \@lastchclass=9 \thr@@
241 \ifnum \@lastchclass = 10 \else
242 \edef\@nextchar{\expandafter\string\@nextchar}%
244 \if \@nextchar c\z@ \else
245 \if \@nextchar l\@ne \else
246 \if \@nextchar r\tw@ \else
247 \if \@nextchar C7 \else
248 \if \@nextchar L8 \else
249 \if \@nextchar R9 \else
250 \if \@nextchar J10 \else
252 \if\@nextchar |\@ne \else
253 \if \@nextchar !6 \else
254 \if \@nextchar @7 \else
255 \if \@nextchar <8 \else
256 \if \@nextchar >9 \else
259 \if \@nextchar m\thr@@\else
260 \if \@nextchar p4 \else
261 \if \@nextchar b5 \else
262 \z@ \@chclass \z@ \@preamerr \z@ \fi \fi \fi \fi\fi \fi \fi\fi \fi
263 \fi \fi \fi \fi \fi \fi \fi \fi \fi \fi \fi}
268 \global\advance\TY@count\@ne
271 \let\raggedright\noindent
272 \let\raggedleft\indent
273 \let\arraybackslash\relax
276 \global\expandafter\let\csname TY@F\the\TY@count\endcsname\z@
279 \global\expandafter\let\csname TY@F\the\TY@count\endcsname\z@
283 \hfil \d@llarbegin\insert@column\d@llarend \hfil \or
285 \d@llarbegin \insert@column \d@llarend \hfil \or
286 \hfil\kern\z@ \d@llarbegin \insert@column \d@llarend \or
287 $\vcenter\@startpbox{\@nextchar}\insert@column \@endpbox $\or
288 \vtop \@startpbox{\@nextchar}\insert@column \@endpbox \or
289 \vbox \@startpbox{\@nextchar}\insert@column \@endpbox \or
290 \d@llarbegin \insert@column \d@llarend \or% dubious "s" case
292 \TY@box\raggedright\or
293 \TY@box\raggedleft\or
298 \hfil \d@llarbegin\insert@column\d@llarend \hfil \else
300 \kern\z@%<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
301 \d@llarbegin \insert@column \d@llarend \hfil \else
303 \hfil\kern\z@ \d@llarbegin \insert@column \d@llarend \else
305 \d@llarbegin \insert@column \d@llarend
308 \vtop \@startpbox{\csname TY@F\the\TY@count\endcsname}%
309 #1\arraybackslash\tyformat
310 \insert@column\@endpbox}
311 \newdimen\TY@tablewidth
312 \def\Gscale@div#1#2#3{%
313 \setlength\dimen@{#3}%
315 \PackageError{graphics}{Division by 0}\@eha
318 \edef\@tempd{\the\dimen@}%
319 \setlength\dimen@{#2}%
326 \ifdim\dimen@<8192\p@
330 \dimen@ii=\@tempd\relax
331 \divide\dimen@ii\count@
332 \divide\dimen@\dimen@ii
333 \edef#1{\strip@pt\dimen@}}
334 \long\def\TY@get@body#1\end
335 {\toks@\expandafter{\the\toks@#1}\TY@find@end}
338 \ifx\@tempa\TY@\def\@tempa{\end{#1}}\expandafter\@tempa
339 \else\toks@\expandafter
340 {\the\toks@\end{#1}}\expandafter\TY@get@body\fi}
342 \PackageWarning{tabulary}}
345 \@ifpackageloaded{colortbl}{%
346 \expandafter\def\expandafter\@mkpream\expandafter#\expandafter1%
348 \expandafter\let\expandafter\CT@setup\expandafter\relax
349 \expandafter\let\expandafter\CT@color\expandafter\relax
350 \expandafter\let\expandafter\CT@do@color\expandafter\relax
351 \expandafter\let\expandafter\color\expandafter\relax
352 \expandafter\let\expandafter\CT@column@color\expandafter\relax
353 \expandafter\let\expandafter\CT@row@color\expandafter\relax
355 \let\TY@@mkpream\@mkpream
360 \global\advance\TY@count\@ne
363 \let\raggedright\noindent
364 \let\raggedleft\indent
365 \let\arraybackslash\relax
367 \expandafter\CT@extract\the\toks\@tempcnta\columncolor!\@nil
369 \global\expandafter\let\csname TY@F\the\TY@count\endcsname\z@
372 \global\expandafter\let\csname TY@F\the\TY@count\endcsname\z@
375 \setbox\z@\hbox\bgroup\bgroup
377 \hskip\stretch{.5}\kern\z@
378 \d@llarbegin\insert@column\d@llarend\hskip\stretch{.5}\or
379 \kern\z@%<<<<<<<<<<<<<<<<<<<<<<<<<<<
380 \d@llarbegin \insert@column \d@llarend \hfill \or
381 \hfill\kern\z@ \d@llarbegin \insert@column \d@llarend \or
382 $\vcenter\@startpbox{\@nextchar}\insert@column \@endpbox $\or
383 \vtop \@startpbox{\@nextchar}\insert@column \@endpbox \or
384 \vbox \@startpbox{\@nextchar}\insert@column \@endpbox \or
385 \d@llarbegin \insert@column \d@llarend \or% dubious s case
387 \TY@box\raggedright\or
388 \TY@box\raggedleft\or
399 \advance\@tempdima\minrowclearance
400 \vrule\@height\@tempdima\@width\z@
404 \TY@subwidth\arrayrulewidth
405 \@addtopreamble{{\CT@arc@\vline}}}%
406 \def\TY@classvi{\ifcase \@lastchclass
408 \TY@subwidth\doublerulesep
410 \@addtopreamble{\hskip\doublerulesep}%
412 \@addtopreamble{{\CT@drsc@\vrule\@width\doublerulesep}}%
422 \uppercase{\gdef\TX@verb{%
423 \leavevmode\null\TX@vwarn
424 {\ifnum0=`}\fi\ttfamily\let\\\ignorespaces
425 \@ifstar{\let~*\TX@vb}{\TX@vb}}}}
426 \def\TX@vb#1{\def\@tempa##1#1{\toks@{##1}\edef\@tempa{\the\toks@}%
427 \expandafter\TX@v\meaning\@tempa\\ \\\ifnum0=`{\fi}}\@tempa!}
428 \def\TX@v#1!{\afterassignment\TX@vfirst\let\@tempa= }
430 \catcode`\*=\catcode`\#
434 \def\@tempb{\TX@v@#}%
437 \if\@tempa\space~\else\@tempa\fi
441 \TX@v@hash*1##\relax\if*2\\\else~\expandafter\TX@v@\fi*2}
442 \gdef\TX@v@hash*1##*2{*1\ifx*2\relax\else#\expandafter\TX@v@hash\fi*2}
445 \@warning{\noexpand\verb may be unreliable inside tabularx/y}%
446 \global\let\TX@vwarn\@empty}
449 %% End of file `tabulary.sty'.