From c5b6e830d798ad842b95423c97b01dc2984ee3dd Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Fri, 13 Jan 2006 00:03:03 +0000 Subject: polytable git-svn-id: svn://tug.org/texlive/trunk@1208 c570f23f-e606-0410-a88d-b1316a301751 --- .../texmf-dist/tex/latex/polytable/polytable.sty | 610 +++++++++++++++++++++ 1 file changed, 610 insertions(+) create mode 100644 Master/texmf-dist/tex/latex/polytable/polytable.sty (limited to 'Master/texmf-dist/tex/latex/polytable') diff --git a/Master/texmf-dist/tex/latex/polytable/polytable.sty b/Master/texmf-dist/tex/latex/polytable/polytable.sty new file mode 100644 index 00000000000..2072c64614d --- /dev/null +++ b/Master/texmf-dist/tex/latex/polytable/polytable.sty @@ -0,0 +1,610 @@ +%% +%% This is file `polytable.sty', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% polytable.dtx (with options: `package') +%% +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{polytable}% + [2004/02/27 v0.7.2 `polytable' package (Andres Loeh)] +\let\PT@original@And\And +\RequirePackage{lazylist} +\let\PT@And\And +\def\PT@prelazylist + {\let\And\PT@And} +\def\PT@postlazylist + {\let\And\PT@original@And} +\PT@postlazylist +\RequirePackage{array} +\DeclareOption{debug}{\AtEndOfPackage\PT@debug} +\DeclareOption{silent}{\AtEndOfPackage\PT@silent} +\ProcessOptions +\newdimen\PT@colwidth +\newcount\PT@cols +\newcount\PT@table +\newif\ifPT@changed +\def\PT@allcols{\Nil} +\let\PT@infromto\empty +\let\PT@currentwidths\empty +\def\PT@false{0} +\def\PT@true{1} +\let\PT@inrestore\PT@false +\def\PT@debug + {\def\PT@typeout@ ##1{\typeout{(polytable) ##1}}} +\let\PT@typeout@\@gobble +\def\PT@warning{\PackageWarning{polytable}}% +\def\PT@silent + {\let\PT@typeout@\@gobble\let\PT@warning\@gobble} +\def\PT@rerun + {\PT@typeout@{We have to rerun LaTeX ...}% + \AtEndDocument + {\PackageWarning{polytable}% + {Column widths have changed. Rerun LaTeX.\@gobbletwo}}% + \global\let\PT@rerun\relax} +\def\PT@listopmacro #1#2#3% #1 #3 to the list #2 + {\def\PT@temp{#1{#3}}% + \expandafter\expandafter\expandafter + \def\expandafter\expandafter\expandafter + #2\expandafter\expandafter\expandafter + {\expandafter\PT@temp\expandafter{#2}}} + +\def\PT@consmacro{\PT@listopmacro\Cons} +\def\PT@appendmacro{\PT@listopmacro\Cat} +\def\PT@addbeginmacro #1#2% add #2 to the beginning of #1 + {\def\PT@temp{#2}% + \expandafter\expandafter\expandafter + \def\expandafter\expandafter\expandafter + #1\expandafter\expandafter\expandafter + {\expandafter\PT@temp #1}} + +\def\PT@gaddendmacro #1#2% add #2 to the end of #1 + {\expandafter\gdef\expandafter #1\expandafter{#1#2}} +\def\PT@enamedef #1#2% sets name #1 to the expansion of #2 + {\expandafter\Twiddle\expandafter\@namedef\expandafter{#2}{#1}} +\def\PT@adddeftomacroas#1#2#3% + {\expandafter\expandafter\expandafter + \def\expandafter\expandafter\expandafter\PT@temp + \expandafter\expandafter\expandafter + {\expandafter\expandafter\expandafter\def + \expandafter\expandafter\csname #2\endcsname + \expandafter{#3}}% + \expandafter\expandafter\expandafter\PT@gaddendmacro + \expandafter\expandafter\expandafter + {\expandafter\expandafter\csname #1\endcsname + \expandafter}\expandafter{\PT@temp}} +\def\PT@adddeftomacro#1#2% + {\def\PT@temp{\PT@adddeftomacroas{#1}{#2}}% + \expandafter\PT@temp\csname #2\endcsname} +\def\PT@addoptargtomacro + {\PT@add@argtomacro\PT@makeoptarg} +\def\PT@addargtomacro + {\PT@add@argtomacro\PT@makearg} + +\def\PT@add@argtomacro#1#2#3% + {\expandafter\expandafter\expandafter\gdef + \expandafter\expandafter\expandafter\PT@temp + \expandafter\expandafter\expandafter{\csname #3\endcsname}% + #1% + \expandafter\PT@gaddendmacro\expandafter + {\expandafter#2\expandafter}\expandafter{\PT@temp}} + +\def\PT@makeoptarg% + {\expandafter\def\expandafter\PT@temp\expandafter + {\expandafter[\PT@temp]}} +\def\PT@makearg% + {\expandafter\def\expandafter\PT@temp\expandafter + {\expandafter{\PT@temp}}} + +\newcommand*{\PT@gobbleoptional}[1][]{\ignorespaces} +\let\PT@origomit\omit +\def\PT@disableomitonce + {\def\omit + {\let\omit\PT@origomit}} +\newcommand{\beginpolytable}% + {\edef\PT@environment{\@currenvir}% + \begingroup + % new in v0.7: save counters + \PT@savecounters + \toks@{}% initialise token register + \PT@scantoend} +\let\endpolytable=\relax +\long\def\PT@scantoend #1\end #2% + {\toks@\expandafter{\the\toks@ #1}% + \def\PT@temp{#2}% + \ifx\PT@temp\PT@environment + \expandafter\PT@getwidths + \else + \toks@\expandafter{\the\toks@\end{#2}}% + \expandafter\PT@scantoend + \fi} +\def\PT@getwidths + {\let\column\PT@firstrun@column + \let\savecolumns\PT@savewidths + \let\restorecolumns\PT@restorewidths + \column{@begin@}{@{}l@{}} + \PT@cols=0\relax% + \let\fromto\PT@fromto + \let\nextline\PT@resetcolumn + \PT@changedfalse % nothing has changed so far + \PT@resetcolumn % we are at the beginning of a line + \the\toks@ + \ifx\column\PT@otherrun@column + \else + % we are in first run, print extra info + \PT@typeout@{Number of columns: \the\PT@cols}% + \PT@prelazylist + \PT@typeout@{Column list: \Print\PT@allcols}% + \PT@postlazylist + \fi + \let\PT@firstrun@column\PT@otherrun@column + \let\savecolumns\PT@gobbleoptional + \let\restorecolumns\PT@gobbleoptional + \let\PT@savewidths\PT@gobbleoptional + \let\PT@restorewidths\PT@gobbleoptional + \PT@restorecounters + \ifPT@changed + % we need to rerun if something has changed + \expandafter\PT@getwidths + \else + % we are done and can do the sorting + \PT@typeout@{Reached fixpoint.}% + \expandafter\PT@sortcols + \fi} +\def\PT@savecounters + {\begingroup + \def\@elt ##1% + {\global\csname c@##1\endcsname\the\csname c@##1\endcsname}% + \xdef\PT@restorecounters{\cl@@ckpt}% + \endgroup} +\def\PT@sortcols + {\PT@prelazylist + \edef\PT@sortedlist + {\Foldr{\noexpand\Cons}{\noexpand\Nil}% + {\Insertsort\PT@ltmax\PT@allcols}}% + \PT@typeout@{Sorted columns: \Print\PT@sortedlist}% + \PT@postlazylist + \PT@cols=0\relax% + \PT@prelazylist + \Execute{\Map\PT@numbercol\PT@sortedlist}% + \PT@postlazylist + \PT@typeout@{Numbered successfully, last column is \StripColumn\PT@lastcol}% + \ifx\PT@currentwidths\empty + \else + \PT@typeout@{Saving table information for \PT@currentwidths .}% + \expandafter\PT@saveinformation\expandafter{\PT@currentwidths}% + \fi + \PT@typeset} +\def\PT@typeset + {\PT@typeout@{Typesetting the table ...}% + \PT@prelazylist + \edef\PT@temp{@{}\Execute{\Map\PT@preamble\PT@sortedlist}}% + \PT@postlazylist + %\PT@typeout@{Preamble: \PT@temp}% + \let\fromto\PT@multicolumn + \PT@resetcolumn % we are at the beginning of a line + \let\nextline=\PT@resetandcr + \expandafter\PT@begin\expandafter{\PT@temp}% + \the\toks@ + \PT@end + \endgroup + \PT@typeout@{Finished.}% + \expandafter\end\expandafter{\PT@environment}}% +\newcommand\PT@firstrun@column[3][0pt]% + {\@ifundefined{PT@col@#2.type}% + {\PT@typeout@{Defining column #2 at #1.}% + \@namedef{PT@col@#2.type}{#3}% + \@namedef{PT@col@#2.width}{#1}% initialize the width of the column + % add the new column to the (sortable) list of all columns + \PT@consmacro\PT@allcols{PT@col@#2}% + \advance\PT@cols by 1\relax}% + {\expandafter\ifx\csname PT@col@#2.type\endcsname\empty + \relax % will be defined in a later table of the same set + \else + \PT@warning{Redefining column #2}% + \fi + \@namedef{PT@col@#2.type}{#3}% + \expandafter\ifdim#1>0pt\relax + \PT@typeout@{Redefining column #2 at #1.}% + \@namedef{PT@col@#2.width}{#1}% + \fi + }% + \@ifundefined{PT@col@#2.max}% + {\@namedef{PT@col@#2.max}{#1}% + \expandafter\let\csname PT@col@#2.trusted\endcsname\PT@true}{}% + \ignorespaces} +\newcommand\PT@otherrun@column[3][]% + {\ignorespaces} +\def\PT@checkcoldefined #1% + {\@ifundefined{PT@col@#1.type}% + {\PackageError{polytable}{Undefined column #1}{}}{}}% +\def\PT@fromto #1#2#3% + {\PT@infromto + \def\PT@infromto{% + \PackageError{polytable}{Nested fromto}{}}% + \PT@checkcoldefined{#1}% + \PT@checkcoldefined{#2}% + \def\PT@temp{PT@col@#1}% + \ifx\PT@currentcol\PT@temp + \PT@typeout@{No need to skip columns.}% + \else + \PT@colwidth=\expandafter\@nameuse\expandafter + {\PT@currentcol.width}\relax + \ifdim\PT@colwidth>\csname PT@col@#1.width\endcsname\relax + % we need to change the width + \PT@typeout@{s #1: old=\@nameuse{PT@col@#1.width} new=\the\PT@colwidth}% + \PT@changedtrue + \PT@enamedef{PT@col@#1.width}{\the\PT@colwidth}% + \fi + \PT@colwidth=\expandafter\@nameuse\expandafter + {\PT@currentcol.max}\relax + \ifdim\PT@colwidth>\csname PT@col@#1.max\endcsname\relax + % we need to change the width + \PT@typeout@{S #1: old=\@nameuse{PT@col@#1.max} new=\the\PT@colwidth}% + \PT@changedtrue + \PT@checkrerun + \PT@enamedef{PT@col@#1.max}{\the\PT@colwidth}% + \fi + \ifnum\csname PT@col@#1.trusted\endcsname=\PT@false\relax + \ifdim\PT@colwidth=\csname PT@col@#1.max\endcsname\relax + \PT@typeout@{#1=\the\PT@colwidth\space is now trusted}% + \expandafter\let\csname PT@col@#1.trusted\endcsname\PT@true% + \fi + \fi + \fi + \begingroup + \ifmmode + \let\d@llarbegin=$%$ + \let\d@llarend=$%$ + \let\col@sep=\arraycolsep + \else + \let\d@llarbegin=\begingroup + \let\d@llarend=\endgroup + \let\col@sep=\tabcolsep + \fi + %\def\PT@currentcol{PT@col@#1}% + %\ifx\PT@currentcol\PT@nullcol + %\else + % \PT@addbeginmacro\PT@currentpreamble{@{}}% + %\fi + \expandafter\expandafter\expandafter + \def\expandafter\expandafter\expandafter\PT@currentpreamble + \expandafter\expandafter\expandafter + {\csname PT@col@#1.type\endcsname}% + \setbox0=\hbox{% + \expandafter\@mkpream\expandafter{\PT@currentpreamble}% + \def\@sharp{\strut #3}% + %\show\@preamble + \@preamble}% + \expandafter\gdef\expandafter\PT@temp\expandafter{\the\wd0}% + \endgroup + \global\PT@colwidth=\@nameuse{PT@col@#1.width}% + \global\advance\PT@colwidth by \PT@temp\relax% + \ifdim\PT@colwidth>\csname PT@col@#2.width\endcsname\relax + % we need to change the width + \PT@typeout@{c #2: + old=\@nameuse{PT@col@#2.width} + new=\the\PT@colwidth}% + \PT@changedtrue + \PT@enamedef{PT@col@#2.width}{\the\PT@colwidth}% + \fi + \global\PT@colwidth=\@nameuse{PT@col@#1.max}% + \global\advance\PT@colwidth by \PT@temp\relax% + \ifdim\PT@colwidth>\csname PT@col@#2.max\endcsname\relax + % we need to change the width + \PT@typeout@{C #2: + old=\@nameuse{PT@col@#2.max} + new=\the\PT@colwidth}% + \PT@changedtrue + \PT@checkrerun + \PT@enamedef{PT@col@#2.max}{\the\PT@colwidth}% + \fi + \ifnum\csname PT@col@#2.trusted\endcsname=\PT@false\relax + \ifdim\PT@colwidth=\csname PT@col@#2.max\endcsname\relax + \PT@typeout@{#2=\the\PT@colwidth\space is now trusted}% + \expandafter\let\csname PT@col@#2.trusted\endcsname\PT@true% + \fi + \fi + \def\PT@currentcol{PT@col@#2}% + \let\PT@infromto\empty + \ignorespaces}% +\def\PT@checkrerun + {\ifnum\PT@inrestore=\PT@true\relax + \PT@rerun + \fi} +\newcommand*{\PT@resetcolumn}[1][]% + {\let\PT@currentcol\PT@nullcol} +\def\PT@nullcol + {PT@col@@begin@} +\def\Execute{\Foldr\Sequence\empty} +\def\Sequence #1#2{#1#2} +\def\ShowColumn #1% + {\ShowColumn@#1\ShowColumn@} +\def\ShowColumn@ PT@col@#1\ShowColumn@ + {#1 } +\def\StripColumn #1% + {\expandafter\StripColumn@#1\StripColumn@} +\def\StripColumn@ PT@col@#1\StripColumn@ + {#1} +\def\Print#1{\Execute{\Map\ShowColumn#1}} +\def\PT@TeXif #1% + {\expandafter\@gobble#1\relax + \PT@gobblefalse + \else\relax + \gobbletrue + \fi} +\def\PT@gobblefalse\else\relax\gobbletrue\fi #1#2% + {\fi #1} +\def\PT@ltmax #1#2% + {\PT@TeXif{\ifdim\csname #1.max\endcsname<\csname #2.max\endcsname}} +\def\PT@numbercol #1% + {%\PT@typeout@{numbering #1 as \the\PT@cols}% + \PT@enamedef{#1.num}{\the\PT@cols}% + \def\PT@lastcol{#1}% + \advance\PT@cols by 1\relax} +\def\PT@preamble #1% + {l@{}} +\newcommand{\PT@resetandcr}[1][0pt]% + {\ifx\PT@currentcol\PT@lastcol + \else + \ifx\PT@currentcol\PT@nullcol + \edef\PT@currentcol{\Head{\Tail\PT@sortedlist}}% + \fi + \edef\PT@currentcol@{\StripColumn\PT@currentcol}% + \edef\PT@lastcol@ + {\StripColumn\PT@lastcol}% + \PT@typeout@{adding implicit fromto from \PT@currentcol@ + \space to \PT@lastcol@}% + \expandafter\expandafter\expandafter\fromto + \expandafter\expandafter\expandafter{% + \expandafter\expandafter\expandafter\PT@currentcol@ + \expandafter}\expandafter{\PT@lastcol@}{}% + \fi + \PT@typeout@{Next line ...}% + \PT@resetcolumn\\[#1]} +\def\PT@multicolumn #1#2#3% + {%\omit\PT@disableomitonce + % skip to current position + \global\PT@cols=\@nameuse{PT@col@#1.num}% + \global\advance\PT@cols + by -\expandafter\csname\PT@currentcol.num\endcsname\relax + \ifx\PT@currentcol\PT@nullcol + \global\advance\PT@cols by -1\relax% + \fi + \PT@typeout@{skipping: + nf=\expandafter\ShowColumn + \expandafter{\PT@currentcol}nt=#1 % + from=\expandafter + \csname\PT@currentcol.num\endcsname\space + to=\@nameuse{PT@col@#1.num}}% + \ifnum\PT@cols>0\relax + \ifnum\PT@cols>1\relax + \global\advance\PT@cols by -1\relax + \PT@typeout@{after next &, multicolumn \the\PT@cols\space blank}% + \PT@NextCol + \multicolumn{\the\PT@cols}{@{}l@{}}{}% + \fi + \PT@NextCol + \fi + \global\PT@cols=\@nameuse{PT@col@#2.num}% + \global\advance\PT@cols by -\@nameuse{PT@col@#1.num}\relax% + %\ifnum\PT@cols>1\relax + % we always skip one column + \PT@typeout@{after next &, + putting text in \the\PT@cols\space multicol}% + \PT@typeout@{nf=#1 nt=#2 % + from=\@nameuse{PT@col@#1.num} + to=\@nameuse{PT@col@#2.num}}% + \expandafter\global\expandafter\let\expandafter\PT@temp + \csname PT@col@#1.type\endcsname% + \PT@NextCol + % use multicolumn + \expandafter\multicolumn + \expandafter{\expandafter\the\expandafter\PT@cols + \expandafter}\expandafter{\PT@temp}{#3}% + %\PT@typeout@{!!!!}% + %\else + % \PT@NextCol + % #3% + %\fi + % set current column + \def\PT@currentcol{PT@col@#2}% + \ignorespaces}% +\def\PT@NextCol + {\PT@typeout@{ & }% + &}% +\def\PT@placeinbox#1#2#3% + {\PT@colwidth=\@nameuse{PT@col@#1.max}% + \advance\PT@colwidth by -\expandafter\csname\PT@currentcol.max\endcsname + \leavevmode + \hb@xt@\PT@colwidth{% + \expandafter\@mkpream\expandafter{@{}l@{}}% + \let\@sharp\empty% + %\show\@preamble + \@preamble}% + \PT@colwidth=\@nameuse{PT@col@#2.max}% + \advance\PT@colwidth by -\@nameuse{PT@col@#1.max}\relax% + \ifmmode + \PT@typeout@{*math mode*}% + \let\d@llarbegin=$%$ + \let\d@llarend=$%$ + \let\col@sep=\arraycolsep + \else + \PT@typeout@{*text mode*}% + \let\d@llarbegin=\begingroup + \let\d@llarend=\endgroup + \let\col@sep=\tabcolsep + \fi + %\def\PT@currentcol{PT@col@#1}% + \expandafter\expandafter\expandafter + \def\expandafter\expandafter\expandafter\PT@currentpreamble + \expandafter\expandafter\expandafter + {\csname PT@col@#1.type\endcsname}% + %\ifx\PT@currentcol\PT@nullcol + %\else + % \PT@addbeginmacro\PT@currentpreamble{@{}}% + %\fi + \hb@xt@\PT@colwidth{% + \expandafter\@mkpream\expandafter{\PT@currentpreamble}% + \def\@sharp{\strut #3}% + %\show\@preamble + \@preamble}% + \def\PT@currentcol{PT@col@#2}% + \ignorespaces}% +\newcommand*{\PT@setmaxwidth}[3][\PT@false]% #2 column name, #3 maximum width + {\@namedef{PT@col@#2.max}{#3}% + \ifdim#3=0pt\relax + \expandafter\let\csname PT@col@#2.trusted\endcsname=\PT@true% + \else + \expandafter\let\csname PT@col@#2.trusted\endcsname=#1% + \fi + \column{#2}{}} +\def\PT@loadtable#1% #1 table id number + {%\expandafter\show\csname PT@restore@\romannumeral #1\endcsname + %\show\column + \PT@typeout@ + {Calling \expandafter\string + \csname PT@restore@\romannumeral #1\endcsname.}% + \let\maxcolumn\PT@setmaxwidth + %\expandafter\show\csname PT@load@\romannumeral #1\endcsname + \csname PT@restore@\romannumeral #1\endcsname} +\def\PT@loadtablebyname#1% #1 set name + {\PT@typeout@{Loading table information for column width set #1.}% + \expandafter\PT@loadtable\expandafter{\csname PT@widths@#1\endcsname}}% +\def\PT@saveinformation#1% #1 set name + {\expandafter\def\expandafter\PT@temp\expandafter + {\csname PT@widths@#1\endcsname}% + \expandafter\def\expandafter\PT@temp\expandafter + {\csname PT@restore@\romannumeral\PT@temp\endcsname}% + \expandafter\gdef\PT@temp{}% start empty + % this is: \Execute{\Map{\PT@savecolumn{\PT@temp}}\PT@sortedlist} + \expandafter\Execute\expandafter{\expandafter + \Map\expandafter{\expandafter\PT@savecolumn + \expandafter{\PT@temp}}\PT@sortedlist}} +\def\PT@savecolumn#1#2% #1 macro name, #2 column name + {\PT@typeout@{saving column #2 in \string #1 ...}% + \def\PT@temp{#2}% + \ifx\PT@temp\PT@nullcol + \PT@typeout@{skipping nullcol ...}% + \else + \PT@typeout@{max=\csname #2.max\endcsname, % + width=\csname #2.width\endcsname, % + trusted=\csname #2.trusted\endcsname}% + % we need the column command in here + % we could do the same in \column, but then the location of + % \save / \restore matters ... + \PT@gaddendmacro{#1}{\maxcolumn}% + \ifnum\csname #2.trusted\endcsname=\PT@true\relax + \PT@gaddendmacro{#1}{[\PT@true]}% + \fi + \edef\PT@temp{\StripColumn{#2}}% + \PT@addargtomacro{#1}{PT@temp}% + \PT@addargtomacro{#1}{#2.max}% + \PT@gaddendmacro{#1}{\column}% + \PT@addoptargtomacro{#1}{#2.width}% + \edef\PT@temp{\StripColumn{#2}}% + \PT@addargtomacro{#1}{PT@temp}% + \PT@addargtomacro{#1}{#2.type}% + %\show#1% + \fi + } +\newcommand*{\PT@savewidths}[1][default@] + {\PT@typeout@{Executing \string\savecolumns [#1].}% + \def\PT@currentwidths{#1}% + \PT@verifywidths{#1}% + \global\advance\PT@table by 1\relax + \expandafter\xdef\csname PT@widths@#1\endcsname + {\the\PT@table}% + \PT@loadtable{\PT@table}% + \ignorespaces} +\newcommand*{\PT@restorewidths}[1][default@] + {\PT@typeout@{Executing \string\restorecolumns [#1].}% + \def\PT@currentwidths{#1}% + \let\PT@inrestore\PT@true + \PT@loadtablebyname{#1}% + \ignorespaces} +\def\PT@comparewidths#1% #1 full column name + {\@ifundefined{#1.max}% + {\PT@typeout@{computed width for #1 is fine ...}}% + {\ifdim\csname #1.max\endcsname>\csname #1.width\endcsname\relax + \PT@typeout@{Preferring saved width for \StripColumn{#1}.}% + \PT@changedtrue + \PT@colwidth=\@nameuse{#1.max}\relax + \PT@enamedef{#1.width}{\the\PT@colwidth}% + \fi}} +\def\PT@trustedmax#1% + {\PT@TeXif{\ifnum\csname #1.trusted\endcsname=\PT@true}} +\def\PT@equalwidths#1% #1 full column name + {\@ifundefined{#1.max}{}% + {\ifdim\csname #1.max\endcsname=\csname #1.width\endcsname\relax + \PT@typeout@{col #1 is okay ...}% + \else + \PT@rerun% a rerun is needed + \fi}} +\def\PT@verifywidths#1% #1 column width set name + {\@ifundefined{PT@widths@#1}% + {\PT@typeout@{Nothing to verify yet for set #1.}% + \PT@typeout@{Scheduling set #1 for verification at end of document.}% + \AtEndDocument{\PT@verifywidths{#1}}}% + {\PT@typeout@{Verifying column width set #1.}% + \expandafter\PT@verify@widths\expandafter + {\csname PT@widths@#1\endcsname}{#1}}} + +\def\PT@verify@widths#1#2% #1 set id number, #2 set name + {\@ifundefined{PT@restore@\romannumeral #1}{}% + {\begingroup + \let\column\PT@firstrun@column + \PT@cols=0\relax% + \def\PT@allcols{\Nil}% + \PT@loadtablebyname{#2}% + \PT@table=#1\relax + % nullcolumn is not loaded, therefore: + \expandafter\def\csname\PT@nullcol .width\endcsname{0pt}% + % checking trust + \PT@prelazylist + \All{\PT@trustedmax}{\PT@allcols}% + {\PT@typeout@{All maximum widths can be trusted -- writing .max!}% + \PT@save@table{.max}}% + {\PT@typeout@{Untrustworthy maximums widths -- writing .width!}% + \PT@rerun + \PT@save@table{.width}}% + \PT@postlazylist + \endgroup}% + \PT@typeout@{Verification for #2 successful.}} +\def\PT@save@table#1% + {\PT@typeout@{Saving column width information.}% + \if@filesw + \PT@prelazylist + {\immediate\write\@auxout{% + \gdef\expandafter\noexpand + \csname PT@restore@\romannumeral\PT@table\endcsname + {\Execute{\Map{\PT@write@column{#1}}\PT@allcols}}}}% + \PT@postlazylist + \fi} +\def\PT@write@column #1#2% + {\noexpand\maxcolumn^^J% + {\StripColumn{#2}}% + {\@nameuse{#2#1}}}% +\newenvironment{ptabular}[1][c]% + {\def\PT@begin{\tabular[#1]}% + \let\PT@end\endtabular + \beginpolytable} + {\endpolytable} + +\newenvironment{parray}[1][c]% + {\def\PT@begin{\array[#1]}% + \let\PT@end\endarray + \beginpolytable} + {\endpolytable} + +\def\pboxed{% + \let\PT@begin\@gobble + \let\PT@end\empty + \let\PT@multicolumn\PT@placeinbox + \expandafter\beginpolytable\ignorespaces} + +\let\endpboxed\endpolytable +\endinput +%% +%% End of file `polytable.sty'. -- cgit v1.2.3