| |
1 %% |
| |
2 %% This is file `tabulary.sty', |
| |
3 %% generated with the docstrip utility. |
| |
4 %% |
| |
5 %% The original source files were: |
| |
6 %% |
| |
7 %% tabulary.dtx (with options: `package') |
| |
8 %% DRAFT VERSION |
| |
9 %% |
| |
10 %% File `tabulary.dtx'. |
| |
11 %% Copyright (C) 1995 1996 2003 David Carlisle |
| |
12 %% This file may be distributed under the terms of the LPPL. |
| |
13 %% See 00readme.txt for details. |
| |
14 %% |
| |
15 \NeedsTeXFormat{LaTeX2e} |
| |
16 \ProvidesPackage{tabulary} |
| |
17 [2007/10/02 v0.9 tabulary package (DPC)] |
| |
18 \RequirePackage{array} |
| |
19 \catcode`\Z=14 |
| |
20 \DeclareOption{debugshow}{\catcode`\Z=9\relax} |
| |
21 \ProcessOptions |
| |
22 \def\arraybackslash{\let\\=\@arraycr} |
| |
23 \def\@finalstrut#1{% |
| |
24 \unskip\ifhmode\nobreak\fi\vrule\@width\z@\@height\z@\@depth\dp#1} |
| |
25 \newcount\TY@count |
| |
26 \def\tabulary{% |
| |
27 \let\TY@final\tabular |
| |
28 \let\endTY@final\endtabular |
| |
29 \TY@tabular} |
| |
30 \def\TY@tabular#1{% |
| |
31 \edef\TY@{\@currenvir}% |
| |
32 {\ifnum0=`}\fi |
| |
33 \@ovxx\TY@linewidth |
| |
34 \@ovyy\TY@tablewidth |
| |
35 \count@\z@ |
| |
36 \@tempswatrue |
| |
37 \@whilesw\if@tempswa\fi{% |
| |
38 \advance\count@\@ne |
| |
39 \expandafter\ifx\csname TY@F\the\count@\endcsname\relax |
| |
40 \@tempswafalse |
| |
41 \else |
| |
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 |
| |
47 \fi}% |
| |
48 \global\TY@count\@ne |
| |
49 \TY@width\xdef{0pt}% |
| |
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 |
| |
60 \let\verb\TX@verb |
| |
61 \toks@{}\TY@get@body} |
| |
62 \let\TY@@mkpream\@mkpream |
| |
63 \def\TY@mkpream{% |
| |
64 \def\@addamp{% |
| |
65 \if@firstamp \@firstampfalse \else |
| |
66 \global\advance\TY@count\@ne |
| |
67 \edef\@preamble{\@preamble &}\fi |
| |
68 \TY@width\xdef{0pt}}% |
| |
69 \def\@acol{% |
| |
70 \TY@subwidth\col@sep |
| |
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}% |
| |
77 \TY@subwidth{\wd\z@}% |
| |
78 \@addtopreamble{\d@llarbegin\the@toks\the\count@\relax\d@llarend}% |
| |
79 \prepnext@tok}% |
| |
80 \global\let\@mkpream\TY@@mkpream |
| |
81 \TY@@mkpream} |
| |
82 \def\TY@arrayrule{% |
| |
83 \TY@subwidth\arrayrulewidth |
| |
84 \@addtopreamble \vline} |
| |
85 \def\TY@classvi{\ifcase \@lastchclass |
| |
86 \@acol \or |
| |
87 \TY@subwidth\doublerulesep |
| |
88 \@addtopreamble{\hskip \doublerulesep}\or |
| |
89 \@acol \or |
| |
90 \@classvii |
| |
91 \fi} |
| |
92 \def\TY@tab{% |
| |
93 \setbox\z@\hbox\bgroup |
| |
94 \let\[$\let\]$% |
| |
95 \let\equation$\let\endequation$% |
| |
96 \col@sep\tabcolsep |
| |
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]} |
| |
103 \def\TY@width#1{% |
| |
104 \expandafter#1\csname TY@\the\TY@count\endcsname} |
| |
105 \def\TY@subwidth#1{% |
| |
106 \TY@width\dimen@ |
| |
107 \advance\dimen@-#1\relax |
| |
108 \TY@width\xdef{\the\dimen@}% |
| |
109 \global\advance\TY@linewidth-#1\relax} |
| |
110 \def\endtabulary{% |
| |
111 \gdef\@halignto{}% |
| |
112 \let\TY@footnote\footnote% |
| |
113 \def\footnote{}% prevent footnotes from doing anything |
| |
114 \expandafter\TY@tab\the\toks@ |
| |
115 \crcr\omit |
| |
116 {\xdef\TY@save@row{}% |
| |
117 \loop |
| |
118 \advance\TY@count\m@ne |
| |
119 \ifnum\TY@count>\z@ |
| |
120 \xdef\TY@save@row{\TY@save@row&\omit}% |
| |
121 \repeat}\TY@save@row |
| |
122 \endarray\global\setbox1=\lastbox\setbox0=\vbox{\unvbox1 |
| |
123 \unskip\global\setbox1=\lastbox}\egroup |
| |
124 \dimen@\TY@linewidth |
| |
125 \divide\dimen@\TY@count |
| |
126 \ifdim\dimen@<\tymin |
| |
127 \TY@warn{tymin too large (\the\tymin), resetting to \the\dimen@}% |
| |
128 \tymin\dimen@ |
| |
129 \fi |
| |
130 \setbox\tw@=\hbox{\unhbox\@ne |
| |
131 \loop |
| |
132 \@tempdima=\lastskip |
| |
133 \ifdim\@tempdima>\z@ |
| |
134 Z \message{ecs=\the\@tempdima^^J}% |
| |
135 \global\advance\TY@linewidth-\@tempdima |
| |
136 \fi |
| |
137 \unskip |
| |
138 \setbox\tw@=\lastbox |
| |
139 \ifhbox\tw@ |
| |
140 Z \message{Col \the\TY@count: Initial=\the\wd\tw@\space}% |
| |
141 \ifdim\wd\tw@>\tymax |
| |
142 \wd\tw@\tymax |
| |
143 Z \message{> max\space}% |
| |
144 Z \else |
| |
145 Z \message{ \@spaces\space}% |
| |
146 \fi |
| |
147 \TY@width\dimen@ |
| |
148 Z \message{\the\dimen@\space}% |
| |
149 \advance\dimen@\wd\tw@ |
| |
150 Z \message{Final=\the\dimen@\space}% |
| |
151 \TY@width\xdef{\the\dimen@}% |
| |
152 \ifdim\dimen@<\tymin |
| |
153 Z \message{< tymin}% |
| |
154 \global\advance\TY@linewidth-\dimen@ |
| |
155 \expandafter\xdef\csname TY@F\the\TY@count\endcsname |
| |
156 {\the\dimen@}% |
| |
157 \else |
| |
158 \expandafter\ifx\csname TY@F\the\TY@count\endcsname\z@ |
| |
159 Z \message{***}% |
| |
160 \global\advance\TY@linewidth-\dimen@ |
| |
161 \expandafter\xdef\csname TY@F\the\TY@count\endcsname |
| |
162 {\the\dimen@}% |
| |
163 \else |
| |
164 Z \message{> tymin}% |
| |
165 \global\advance\TY@tablewidth\dimen@ |
| |
166 \global\expandafter\let\csname TY@F\the\TY@count\endcsname |
| |
167 \maxdimen |
| |
168 \fi\fi |
| |
169 \advance\TY@count\m@ne |
| |
170 \repeat}% |
| |
171 \TY@checkmin |
| |
172 \TY@checkmin |
| |
173 \TY@checkmin |
| |
174 \TY@checkmin |
| |
175 \TY@count\z@ |
| |
176 \let\TY@box\TY@box@v |
| |
177 \let\footnote\TY@footnote % restore footnotes |
| |
178 {\expandafter\TY@final\the\toks@\endTY@final}% |
| |
179 \count@\z@ |
| |
180 \@tempswatrue |
| |
181 \@whilesw\if@tempswa\fi{% |
| |
182 \advance\count@\@ne |
| |
183 \expandafter\ifx\csname TY@SF\the\count@\endcsname\relax |
| |
184 \@tempswafalse |
| |
185 \else |
| |
186 \global\expandafter\let\csname TY@F\the\count@\expandafter\endcsname |
| |
187 \csname TY@SF\the\count@\endcsname |
| |
188 \global\expandafter\let\csname TY@\the\count@\expandafter\endcsname |
| |
189 \csname TY@S\the\count@\endcsname |
| |
190 \fi}% |
| |
191 \TY@linewidth\@ovxx |
| |
192 \TY@tablewidth\@ovyy |
| |
193 \ifnum0=`{\fi}} |
| |
194 \def\TY@checkmin{% |
| |
195 \let\TY@checkmin\relax |
| |
196 \ifdim\TY@tablewidth>\z@ |
| |
197 \Gscale@div\TY@ratio\TY@linewidth\TY@tablewidth |
| |
198 \ifdim\TY@tablewidth <\linewidth |
| |
199 \def\TY@ratio{1}% |
| |
200 \fi |
| |
201 \else |
| |
202 \TY@warn{No suitable columns!}% |
| |
203 \def\TY@ratio{1}% |
| |
204 \fi |
| |
205 \count@\z@ |
| |
206 Z \message{^^JLine Width: \the\TY@linewidth, |
| |
207 Z Natural Width: \the\TY@tablewidth, |
| |
208 Z Ratio: \TY@ratio^^J}% |
| |
209 \@tempdima\z@ |
| |
210 \loop |
| |
211 \ifnum\count@<\TY@count |
| |
212 \advance\count@\@ne |
| |
213 \ifdim\csname TY@F\the\count@\endcsname>\tymin |
| |
214 \dimen@\csname TY@\the\count@\endcsname |
| |
215 \dimen@\TY@ratio\dimen@ |
| |
216 \ifdim\dimen@<\tymin |
| |
217 Z \message{Column \the\count@\space ->}% |
| |
218 \global\expandafter\let\csname TY@F\the\count@\endcsname\tymin |
| |
219 \global\advance\TY@linewidth-\tymin |
| |
220 \global\advance\TY@tablewidth-\csname TY@\the\count@\endcsname |
| |
221 \let\TY@checkmin\TY@@checkmin |
| |
222 \else |
| |
223 \expandafter\xdef\csname TY@F\the\count@\endcsname{\the\dimen@}% |
| |
224 \advance\@tempdima\csname TY@F\the\count@\endcsname |
| |
225 \fi |
| |
226 \fi |
| |
227 Z \dimen@\csname TY@F\the\count@\endcsname\message{\the\dimen@, }% |
| |
228 \repeat |
| |
229 Z \message{^^JTotal:\the\@tempdima^^J}% |
| |
230 } |
| |
231 \let\TY@@checkmin\TY@checkmin |
| |
232 \newdimen\TY@linewidth |
| |
233 \def\tyformat{\everypar{{\nobreak\hskip\z@skip}}} |
| |
234 \newdimen\tymin |
| |
235 \tymin=10pt |
| |
236 \newdimen\tymax |
| |
237 \tymax=2\textwidth |
| |
238 \def\@testpach{\@chclass |
| |
239 \ifnum \@lastchclass=6 \@ne \@chnum \@ne \else |
| |
240 \ifnum \@lastchclass=7 5 \else |
| |
241 \ifnum \@lastchclass=8 \tw@ \else |
| |
242 \ifnum \@lastchclass=9 \thr@@ |
| |
243 \else \z@ |
| |
244 \ifnum \@lastchclass = 10 \else |
| |
245 \edef\@nextchar{\expandafter\string\@nextchar}% |
| |
246 \@chnum |
| |
247 \if \@nextchar c\z@ \else |
| |
248 \if \@nextchar l\@ne \else |
| |
249 \if \@nextchar r\tw@ \else |
| |
250 \if \@nextchar C7 \else |
| |
251 \if \@nextchar L8 \else |
| |
252 \if \@nextchar R9 \else |
| |
253 \if \@nextchar J10 \else |
| |
254 \z@ \@chclass |
| |
255 \if\@nextchar |\@ne \else |
| |
256 \if \@nextchar !6 \else |
| |
257 \if \@nextchar @7 \else |
| |
258 \if \@nextchar <8 \else |
| |
259 \if \@nextchar >9 \else |
| |
260 10 |
| |
261 \@chnum |
| |
262 \if \@nextchar m\thr@@\else |
| |
263 \if \@nextchar p4 \else |
| |
264 \if \@nextchar b5 \else |
| |
265 \z@ \@chclass \z@ \@preamerr \z@ \fi \fi \fi \fi\fi \fi \fi\fi \fi |
| |
266 \fi \fi \fi \fi \fi \fi \fi \fi \fi \fi \fi} |
| |
267 \def\TY@classz{% |
| |
268 \@classx |
| |
269 \@tempcnta\count@ |
| |
270 \ifx\TY@box\TY@box@v |
| |
271 \global\advance\TY@count\@ne |
| |
272 \fi |
| |
273 \let\centering c% |
| |
274 \let\raggedright\noindent |
| |
275 \let\raggedleft\indent |
| |
276 \let\arraybackslash\relax |
| |
277 \prepnext@tok |
| |
278 \ifnum\@chnum<4 |
| |
279 \global\expandafter\let\csname TY@F\the\TY@count\endcsname\z@ |
| |
280 \fi |
| |
281 \ifnum\@chnum=6 |
| |
282 \global\expandafter\let\csname TY@F\the\TY@count\endcsname\z@ |
| |
283 \fi |
| |
284 \@addtopreamble{% |
| |
285 \ifcase\@chnum |
| |
286 \hfil \d@llarbegin\insert@column\d@llarend \hfil \or |
| |
287 \kern\z@ |
| |
288 \d@llarbegin \insert@column \d@llarend \hfil \or |
| |
289 \hfil\kern\z@ \d@llarbegin \insert@column \d@llarend \or |
| |
290 $\vcenter\@startpbox{\@nextchar}\insert@column \@endpbox $\or |
| |
291 \vtop \@startpbox{\@nextchar}\insert@column \@endpbox \or |
| |
292 \vbox \@startpbox{\@nextchar}\insert@column \@endpbox \or |
| |
293 \d@llarbegin \insert@column \d@llarend \or% dubious "s" case |
| |
294 \TY@box\centering\or |
| |
295 \TY@box\raggedright\or |
| |
296 \TY@box\raggedleft\or |
| |
297 \TY@box\relax |
| |
298 \fi}\prepnext@tok} |
| |
299 \def\TY@box#1{% |
| |
300 \ifx\centering#1% |
| |
301 \hfil \d@llarbegin\insert@column\d@llarend \hfil \else |
| |
302 \ifx\raggedright#1% |
| |
303 \kern\z@%<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< |
| |
304 \d@llarbegin \insert@column \d@llarend \hfil \else |
| |
305 \ifx\raggedleft#1% |
| |
306 \hfil\kern\z@ \d@llarbegin \insert@column \d@llarend \else |
| |
307 \ifx\relax#1% |
| |
308 \d@llarbegin \insert@column \d@llarend |
| |
309 \fi \fi \fi \fi} |
| |
310 \def\TY@box@v#1{% |
| |
311 \vtop \@startpbox{\csname TY@F\the\TY@count\endcsname}% |
| |
312 #1\arraybackslash\tyformat |
| |
313 \insert@column\@endpbox} |
| |
314 \newdimen\TY@tablewidth |
| |
315 \def\Gscale@div#1#2#3{% |
| |
316 \setlength\dimen@{#3}% |
| |
317 \ifdim\dimen@=\z@ |
| |
318 \PackageError{graphics}{Division by 0}\@eha |
| |
319 \dimen@#2% |
| |
320 \fi |
| |
321 \edef\@tempd{\the\dimen@}% |
| |
322 \setlength\dimen@{#2}% |
| |
323 \count@65536\relax |
| |
324 \ifdim\dimen@<\z@ |
| |
325 \dimen@-\dimen@ |
| |
326 \count@-\count@ |
| |
327 \fi |
| |
328 \loop |
| |
329 \ifdim\dimen@<8192\p@ |
| |
330 \dimen@\tw@\dimen@ |
| |
331 \divide\count@\tw@ |
| |
332 \repeat |
| |
333 \dimen@ii=\@tempd\relax |
| |
334 \divide\dimen@ii\count@ |
| |
335 \divide\dimen@\dimen@ii |
| |
336 \edef#1{\strip@pt\dimen@}} |
| |
337 \long\def\TY@get@body#1\end |
| |
338 {\toks@\expandafter{\the\toks@#1}\TY@find@end} |
| |
339 \def\TY@find@end#1{% |
| |
340 \def\@tempa{#1}% |
| |
341 \ifx\@tempa\TY@\def\@tempa{\end{#1}}\expandafter\@tempa |
| |
342 \else\toks@\expandafter |
| |
343 {\the\toks@\end{#1}}\expandafter\TY@get@body\fi} |
| |
344 \def\TY@warn{% |
| |
345 \PackageWarning{tabulary}} |
| |
346 \catcode`\Z=11 |
| |
347 \AtBeginDocument{ |
| |
348 \@ifpackageloaded{colortbl}{% |
| |
349 \expandafter\def\expandafter\@mkpream\expandafter#\expandafter1% |
| |
350 \expandafter{% |
| |
351 \expandafter\let\expandafter\CT@setup\expandafter\relax |
| |
352 \expandafter\let\expandafter\CT@color\expandafter\relax |
| |
353 \expandafter\let\expandafter\CT@do@color\expandafter\relax |
| |
354 \expandafter\let\expandafter\color\expandafter\relax |
| |
355 \expandafter\let\expandafter\CT@column@color\expandafter\relax |
| |
356 \expandafter\let\expandafter\CT@row@color\expandafter\relax |
| |
357 \@mkpream{#1}} |
| |
358 \let\TY@@mkpream\@mkpream |
| |
359 \def\TY@classz{% |
| |
360 \@classx |
| |
361 \@tempcnta\count@ |
| |
362 \ifx\TY@box\TY@box@v |
| |
363 \global\advance\TY@count\@ne |
| |
364 \fi |
| |
365 \let\centering c% |
| |
366 \let\raggedright\noindent |
| |
367 \let\raggedleft\indent |
| |
368 \let\arraybackslash\relax |
| |
369 \prepnext@tok |
| |
370 \expandafter\CT@extract\the\toks\@tempcnta\columncolor!\@nil |
| |
371 \ifnum\@chnum<4 |
| |
372 \global\expandafter\let\csname TY@F\the\TY@count\endcsname\z@ |
| |
373 \fi |
| |
374 \ifnum\@chnum=6 |
| |
375 \global\expandafter\let\csname TY@F\the\TY@count\endcsname\z@ |
| |
376 \fi |
| |
377 \@addtopreamble{% |
| |
378 \setbox\z@\hbox\bgroup\bgroup |
| |
379 \ifcase\@chnum |
| |
380 \hskip\stretch{.5}\kern\z@ |
| |
381 \d@llarbegin\insert@column\d@llarend\hskip\stretch{.5}\or |
| |
382 \kern\z@%<<<<<<<<<<<<<<<<<<<<<<<<<<< |
| |
383 \d@llarbegin \insert@column \d@llarend \hfill \or |
| |
384 \hfill\kern\z@ \d@llarbegin \insert@column \d@llarend \or |
| |
385 $\vcenter\@startpbox{\@nextchar}\insert@column \@endpbox $\or |
| |
386 \vtop \@startpbox{\@nextchar}\insert@column \@endpbox \or |
| |
387 \vbox \@startpbox{\@nextchar}\insert@column \@endpbox \or |
| |
388 \d@llarbegin \insert@column \d@llarend \or% dubious s case |
| |
389 \TY@box\centering\or |
| |
390 \TY@box\raggedright\or |
| |
391 \TY@box\raggedleft\or |
| |
392 \TY@box\relax |
| |
393 \fi |
| |
394 \egroup\egroup |
| |
395 \begingroup |
| |
396 \CT@setup |
| |
397 \CT@column@color |
| |
398 \CT@row@color |
| |
399 \CT@do@color |
| |
400 \endgroup |
| |
401 \@tempdima\ht\z@ |
| |
402 \advance\@tempdima\minrowclearance |
| |
403 \vrule\@height\@tempdima\@width\z@ |
| |
404 \unhbox\z@ |
| |
405 }\prepnext@tok}% |
| |
406 \def\TY@arrayrule{% |
| |
407 \TY@subwidth\arrayrulewidth |
| |
408 \@addtopreamble{{\CT@arc@\vline}}}% |
| |
409 \def\TY@classvi{\ifcase \@lastchclass |
| |
410 \@acol \or |
| |
411 \TY@subwidth\doublerulesep |
| |
412 \ifx\CT@drsc@\relax |
| |
413 \@addtopreamble{\hskip\doublerulesep}% |
| |
414 \else |
| |
415 \@addtopreamble{{\CT@drsc@\vrule\@width\doublerulesep}}% |
| |
416 \fi\or |
| |
417 \@acol \or |
| |
418 \@classvii |
| |
419 \fi}% |
| |
420 }{% |
| |
421 \let\CT@start\relax |
| |
422 } |
| |
423 } |
| |
424 {\uccode`\*=`\ % |
| |
425 \uppercase{\gdef\TX@verb{% |
| |
426 \leavevmode\null\TX@vwarn |
| |
427 {\ifnum0=`}\fi\ttfamily\let\\\ignorespaces |
| |
428 \@ifstar{\let~*\TX@vb}{\TX@vb}}}} |
| |
429 \def\TX@vb#1{\def\@tempa##1#1{\toks@{##1}\edef\@tempa{\the\toks@}% |
| |
430 \expandafter\TX@v\meaning\@tempa\\ \\\ifnum0=`{\fi}}\@tempa!} |
| |
431 \def\TX@v#1!{\afterassignment\TX@vfirst\let\@tempa= } |
| |
432 \begingroup |
| |
433 \catcode`\*=\catcode`\# |
| |
434 \catcode`\#=12 |
| |
435 \gdef\TX@vfirst{% |
| |
436 \if\@tempa#% |
| |
437 \def\@tempb{\TX@v@#}% |
| |
438 \else |
| |
439 \let\@tempb\TX@v@ |
| |
440 \if\@tempa\space~\else\@tempa\fi |
| |
441 \fi |
| |
442 \@tempb} |
| |
443 \gdef\TX@v@*1 *2{% |
| |
444 \TX@v@hash*1##\relax\if*2\\\else~\expandafter\TX@v@\fi*2} |
| |
445 \gdef\TX@v@hash*1##*2{*1\ifx*2\relax\else#\expandafter\TX@v@hash\fi*2} |
| |
446 \endgroup |
| |
447 \def\TX@vwarn{% |
| |
448 \@warning{\noexpand\verb may be unreliable inside tabularx/y}% |
| |
449 \global\let\TX@vwarn\@empty} |
| |
450 \endinput |
| |
451 %% |
| |
452 %% End of file `tabulary.sty'. |