%%
%% 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'.
