%% %% This is file `tabu.sty', %% generated with the docstrip utility. %% %% The original source files were: %% %% tabu.dtx (with options: `package') %% %% This is a generated file. %% %% tabu : 2011/01/15 v1.9 - tabu : Flexible LaTeX tabulars %% %% This work may be distributed and/or modified under the %% conditions of the LaTeX Project Public License, either %% version 1.3 of this license or (at your option) any later %% version. The latest version of this license is in %% http://www.latex-project.org/lppl.txt %% %% This work consists of the main source file tabu.dtx %% and the derived files %% tabu.sty, tabu.pdf, tabu.ins %% %% tabu : Flexible LaTeX tabulars %% Copyright (C) 2010 by Florent Chervet %% \NeedsTeXFormat{LaTeX2e}[2005/12/01] \ProvidesPackage{tabu}[2011/01/15 v1.9 - flexible LaTeX tabulars (FC)] \RequirePackage{array}[2008/09/09] \RequirePackage{varwidth}[2009/03/30] \AtEndOfPackage{\tabu@AtEnd\let\tabu@AtEnd\@undefined} \let\tabu@AtEnd\@empty \def\TMP@EnsureCode#1#2{% \edef\tabu@AtEnd{% \tabu@AtEnd \catcode#1 \the\catcode#1\relax }% \catcode#1 #2\relax }% \TMP@EnsureCode \TMP@EnsureCode{33}{12} % ! \TMP@EnsureCode{124}{12}% | \TMP@EnsureCode{0}{12}% ^^@ \TMP@EnsureCode{36}{3}% $ = math shift \let\tabu@message \@gobble \let\tabu@message@save \@gobble \let\tabu@debug \@gobble \let\tabu@timerstart \relax \def\tracingtabu{% \let\tabu@message \message \let\tabu@message@save \tabu@tracing@save \ifdefined \pdfelapsedtime \def\tabu@timerstart{\edef\tabu@starttime{\the\pdfelapsedtime}}% \let\tabu@elapsedtime \tabu@message@etime\fi \@ifnextchar={\tabu@tracing}{}} \def\tabu@tracing{\begingroup\afterassignment\tabu@tr@cing\count@} \def\tabu@tr@cing{\expandafter\endgroup\ifnum\count@>\@ne \let\tabu@debug\message\else\let\tabu@debug\@gobble\fi} \DeclareOption{debugshow}{\AtEndOfPackage{\tracingtabu\relax}} \let\tabudefaulttarget \linewidth \DeclareOption{linegoal}{% \AtEndOfPackage{% \RequirePackage{linegoal}[2010/12/07]% \let\tabudefaulttarget \linegoal% \linegoal is \linewidth if not pdfTeX }} \DeclareOption{delarray}{% \AtEndOfPackage{\RequirePackage{delarray}}% } \DeclareOption{light}{% \AtEndOfPackage{% \let\tabu@prepnext@tok \prepnext@tok \let\tabu@save@decl \save@decl \let\tabu@rowfont \tabu@norowfont \let\tabucline \tabu@nocline \let\tabu@firstcline \relax \let\tabu@lines \relax \let\tabu@setup@everycr\relax } } \def\tabu@norowfont{\PackageError{tabu} {\string\rowfont\space is not available with option `light'}\@ehd} \def\tabu@nocline{\PackageError{tabu} {\string\tabucline\space is not available with option `light'}\@ehd} \ProcessOptions \AtBeginDocument{% \expandafter\in@ \expandafter\@arrayright\expandafter{\endarray}% \ifin@ \let\tabu@endarray \endarray \else \tabu@fix@arrayright \fi % \@ifpackageloaded{colortbl} \tabu@colortbltrue \tabu@colortblfalse \@ifpackageloaded{arydshln}{} {\let\tabu@adl@fix \relax \let\tabu@adl@endTRIAL \@empty}% \@ifpackageloaded{longtable}{}{\let\longtabu \tabu@nolongtabu}% } \newcount \tabu@cnt \newcount \tabu@nbcols \newcount \tabu@X@cols \newcount \tabu@nested \newcount \tabu@start \newcount \tabu@stop \newdimen \tabu@target \newdimen \tabu@spreadtarget \newdimen \tabu@naturalX \newdimen \tabucolX \newdimen \tabu@X@sum \newdimen \tabucolX@error \tabucolX@error=1em \newif \iftabu@measuring \newif \iftabu@spread \newif \iftabu@firstcline \newif \iftabu@negcoef \newsavebox \tabu@box \chardef \tabu@arstrutbox=\@arstrutbox \let\tabu@vcenter \vcenter \def\tabu@gobblespace#1 {#1} \def\tabu@gobbleopt#1{\@ifnextchar [{\tabu@gobble@pt{#1}}{#1}}%] \def\tabu@gobble@pt#1[#2]{#1} \def\tabu@save@decl{% \toks\count@ =\expandafter{\the\toks\expandafter\count@ \@nextchar}% }% \tabu@save@decl \def\tabu@newcolumntype #1{% \expandafter\tabu@new@columntype \csname NC@find@\string#1\expandafter\endcsname \csname NC@rewrite@\string#1\endcsname {#1}% }% \tabu@newcolumntype \def\tabu@new@columntype #1#2#3{% \def#1##1#3{\NC@{##1}}% \let#2\relax \newcommand*#2% }% \tabu@new@columntype \def\tabu@privatecolumntype #1{% \expandafter\tabu@private@columntype \csname NC@find@\string#1\expandafter\endcsname \csname NC@rewrite@\string#1\expandafter\endcsname \csname tabu@NC@find@\string#1\expandafter\endcsname \csname tabu@NC@rewrite@\string#1\endcsname {#1}% }% \tabu@privatecolumntype \def\tabu@private@columntype#1#2#3#4{% \g@addto@macro\tabu@privatecolumns{\let#1#3\let#2#4}% \tabu@new@columntype#3#4% }% \tabu@private@columntype \let\tabu@privatecolumns \@empty \tabu@privatecolumntype X[1][]{\tabu@rewrite@X{#1}% \let\@halignto \relax \expandafter \NC@find \tabucolX@rw} \tabu@privatecolumntype \usetabu [1]{% \ifx\\#1\\\tabu@saveerr{}\else \@ifundefined{tabu@saved@\string#1} {\tabu@saveerr{#1}} {\let\tabu@rewrite@X \tabu@rewrite@Xrestore \csname tabu@saved@\string#1\expandafter\endcsname\expandafter\z@}% \fi }% \NC@rewrite@\usetabu \tabu@privatecolumntype \preamble [1]{% \ifx\\#1\\\tabu@saveerr{}\else \@ifundefined{tabu@saved@\string#1} {\tabu@saveerr{#1}} {\csname tabu@saved@\string#1\expandafter\endcsname\expandafter\@ne}% \fi }% \NC@rewrite@\preamble \tabu@newcolumntype \tabu@rewritefirst{% \tabu@X@cols \z@ \let\tabu@dimexpr \relax \let\tabu@savepreamble \relax \let\NC@rewrite@X \tabu@NC@rewrite@X \gdef\tabu@global@temp {\tabu@savepreamble}% \aftergroup \tabu@global@temp \let\tabu@islast \relax \tabu@privatecolumns \NC@list{\NC@do\usetabu \NC@do\preamble \NC@do *}% \tabu@lines % defines NC@rewrite@| for tabu only (inside @mkpream group) \NC@list\expandafter{\the\expandafter\NC@list \expandafter\NC@do \expandafter X% \tabu@NC@list \NC@do X\NC@do\tabu@rewritemiddle}% \ifcat$\d@llarend\else \let\save@decl \tabu@save@decl \fi % no inversion of tokens in text mode \NC@find \tabu@rewritemiddle }% NC@rewrite@\tabu@rewritefirst \def\tabu@savepreamble{% \gdef\tabu@global@temp{}% \NC@list\expandafter{\tabu@NC@list}% \let\tabu@savedpreamble \@preamble }% \tabu@savepreamble \tabu@newcolumntype \tabu@rewritemiddle{% \NC@list\expandafter{\tabu@NC@list \NC@do\tabu@endrewrite \NC@do\tabu@rewritelast}% \tabu@checklast }% \NC@rewrite@\tabu@rewritemiddle \def\tabu@checklast#1\relax{% \def\tabu@temp{#1}% \ifx \tabu@temp\tabu@islast \expandafter\tabu@lastrewrite \else \let\tabu@islast \tabu@temp \expandafter\NC@find \expandafter\tabu@rewritelast \fi #1\relax }% \tabu@checklast \tabu@newcolumntype \tabu@rewritelast{\NC@find \tabu@endrewrite} \tabu@newcolumntype \tabu@endrewrite{\tabu@checklast} \def\tabu@lastrewrite{% \let\tabu@next \NC@find \ifx \@halignto\relax % found a X column \edef\tabu@global@X{\tabu@global@X \tabu@X@cols\the\tabu@X@cols\relax}% \ifx \tabu@halignto\relax % X column measure \tabu@global@Xnested \iftabu@negcoef \aftergroup\tabu@negcoeftrue \fi \aftergroup \tabu@prep@TRIAL \else \aftergroup \tabu@setup@everycr \fi \else \aftergroup \tabu@setup@everycr \ifdim \tabu@target=\z@ \else \let\tabu@next \tabu@extracolsep \fi % \fi \let\@halignto \tabu@halignto \tabu@next }% \tabu@lastrewrite \def\tabu@extracolsep{\futurelet\tabu@temp \tabu@extracol@sep} \def\tabu@extracol@sep{% \ifx \tabu@temp\@sptoken \expandafter\tabu@gobblespace \expandafter\tabu@extracol@sep \else {\endlinechar\m@ne\scantokens{\let\x |}% \expandafter}\ifx \x\tabu@temp \def\tabu@next {\NC@find @{\extracolsep\@flushglue}}\else {\endlinechar\m@ne\scantokens{\let\x !}% \expandafter}\ifx \x\tabu@temp \def\tabu@next {\NC@find @{\extracolsep\@flushglue}}\else \def\tabu@next {\NC@find !{\extracolsep\@flushglue}}\fi\fi \expandafter\tabu@next \fi }% \tabu@extracol@sep \def\tabu@global@Xnested{\expandafter\tabu@global@X@nested \csname tabu@global@X\the\tabu@nested\endcsname} \def\tabu@global@X@nested#1{% \global\let#1\tabu@global@X \aftergroup\let \aftergroup\tabu@global@X \aftergroup#1% }% \tabu@global@Xnested \newif\iftabu@colortbl \def\tabu@nowrite#1#{{\afterassignment}\toks@} \let\tabu@write\write \let\tabu@immediate\immediate \protected\def\tabu@GenericError{\begingroup \def\immediate\write{\aftergroup\endgroup \tabu@immediate\tabu@write}\tabu@GenericErrorORI}% \let\tabu@GenericErrorORI \GenericError \protected\def\tabu@warn{\begingroup \def\immediate\write{\aftergroup\endgroup \tabu@immediate\tabu@write}\PackageWarning{tabu}} \def\tabu{% \ifmmode \def\tabu@{\array}\def\endtabu{\endarray}% \else \def\tabu@{\tabular}\def\endtabu{\endtabular}\fi \let\tabu@arrayleft@measure \tabu@arrayleftmeasure \tabu@setup \tabu@settarget }% \tabu \def\longtabu{% \ifmmode\PackageError{tabu}{longtabu not allowed in math mode}\fi \def\tabu@{\longtable}\def\endlongtabu{\endlongtable}% \let\tabu@arrayleft@measure \tabu@long@arrayleft@measure \tabu@setup \tabu@settarget }% \longtabu \def\tabu@nolongtabu{\PackageError{tabu} {longtabu requires the longtable package}\@ehd} \def\tabu@setup{% \tabu@adl@fix \let\endarray \tabu@endarray % colortbl & arydshln (delarray) \let\tabu@global@X \@empty \ifx \verbatim\tabu@sanitizetext % \tabu@setup@saveglobal \advance\tabu@nested \@ne \def\tabu@aligndefault{t}\let\tabudefaulttarget \linewidth \else \tabu@timerstart \def\tabu@aligndefault{c}\edef\tabu@hfuzz {\the\hfuzz}% \global\tabu@footnotes{}\aftergroup\the\aftergroup\tabu@footnotes \ifdim\parindent>\z@ \ifx\linewidth\tabudefaulttarget \everypar\expandafter{% % correction for indentation \the\everypar\everypar\expandafter{\the\everypar}% \setbox\z@=\lastbox \ifdim\wd\z@>\z@ \advance\linewidth -\wd\z@\fi \box\z@ }% \fi\fi \fi \let\@footnotetext \tabu@footnotetext \let\@xfootnotetext \tabu@xfootnotetext \let\@xfootnote \tabu@xfootnote \let\centering \tabu@centering \let\raggedright \tabu@raggedright \let\raggedleft \tabu@raggedleft \tabu@trivlist % \def\tabudecimal {\tabu@tabudecimal}\let\verbatim \tabu@sanitizetext \let\fbox \tabu@fbox \let\color@b@x \tabu@color@b@x \let\rowfont \tabu@rowfont \let\prepnext@tok \tabu@prepnext@tok % \everycr{}\let\tabu@everycr \everycr \tabu@spreadfalse \tabu@measuringfalse \tabu@negcoeffalse \edef\tabu@NC@list{\the\NC@list}\NC@list{\NC@do \tabu@rewritefirst}% }% \tabu@setup \def\tabu@setup@saveglobal{% \expandafter\xdef\csname tabu@global@\the\tabu@nested\endcsname{% \global\tabu@X@cols \the\tabu@X@cols\relax \global\tabu@naturalX \the\tabu@naturalX\relax \gdef\noexpand\tabu@naturalX@min {\tabu@naturalX@min}% \gdef\noexpand\tabu@naturalX@max {\tabu@naturalX@max}}% \expandafter\aftergroup\csname tabu@global@\the\tabu@nested\endcsname }% \tabu@setup@saveglobal \def\tabu@settarget{\futurelet\@let@token \tabu@sett@rget} \def\tabu@sett@rget{\tabu@target\z@ \ifcase \ifx \bgroup\@let@token 0\else \ifx [\@let@token 0\else \ifx \@sptoken\@let@token 1\else \if t\@let@token 2\else \if s\@let@token 3\else \m@ne\fi\fi\fi\fi\fi\relax \expandafter\tabu@begin \or \expandafter\tabu@gobblespace\expandafter\tabu@settarget \or \expandafter\tabu@to \or \expandafter\tabu@spread \else \expandafter\tabu@begin \fi }% \tabu@sett@rget \def\tabu@to to{\def\tabu@halignto{to}\tabu@gettarget} \def\tabu@spread spread{\tabu@spreadtrue\def\tabu@halignto{spread}\tabu@gettarget} \def\tabu@gettarget {\afterassignment\tabu@linegoaltarget \tabu@target} \def\tabu@linegoaltarget {\futurelet\tabu@temp \tabu@linegoal@target} \def\tabu@linegoal@target {% \ifx \tabu@temp\LNGL@setlinegoal \LNGL@setlinegoal \expandafter \@firstoftwo \fi % @gobbles \LNGL@setlinegoal \tabu@begin }% \tabu@linegoal@target \def\tabu@begin #1#{% \edef\tabu@halignto{\ifdim\tabu@target>\z@ \tabu@halignto\the\tabu@target\fi}% \@testopt \tabu@@begin \tabu@aligndefault #1\@nil }% \tabu@begin \def\tabu@@begin [#1]#2\@nil#3{% \tabu@preparesave{#3}% \def\tabu@align {#1}% \tabu@ [\tabu@align]#2{\tabu@rewritefirst #3}% }% \tabu@@begin \def\tabu@preparesave #1{% \iftabu@colortbl \@temptokena{}% \tabu@prepare@save\CT@arc@ \tabu@prepare@save\CT@drsc@ \fi \edef\tabu@savedparam{% \ifmmode \col@sep \the\arraycolsep \else \col@sep \the\tabcolsep \fi\relax \arrayrulewidth \the\arrayrulewidth\relax \doublerulesep \the\doublerulesep\relax \extrarowheight \the\extrarowheight\relax \extratabsurround \the\extratabsurround\relax \def\noexpand\arraystretch {\arraystretch}% \iftabu@colortbl \minrowclearance\the\minrowclearance\relax \the\@temptokena \fi}% \def\tabu@savedpream {\edef\tabu@halignto{to\the\tabu@target}\NC@find #1}% }% \tabu@preparesave \def\tabu@prepare@save #1{% \ifx\relax#1\else \@temptokena\expandafter{\the\expandafter\@temptokena \expandafter\def\expandafter#1\expandafter{#1}}\fi }% \tabu@prepare@save \newtoks\tabu@footnotes \long\def\tabu@footnotetext #1{% \edef\@tempa{\the\tabu@footnotes \noexpand\footnotetext [\the\csname c@\@mpfn\endcsname]}% \global\tabu@footnotes\expandafter{\@tempa {#1}}}% \long\def\tabu@xfootnotetext [#1]#2{% \global\tabu@footnotes\expandafter{\the\tabu@footnotes \footnotetext [{#1}]{#2}}} \let\tabu@xfootnote \@xfootnote \long\def\tabu@Hy@ftntext{\tabu@Hy@ftntxt {\the \c@footnote }} \long\def\tabu@Hy@xfootnote [#1]{% \begingroup \value\@mpfn #1\relax \protected@xdef \@thefnmark {\thempfn}% \endgroup \@footnotemark \tabu@Hy@ftntxt {#1}% }% \tabu@Hy@xfootnote \long\def\tabu@Hy@ftntxt #1#2{% \edef\@tempa{% \the\tabu@footnotes \begingroup \value\@mpfn #1\relax \noexpand\protected@xdef \noexpand\@thefnmark{\noexpand\thempfn}% \expandafter\noexpand\expandafter\tabu@Hy@footnotetext \expandafter{% \Hy@footnote@currentHref }% }% \global\tabu@footnotes\expandafter{% \@tempa {#2}% \endgroup }% }% \tabu@Hy@ftntxt \long\def\tabu@Hy@footnotetext #1#2{% \H@@footnotetext{% \ifHy@nesting \hyper@@anchor {#1}{#2}% \else \Hy@raisedlink{% \hyper@@anchor {#1}{\relax}% }% \def\@currentHref {#1}% \let\@currentlabelname \@empty #2% \fi }% }% \tabu@Hy@footnotetext \AtBeginDocument{% \csname\ifcsname ifHy@hyperfootnotes\endcsname ifHy@hyperfootnotes\else iffalse\fi\endcsname \let\tabu@footnotetext \tabu@Hy@ftntext \let\tabu@xfootnote \tabu@Hy@xfootnote \fi } \def\tabu@rewrite@X #1{\tabu@Xarg {#1}% \expandafter\let\csname tabu@X\the\tabu@X@cols\endcsname \relax \iftabu@measuring % not the first X column found in preamble \edef\tabu@global@X {\tabu@global@X \def\csname tabu@X\the\tabu@X@cols\endcsname {\strip@pt\tabu@X@sum}% \advance\tabu@X@sum \the\tabu@X@sum\relax}% \else % first X column found in preamble \tabu@measuringtrue \iftabu@spread \tabu@spreadtarget\tabu@target \tabu@target\z@ \else \tabu@spreadtarget \z@ \fi \ifdim\tabu@target=\z@ \setlength\tabu@target \tabudefaulttarget \tabu@message{(tabu) Default target: \ifx\tabudefaulttarget\linewidth\string\linewidth \else\ifx\tabudefaulttarget\linegoal\string\linegoal \fi\fi=\the\tabu@target \on@line, page \the\c@page}\fi \tabu@message{\tabu@titles}% \edef\tabu@global@X {\tabu@global@X \def\csname tabu@X1\endcsname{\strip@pt\tabu@X@sum}% \tabu@X@sum \the\tabu@X@sum\relax \tabu@target \the\tabu@target\relax \tabu@spreadtarget \the\tabu@spreadtarget\relax}% \let\tabu@halignto \relax \fi }% \tabu@rewrite@X \let\tabu@@rewrite@X \tabu@rewrite@X \def\tabu@rewrite@Xnested #1{\in@ ${#1}\ifin@ \def\tabucolX@rw {>{$}p{\tabucolX}<{$}}\else \def\tabucolX@rw {p{\tabucolX}}\fi} \def\tabu@rewrite@Xrestore #1{\tabu@gobbleopt{\def\tabucolX@rw{l}}} \def\tabu@Xarg#1{% \advance\tabu@X@cols \@ne \tabu@wdlet\tabu@X@cols \z@ \ifx\\#1\\% \tabu@X@sum \p@ \edef\tabucolX@rw {p{\tabu@dimexpr{\the\tabu@X@cols}{\tabucolX}}}% \edef\tabu@temp {p{\the\tabucolX}}% \else \tabu@X@sum \z@ \let\tabucolX@align \@empty \let\tabucolX@rw \@empty \let\tabu@Xmath \@empty \let\tabu@temp \@empty \tabu@Xparse {}#1,\@nnil \fi }% \tabu@Xarg \def\tabu@Xparse #1{\futurelet\@let@token \tabu@Xtest} \expandafter\def\expandafter\tabu@Xparsespace\space{\tabu@Xparse{}} \def\tabu@Xtest{% \ifcase \ifx \@nnil\@let@token \z@ \else \if ,\@let@token \m@ne\else \if p\@let@token 1\else \if m\@let@token 2\else \if b\@let@token 3\else \if l\@let@token 4\else \if c\@let@token 5\else \if r\@let@token 6\else \if L\@let@token 7\else \if C\@let@token 8\else \if R\@let@token 9\else \ifx \@sptoken\@let@token 10\else \if .\@let@token 11\else \if -\@let@token 11\else \ifcat $\@let@token 12\else 13\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\relax \tabucolX@do \expandafter \remove@to@nnil \or \tabu@Xtype {p}% \or \tabu@Xtype {m}% \or \tabu@Xtype {b}% \or \tabu@Xalign \raggedright \or \tabu@Xalign \centering \or \tabu@Xalign \raggedleft \or \tabu@Xalign \RaggedRight \or \tabu@Xalign \Centering \or \tabu@Xalign \RaggedLeft \or \expandafter \tabu@Xparsespace \or \expandafter \tabu@Xcoef \or \let\tabu@Xmath=$\expandafter \tabu@Xparse \or \tabu@Xcoef{}% \else\expandafter \tabu@Xparse \fi }% \tabu@Xtest \def\tabu@Xalign#1{% \ifx \tabucolX@align\@empty \else \PackageWarning{tabu} {Duplicate horizontal alignment specification}\fi \def\tabucolX@align{#1}\expandafter\tabu@Xparse }% \tabu@Xalign \def\tabu@Xtype#1{% \ifx \tabucolX@rw\@empty \else \PackageWarning{tabu} {Duplicate vertical alignment specification}\fi \def\tabucolX@rw{#1}\expandafter\tabu@Xparse }% \tabu@Xtype \def\tabu@Xcoef#1{\edef\tabu@temp{\tabu@temp#1}% \afterassignment\tabu@Xc@ef \tabu@cnt\number\if-#10\fi }% \tabu@Xcoef \def\tabu@Xc@ef{% \advance\tabu@X@sum \tabu@temp\the\tabu@cnt\p@ \tabu@Xparse{}% }% \tabu@Xc@ef \def\tabucolX@do{% \ifx\tabucolX@rw\@empty \def\tabucolX@rw{p}\fi \ifdim\tabu@X@sum<\z@ \tabu@negcoeftrue \tabu@X@sum \m@ne\tabu@X@sum \tabu@wdlet \tabu@X@cols \p@ \else \ifdim \tabu@X@sum=\z@ \tabu@X@sum \p@ \fi \fi \begingroup \toks@\expandafter {\tabucolX@align}% \edef\tabu@temp {\strip@pt\tabu@X@sum \tabucolX}% \edef\tabucolX@rw##1{% \ifx$\tabu@Xmath>{\noexpand\the\toks@ $}\else \ifx \tabucolX@align\@empty \else >{\noexpand\the\toks@}\fi\fi \tabucolX@rw{##1}% \ifx$\tabu@Xmath<{$}\fi}% \edef\x{\endgroup \def\noexpand\tabu@temp {\tabucolX@rw{\the\dimexpr\tabu@temp}}% \def\noexpand\tabucolX@rw{% \tabucolX@rw{\tabu@dimexpr{\the\tabu@X@cols}{\tabu@temp}}}% }\x }% \tabucolX@do \def\tabu@dimexpr#1#2{% \ifdim \tabu@wd{#1}>\p@ \ifdim \tabu@wd{#1}<#2 \tabu@wd{#1}\else#2\fi\else #2\fi }% \tabu@dimexpr \def\tabu@prep@TRIAL{% \begingroup \iffalse{\fi \ifnum0=`}\fi \tabu@setup@TRIAL \tabucolX \tabu@target \ifcase 0\iftabu@negcoef \else\iftabu@spread \else 1\fi\fi \advance\tabu@X@cols \@ne \expandafter\let\csname tabu@X\the\tabu@X@cols\endcsname \@undefined \tabu@X@cols \z@ \def\tabu@naturalX@max {\z@}% \def\tabu@naturalX@min {\z@}% \let\tabu@startpboxORI \@startpbox \let\@startpbox \tabu@measure@startpbox \fi \def\tabu@lasttry{\m@ne\p@}\tabu@cnt \z@ % number of trials \tabu@arrayleft@measure }% \tabu@prep@TRIAL \def\tabu@setup@TRIAL{\tabu@global@X \let\tabu@global@X \@empty \let\@halignto \@empty \tabu@naturalX \z@ \tabu@savecounters \let\tabu@savecounters \relax \hbadness \@M \let\hbadness \@tempcnta \hfuzz \maxdimen \let\hfuzz \@tempdima \let\tabu@rewrite@X \tabu@rewrite@Xnested \let\savetabu \@gobble \let\tabudefaulttarget \linewidth \let\write \tabu@nowrite \let\GenericError \tabu@GenericError \long\def\@xfootnote[##1]##2{}\let\@footnotetext \@gobble \ifx\@arrayright\relax \let\@arrayright \@empty\fi \tabu@TRIAL@hook }% \tabu@setup@TRIAL \def\tabu@savecounters{% \def\@elt##1{\global\value{##1}\the\value{##1}\relax}% \edef\tabu@global@X {\cl@@ckpt}\let\@elt \relax }% \tabu@savecounters \let\tabu@TRIAL@hook \@empty \newcommand\tabuDisableCommands[1]{\g@addto@macro\tabu@TRIAL@hook {#1}} \def\tabu@arrayleftmeasure#1\bgroup{% \def\tabu@Xfinish{% \tabu@global@Xnested \ifnum0=`{}\fi\endgroup \tabu@global@X #1\bgroup}% \def\tabu@TRIAL {\setbox\tabu@box \hbox\bgroup $#1\bgroup \the\toks@ \tabu@endTRIAL}% \toks@{\tabu@setup@everycr \let\@preamble \tabu@savedpreamble}% \tabu@collect }% \tabu@arrayleftmeasure \long\def\tabu@long@arrayleft@measure #1\LT@bchunk #2\LT@bchunk{% \def\tabu@Xfinish{% \tabu@global@Xnested \ifnum0=`{}\fi\endgroup \tabu@setup@everycr \let\@preamble \tabu@savedpreamble \tabu@global@X #1\LT@bchunk #2\LT@bchunk}% \def\tabu@TRIAL{% \setbox\tabu@box \hbox\bgroup \tabu@setup@everycr \let\@preamble \tabu@savedpreamble \tabu@global@X \LTchunksize\@M #1\LT@bchunk #2\LT@bchunk \the\toks@ \tabu@long@endTRIAL}% \toks@{}%\let\LT@output\relax \tabu@collect }% \tabu@long@arrayleft@measure \def\tabu@long@endTRIAL{% \LT@echunk \global\setbox\@ne \hbox{\unhbox\@ne}\kern\wd\@ne \LT@get@widths \egroup % got \tabu@box \iftabu@spread \tabu@spreadarith % \else \tabu@arith \fi \iftabu@measuring \tabu@measuringfalse \expandafter \tabu@TRIAL % \else \expandafter \tabu@Xfinish \the \expandafter\toks@ \tabu@endenvir % \fi }% \tabu@long@endTRIAL \def\tabu@collect{\catcode`\^^@=13\def\tabu@stack{b}\tabu@collectbody} \long\def\tabu@collectbody#1\end#2{% \edef\tabu@stack{\tabu@pushbegins #1\begin\end\expandafter\@gobble\tabu@stack}% \ifx\tabu@stack\@empty \toks@\expandafter{\the\toks@#1}\def\tabu@endenvir{\end{#2}}% \expandafter \tabu@TRIAL \else \toks@\expandafter{\the\toks@#1\end{#2}}% \expandafter \tabu@collectbody \fi }% \tabu@collectbody \long\def\tabu@pushbegins#1\begin#2{% \ifx\end#2\else b\expandafter\tabu@pushbegins\fi} \def\tabu@endTRIAL{% \tabu@adl@endTRIAL % \endarray$\egroup \iftabu@spread \tabu@spreadarith % \else \tabu@arith \fi \iftabu@measuring \tabu@measuringfalse \expandafter \tabu@TRIAL % \else \expandafter \tabu@Xfinish \the \expandafter\toks@ \tabu@endenvir % \fi }% \tabu@endTRIAL \def\tabu@adl@endTRIAL{\crcr \noalign{\global\adl@ncol \tabu@nbcols}} \def\tabu@arith{% \advance\tabu@cnt \@ne \tabu@message{\tabu@message@arith}% \ifx \@startpbox\tabu@measure@startpbox \let\@startpbox \tabu@startpboxORI \fi \dimen@ \tabu@X@sum \iftabu@negcoef \tabu@arith@negcoef \fi \ifcase 0\ifdim \dimexpr\wd\tabu@box-\tabu@hfuzz-1sp<\tabu@target \else \ifdim \tabu@lasttry=\wd\tabu@box 1\else 2\fi\fi\relax \ifdim \tabu@X@sum=\dimen@ \tabu@message{\tabu@message@reached}% \else\ifdim\tabu@X@sum=\z@ \tabu@message{\tabu@message@reached}% \else\ifnum \tabu@cnt>\@ne \tabu@message{\tabu@message@reached}% \else \tabu@measuringtrue \tabucolX = \dimexpr\tabucolX*\p@/\tabu@X@sum\relax \fi\fi\fi \or \tabu@message{\tabu@header Reached minimum width. Backing up}% \tabu@warn{tabu width = \the\wd\tabu@box\space> \the\tabu@target\space+ \tabu@hfuzz}% \or \ifdim \tabu@X@sum=\z@ \tabu@measuringtrue \tabucolX=\@tempdima \else \advance\tabucolX-\dimexpr(\wd\tabu@box-\tabu@target-.5\tabu@X@sum/\p@) *\p@/\tabu@X@sum\relax \ifdim \tabucolX<\z@ \tabu@warn{X Columns too narrow (table too wide)}% \tabucolX=\tabucolX@error \else \tabu@measuringtrue \ifdim \tabu@X@sum=\dimen@ \edef\tabu@lasttry{\the\wd\tabu@box}% \else \ifnum \tabu@cnt>\@ne \edef\tabu@lasttry{\the\wd\tabu@box}\fi \ifdim \tabucolX<\@tempdima \tabucolX \@tempdima\fi \fi \fi \fi \fi %(ifcase) \iftabu@measuring \else \edef\tabu@global@X{\tabu@global@X \tabucolX \the\tabucolX\relax \tabu@target \the\tabu@target\relax % < for \savetabu > \ifnum \tabu@nested=\z@ \ifx \@arrayright\@empty \ifdim \tabu@X@sum>\z@ \def\noexpand\@halignto{to\the\tabu@target}\fi\fi\fi}% \fi \tabu@X@sum \dimen@ }% \tabu@arith \def\tabu@arith@negcoef{% \tabu@X@cols \@ne \count@ \tabu@X@cols \@whilesw \ifcsname tabu@X\the\tabu@X@cols\endcsname\fi{% \ifdim \tabu@wd\tabu@X@cols>\p@ \expandafter\let\expandafter\tabu@temp \csname tabu@X\the\tabu@X@cols\endcsname \ifdim \tabu@wd\tabu@X@cols <\tabu@temp\tabucolX \advance\tabu@X@sum -\tabu@temp\p@ \tabu@message{\tabu@message@negcoef{\the\tabu@X@cols}}% \ifdim \tabu@wd\tabu@X@cols >\tabu@wd\count@ \count@ \tabu@X@cols \fi \fi\fi \advance\tabu@X@cols \@ne }% \@tempdima=\dimexpr\tabu@wd\count@ * \p@/ \dimexpr\csname tabu@X\the\count@\endcsname\p@\relax\relax }% \tabu@arith@negcoef \def\tabu@spreadarith{% \tabu@naturalX \tabu@naturalX@max\relax \tabucolX \tabu@naturalX@min\relax \tabu@message{\tabu@message@spread}% \ifdim \dimexpr \wd\tabu@box + \tabu@spreadtarget <\tabu@target \advance\tabu@spreadtarget \dimexpr\wd\tabu@box-\tabu@naturalX+\tabucolX\relax \ifdim \tabu@spreadtarget <\tabu@target \tabu@target =\tabu@spreadtarget \fi \tabu@message{\the\tabu@target}% \tabu@message{\ifdim \tabu@spreadtarget>\tabu@target (tabu) spread reduced to fit default target.\fi}% \else \tabu@message{\expandafter\tabu@msg@align \the\tabu@target { }{}{}{}{}\@@} \tabu@message{(tabu)\ifdim\wd\tabu@box<\tabu@target spread too large\else tabu spread is useless here\fi, default target used.}% \fi \let\@startpbox \tabu@startpboxORI \xdef\tabu@halignto {to\the\tabu@target}% \tabucolX \tabu@target \tabu@spreadfalse \tabu@measuringtrue }% \tabu@spreadarith \def\tabu@message@arith{\tabu@header \expandafter\tabu@msg@align \the\tabucolX { }{ }{ }{ }{}\@@ \expandafter\tabu@msg@align \the\wd\tabu@box { }{ }{ }{ }{}\@@ \expandafter\tabu@msg@align \the\tabu@target { }{ }{ }{ }{}\@@ \expandafter\tabu@msg@align \the\tabu@X@sum {}{}{}{}{}\@@ \ifx\@startpbox\tabu@measure@startpbox\tabu@spaces (coefs<0)\else \ifdim\tabu@X@sum>\z@ \expandafter\tabu@msg@align \the\dimexpr(\tabu@target-\wd\tabu@box) *\p@/\tabu@X@sum\relax {}{}{}{}{}\@@\fi\fi^^J}% \def\tabu@message@spread{\tabu@spreadheader \expandafter\tabu@msg@align \the\tabu@spreadtarget {}{}{}{}{}\@@ \expandafter\tabu@msg@align \the\wd\tabu@box {}{}{}{}{}\@@ \expandafter\tabu@msg@align \the\tabucolX {}{}{}{}{}\@@ \expandafter\tabu@msg@align \expandafter-\the\tabu@naturalX {}{}{}{}{}\@@} \def\tabu@message@reached{\tabu@header \expandafter\tabu@msg@align \the\tabucolX { }{ }{ }{ }{}\@@ \expandafter\tabu@msg@align \the\wd\tabu@box {}{}{}{}{}\@@ <\expandafter\tabu@msg@align \the\tabu@target { }{ }{ }{ }{}\@@ + \tabu@hfuzz\space= hfuzz *****^^J% (tabu)\tabu@spaces******* Reached Target: hfuzz = \tabu@hfuzz\on@line\space *******^^J% \ifnum\tabu@nested=\z@ \tabu@elapsedtime ^^J\fi}% \def\tabu@message@etime{(tabu)\tabu@spaces Time elapsed for trials: \the\numexpr(\pdfelapsedtime-\tabu@starttime-32767)/65536\relax sec \the\numexpr\numexpr(\pdfelapsedtime-\tabu@starttime) -\numexpr(\pdfelapsedtime-\tabu@starttime-32767)/65536\relax*65536\relax *1000/65536\relax ms}% \def\tabu@message@negcoef #1{\tabu@spaces\tabu@spaces * #1. X[-\csname tabu@X#1\endcsname]: natural width = \tabu@wd{#1} < \csname tabu@X#1\endcsname X = \the\dimexpr\csname tabu@X#1\endcsname\tabucolX }% \tabu@message@negcoef \edef\tabu@spaces{\@spaces} \def\do#1{% \def\tabu@msg@align##1.##2##3##4##5##6##7##8##9\@@{% \ifnum##1<10 #1 #1\else \ifnum##1<100 #1 \else \ifnum##1<\@m #1\fi\fi\fi ##1.##2##3##4##5##6##7##8#1}% \def\tabu@header{(tabu) \ifnum\tabu@cnt<10 #1\fi\the\tabu@cnt) #1}% \def\tabu@titles{\ifnum \tabu@nested=\z@ (tabu) Try#1 #1 tabu X #1 #1 #1tabu Width #1 #1 Target #1 #1 #1 #1 Coefs #1 #1 #1 Update^^J\fi}% \def\tabu@spreadheader{% (tabu) Try#1 #1 Spread #1 #1 tabu Width #1 #1 Nat. Min. #1 #1 #1 Nat.X #1 #1 #1 New Target^^J% (tabu)spread}% \def\tabu@tracing@save##1{\begingroup \def\col@sep ####1\relax {(tabu) column sep #1 #1 #1 = ####1^^J}% \def\arrayrulewidth ####1\relax{(tabu) arrayrulewidth #1 = ####1^^J}% \def\doublerulesep ####1\relax {(tabu) doublerulesep #1 #1= ####1^^J}% \def\extrarowheight ####1\relax{(tabu) extrarowheight #1 = ####1^^J}% \def\extratabsurround ####1\relax{(tabu) extratabsurround = ####1^^J}% \def\minrowclearance ####1\relax {(tabu) minrowclearance#1 = ####1^^J}% \def\arraystretch ####1{(tabu) arraystretch #1 #1 = ####1^^J}% \iftabu@colortbl \def\CT@arc@####1{(tabu) arrayrulecolor #1 = ####1^^J}% \def\CT@drsc@####1{(tabu) doublerulesepcolor=####1^^J}% \let\color \relax \fi \def\NC@find ####1\@nil{(tabu) tabu preamble#1 #1 = \detokenize{####1}^^J}% \def\tabu@wddef####1####2{(tabu) Natural width ####1 = ####2^^J}% \let\edef \@gobbletwo \let\def \@empty \tabu@message{% (tabu) \string\savetabu{##1}: \on@line^^J% \ifx \savetabu\tabusaveX (tabu) X columns width #1 = \the\tabucolX^^J\fi (tabu) target #1 #1 #1 #1 #1 = \the\tabu@target^^J% \tabu@savedparam \tabu@savedpream \@nil \iftabu@negcoef \tabu@savewd\fi}% \endgroup}% }\do{ } \def\tabu@measure@startpbox#1{\bgroup \let\@startpbox \tabu@startpboxORI % in case of nesting \in@{\tabu@dimexpr}{#1}% \ifin@ \global\advance\tabu@X@cols \@ne \ifcsname tabu@X\the\tabu@X@cols\endcsname\else \global\tabu@X@cols \@ne \global\tabu@naturalX \z@ \fi \fi \iftabu@spread\else \ifin@ {\let\tabu@dimexpr \@firstoftwo\expandafter}% \ifdim \tabu@wd{#1}<\p@ \in@false\fi\fi\fi \ifin@ \begingroup \let\tabu@dimexpr \@secondoftwo \edef\x{\endgroup \def\noexpand\tabu@temp{\the\dimexpr#1}% }\x \setbox\tabu@box=\hbox\bgroup \let\tabu@rewrite@X \tabu@@rewrite@X \begin{varwidth}{\tabu@temp}\narrowragged\arraybackslash \tabu@noadjustspacing \parfillskip\@flushglue \bgroup \aftergroup\tabu@measure@endpbox \else \expandafter\@gobble\@startpbox{#1}% \@gobble \bgroup \fi }% \tabu@measure@startpbox \ifdefined\pdfadjustspacing \def\tabu@noadjustspacing{\pdfadjustspacing\z@}% \else \let\tabu@noadjustspacing\relax \fi \def\tabu@measure@endpbox{% \@finalstrut\@arstrutbox\end{varwidth}\egroup % \global\advance\tabu@naturalX \wd\tabu@box \ifdim \tabu@naturalX@max<\tabu@naturalX \xdef\tabu@naturalX@max{\the\tabu@naturalX}\fi \@tempdima=\dimexpr \wd\tabu@box * \tabu@X@sum / \dimexpr\csname tabu@X\the\tabu@X@cols\endcsname\p@\relax\relax \ifdim \tabu@naturalX@min<\@tempdima \xdef\tabu@naturalX@min{\the\@tempdima}\fi \ifdim \tabu@wd\tabu@X@cols>\z@ \ifdim \tabu@wd\tabu@X@cols<\wd\tabu@box \tabu@wddef\tabu@X@cols {\the\wd\tabu@box}% \tabu@debug{\tabu@spaces\tabu@spaces * \the\tabu@X@cols. X[-\csname tabu@X\the\tabu@X@cols\endcsname]: target=\the\dimexpr\tabu@temp\relax\space \expandafter\expandafter\expandafter\string\tabu@wd\tabu@X@cols =\tabu@wd\tabu@X@cols}% \fi\fi \box\tabu@box \egroup % end of \vtop (measure) }% \tabu@measure@endpbox \def\tabu@wd#1{\csname tabu@W\the\tabu@nested @\number#1\endcsname} \def\tabu@wddef#1{\expandafter\xdef \csname tabu@W\the\tabu@nested @\number#1\endcsname} \def\tabu@wdlet#1{\global\expandafter\let \csname tabu@W\the\tabu@nested @\number#1\endcsname} \def\tabu@naturalX@min{\z@} \def\tabu@naturalX@max{\z@} \def\tabu@setup@everycr{% \tabu@firstclinetrue \let\tabu@first@cline \z@ \def\tabu@restoreeverycr {\let\everycr \tabu@everycr}% \def\everycr{\afterassignment\tabu@restoreeverycr \@temptokena}% \tabu@everycr\expandafter{\the\tabu@everycr \noalign{% \ifcase\tabu@first@cline \global\let\tabu@first@cline \tw@ \or\global\let\tabu@first@cline \tw@ \or\global\tabu@firstclinefalse \global\let\tabu@first@cline \m@ne \fi}% \tabu@rowfontreset }% }% \tabu@setup@everycr \def\tabuphantomline{\crcr\noalign{% \global\let\@arstrutbox \voidb@x \iftabu@colortbl \xdef\tabu@minrowclearance{\the\minrowclearance}% \global\minrowclearance \z@ \fi \global\let\vcenter \vbox \ifnum \tabu@nested>\z@ \vspace*{\dimexpr\extrarowheight-\ht\@arstrutbox}\fi \toks@{}\count@\@ne \@whilenum\count@<\tabu@nbcols\do{\advance\count@\@ne \toks@\expandafter{\the\toks@&}}% \toks@\expandafter{\the\toks@ \cr\noalign{% \global\let\@arstrutbox \tabu@arstrutbox \global\let\vcenter \tabu@vcenter \iftabu@colortbl \global\minrowclearance \tabu@minrowclearance\relax\fi \global\let\tabu@first@cline \@ne}}% \expandafter}\the\toks@ }% \tabuphantomline \def\tabu@lines{{\endlinechar\m@ne \scantokens{\def\x{|}}% \expandafter}\expandafter\tabu@lines@ \x }% \tabu@lines \def\tabu@lines@#1{% \tabu@newcolumntype #1{\tabuvline@rewrite}% \NC@list\expandafter{\the\NC@list \NC@do #1}% }% \tabu@lines@ \newcommand*\tabuvline@rewrite[1][]{\tabuvline@arg{#1}% \expandafter \NC@find \tabu@temp} \def\tabu@vline#1{\vrule width#1} \def\tabuvline@arg#1{% \ifx\\#1\\% \edef\tabu@temp{!{% \iftabu@colortbl\begingroup\noexpand\CT@arc@\fi \noexpand\tabu@vline\arrayrulewidth \iftabu@colortbl\endgroup\fi}}% \else \futurelet \tabu@temp \tabuvline@argi #1\p@\p@\@nnil \tabuvline@argiii \fi }% \tabuvline@arg \def\tabuvline@argi{% \let\tabu@color \@empty \ifcat A\noexpand\tabu@temp \@tempdima\arrayrulewidth \expandafter\tabu@getlinecolor \else \expandafter\tabuvline@argii \fi }% \tabuvline@argi \def\tabuvline@argii#1\@nnil{% \tabu@maybecolor \@tempdima #1 \@nnil }% \tabuvline@argii \def\tabuvline@argiii{% \edef\tabu@temp{!{\begingroup \ifx\tabu@color\@empty \iftabu@colortbl \noexpand\CT@arc@ \fi \else \tabu@color\fi \noexpand\tabu@vline{\the\@tempdima}\endgroup}}% }% \tabuvline@argiii \def\tabu@linedash{4pt}% \def\tabu@dashgap{4pt}% \def\tabucline{\noalign{\ifnum0=`}\fi \@ifstar {\@tempswatrue\tabu@cline} {\@tempswafalse\tabu@cline}}% \newcommand*\tabu@cline[2][]{\toks@{}% \tabu@startstop{#2}\tabu@getlinespec{#1}\@multicnt\@ne \ifnum\tabu@start>\tabu@stop \else\ifx\tabu@xleaders\relax \else \toks@{\noalign{\global\let\@arstrutbox \voidb@x}}% %% \iftabu@firstcline\if\tabu@align t\vskip-\ht\@arstrutbox\fi\fi \@whilenum\@multicnt<\tabu@start\do{\advance\@multicnt\@ne \toks@\expandafter{\the\toks@ &}}% \loop \toks@\expandafter{\the\toks@ \omit }% \ifnum \@multicnt=\@ne \expandafter \tabu@add \csname tabu@tok@\the\@multicnt L\endcsname \@nil \fi \ifcase 0\if@tempswa\else\ifnum \@multicnt<\tabu@stop 1\fi\fi\relax \toks@\expandafter{\the\toks@ \begingroup}% \toks@\expandafter{\the\expandafter\toks@ \tabu@xleaders \endgroup}% \fi \ifcase 0\if@tempswa\else\ifnum \@multicnt<\tabu@stop 1\fi\fi\relax \expandafter \tabu@add \csname tabu@tok@\the\@multicnt R\endcsname \@nil \fi \ifnum\@multicnt<\tabu@stop \advance\@multicnt\@ne \if@tempswa \toks@\expandafter{\the\toks@ &}% \else \toks@\expandafter{\the\toks@ \span}\fi \repeat \@whilenum\@multicnt<\tabu@nbcols\do{\advance\@multicnt\@ne \toks@\expandafter{\the\toks@ &}}% \toks@\expandafter{\the\toks@ \cr \noalign{\global\let\@arstrutbox \tabu@arstrutbox}}% %% \tabu@debug{LIGNE AJOUTEE:\the\toks@}% \fi\fi \ifnum0=`{\fi\expandafter}\the\toks@ }% \tabu@cline \def\tabu@add #1\@nil{\toks@\expandafter{\the\toks@ \begingroup #1\endgroup\ifmmode$\fi}} \def\tabu@startstop#1{\tabu@start@stop #1\relax 1-\tabu@nbcols\@nnil} \def\tabu@start@stop #1-#2\@nnil{% \@defaultunits \tabu@start \number0#1\relax\@nnil \@defaultunits \tabu@stop \number0#2\relax\@nnil \ifnum\tabu@start>\tabu@nbcols\tabu@start \tabu@nbcols\else \ifnum\tabu@start<\@ne \tabu@start \@ne \fi\fi \ifnum\tabu@stop>\tabu@nbcols \tabu@stop \tabu@nbcols \else \ifnum\tabu@stop<\@ne \tabu@stop \tabu@nbcols\fi\fi }% \tabu@start@stop \def\tabu@getlinespec#1{\let\tabu@xleaders \relax \@defaultunits \let\@tempa=#1 \relax\@nnil \ifx\@tempa\relax \let\tabu@xleaders \tabu@defaultleaders\else \ifx\@tempa\hbox \tabu@defleaders{#1}\else \ifx\@tempa\box \tabu@defleaders{#1}\else \ifx\@tempa\copy \tabu@defleaders{#1}\else \ifcsname tabu@line@style@\detokenize{#1}\endcsname \csname tabu@line@style@\detokenize{#1}\endcsname \else \tabu@getline{#1\p@ on0pt off0pt}\fi\fi\fi\fi\fi }% \tabu@getlinespec \def\tabu@defleaders#1{% \def\tabu@xleaders{\iftabu@colortbl\CT@arc@\fi \xleaders\hbox{\lower.5\extrarowheight#1}\tabu@leaderfill}} \def\tabucline@warn#1{\PackageWarning{tabu} {Undefined line syle: #1 \MessageBreak Using default line style instead}% \let\tabu@xleaders \tabu@defaultleaders }% \tabucline@warn \def\tabu@getline#1{\tabu@lineon #1 \@nil on\tabu@linedash \p@ \@nil\@nnil{#1}} \def\tabu@maybecolor{\ifx\tabu@color\@empty \afterassignment\tabu@colortest \else \@defaultunits\fi} \def\tabu@lineon #1on#2\@nil#3\@nnil#4{% \let\tabu@color \@empty \@defaultunits \let\@tempa=#1 \relax\@nnil \ifcase 0\ifx o\@tempa 1\else\ifcat A\noexpand\@tempa 2\fi\fi\relax \tabu@maybecolor \@tempdima #1\arrayrulewidth \p@\@nnil \tabu@maybecolor \@tempdimb #2\p@ \@nnil \tabu@lineoff #1 on#2 off\tabu@dashgap \p@ \@nnil \or\@tempdima \arrayrulewidth \tabu@maybecolor \@tempdimb #2\p@ \@nnil \tabu@lineoff #1 on#2 off\tabu@dashgap \p@ \@nnil \else \tabu@maybecolor \@tempdima \arrayrulewidth #1\p@\@nnil \ifx\tabu@color\@empty \tabucline@warn\@tempa\else \@tempdimb \z@ \tabu@lineoff off0pt \p@\@nnil \fi \fi }% \tabu@lineon \def\tabu@lineoff #1off#2\@nnil{% \tabu@maybecolor \@tempdimc #2\p@ \@nnil \iftabu@colortbl \ifx \tabu@color\@empty \def\tabu@color{\noexpand\CT@arc@}% \fi\fi \ifdim \@tempdimb=\z@ \ifdim \@tempdimc>\z@ \@tempdimb \tabu@dashgap\relax\fi\fi \ifdim \@tempdimc=\z@ \ifdim \@tempdimb>\z@ \@tempdimc \tabu@linedash\relax\fi\fi \ifdim \@tempdima<\z@ \else \ifdim \@tempdimb<\z@ \else \ifdim \@tempdimc<\z@ \else \edef \tabu@xleaders{\tabu@color\xleaders \ifdim\@tempdimc>\z@ \hbox\bgroup \kern\the\dimexpr\@tempdimc/2\relax\fi \noexpand\iftabu@firstcline \vrule depth\dimexpr\the\@tempdima \ifdim\@tempdimb>\z@ width\the\@tempdimb\fi \noexpand\else \vrule height\dimexpr-\extrarowheight+\the\@tempdima depth\dimexpr\extrarowheight \ifdim\@tempdimb>\z@ width\the\@tempdimb\fi \noexpand\fi \ifdim\@tempdimc>\z@ \kern\the\dimexpr\@tempdimc/2\egroup\fi \tabu@leaderfill}% \fi\fi\fi }% \tabu@lineoff \def\tabu@colortest{\futurelet\tabu@temp\tabu@linecolor} \def\tabu@linecolor{% \ifcase 0\if ,\noexpand\tabu@temp\else \ifx\relax\tabu@temp\else \ifx \@sptoken\tabu@temp1\else \ifcat A\noexpand\tabu@temp2\else 3\fi\fi\fi\fi\relax \def\tabu@next##1{\futurelet\tabu@temp\tabu@linecolor}% \or\def\tabu@next{\tabu@gobblespace{\futurelet\tabu@temp\tabu@linecolor}}% \or\let\tabu@next \tabu@getlinecolor \else\expandafter\remove@to@nnil \fi \tabu@next }% \tabu@linecolor \def\tabu@getlinecolor#1\p@{% \edef\@tempa{\zap@space #1 \@empty}% \ifcsname\string\color@\@tempa\endcsname \edef\tabu@color{\noexpand\noexpand\noexpand\color{\@tempa}}% \set@color \fi\remove@to@nnil }% \tabu@getlinecolor \def\tabulinestyle#1{\@for\@tempa:=#1\do {\expandafter\tabu@linestyle\@tempa==\@nil}} \def\tabu@linestyle#1=#2=#3\@nil{% \begingroup \tabu@getlinespec {#2}\expandafter\gdef \csname tabu@line@style@\detokenize{#1}\expandafter\endcsname \expandafter{\expandafter\def\expandafter\tabu@xleaders \expandafter{\tabu@xleaders}}% \endgroup }% \tabu@linestyle \expandafter\def \csname tabu@line@style@\endcsname {% \let\tabu@xleaders \tabu@defaultleaders}% \def\tabu@defaultleaders{\iftabu@colortbl\CT@arc@\fi \leaders \iftabu@firstcline \vrule depth \arrayrulewidth \else \vrule height\dimexpr-\extrarowheight+\arrayrulewidth depth \extrarowheight \fi \tabu@leaderfill} \let\tabu@leaderfill \hfil {\catcode32=13\relax\catcode`\^^@=13\relax \gdef\tabu@verb{\@sanitize\catcode`\^=7\edef\^{\string^}\tabu@makeatletter \catcode32=13\let =\ \catcode`\^^@=13\def^^@{\hskip\parfillskip\null\linebreak}% \endlinechar\m@ne}} {\catcode64=13\edef @{\string @}\expandafter\xdef \csname tabu@makeatletter\endcsname{\catcode64=13\def\noexpand @{\unskip @}}} \newcommand\tabu@sanitizetext[1][\ttfamily]{\begingroup \tabu@verb #1\tabu@s@nitizetext} \long\def\tabu@s@nitizetext#1{\@makeother\{\@makeother\}% \everyeof{\noexpand}\scantokens{#1}\endgroup} \def\tabu@tabudecimal#1{% \def\tabu@decimal{#1}\@temptokena{}% \let\tabu@getdecimal@ \tabu@getdecimal@ignorespaces \tabu@scandecimal }% \tabu@tabudecimal \def\tabu@scandecimal{\futurelet \tabu@temp \tabu@getdecimal@} \def\tabu@skipdecimal#1{#1\tabu@scandecimal} \def\tabu@getdecimal@ignorespaces{% \ifcase 0\ifx\tabu@temp\ignorespaces\else \ifx\tabu@temp\@sptoken1\else 2\fi\fi\relax \let\tabu@getdecimal@ \tabu@getdecimal \expandafter\tabu@skipdecimal \or \expandafter\tabu@gobblespace\expandafter\tabu@scandecimal \else \expandafter\tabu@skipdecimal \fi }% \tabu@getdecimal@ignorespaces \def\tabu@get@decimal#1{\@temptokena\expandafter{\the\@temptokena #1}% \tabu@scandecimal} \def\do#1{% \def\tabu@get@decimalspace#1{% \@temptokena\expandafter{\the\@temptokena #1}\tabu@scandecimal}% }\do{ } \let\tabu@@tabudecimal \tabu@tabudecimal \def\tabu@getdecimal{% \ifcase 0\ifx 0\tabu@temp\else \ifx 1\tabu@temp\else \ifx 2\tabu@temp\else \ifx 3\tabu@temp\else \ifx 4\tabu@temp\else \ifx 5\tabu@temp\else \ifx 6\tabu@temp\else \ifx 7\tabu@temp\else \ifx 8\tabu@temp\else \ifx 9\tabu@temp\else \ifx .\tabu@temp\else \ifx ,\tabu@temp\else \ifx -\tabu@temp\else \ifx +\tabu@temp\else \ifx e\tabu@temp\else \ifx E\tabu@temp\else \ifx\tabu@cellleft\tabu@temp1\else \ifx\ignorespaces\tabu@temp1\else \ifx\@sptoken\tabu@temp2\else 3\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\relax \expandafter\tabu@get@decimal \or \expandafter\tabu@skipdecimal \or \expandafter\tabu@get@decimalspace \else\expandafter\tabu@printdecimal \fi }% \tabu@getdecimal \def\tabu@printdecimal{% \edef\tabu@temp{\the\@temptokena}% \ifx\tabu@temp\@empty\else \ifx\tabu@temp\space\else \expandafter\tabu@decimal\expandafter{\the\@temptokena}% \fi\fi }% \tabu@printdecimal \newcommand*\savetabu[1]{\noalign{% \ifx\\#1\\\tabu@savewarn{}{The tabu will not be saved}\else \@ifundefined{tabu@saved@\string#1}{}{\tabu@savewarn{#1}{Overwritting}}% {% \toks0\expandafter{\tabu@savedpreamble}% \toks1\expandafter{\tabu@savedparam}% \toks2\expandafter{\tabu@savedpream}% \toks3{}% \iftabu@negcoef \edef\tabu@savewd{\tabu@savewd{\number\numexpr1}}% \toks3\expandafter{\tabu@savewd}\fi \expandafter\xdef\csname tabu@saved@\string#1\endcsname##1{% \noexpand\ifcase##1\relax \noexpand\ifdim\tabu@target>\z@ \noexpand\tabu@warn@usetabu \noexpand\fi \tabu@target \the\tabu@target\relax \tabucolX \the\tabucolX\relax \the\toks1% \gdef\noexpand\tabu@usetabu{% \the\toks1% \def\noexpand\@halignto{\tabu@halignto}% \tabucolX \the\tabucolX\relax \def\noexpand\@preamble{\the\toks0}% \noexpand\tabu@make@arstrutbox \the\toks3 \noexpand\ifx \noexpand\tabu@align\noexpand\tabu@aligndefault@text \def\noexpand\tabu@align{\tabu@align}% \noexpand\fi}% \aftergroup\noexpand\tabu@usetabu \noexpand\else \noexpand\ifdim\tabu@target=\z@ \tabu@target \the\tabu@target\relax \noexpand\fi \gdef\noexpand\tabu@preamble{% \noexpand\ifx \noexpand\tabu@align\noexpand\tabu@aligndefault@text \def\noexpand\tabu@align{\tabu@align}% \noexpand\fi}% \aftergroup\noexpand\tabu@preamble \noexpand\fi \the\toks2}% \tabu@message@save{#1}}% \fi}% }% \savetabu \def\tabu@aligndefault@text{\tabu@aligndefault}% \def\tabu@warn@usetabu{\PackageWarning{tabu} {Specifying a target with \string\usetabu\space is useless \MessageBreak The target cannot be changed!}} \def\tabu@savewd#1{% \ifnum#1>\tabu@nbcols \expandafter \@gobble \else \ifdim\tabu@wd{#1}>\z@ \noexpand\tabu@wddef{#1}{\tabu@wd{#1}}\fi \expandafter\tabu@savewd % loop \fi{#1+1}% }% \tabu@savewd \def\tabu@make@arstrutbox{% \@tempdima \ht \strutbox \advance \@tempdima by\extrarowheight \setbox \@arstrutbox \hbox{\vrule \@height \arraystretch \@tempdima \@depth \arraystretch \dp \strutbox \@width \z@}% }% \tabu@make@arstrutbox \def\tabu@savewarn#1#2{\PackageInfo{tabu} {User-name `#1' already used for \string\savetabu \MessageBreak #2}}% \def\tabu@saveerr#1{\PackageError{tabu} {User-name `#1' is unknown for \string\usetabu \MessageBreak I cannot restore an unknown preamble!}\@ehd} \def\tabu@rowfont{\noalign{\ifnum0=`}\fi\tabu@row@font} \newcommand*\tabu@row@font[2][]{% \global\let\tabu@rowfontreset \tabu@rowfont@reset \global\let\tabu@@cellleft \tabu@cellleft \global\let\tabu@@cellright \tabu@cellright \gdef\tabu@cellfont{\let\color \tabu@colorleavevmode#2\let\color \tabu@colorORI}% \ifcsname tabu@cell@#1\endcsname % row alignment \csname tabu@cell@#1\endcsname \fi \toks@\expandafter {\tabu@cellleft\tabu@cellfont}% inside \noalign group ok \xdef\tabu@cellleft {\the\toks@}% \ifnum0=`{\fi}% end of noalign group }% \rowfont \def\tabu@colorleavevmode{\leavevmode\tabu@colorORI} \AtBeginDocument{\let\tabu@colorORI \color} \def\tabu@rowfont@reset{% \noalign{% \global\let\tabu@rowfontreset \@empty \global\let\tabu@cellleft \tabu@@cellleft \global\let\tabu@cellright \tabu@@cellright \global\let\tabu@cellfont \@empty \global\let\tabu@celllalign \@empty \global\let\tabu@cellralign \@empty }% }% \tabu@rowfont@reset \let\tabu@rowfontreset\@empty \newif\iftabu@cellright \AtBeginDocument{\let\tabu@prepnext@tokORI \prepnext@tok }% original definition \def\tabu@prepnext@tok{% \ifnum \count@<\z@ % \@tempcnta \@M % \tabu@nbcols\z@ \xdef\tabu@global@temp{\tabu@global@temp \tabu@nbcols\z@}% \expandafter\let\csname tabu@tok@1L\endcsname \relax \tabu@cellrightfalse \else \ifcase \numexpr \count@-\@tempcnta \relax % (case 0): prev. token is left \advance \tabu@nbcols\@ne \expandafter\let\csname tabu@tok@\the\tabu@nbcols R\endcsname \relax \expandafter\gdef\expandafter\tabu@global@temp\expandafter{% \tabu@global@temp \advance\tabu@nbcols\@ne}% \iftabu@cellright % before-previous token is right and is finished \tabu@cellrightfalse % \tabu@savetok R\tabu@preptokenright \fi \ifnum \tabu@nbcols=\@ne \tabu@savetok L\fi \tabu@preptokenleft \or % (case 1) previous token is right \tabu@savetok R\tabu@cellrighttrue \else % special column: do not change the token \ifnum \tabu@nbcols>\z@ %special column: always on the right of normal one \tabu@savetok R% \else % unless this is the very first column (\tabu@nbcols=0) \advance\tabu@nbcols\@ne \tabu@savetok L\advance\tabu@nbcols\m@ne \fi \iftabu@cellright % before-previous token is right \tabu@cellrightfalse \tabu@preptokenright \fi \fi % \ifcase \fi \tabu@prepnext@tokORI }% \tabu@prepnext@tok \def\tabu@preptokenright{% \advance \count@ \m@ne \toks\count@\expandafter {\the\toks\count@ \tabu@cellright \tabu@cellralign}% \advance \count@ \@ne }% \tabu@preptokenright \def\tabu@preptokenleft{\toks\count@\expandafter {\expandafter\tabu@celllalign \the\toks\count@ \tabu@cellleft}% }% \tabu@preptokenleft \def\tabu@savetok#1{\begingroup \expandafter\tabu@savet@k\csname tabu@tok@\the\tabu@nbcols #1\endcsname }% \tabu@savetok \def\tabu@savet@k#1{% \ifnum \@chclass=\@ne \toks@\toks\count@ \else\ifnum\@chclass=5 \toks@\toks\count@ \else \toks@{}\fi\fi \unless\ifx#1\relax \toks@\expandafter\expandafter\expandafter{% \expandafter#1\the\toks@}\fi \toks@\expandafter{\expandafter\def\expandafter#1\expandafter{% \the\toks@}}% \@temptokena\expandafter{\tabu@global@temp}% \xdef\tabu@global@temp {\the\@temptokena \the\toks@}% \expandafter\endgroup \the\toks@ }% \tabu@savetok \let\tabu@cellleft\@empty \let\tabu@cellright\@empty \def\tabu@celllalign{\tabu@cellleft}% row font spec. applies to pre-column material \let\tabu@cellralign\@empty \let\tabu@cellfont\@empty \def\tabu@cell@l{% force alignment to left \gdef\tabu@celllalign{\tabu@removehfil \raggedright\arraybackslash \tabu@cellleft}% \gdef\tabu@cellralign{\tabu@flush1\tabu@ignorehfil}% \toks@\expandafter{\tabu@cellleft\raggedright\arraybackslash}% local \xdef\tabu@cellleft{\the\toks@}% }% \tabu@cell@l \def\tabu@cell@c{% force alignment to center \gdef\tabu@celllalign{\tabu@removehfil \centering\arraybackslash \tabu@flush{.5}\tabu@cellleft}% \gdef\tabu@cellralign{\tabu@flush{.5}\tabu@ignorehfil}% \toks@\expandafter{\tabu@cellleft\centering\arraybackslash}% local \xdef\tabu@cellleft{\the\toks@}% }% \tabu@cell@c \def\tabu@cell@r{% force alignment to right \gdef\tabu@celllalign{\tabu@removehfil \raggedleft\arraybackslash \tabu@flush1\tabu@cellleft}% \gdef\tabu@cellralign{\tabu@ignorehfil}% \toks@\expandafter{\tabu@cellleft\raggedleft\arraybackslash}% local \xdef\tabu@cellleft{\the\toks@}% }% \tabu@cell@r \def\tabu@cell@j{% force justification (for p, m, b columns) \gdef\tabu@celllalign{\tabu@justify\tabu@cellleft}% \global\let\tabu@cellralign\@empty \toks@\expandafter{\tabu@cellleft\tabu@justify}% local (noalign grp) \xdef\tabu@cellleft{\the\toks@}% }% \tabu@cell@j \def\tabu@justify{% \leftskip\z@skip \@rightskip\leftskip \rightskip\@rightskip \parfillskip\@flushglue }% \tabu@justify %% ragged2e settings \def\tabu@cell@L{% force alignment to left (ragged2e) \gdef\tabu@celllalign{\tabu@removehfil \RaggedRight\arraybackslash \tabu@cellleft}% \gdef\tabu@cellralign{\tabu@flush1\tabu@ignorehfil}% \toks@\expandafter{\tabu@cellleft\RaggedRight\arraybackslash}% \xdef\tabu@cellleft{\the\toks@}% }% \tabu@cell@L \def\tabu@cell@C{% force alignment to center (ragged2e) \gdef\tabu@celllalign{\tabu@removehfil \Centering\arraybackslash \tabu@flush{.5}\tabu@cellleft}% \gdef\tabu@cellralign{\tabu@flush{.5}\tabu@ignorehfil}% \toks@\expandafter{\tabu@cellleft\Centering\arraybackslash}% \xdef\tabu@cellleft{\the\toks@}% }% \tabu@cell@C \def\tabu@cell@R{% force alignment to right (ragged2e) \gdef\tabu@celllalign{\tabu@removehfil \RaggedLeft\arraybackslash \tabu@flush1\tabu@cellleft}% \gdef\tabu@cellralign{\tabu@ignorehfil}% \toks@\expandafter{\tabu@cellleft\RaggedLeft\arraybackslash}% \xdef\tabu@cellleft{\the\toks@}% }% \tabu@cell@R \def\tabu@cell@J{% force justification (ragged2e) \gdef\tabu@celllallign{\justifying\arraybackslash\tabu@cellleft}% \global\let\tabu@cellralign\@empty \toks@\expandafter{\tabu@cellleft\justifying\arraybackslash}% \xdef\tabu@cellleft{\the\toks@}% }% \tabu@cell@J \def\tabu@flush#1{% \iftabu@colortbl % colortbl uses \hfill rather than \hfil \hskip \ifnum\currentgrouptype>13 \stretch{#1}% \else\ifdim#1pt<1pt \tabu@cellskip \else \stretch{#1} \fi\fi \relax \else % array.sty \ifnum \currentgrouptype>13\relax \hfil \hskip1sp \fi \fi }% \tabu@flush \AtBeginDocument{% \@ifpackageloaded{ragged2e} {} {\let\tabu@cell@L \tabu@cell@l \let\tabu@cell@R \tabu@cell@r \let\tabu@cell@C \tabu@cell@c \let\tabu@cell@J \tabu@cell@j }% }% AtBeginDocument \newskip\tabu@cellskip \let\tabu@hfil\hfil \let\tabu@hfill\hfill \let\tabu@hskip\hskip \def\tabu@removehfil{% \iftabu@colortbl \unkern \tabu@cellskip = \lastskip \ifnum\gluestretchorder\tabu@cellskip = \tw@ \hskip-\tabu@cellskip \else \tabu@cellskip = \z@skip \fi \else \ifdim\lastskip=1sp\unskip\fi \ifnum\gluestretchorder\lastskip = \@ne \hfilneg % \hfilneg for array.sty but not for colortbl... \fi \fi }% \tabu@removehfil \def\tabu@ignorehfil{% \aftergroup\tabu@nohfil }% \tabu@ignorehfil \def\tabu@nohfil{% \hfil -> do nothing + restore original \hfil \def\hfil{\let\hfil\tabu@hfil}% local to (alignment template) group }% \tabu@nohfil \AtBeginDocument{% \@ifpackageloaded{colortbl} {% \def\tabu@nohfil{% \def\hfil{\let\hfil\tabu@hfil}% local to (alignment template) group \def\hfill{\let\hfill\tabu@hfill}% (colortbl uses \hfill) pfff... \def\hskip##1\relax{\let\hskip\tabu@hskip}}% local }% @ifpackageloaded colortbl {}% }% AtBeginDocument \def\tabu@fbox{% \leavevmode \let\color@bgroup\bgroup \def\color@egroup{\endgraf\egroup}% \afterassignment\tabu@begin@fbox \setbox\@tempboxa \hbox }% \tabu@fbox \def\tabu@begin@fbox{\color@bgroup\kern\fboxsep\aftergroup\tabu@end@fbox} \def\tabu@end@fbox{\kern\fboxsep \color@egroup \@frameb@x\relax} \def\tabu@color@b@x#1#2{\leavevmode \def\tabu@do@color@b@x{#1{#2\color@block{\wd\z@}{\ht\z@}{\dp\z@}\box\z@}}% \afterassignment\tabu@begin@color@b@x \setbox\z@ \hbox }% \tabu@color@b@x \def\tabu@begin@color@b@x{% \bgroup \kern\fboxsep \set@color \aftergroup\tabu@end@color@b@x }% \tabu@begin@color@b@x \def\tabu@end@color@b@x{\kern\fboxsep \egroup \dimen@\ht\z@\advance\dimen@\fboxsep\ht\z@\dimen@ \dimen@\dp\z@\advance\dimen@\fboxsep\dp\z@\dimen@ \tabu@do@color@b@x }% \tabu@end@color@b@x \def\tabu@temp#1#2{{\toks@\expandafter{#2\arraybackslash}\xdef#1{\the\toks@}}} \tabu@temp \tabu@centering \centering \tabu@temp \tabu@raggedleft \raggedleft \tabu@temp \tabu@raggedright \raggedright \def\tabu@trivlist{\expandafter\def\expandafter\@trivlist\expandafter{% \expandafter\let\expandafter\\\expandafter\@normalcr\@trivlist}}% \def\tabu@fix@arrayright{% \@ifpackageloaded{arydshln} {% \@ifpackageloaded{colortbl} {%% colortbl + arydshln \def\tabu@endarray{% \adl@endarray \egroup \adl@arrayrestore \CT@end \egroup % \@arrayright % \gdef\@preamble{}% }}% \endarray {%% arydshln / no colortbl \def\tabu@endarray{% \adl@endarray \egroup \adl@arrayrestore \egroup % \@arrayright % \gdef\@preamble{}% }}% \endarray }% {% \@ifpackageloaded{colortbl} {%% colortbl / no arydshln \def\tabu@endarray{% \crcr \egroup \egroup \@arrayright % \gdef\@preamble{}\CT@end }}% {\PackageWarning{tabu} {\string\@arrayright\space is missing from the \MessageBreak definition of \string\endarray. \MessageBreak Comptability with delarray.sty is broken.}}% }% }% \tabu@fix@arrayright \def\tabu@adl@xarraydashrule#1#2#3{% \ifnum\@lastchclass=\adl@class@start\else \ifnum\@lastchclass=\@ne\else \ifnum\@lastchclass=5 \else % @-arg (class 5) and !-arg (class 1) \adl@leftrulefalse \fi\fi % must be treated the same \fi \ifadl@zwvrule\else \ifadl@inactive\else \@addtopreamble{\vrule\@width\arrayrulewidth \@height\z@ \@depth\z@}\fi \fi \ifadl@leftrule \@addtopreamble{\adl@vlineL{\CT@arc@}{\adl@dashgapcolor}% {\number#1}#3}% \else \@addtopreamble{\adl@vlineR{\CT@arc@}{\adl@dashgapcolor}% {\number#2}#3} \fi }% \tabu@adl@xarraydashrule \def\tabu@adl@act@endpbox{% \unskip \ifhmode \nobreak \fi \@finalstrut \@arstrutbox \egroup \egroup \adl@colhtdp \box\adl@box \hfil }% \tabu@adl@act@endpbox \def\tabu@adl@fix{% \let\adl@xarraydashrule \tabu@adl@xarraydashrule % arydshln \let\adl@act@endpbox \tabu@adl@act@endpbox % arydshln \let\adl@act@@endpbox \tabu@adl@act@endpbox % arydshln \let\@preamerror \@preamerr % arydshln }% \tabu@adl@fix \endinput %% %% End of file `tabu.sty'.