diff options
author | Dimitri van Heesch <doxygen@gmail.com> | 2021-03-14 14:47:59 (GMT) |
---|---|---|
committer | Dimitri van Heesch <doxygen@gmail.com> | 2021-03-18 20:57:40 (GMT) |
commit | fa1897b1889f7bf74de68f1ac99cf3be343a7551 (patch) | |
tree | ea14c45937cb6fef237c0fcafbd5b0923abd8f0a /templates/latex/tabu_doxygen.sty | |
parent | 0d05e79d67b5b808918541f429b06805207e8bdb (diff) | |
download | Doxygen-fa1897b1889f7bf74de68f1ac99cf3be343a7551.zip Doxygen-fa1897b1889f7bf74de68f1ac99cf3be343a7551.tar.gz Doxygen-fa1897b1889f7bf74de68f1ac99cf3be343a7551.tar.bz2 |
Refactoring: replace QFile/FTextStream with fstream/stringstream
Diffstat (limited to 'templates/latex/tabu_doxygen.sty')
-rwxr-xr-x | templates/latex/tabu_doxygen.sty | 5114 |
1 files changed, 2557 insertions, 2557 deletions
diff --git a/templates/latex/tabu_doxygen.sty b/templates/latex/tabu_doxygen.sty index 60fd7e8..3f17d1d 100755 --- a/templates/latex/tabu_doxygen.sty +++ b/templates/latex/tabu_doxygen.sty @@ -1,2557 +1,2557 @@ -%%
-%% 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.
-%% Copyright (FC) 2010-2011 - lppl
-%%
-%% tabu : 2011/02/26 v2.8 - tabu : Flexible LaTeX tabulars
-%%
-%% **********************************************************************************************
-%% \begin{tabu} { preamble } => default target: \linewidth or \linegoal
-%% \begin{tabu} to <dimen>{ preamble } => target specified
-%% \begin{tabu} spread <dimen>{ preamble } => target relative to the ``natural width''
-%%
-%% tabu works in text and in math modes.
-%%
-%% X columns: automatic width adjustment + horizontal and vertical alignment
-%% \begin{tabu} { X[4c] X[1c] X[-2ml] }
-%%
-%% Horizontal lines and / or leaders:
-%% \hline\hline => double horizontal line
-%% \firsthline\hline => for nested tabulars
-%% \lasthline\hline => for nested tabulars
-%% \tabucline[line spec]{column-column} => ``funny'' lines (dash/leader)
-%% Automatic lines / leaders :
-%% \everyrow{\hline\hline}
-%%
-%% Vertical lines and / or leaders:
-%% \begin{tabu} { |[3pt red] X[4c] X[1c] X[-2ml] |[3pt blue] }
-%% \begin{tabu} { |[3pt red] X[4c] X[1c] X[-2ml] |[3pt on 2pt off 4pt blue] }
-%%
-%% Fixed vertical spacing adjustment:
-%% \extrarowheight=<dimen> \extrarowdepth=<dimen>
-%% or: \extrarowsep=<dimen> => may be prefixed by \global
-%%
-%% Dynamic vertical spacing adjustment:
-%% \abovetabulinesep=<dimen> \belowtabulinesep=<dimen>
-%% or: \tabulinesep=<dimen> => may be prefixed by \global
-%%
-%% delarray.sty shortcuts: in math and text modes
-%% \begin{tabu} .... \({ preamble }\)
-%%
-%% Algorithms reports:
-%% \tracingtabu=1 \tracingtabu=2
-%%
-%% **********************************************************************************************
-%%
-%% 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
-%% lppl copyright 2010-2011 by FC <florent.chervet@free.fr>
-%%
-
-\NeedsTeXFormat{LaTeX2e}[2005/12/01]
-\ProvidesPackage{tabu_doxygen}[2011/02/26 v2.8 - flexible LaTeX tabulars (FC), frozen version for doxygen]
-\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={%
- \edef\tabu@AtEnd{\tabu@AtEnd
- \catcode#1 \the\catcode#1}%
- \catcode#1=%
-}% \TMP@EnsureCode
-\TMP@EnsureCode 33 = 12 % !
-\TMP@EnsureCode 58 = 12 % : (for siunitx)
-\TMP@EnsureCode124 = 12 % |
-\TMP@EnsureCode 36 = 3 % $ = math shift
-\TMP@EnsureCode 38 = 4 % & = tab alignment character
-\TMP@EnsureCode 32 = 10 % space
-\TMP@EnsureCode 94 = 7 % ^
-\TMP@EnsureCode 95 = 8 % _
-%% Constants --------------------------------------------------------
-\newcount \c@taburow \def\thetaburow {\number\c@taburow}
-\newcount \tabu@nbcols
-\newcount \tabu@cnt
-\newcount \tabu@Xcol
-\let\tabu@start \@tempcnta
-\let\tabu@stop \@tempcntb
-\newcount \tabu@alloc \tabu@alloc=\m@ne
-\newcount \tabu@nested
-\def\tabu@alloc@{\global\advance\tabu@alloc \@ne \tabu@nested\tabu@alloc}
-\newdimen \tabu@target
-\newdimen \tabu@spreadtarget
-\newdimen \tabu@naturalX
-\newdimen \tabucolX
-\let\tabu@DELTA \@tempdimc
-\let\tabu@thick \@tempdima
-\let\tabu@on \@tempdimb
-\let\tabu@off \@tempdimc
-\newdimen \tabu@Xsum
-\newdimen \extrarowdepth
-\newdimen \abovetabulinesep
-\newdimen \belowtabulinesep
-\newdimen \tabustrutrule \tabustrutrule \z@
-\newtoks \tabu@thebody
-\newtoks \tabu@footnotes
-\newsavebox \tabu@box
-\newsavebox \tabu@arstrutbox
-\newsavebox \tabu@hleads
-\newsavebox \tabu@vleads
-\newif \iftabu@colortbl
-\newif \iftabu@siunitx
-\newif \iftabu@measuring
-\newif \iftabu@spread
-\newif \iftabu@negcoef
-\newif \iftabu@everyrow
-\def\tabu@everyrowtrue {\global\let\iftabu@everyrow \iftrue}
-\def\tabu@everyrowfalse{\global\let\iftabu@everyrow \iffalse}
-\newif \iftabu@long
-\newif \iftabuscantokens
-\def\tabu@rescan {\tabu@verbatim \scantokens }
-%% Utilities (for internal usage) -----------------------------------
-\def\tabu@gobblespace #1 {#1}
-\def\tabu@gobbletoken #1#2{#1}
-\def\tabu@gobbleX{\futurelet\@let@token \tabu@gobblex}
-\def\tabu@gobblex{\if ^^J\noexpand\@let@token \expandafter\@gobble
- \else\ifx \@sptoken\@let@token
- \expandafter\tabu@gobblespace\expandafter\tabu@gobbleX
- \fi\fi
-}% \tabu@gobblex
-\def\tabu@X{^^J}
-{\obeyspaces
-\global\let\tabu@spxiii= % saves an active space (for \ifx)
-\gdef\tabu@@spxiii{ }}
-\def\tabu@ifenvir {% only for \multicolumn
- \expandafter\tabu@if@nvir\csname\@currenvir\endcsname
-}% \tabu@ifenvir
-\def\tabu@if@nvir #1{\csname @\ifx\tabu#1first\else
- \ifx\longtabu#1first\else
- second\fi\fi oftwo\endcsname
-}% \tabu@ifenvir
-\def\tabu@modulo #1#2{\numexpr\ifnum\numexpr#1=\z@ 0\else #1-(#1-(#2-1)/2)/(#2)*(#2)\fi}
-{\catcode`\&=3
-\gdef\tabu@strtrim #1{% #1 = control sequence to trim
- \ifodd 1\ifx #1\@empty \else \ifx #1\space \else 0\fi \fi
- \let\tabu@c@l@r \@empty \let#1\@empty
- \else \expandafter \tabu@trimspaces #1\@nnil
- \fi
-}% \tabu@strtrim
-\gdef\tabu@trimspaces #1\@nnil{\let\tabu@c@l@r=#2\tabu@firstspace .#1& }%
-\gdef\tabu@firstspace #1#2#3 &{\tabu@lastspace #2#3&}
-\gdef\tabu@lastspace #1{\def #3{#1}%
- \ifx #3\tabu@c@l@r \def\tabu@c@l@r{\protect\color{#1}}\expandafter\remove@to@nnil \fi
- \tabu@trimspaces #1\@nnil}
-}% \catcode
-\def\tabu@sanitizearg #1#2{{%
- \csname \ifcsname if@safe@actives\endcsname % <babel>
- @safe@activestrue\else
- relax\fi \endcsname
- \edef#2{#1}\tabu@strtrim#2\@onelevel@sanitize#2%
- \expandafter}\expandafter\def\expandafter#2\expandafter{#2}%
-}% \tabu@sanitizearg
-\def\tabu@textbar #1{\begingroup \endlinechar\m@ne \scantokens{\def\:{|}}%
- \expandafter\endgroup \expandafter#1\:% !!! semi simple group !!!
-}% \tabu@textbar
-\def\tabu@everyrow@bgroup{\iftabu@everyrow \begingroup \else \noalign{\ifnum0=`}\fi \fi}
-\def\tabu@everyrow@egroup{%
- \iftabu@everyrow \expandafter \endgroup \the\toks@
- \else \ifnum0=`{\fi}%
- \fi
-}% \tabu@everyrow@egroup
-\def\tabu@arstrut {\global\setbox\@arstrutbox \hbox{\vrule
- height \arraystretch \dimexpr\ht\strutbox+\extrarowheight
- depth \arraystretch \dimexpr\dp\strutbox+\extrarowdepth
- width \z@}%
-}% \tabu@arstrut
-\def\tabu@rearstrut {%
- \@tempdima \arraystretch\dimexpr\ht\strutbox+\extrarowheight \relax
- \@tempdimb \arraystretch\dimexpr\dp\strutbox+\extrarowdepth \relax
- \ifodd 1\ifdim \ht\@arstrutbox=\@tempdima
- \ifdim \dp\@arstrutbox=\@tempdimb 0 \fi\fi
- \tabu@mkarstrut
- \fi
-}% \tabu@rearstrut
-\def\tabu@@DBG #1{\ifdim\tabustrutrule>\z@ \color{#1}\fi}
-\def\tabu@DBG@arstrut {\global\setbox\@arstrutbox
- \hbox to\z@{\hbox to\z@{\hss
- {\tabu@DBG{cyan}\vrule
- height \arraystretch \dimexpr\ht\strutbox+\extrarowheight
- depth \z@
- width \tabustrutrule}\kern-\tabustrutrule
- {\tabu@DBG{pink}\vrule
- height \z@
- depth \arraystretch \dimexpr\dp\strutbox+\extrarowdepth
- width \tabustrutrule}}}%
-}% \tabu@DBG@arstrut
-\def\tabu@save@decl{\toks\count@ \expandafter{\the\toks\expandafter\count@
- \@nextchar}}%
-\def\tabu@savedecl{\ifcat$\d@llarend\else
- \let\save@decl \tabu@save@decl \fi % no inversion of tokens in text mode
-}% \tabu@savedecl
-\def\tabu@finalstrut #1{\unskip\ifhmode\nobreak\fi\vrule height\z@ depth\z@ width\z@}
-\newcommand*\tabuDisableCommands {\g@addto@macro\tabu@trialh@@k }
-\let\tabu@trialh@@k \@empty
-\def\tabu@nowrite #1#{{\afterassignment}\toks@}
-\let\tabu@write\write
-\let\tabu@immediate\immediate
-\def\tabu@WRITE{\begingroup
- \def\immediate\write{\aftergroup\endgroup
- \tabu@immediate\tabu@write}%
-}% \tabu@WRITE
-\expandafter\def\expandafter\tabu@GenericError\expandafter{%
- \expandafter\tabu@WRITE\GenericError}
-\def\tabu@warn{\tabu@WRITE\PackageWarning{tabu}}
-\def\tabu@noxfootnote [#1]{\@gobble}
-\def\tabu@nocolor #1#{\@gobble}
-\newcommand*\tabu@norowcolor[2][]{}
-\def\tabu@maybesiunitx #1{\def\tabu@temp{#1}%
- \futurelet\@let@token \tabu@m@ybesiunitx}
-\def\tabu@m@ybesiunitx #1{\def\tabu@m@ybesiunitx {%
- \ifx #1\@let@token \let\tabu@cellleft \@empty \let\tabu@cellright \@empty \fi
- \tabu@temp}% \tabu@m@ybesiunitx
-}\expandafter\tabu@m@ybesiunitx \csname siunitx_table_collect_begin:Nn\endcsname
-\def\tabu@celllalign@def #1{\def\tabu@celllalign{\tabu@maybesiunitx{#1}}}%
-%% Fixed vertical spacing adjustment: \extrarowsep ------------------
-\newcommand*\extrarowsep{\edef\tabu@C@extra{\the\numexpr\tabu@C@extra+1}%
- \iftabu@everyrow \aftergroup\tabu@Gextra
- \else \aftergroup\tabu@n@Gextra
- \fi
- \@ifnextchar={\tabu@gobbletoken\tabu@extra} \tabu@extra
-}% \extrarowsep
-\def\tabu@extra {\@ifnextchar_%
- {\tabu@gobbletoken{\tabu@setextra\extrarowheight \extrarowdepth}}
- {\ifx ^\@let@token \def\tabu@temp{%
- \tabu@gobbletoken{\tabu@setextra\extrarowdepth \extrarowheight}}%
- \else \let\tabu@temp \@empty
- \afterassignment \tabu@setextrasep \extrarowdepth
- \fi \tabu@temp}%
-}% \tabu@extra
-\def\tabu@setextra #1#2{\def\tabu@temp{\tabu@extr@#1#2}\afterassignment\tabu@temp#2}
-\def\tabu@extr@ #1#2{\@ifnextchar^%
- {\tabu@gobbletoken{\tabu@setextra\extrarowdepth \extrarowheight}}
- {\ifx _\@let@token \def\tabu@temp{%
- \tabu@gobbletoken{\tabu@setextra\extrarowheight \extrarowdepth}}%
- \else \let\tabu@temp \@empty
- \tabu@Gsave \tabu@G@extra \tabu@C@extra \extrarowheight \extrarowdepth
- \fi \tabu@temp}%
-}% \tabu@extr@
-\def\tabu@setextrasep {\extrarowheight=\extrarowdepth
- \tabu@Gsave \tabu@G@extra \tabu@C@extra \extrarowheight \extrarowdepth
-}% \tabu@setextrasep
-\def\tabu@Gextra{\ifx \tabu@G@extra\@empty \else {\tabu@Rextra}\fi}
-\def\tabu@n@Gextra{\ifx \tabu@G@extra\@empty \else \noalign{\tabu@Rextra}\fi}
-\def\tabu@Rextra{\tabu@Grestore \tabu@G@extra \tabu@C@extra}
-\let\tabu@C@extra \z@
-\let\tabu@G@extra \@empty
-%% Dynamic vertical spacing adjustment: \tabulinesep ----------------
-\newcommand*\tabulinesep{\edef\tabu@C@linesep{\the\numexpr\tabu@C@linesep+1}%
- \iftabu@everyrow \aftergroup\tabu@Glinesep
- \else \aftergroup\tabu@n@Glinesep
- \fi
- \@ifnextchar={\tabu@gobbletoken\tabu@linesep} \tabu@linesep
-}% \tabulinesep
-\def\tabu@linesep {\@ifnextchar_%
- {\tabu@gobbletoken{\tabu@setsep\abovetabulinesep \belowtabulinesep}}
- {\ifx ^\@let@token \def\tabu@temp{%
- \tabu@gobbletoken{\tabu@setsep\belowtabulinesep \abovetabulinesep}}%
- \else \let\tabu@temp \@empty
- \afterassignment \tabu@setlinesep \abovetabulinesep
- \fi \tabu@temp}%
-}% \tabu@linesep
-\def\tabu@setsep #1#2{\def\tabu@temp{\tabu@sets@p#1#2}\afterassignment\tabu@temp#2}
-\def\tabu@sets@p #1#2{\@ifnextchar^%
- {\tabu@gobbletoken{\tabu@setsep\belowtabulinesep \abovetabulinesep}}
- {\ifx _\@let@token \def\tabu@temp{%
- \tabu@gobbletoken{\tabu@setsep\abovetabulinesep \belowtabulinesep}}%
- \else \let\tabu@temp \@empty
- \tabu@Gsave \tabu@G@linesep \tabu@C@linesep \abovetabulinesep \belowtabulinesep
- \fi \tabu@temp}%
-}% \tabu@sets@p
-\def\tabu@setlinesep {\belowtabulinesep=\abovetabulinesep
- \tabu@Gsave \tabu@G@linesep \tabu@C@linesep \abovetabulinesep \belowtabulinesep
-}% \tabu@setlinesep
-\def\tabu@Glinesep{\ifx \tabu@G@linesep\@empty \else {\tabu@Rlinesep}\fi}
-\def\tabu@n@Glinesep{\ifx \tabu@G@linesep\@empty \else \noalign{\tabu@Rlinesep}\fi}
-\def\tabu@Rlinesep{\tabu@Grestore \tabu@G@linesep \tabu@C@linesep}
-\let\tabu@C@linesep \z@
-\let\tabu@G@linesep \@empty
-%% \global\extrarowsep and \global\tabulinesep -------------------
-\def\tabu@Gsave #1#2#3#4{\xdef#1{#1%
- \toks#2{\toks\the\currentgrouplevel{\global#3\the#3\global#4\the#4}}}%
-}% \tabu@Gsave
-\def\tabu@Grestore#1#2{%
- \toks#2{}#1\toks\currentgrouplevel\expandafter{\expandafter}\the\toks#2\relax
- \ifcat$\the\toks\currentgrouplevel$\else
- \global\let#1\@empty \global\let#2\z@
- \the\toks\currentgrouplevel
- \fi
-}% \tabu@Grestore
-%% Setting code for every row ---------------------------------------
-\newcommand*\everyrow{\tabu@everyrow@bgroup
- \tabu@start \z@ \tabu@stop \z@ \tabu@evrstartstop
-}% \everyrow
-\def\tabu@evrstartstop {\@ifnextchar^%
- {\afterassignment \tabu@evrstartstop \tabu@stop=}%
- {\ifx ^\@let@token
- \afterassignment\tabu@evrstartstop \tabu@start=%
- \else \afterassignment\tabu@everyr@w \toks@
- \fi}%
-}% \tabu@evrstartstop
-\def\tabu@everyr@w {%
- \xdef\tabu@everyrow{%
- \noexpand\tabu@everyrowfalse
- \let\noalign \relax
- \noexpand\tabu@rowfontreset
- \iftabu@colortbl \noexpand\tabu@rc@ \fi % \taburowcolors
- \let\noexpand\tabu@docline \noexpand\tabu@docline@evr
- \the\toks@
- \noexpand\tabu@evrh@@k
- \noexpand\tabu@rearstrut
- \global\advance\c@taburow \@ne}%
- \iftabu@everyrow \toks@\expandafter
- {\expandafter\def\expandafter\tabu@evr@L\expandafter{\the\toks@}\ignorespaces}%
- \else \xdef\tabu@evr@G{\the\toks@}%
- \fi
- \tabu@everyrow@egroup
-}% \tabu@everyr@w
-\def\tabu@evr {\def\tabu@evrh@@k} % for internal use only
-\tabu@evr{}
-%% line style and leaders -------------------------------------------
-\newcommand*\newtabulinestyle [1]{%
- {\@for \@tempa :=#1\do{\expandafter\tabu@newlinestyle \@tempa==\@nil}}%
-}% \newtabulinestyle
-\def\tabu@newlinestyle #1=#2=#3\@nil{\tabu@getline {#2}%
- \tabu@sanitizearg {#1}\@tempa
- \ifodd 1\ifx \@tempa\@empty \ifdefined\tabu@linestyle@ 0 \fi\fi
- \global\expandafter\let
- \csname tabu@linestyle@\@tempa \endcsname =\tabu@thestyle \fi
-}% \tabu@newlinestyle
-\newcommand*\tabulinestyle [1]{\tabu@everyrow@bgroup \tabu@getline{#1}%
- \iftabu@everyrow
- \toks@\expandafter{\expandafter \def \expandafter
- \tabu@ls@L\expandafter{\tabu@thestyle}\ignorespaces}%
- \gdef\tabu@ls@{\tabu@ls@L}%
- \else
- \global\let\tabu@ls@G \tabu@thestyle
- \gdef\tabu@ls@{\tabu@ls@G}%
- \fi
- \tabu@everyrow@egroup
-}% \tabulinestyle
-\newcommand*\taburulecolor{\tabu@everyrow@bgroup \tabu@textbar \tabu@rulecolor}
-\def\tabu@rulecolor #1{\toks@{}%
- \def\tabu@temp #1##1#1{\tabu@ruledrsc{##1}}\@ifnextchar #1%
- \tabu@temp
- \tabu@rulearc
-}% \tabu@rulecolor
-\def\tabu@ruledrsc #1{\edef\tabu@temp{#1}\tabu@strtrim\tabu@temp
- \ifx \tabu@temp\@empty \def\tabu@temp{\tabu@rule@drsc@ {}{}}%
- \else \edef\tabu@temp{\noexpand\tabu@rule@drsc@ {}{\tabu@temp}}%
- \fi
- \tabu@temp
-}% \tabu@ruledrsc@
-\def\tabu@ruledrsc@ #1#{\tabu@rule@drsc@ {#1}}
-\def\tabu@rule@drsc@ #1#2{%
- \iftabu@everyrow
- \ifx \\#1#2\\\toks@{\let\CT@drsc@ \relax}%
- \else \toks@{\def\CT@drsc@{\color #1{#2}}}%
- \fi
- \else
- \ifx \\#1#2\\\global\let\CT@drsc@ \relax
- \else \gdef\CT@drsc@{\color #1{#2}}%
- \fi
- \fi
- \tabu@rulearc
-}% \tabu@rule@drsc@
-\def\tabu@rulearc #1#{\tabu@rule@arc@ {#1}}
-\def\tabu@rule@arc@ #1#2{%
- \iftabu@everyrow
- \ifx \\#1#2\\\toks@\expandafter{\the\toks@ \def\CT@arc@{}}%
- \else \toks@\expandafter{\the\toks@ \def\CT@arc@{\color #1{#2}}}%
- \fi
- \toks@\expandafter{\the\toks@
- \let\tabu@arc@L \CT@arc@
- \let\tabu@drsc@L \CT@drsc@
- \ignorespaces}%
- \else
- \ifx \\#1#2\\\gdef\CT@arc@{}%
- \else \gdef\CT@arc@{\color #1{#2}}%
- \fi
- \global\let\tabu@arc@G \CT@arc@
- \global\let\tabu@drsc@G \CT@drsc@
- \fi
- \tabu@everyrow@egroup
-}% \tabu@rule@arc@
-\def\taburowcolors {\tabu@everyrow@bgroup \@testopt \tabu@rowcolors 1}
-\def\tabu@rowcolors [#1]#2#{\tabu@rowc@lors{#1}{#2}}
-\def\tabu@rowc@lors #1#2#3{%
- \toks@{}\@defaultunits \count@ =\number0#2\relax \@nnil
- \@defaultunits \tabu@start =\number0#1\relax \@nnil
- \ifnum \count@<\tw@ \count@=\tw@ \fi
- \advance\tabu@start \m@ne
- \ifnum \tabu@start<\z@ \tabu@start \z@ \fi
- \tabu@rowcolorseries #3\in@..\in@ \@nnil
-}% \tabu@rowcolors
-\def\tabu@rowcolorseries #1..#2\in@ #3\@nnil {%
- \ifx \in@#1\relax
- \iftabu@everyrow \toks@{\def\tabu@rc@{}\let\tabu@rc@L \tabu@rc@}%
- \else \gdef\tabu@rc@{}\global\let\tabu@rc@G \tabu@rc@
- \fi
- \else
- \ifx \\#2\\\tabu@rowcolorserieserror \fi
- \tabu@sanitizearg{#1}\tabu@temp
- \tabu@sanitizearg{#2}\@tempa
- \advance\count@ \m@ne
- \iftabu@everyrow
- \def\tabu@rc@ ##1##2##3##4{\def\tabu@rc@{%
- \ifnum ##2=\c@taburow
- \definecolorseries{tabu@rcseries@\the\tabu@nested}{rgb}{last}{##3}{##4}\fi
- \ifnum \c@taburow<##2 \else
- \ifnum \tabu@modulo {\c@taburow-##2}{##1+1}=\z@
- \resetcolorseries[{##1}]{tabu@rcseries@\the\tabu@nested}\fi
- \xglobal\colorlet{tabu@rc@\the\tabu@nested}{tabu@rcseries@\the\tabu@nested!!+}%
- \rowcolor{tabu@rc@\the\tabu@nested}\fi}%
- }\edef\x{\noexpand\tabu@rc@ {\the\count@}
- {\the\tabu@start}
- {\tabu@temp}
- {\@tempa}%
- }\x
- \toks@\expandafter{\expandafter\def\expandafter\tabu@rc@\expandafter{\tabu@rc@}}%
- \toks@\expandafter{\the\toks@ \let\tabu@rc@L \tabu@rc@ \ignorespaces}%
- \else % inside \noalign
- \definecolorseries{tabu@rcseries@\the\tabu@nested}{rgb}{last}{\tabu@temp}{\@tempa}%
- \expandafter\resetcolorseries\expandafter[\the\count@]{tabu@rcseries@\the\tabu@nested}%
- \xglobal\colorlet{tabu@rc@\the\tabu@nested}{tabu@rcseries@\the\tabu@nested!!+}%
- \let\noalign \relax \rowcolor{tabu@rc@\the\tabu@nested}%
- \def\tabu@rc@ ##1##2{\gdef\tabu@rc@{%
- \ifnum \tabu@modulo {\c@taburow-##2}{##1+1}=\@ne
- \resetcolorseries[{##1}]{tabu@rcseries@\the\tabu@nested}\fi
- \xglobal\colorlet{tabu@rc@\the\tabu@nested}{tabu@rcseries@\the\tabu@nested!!+}%
- \rowcolor{tabu@rc@\the\tabu@nested}}%
- }\edef\x{\noexpand\tabu@rc@{\the\count@}{\the\c@taburow}}\x
- \global\let\tabu@rc@G \tabu@rc@
- \fi
- \fi
- \tabu@everyrow@egroup
-}% \tabu@rowcolorseries
-\tabuDisableCommands {\let\tabu@rc@ \@empty }
-\def\tabu@rowcolorserieserror {\PackageError{tabu}
- {Invalid syntax for \string\taburowcolors
- \MessageBreak Please look at the documentation!}\@ehd
-}% \tabu@rowcolorserieserror
-\newcommand*\tabureset {%
- \tabulinesep=\z@ \extrarowsep=\z@ \extratabsurround=\z@
- \tabulinestyle{}\everyrow{}\taburulecolor||{}\taburowcolors{}%
-}% \tabureset
-%% Parsing the line styles ------------------------------------------
-\def\tabu@getline #1{\begingroup
- \csname \ifcsname if@safe@actives\endcsname % <babel>
- @safe@activestrue\else
- relax\fi \endcsname
- \edef\tabu@temp{#1}\tabu@sanitizearg{#1}\@tempa
- \let\tabu@thestyle \relax
- \ifcsname tabu@linestyle@\@tempa \endcsname
- \edef\tabu@thestyle{\endgroup
- \def\tabu@thestyle{\expandafter\noexpand
- \csname tabu@linestyle@\@tempa\endcsname}%
- }\tabu@thestyle
- \else \expandafter\tabu@definestyle \tabu@temp \@nil
- \fi
-}% \tabu@getline
-\def\tabu@definestyle #1#2\@nil {\endlinechar \m@ne \makeatletter
- \tabu@thick \maxdimen \tabu@on \maxdimen \tabu@off \maxdimen
- \let\tabu@c@lon \@undefined \let\tabu@c@loff \@undefined
- \ifodd 1\ifcat .#1\else\ifcat\relax #1\else 0\fi\fi % catcode 12 or non expandable cs
- \def\tabu@temp{\tabu@getparam{thick}}%
- \else \def\tabu@temp{\tabu@getparam{thick}\maxdimen}%
- \fi
- {%
- \let\tabu@ \relax
- \def\:{\obeyspaces \tabu@oXIII \tabu@commaXIII \edef\:}% (space active \: happy ;-))
- \scantokens{\:{\tabu@temp #1#2 \tabu@\tabu@}}%
- \expandafter}\expandafter
- \def\expandafter\:\expandafter{\:}% line spec rewritten now ;-)
- \def\;{\def\:}%
- \scantokens\expandafter{\expandafter\;\expandafter{\:}}% space is now inactive (catcode 10)
- \let\tabu@ \tabu@getcolor \:% all arguments are ready now ;-)
- \ifdefined\tabu@c@lon \else \let\tabu@c@lon\@empty \fi
- \ifx \tabu@c@lon\@empty \def\tabu@c@lon{\CT@arc@}\fi
- \ifdefined\tabu@c@loff \else \let\tabu@c@loff \@empty \fi
- \ifdim \tabu@on=\maxdimen \ifdim \tabu@off<\maxdimen
- \tabu@on \tabulineon \fi\fi
- \ifdim \tabu@off=\maxdimen \ifdim \tabu@on<\maxdimen
- \tabu@off \tabulineoff \fi\fi
- \ifodd 1\ifdim \tabu@off=\maxdimen \ifdim \tabu@on=\maxdimen 0 \fi\fi
- \in@true % <leaders>
- \else \in@false % <rule>
- \fi
- \ifdim\tabu@thick=\maxdimen \def\tabu@thick{\arrayrulewidth}%
- \else \edef\tabu@thick{\the\tabu@thick}%
- \fi
- \edef \tabu@thestyle ##1##2{\endgroup
- \def\tabu@thestyle{%
- \ifin@ \noexpand\tabu@leadersstyle {\tabu@thick}
- {\the\tabu@on}{##1}
- {\the\tabu@off}{##2}%
- \else \noexpand\tabu@rulesstyle
- {##1\vrule width \tabu@thick}%
- {##1\leaders \hrule height \tabu@thick \hfil}%
- \fi}%
- }\expandafter \expandafter
- \expandafter \tabu@thestyle \expandafter
- \expandafter \expandafter
- {\expandafter\tabu@c@lon\expandafter}\expandafter{\tabu@c@loff}%
-}% \tabu@definestyle
-{\catcode`\O=\active \lccode`\O=`\o \catcode`\,=\active
- \lowercase{\gdef\tabu@oXIII {\catcode`\o=\active \let O=\tabu@oxiii}}
- \gdef\tabu@commaXIII {\catcode`\,=\active \let ,=\space}
-}% \catcode
-\def\tabu@oxiii #1{%
- \ifcase \ifx n#1\z@ \else
- \ifx f#1\@ne\else
- \tw@ \fi\fi
- \expandafter\tabu@onxiii
- \or \expandafter\tabu@ofxiii
- \else o%
- \fi#1}%
-\def\tabu@onxiii #1#2{%
- \ifcase \ifx !#2\tw@ \else
- \ifcat.\noexpand#2\z@ \else
- \ifx \tabu@spxiii#2\@ne\else
- \tw@ \fi\fi\fi
- \tabu@getparam{on}#2\expandafter\@gobble
- \or \expandafter\tabu@onxiii % (space is active)
- \else o\expandafter\@firstofone
- \fi{#1#2}}%
-\def\tabu@ofxiii #1#2{%
- \ifx #2f\expandafter\tabu@offxiii
- \else o\expandafter\@firstofone
- \fi{#1#2}}
-\def\tabu@offxiii #1#2{%
- \ifcase \ifx !#2\tw@ \else
- \ifcat.\noexpand#2\z@ \else
- \ifx\tabu@spxiii#2\@ne \else
- \tw@ \fi\fi\fi
- \tabu@getparam{off}#2\expandafter\@gobble
- \or \expandafter\tabu@offxiii % (space is active)
- \else o\expandafter\@firstofone
- \fi{#1#2}}
-\def\tabu@getparam #1{\tabu@ \csname tabu@#1\endcsname=}
-\def\tabu@getcolor #1{% \tabu@ <- \tabu@getcolor after \edef
- \ifx \tabu@#1\else % no more spec
- \let\tabu@theparam=#1\afterassignment \tabu@getc@l@r #1\fi
-}% \tabu@getcolor
-\def\tabu@getc@l@r #1\tabu@ {%
- \def\tabu@temp{#1}\tabu@strtrim \tabu@temp
- \ifx \tabu@temp\@empty
- \else%\ifcsname \string\color@\tabu@temp \endcsname % if the color exists
- \ifx \tabu@theparam \tabu@off \let\tabu@c@loff \tabu@c@l@r
- \else \let\tabu@c@lon \tabu@c@l@r
- \fi
- %\else \tabu@warncolour{\tabu@temp}%
- \fi%\fi
- \tabu@ % next spec
-}% \tabu@getc@l@r
-\def\tabu@warncolour #1{\PackageWarning{tabu}
- {Color #1 is not defined. Default color used}%
-}% \tabu@warncolour
-\def\tabu@leadersstyle #1#2#3#4#5{\def\tabu@leaders{{#1}{#2}{#3}{#4}{#5}}%
- \ifx \tabu@leaders\tabu@leaders@G \else
- \tabu@LEADERS{#1}{#2}{#3}{#4}{#5}\fi
-}% \tabu@leadersstyle
-\def\tabu@rulesstyle #1#2{\let\tabu@leaders \@undefined
- \gdef\tabu@thevrule{#1}\gdef\tabu@thehrule{#2}%
-}% \tabu@rulesstyle
-%% The leaders boxes ------------------------------------------------
-\def\tabu@LEADERS #1#2#3#4#5{%% width, dash, dash color, gap, gap color
- {\let\color \tabu@color % => during trials -> \color = \tabu@nocolor
- {% % but the leaders boxes should have colors !
- \def\@therule{\vrule}\def\@thick{height}\def\@length{width}%
- \def\@box{\hbox}\def\@unbox{\unhbox}\def\@elt{\wd}%
- \def\@skip{\hskip}\def\@ss{\hss}\def\tabu@leads{\tabu@hleads}%
- \tabu@l@@d@rs {#1}{#2}{#3}{#4}{#5}%
- \global\let\tabu@thehleaders \tabu@theleaders
- }%
- {%
- \def\@therule{\hrule}\def\@thick{width}\def\@length{height}%
- \def\@box{\vbox}\def\@unbox{\unvbox}\def\@elt{\ht}%
- \def\@skip{\vskip}\def\@ss{\vss}\def\tabu@leads{\tabu@vleads}%
- \tabu@l@@d@rs {#1}{#2}{#3}{#4}{#5}%
- \global\let\tabu@thevleaders \tabu@theleaders
- }%
- \gdef\tabu@leaders@G{{#1}{#2}{#3}{#4}{#5}}%
- }%
-}% \tabu@LEADERS
-\def\tabu@therule #1#2{\@therule \@thick#1\@length\dimexpr#2/2 \@depth\z@}
-\def\tabu@l@@d@rs #1#2#3#4#5{%% width, dash, dash color, gap, gap color
- \global\setbox \tabu@leads=\@box{%
- {#3\tabu@therule{#1}{#2}}%
- \ifx\\#5\\\@skip#4\else{#5\tabu@therule{#1}{#4*2}}\fi
- {#3\tabu@therule{#1}{#2}}}%
- \global\setbox\tabu@leads=\@box to\@elt\tabu@leads{\@ss
- {#3\tabu@therule{#1}{#2}}\@unbox\tabu@leads}%
- \edef\tabu@theleaders ##1{\def\noexpand\tabu@theleaders {%
- {##1\tabu@therule{#1}{#2}}%
- \xleaders \copy\tabu@leads \@ss
- \tabu@therule{0pt}{-#2}{##1\tabu@therule{#1}{#2}}}%
- }\tabu@theleaders{#3}%
-}% \tabu@l@@d@rs
-%% \tabu \endtabu \tabu* \longtabu \endlongtabu \longtabu* ----------
-\newcommand*\tabu {\tabu@longfalse
- \ifmmode \def\tabu@ {\array}\def\endtabu {\endarray}%
- \else \def\tabu@ {\tabu@tabular}\def\endtabu {\endtabular}\fi
- \expandafter\let\csname tabu*\endcsname \tabu
- \expandafter\def\csname endtabu*\endcsname{\endtabu}%
- \tabu@spreadfalse \tabu@negcoeffalse \tabu@settarget
-}% {tabu}
-\let\tabu@tabular \tabular % <For LyX: some users redefine \tabular...>
-\expandafter\def\csname tabu*\endcsname{\tabuscantokenstrue \tabu}
-\newcommand*\longtabu {\tabu@longtrue
- \ifmmode\PackageError{tabu}{longtabu not allowed in math mode}\fi
- \def\tabu@{\longtable}\def\endlongtabu{\endlongtable}%
- \LTchunksize=\@M
- \expandafter\let\csname tabu*\endcsname \tabu
- \expandafter\def\csname endlongtabu*\endcsname{\endlongtabu}%
- \let\LT@startpbox \tabu@LT@startpbox % \everypar{ array struts }
- \tabu@spreadfalse \tabu@negcoeffalse \tabu@settarget
-}% {longtabu}
-\expandafter\def\csname longtabu*\endcsname{\tabuscantokenstrue \longtabu}
-\def\tabu@nolongtabu{\PackageError{tabu}
- {longtabu requires the longtable package}\@ehd}
-%% Read the target and then : \tabular or \@array ------------------
-\def\tabu@settarget {\futurelet\@let@token \tabu@sett@rget }
-\def\tabu@sett@rget {\tabu@target \z@
- \ifcase \ifx \bgroup\@let@token \z@ \else
- \ifx \@sptoken\@let@token \@ne \else
- \if t\@let@token \tw@ \else
- \if s\@let@token \thr@@\else
- \z@\fi\fi\fi\fi
- \expandafter\tabu@begin
- \or \expandafter\tabu@gobblespace\expandafter\tabu@settarget
- \or \expandafter\tabu@to
- \or \expandafter\tabu@spread
- \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@linegoalt@rget }
-\def\tabu@linegoalt@rget {%
- \ifx \tabu@temp\LNGL@setlinegoal
- \LNGL@setlinegoal \expandafter \@firstoftwo \fi % @gobbles \LNGL@setlinegoal
- \tabu@begin
-}% \tabu@linegoalt@rget
-\def\tabu@begin #1#{%
- \iftabu@measuring \expandafter\tabu@nestedmeasure \fi
- \ifdim \tabu@target=\z@ \let\tabu@halignto \@empty
- \else \edef\tabu@halignto{\tabu@halignto\the\tabu@target}%
- \fi
- \@testopt \tabu@tabu@ \tabu@aligndefault #1\@nil
-}% \tabu@begin
-\long\def\tabu@tabu@ [#1]#2\@nil #3{\tabu@setup
- \def\tabu@align {#1}\def\tabu@savedpream{\NC@find #3}%
- \tabu@ [\tabu@align ]#2{#3\tabu@rewritefirst }%
-}% \tabu@tabu@
-\def\tabu@nestedmeasure {%
- \ifodd 1\iftabu@spread \else \ifdim\tabu@target=\z@ \else 0 \fi\fi\relax
- \tabu@spreadtrue
- \else \begingroup \iffalse{\fi \ifnum0=`}\fi
- \toks@{}\def\tabu@stack{b}%
- \expandafter\tabu@collectbody\expandafter\tabu@quickrule
- \expandafter\endgroup
- \fi
-}% \tabu@nestedmeasure
-\def\tabu@quickrule {\indent\vrule height\z@ depth\z@ width\tabu@target}
-%% \tabu@setup \tabu@init \tabu@indent
-\def\tabu@setup{\tabu@alloc@
- \ifcase \tabu@nested
- \ifmmode \else \iftabu@spread\else \ifdim\tabu@target=\z@
- \let\tabu@afterendpar \par
- \fi\fi\fi
- \def\tabu@aligndefault{c}\tabu@init \tabu@indent
- \else % <nested tabu>
- \def\tabu@aligndefault{t}\let\tabudefaulttarget \linewidth
- \fi
- \let\tabu@thetarget \tabudefaulttarget \let\tabu@restored \@undefined
- \edef\tabu@NC@list{\the\NC@list}\NC@list{\NC@do \tabu@rewritefirst}%
- \everycr{}\let\@startpbox \tabu@startpbox % for nested tabu inside longtabu...
- \let\@endpbox \tabu@endpbox % idem " " " " " "
- \let\@tabarray \tabu@tabarray % idem " " " " " "
- \tabu@setcleanup \tabu@setreset
-}% \tabu@setup
-\def\tabu@init{\tabu@starttimer \tabu@measuringfalse
- \edef\tabu@hfuzz {\the\dimexpr\hfuzz+1sp}\global\tabu@footnotes{}%
- \let\firsthline \tabu@firsthline \let\lasthline \tabu@lasthline
- \let\firstline \tabu@firstline \let\lastline \tabu@lastline
- \let\hline \tabu@hline \let\@xhline \tabu@xhline
- \let\color \tabu@color \let\@arstrutbox \tabu@arstrutbox
- \iftabu@colortbl\else\let\LT@@hline \tabu@LT@@hline \fi
- \tabu@trivlist %<restore \\=\@normalcr inside lists>
- \let\@footnotetext \tabu@footnotetext \let\@xfootnotetext \tabu@xfootnotetext
- \let\@xfootnote \tabu@xfootnote \let\centering \tabu@centering
- \let\raggedright \tabu@raggedright \let\raggedleft \tabu@raggedleft
- \let\tabudecimal \tabu@tabudecimal \let\Centering \tabu@Centering
- \let\RaggedRight \tabu@RaggedRight \let\RaggedLeft \tabu@RaggedLeft
- \let\justifying \tabu@justifying \let\rowfont \tabu@rowfont
- \let\fbox \tabu@fbox \let\color@b@x \tabu@color@b@x
- \let\tabu@@everycr \everycr \let\tabu@@everypar \everypar
- \let\tabu@prepnext@tokORI \prepnext@tok\let\prepnext@tok \tabu@prepnext@tok
- \let\tabu@multicolumnORI\multicolumn \let\multicolumn \tabu@multicolumn
- \let\tabu@startpbox \@startpbox % for nested tabu inside longtabu pfff !!!
- \let\tabu@endpbox \@endpbox % idem " " " " " " "
- \let\tabu@tabarray \@tabarray % idem " " " " " " "
- \tabu@adl@fix \let\endarray \tabu@endarray % <fix> colortbl & arydshln (delarray)
- \iftabu@colortbl\CT@everycr\expandafter{\expandafter\iftabu@everyrow \the\CT@everycr \fi}\fi
-}% \tabu@init
-\def\tabu@indent{% correction for indentation
- \ifdim \parindent>\z@\ifx \linewidth\tabudefaulttarget
- \everypar\expandafter{%
- \the\everypar\everypar\expandafter{\the\everypar}%
- \setbox\z@=\lastbox
- \ifdim\wd\z@>\z@ \edef\tabu@thetarget
- {\the\dimexpr -\wd\z@+\tabudefaulttarget}\fi
- \box\z@}%
- \fi\fi
-}% \tabu@indent
-\def\tabu@setcleanup {% saves last global assignments
- \ifodd 1\ifmmode \else \iftabu@long \else 0\fi\fi\relax
- \def\tabu@aftergroupcleanup{%
- \def\tabu@aftergroupcleanup{\aftergroup\tabu@cleanup}}%
- \else
- \def\tabu@aftergroupcleanup{%
- \aftergroup\aftergroup\aftergroup\tabu@cleanup
- \let\tabu@aftergroupcleanup \relax}%
- \fi
- \let\tabu@arc@Gsave \tabu@arc@G
- \let\tabu@arc@G \tabu@arc@L % <init>
- \let\tabu@drsc@Gsave \tabu@drsc@G
- \let\tabu@drsc@G \tabu@drsc@L % <init>
- \let\tabu@ls@Gsave \tabu@ls@G
- \let\tabu@ls@G \tabu@ls@L % <init>
- \let\tabu@rc@Gsave \tabu@rc@G
- \let\tabu@rc@G \tabu@rc@L % <init>
- \let\tabu@evr@Gsave \tabu@evr@G
- \let\tabu@evr@G \tabu@evr@L % <init>
- \let\tabu@celllalign@save \tabu@celllalign
- \let\tabu@cellralign@save \tabu@cellralign
- \let\tabu@cellleft@save \tabu@cellleft
- \let\tabu@cellright@save \tabu@cellright
- \let\tabu@@celllalign@save \tabu@@celllalign
- \let\tabu@@cellralign@save \tabu@@cellralign
- \let\tabu@@cellleft@save \tabu@@cellleft
- \let\tabu@@cellright@save \tabu@@cellright
- \let\tabu@rowfontreset@save \tabu@rowfontreset
- \let\tabu@@rowfontreset@save\tabu@@rowfontreset
- \let\tabu@rowfontreset \@empty
- \edef\tabu@alloc@save {\the\tabu@alloc}% restore at \tabu@reset
- \edef\c@taburow@save {\the\c@taburow}%
- \edef\tabu@naturalX@save {\the\tabu@naturalX}%
- \let\tabu@naturalXmin@save \tabu@naturalXmin
- \let\tabu@naturalXmax@save \tabu@naturalXmax
- \let\tabu@mkarstrut@save \tabu@mkarstrut
- \edef\tabu@clarstrut{%
- \extrarowheight \the\dimexpr \ht\@arstrutbox-\ht\strutbox \relax
- \extrarowdepth \the\dimexpr \dp\@arstrutbox-\dp\strutbox \relax
- \let\noexpand\@arraystretch \@ne \noexpand\tabu@rearstrut}%
-}% \tabu@setcleanup
-\def\tabu@cleanup {\begingroup
- \globaldefs\@ne \tabu@everyrowtrue
- \let\tabu@arc@G \tabu@arc@Gsave
- \let\CT@arc@ \tabu@arc@G
- \let\tabu@drsc@G \tabu@drsc@Gsave
- \let\CT@drsc@ \tabu@drsc@G
- \let\tabu@ls@G \tabu@ls@Gsave
- \let\tabu@ls@ \tabu@ls@G
- \let\tabu@rc@G \tabu@rc@Gsave
- \let\tabu@rc@ \tabu@rc@G
- \let\CT@do@color \relax
- \let\tabu@evr@G \tabu@evr@Gsave
- \let\tabu@celllalign \tabu@celllalign@save
- \let\tabu@cellralign \tabu@cellralign@save
- \let\tabu@cellleft \tabu@cellleft@save
- \let\tabu@cellright \tabu@cellright@save
- \let\tabu@@celllalign \tabu@@celllalign@save
- \let\tabu@@cellralign \tabu@@cellralign@save
- \let\tabu@@cellleft \tabu@@cellleft@save
- \let\tabu@@cellright \tabu@@cellright@save
- \let\tabu@rowfontreset \tabu@rowfontreset@save
- \let\tabu@@rowfontreset \tabu@@rowfontreset@save
- \tabu@naturalX =\tabu@naturalX@save
- \let\tabu@naturalXmax \tabu@naturalXmax@save
- \let\tabu@naturalXmin \tabu@naturalXmin@save
- \let\tabu@mkarstrut \tabu@mkarstrut@save
- \c@taburow =\c@taburow@save
- \ifcase \tabu@nested \tabu@alloc \m@ne\fi
- \endgroup % <end of \globaldefs>
- \ifcase \tabu@nested
- \the\tabu@footnotes \global\tabu@footnotes{}%
- \tabu@afterendpar \tabu@elapsedtime
- \fi
- \tabu@clarstrut
- \everyrow\expandafter {\tabu@evr@G}%
-}% \tabu@cleanup
-\let\tabu@afterendpar \relax
-\def\tabu@setreset {%
- \edef\tabu@savedparams {% \relax for \tabu@message@save
- \ifmmode \col@sep \the\arraycolsep
- \else \col@sep \the\tabcolsep \fi \relax
- \arrayrulewidth \the\arrayrulewidth \relax
- \doublerulesep \the\doublerulesep \relax
- \extratabsurround \the\extratabsurround \relax
- \extrarowheight \the\extrarowheight \relax
- \extrarowdepth \the\extrarowdepth \relax
- \abovetabulinesep \the\abovetabulinesep \relax
- \belowtabulinesep \the\belowtabulinesep \relax
- \def\noexpand\arraystretch{\arraystretch}%
- \ifdefined\minrowclearance \minrowclearance\the\minrowclearance\relax\fi}%
- \begingroup
- \@temptokena\expandafter{\tabu@savedparams}% => only for \savetabu / \usetabu
- \ifx \tabu@arc@L\relax \else \tabu@setsave \tabu@arc@L \fi
- \ifx \tabu@drsc@L\relax \else \tabu@setsave \tabu@drsc@L \fi
- \tabu@setsave \tabu@ls@L \tabu@setsave \tabu@evr@L
- \expandafter \endgroup \expandafter
- \def\expandafter\tabu@saved@ \expandafter{\the\@temptokena
- \let\tabu@arc@G \tabu@arc@L
- \let\tabu@drsc@G \tabu@drsc@L
- \let\tabu@ls@G \tabu@ls@L
- \let\tabu@rc@G \tabu@rc@L
- \let\tabu@evr@G \tabu@evr@L}%
- \def\tabu@reset{\tabu@savedparams
- \tabu@everyrowtrue \c@taburow \z@
- \let\CT@arc@ \tabu@arc@L
- \let\CT@drsc@ \tabu@drsc@L
- \let\tabu@ls@ \tabu@ls@L
- \let\tabu@rc@ \tabu@rc@L
- \global\tabu@alloc \tabu@alloc@save
- \everyrow\expandafter{\tabu@evr@L}}%
-}% \tabu@reset
-\def\tabu@setsave #1{\expandafter\tabu@sets@ve #1\@nil{#1}}
-\long\def\tabu@sets@ve #1\@nil #2{\@temptokena\expandafter{\the\@temptokena \def#2{#1}}}
-%% The Rewriting Process -------------------------------------------
-\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
-\newcommand*\tabucolumn [1]{\expandafter \def \expandafter
- \tabu@highprioritycolumns\expandafter{\tabu@highprioritycolumns
- \NC@do #1}}%
-\let\tabu@highprioritycolumns \@empty
-%% The | ``column'' : rewriting process --------------------------
-\tabu@privatecolumntype |{\tabu@rewritevline}
-\newcommand*\tabu@rewritevline[1][]{\tabu@vlinearg{#1}%
- \expandafter \NC@find \tabu@rewritten}
-\def\tabu@lines #1{%
- \ifx|#1\else \tabu@privatecolumntype #1{\tabu@rewritevline}\fi
- \NC@list\expandafter{\the\NC@list \NC@do #1}%
-}% \tabu@lines@
-\def\tabu@vlinearg #1{%
- \ifx\\#1\\\def\tabu@thestyle {\tabu@ls@}%
- \else\tabu@getline {#1}%
- \fi
- \def\tabu@rewritten ##1{\def\tabu@rewritten{!{##1\tabu@thevline}}%
- }\expandafter\tabu@rewritten\expandafter{\tabu@thestyle}%
- \expandafter \tabu@keepls \tabu@thestyle \@nil
-}% \tabu@vlinearg
-\def\tabu@keepls #1\@nil{%
- \ifcat $\@cdr #1\@nil $%
- \ifx \relax#1\else
- \ifx \tabu@ls@#1\else
- \let#1\relax
- \xdef\tabu@mkpreambuffer{\tabu@mkpreambuffer
- \tabu@savels\noexpand#1}\fi\fi\fi
-}% \tabu@keepls
-\def\tabu@thevline {\begingroup
- \ifdefined\tabu@leaders
- \setbox\@tempboxa=\vtop to\dimexpr
- \ht\@arstrutbox+\dp\@arstrutbox{{\tabu@thevleaders}}%
- \ht\@tempboxa=\ht\@arstrutbox \dp\@tempboxa=\dp\@arstrutbox
- \box\@tempboxa
- \else
- \tabu@thevrule
- \fi \endgroup
-}% \tabu@thevline
-\def\tabu@savels #1{%
- \expandafter\let\csname\string#1\endcsname #1%
- \expandafter\def\expandafter\tabu@reset\expandafter{\tabu@reset
- \tabu@resetls#1}}%
-\def\tabu@resetls #1{\expandafter\let\expandafter#1\csname\string#1\endcsname}%
-%% \multicolumn inside tabu environment -----------------------------
-\tabu@newcolumntype \tabu@rewritemulticolumn{%
- \aftergroup \tabu@endrewritemulticolumn % after \@mkpream group
- \NC@list{\NC@do *}\tabu@textbar \tabu@lines
- \tabu@savedecl
- \tabu@privatecolumns
- \NC@list\expandafter{\the\expandafter\NC@list \tabu@NC@list}%
- \let\tabu@savels \relax
- \NC@find
-}% \tabu@rewritemulticolumn
-\def\tabu@endrewritemulticolumn{\gdef\tabu@mkpreambuffer{}\endgroup}
-\def\tabu@multicolumn{\tabu@ifenvir \tabu@multic@lumn \tabu@multicolumnORI}
-\long\def\tabu@multic@lumn #1#2#3{\multispan{#1}\begingroup
- \tabu@everyrowtrue
- \NC@list{\NC@do \tabu@rewritemulticolumn}%
- \expandafter\@gobbletwo % gobbles \multispan{#1}
- \tabu@multicolumnORI{#1}{\tabu@rewritemulticolumn #2}%
- {\iftabuscantokens \tabu@rescan \else \expandafter\@firstofone \fi
- {#3}}%
-}% \tabu@multic@lumn
-%% The X column(s): rewriting process -----------------------------
-\tabu@privatecolumntype X[1][]{\begingroup \tabu@siunitx{\endgroup \tabu@rewriteX {#1}}}
-\def\tabu@nosiunitx #1{#1{}{}\expandafter \NC@find \tabu@rewritten }
-\def\tabu@siunitx #1{\@ifnextchar \bgroup
- {\tabu@rewriteX@Ss{#1}}
- {\tabu@nosiunitx{#1}}}
-\def\tabu@rewriteX@Ss #1#2{\@temptokena{}%
- \@defaultunits \let\tabu@temp =#2\relax\@nnil
- \ifodd 1\ifx S\tabu@temp \else \ifx s\tabu@temp \else 0 \fi\fi
- \def\NC@find{\def\NC@find >####1####2<####3\relax{#1 {####1}{####3}%
- }\expandafter\NC@find \the\@temptokena \relax
- }\expandafter\NC@rewrite@S \@gobble #2\relax
- \else \tabu@siunitxerror
- \fi
- \expandafter \NC@find \tabu@rewritten
-}% \tabu@rewriteX@Ss
-\def\tabu@siunitxerror {\PackageError{tabu}{Not a S nor s column !
- \MessageBreak X column can only embed siunitx S or s columns}\@ehd
-}% \tabu@siunitxerror
-\def\tabu@rewriteX #1#2#3{\tabu@Xarg {#1}{#2}{#3}%
- \iftabu@measuring
- \else \tabu@measuringtrue % first X column found in the preamble
- \let\@halignto \relax \let\tabu@halignto \relax
- \iftabu@spread \tabu@spreadtarget \tabu@target \tabu@target \z@
- \else \tabu@spreadtarget \z@ \fi
- \ifdim \tabu@target=\z@
- \setlength\tabu@target \tabu@thetarget
- \tabu@message{\tabu@message@defaulttarget}%
- \else \tabu@message{\tabu@message@target}\fi
- \fi
-}% \tabu@rewriteX
-\def\tabu@rewriteXrestore #1#2#3{\let\@halignto \relax
- \def\tabu@rewritten{l}}
-\def\tabu@Xarg #1#2#3{%
- \advance\tabu@Xcol \@ne \let\tabu@Xlcr \@empty
- \let\tabu@Xdisp \@empty \let\tabu@Xmath \@empty
- \ifx\\#1\\% <shortcut when no option>
- \def\tabu@rewritten{p}\tabucolX \p@ % <default coef = 1>
- \else
- \let\tabu@rewritten \@empty \let\tabu@temp \@empty \tabucolX \z@
- \tabu@Xparse {}#1\relax
- \fi
- \tabu@Xrewritten{#2}{#3}%
-}% \tabu@Xarg
-\def\tabu@Xparse #1{\futurelet\@let@token \tabu@Xtest}
-\expandafter\def\expandafter\tabu@Xparsespace\space{\tabu@Xparse{}}
-\def\tabu@Xtest{%
- \ifcase \ifx \relax\@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 j\@let@token 7\else
- \if L\@let@token 8\else
- \if C\@let@token 9\else
- \if R\@let@token 10\else
- \if J\@let@token 11\else
- \ifx \@sptoken\@let@token 12\else
- \if .\@let@token 13\else
- \if -\@let@token 13\else
- \ifcat $\@let@token 14\else
- 15\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\relax
- \or \tabu@Xtype {p}%
- \or \tabu@Xtype {m}%
- \or \tabu@Xtype {b}%
- \or \tabu@Xalign \raggedright\relax
- \or \tabu@Xalign \centering\relax
- \or \tabu@Xalign \raggedleft\relax
- \or \tabu@Xalign \tabu@justify\relax
- \or \tabu@Xalign \RaggedRight\raggedright
- \or \tabu@Xalign \Centering\centering
- \or \tabu@Xalign \RaggedLeft\raggedleft
- \or \tabu@Xalign \justifying\tabu@justify
- \or \expandafter \tabu@Xparsespace
- \or \expandafter \tabu@Xcoef
- \or \expandafter \tabu@Xm@th
- \or \tabu@Xcoef{}%
- \else\expandafter \tabu@Xparse
- \fi
-}% \tabu@Xtest
-\def\tabu@Xalign #1#2{%
- \ifx \tabu@Xlcr\@empty \else \PackageWarning{tabu}
- {Duplicate horizontal alignment specification}\fi
- \ifdefined#1\def\tabu@Xlcr{#1}\let#1\relax
- \else \def\tabu@Xlcr{#2}\let#2\relax\fi
- \expandafter\tabu@Xparse
-}% \tabu@Xalign
-\def\tabu@Xtype #1{%
- \ifx \tabu@rewritten\@empty \else \PackageWarning{tabu}
- {Duplicate vertical alignment specification}\fi
- \def\tabu@rewritten{#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\tabucolX \tabu@temp\the\tabu@cnt\p@
- \tabu@Xparse{}%
-}% \tabu@Xc@ef
-\def\tabu@Xm@th #1{\futurelet \@let@token \tabu@Xd@sp}
-\def\tabu@Xd@sp{\let\tabu@Xmath=$%
- \ifx $\@let@token \def\tabu@Xdisp{\displaystyle}%
- \expandafter\tabu@Xparse
- \else \expandafter\tabu@Xparse\expandafter{\expandafter}%
- \fi
-}% \tabu@Xd@sp
-\def\tabu@Xrewritten {%
- \ifx \tabu@rewritten\@empty \def\tabu@rewritten{p}\fi
- \ifdim \tabucolX<\z@ \tabu@negcoeftrue
- \else\ifdim \tabucolX=\z@ \tabucolX \p@
- \fi\fi
- \edef\tabu@temp{{\the\tabu@Xcol}{\tabu@strippt\tabucolX}}%
- \edef\tabu@Xcoefs{\tabu@Xcoefs \tabu@ \tabu@temp}%
- \edef\tabu@rewritten ##1##2{\def\noexpand\tabu@rewritten{%
- >{\tabu@Xlcr \ifx$\tabu@Xmath$\tabu@Xdisp\fi ##1}%
- \tabu@rewritten {\tabu@hsize \tabu@temp}%
- <{##2\ifx$\tabu@Xmath$\fi}}%
- }\tabu@rewritten
-}% \tabu@Xrewritten
-\def\tabu@hsize #1#2{%
- \ifdim #2\p@<\z@
- \ifdim \tabucolX=\maxdimen \tabu@wd{#1}\else
- \ifdim \tabu@wd{#1}<-#2\tabucolX \tabu@wd{#1}\else -#2\tabucolX\fi
- \fi
- \else #2\tabucolX
- \fi
-}% \tabu@hsize
-%% \usetabu and \preamble: rewriting process ---------------------
-\tabu@privatecolumntype \usetabu [1]{%
- \ifx\\#1\\\tabu@saveerr{}\else
- \@ifundefined{tabu@saved@\string#1}
- {\tabu@saveerr{#1}}
- {\let\tabu@rewriteX \tabu@rewriteXrestore
- \csname tabu@saved@\string#1\expandafter\endcsname\expandafter\@ne}%
- \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\z@}%
- \fi
-}% \NC@rewrite@\preamble
-%% Controlling the rewriting process -------------------------------
-\tabu@newcolumntype \tabu@rewritefirst{%
- \iftabu@long \aftergroup \tabu@longpream % <the whole implementation is here !>
- \else \aftergroup \tabu@pream
- \fi
- \let\tabu@ \relax \let\tabu@hsize \relax
- \let\tabu@Xcoefs \@empty \let\tabu@savels \relax
- \tabu@Xcol \z@ \tabu@cnt \tw@
- \gdef\tabu@mkpreambuffer{\tabu@{}}\tabu@measuringfalse
- \global\setbox\@arstrutbox \box\@arstrutbox
- \NC@list{\NC@do *}\tabu@textbar \tabu@lines
- \NC@list\expandafter{\the\NC@list \NC@do X}%
- \iftabu@siunitx % <siunitx S and s columns>
- \NC@list\expandafter{\the\NC@list \NC@do S\NC@do s}\fi
- \NC@list\expandafter{\the\expandafter\NC@list \tabu@highprioritycolumns}%
- \expandafter\def\expandafter\tabu@NC@list\expandafter{%
- \the\expandafter\NC@list \tabu@NC@list}% % * | X S <original>
- \NC@list\expandafter{\expandafter \NC@do \expandafter\usetabu
- \expandafter \NC@do \expandafter\preamble
- \the\NC@list \NC@do \tabu@rewritemiddle
- \NC@do \tabu@rewritelast}%
- \tabu@savedecl
- \tabu@privatecolumns
- \edef\tabu@prev{\the\@temptokena}\NC@find \tabu@rewritemiddle
-}% NC@rewrite@\tabu@rewritefirst
-\tabu@newcolumntype \tabu@rewritemiddle{%
- \edef\tabu@temp{\the\@temptokena}\NC@find \tabu@rewritelast
-}% \NC@rewrite@\tabu@rewritemiddle
-\tabu@newcolumntype \tabu@rewritelast{%
- \ifx \tabu@temp\tabu@prev \advance\tabu@cnt \m@ne
- \NC@list\expandafter{\tabu@NC@list \NC@do \tabu@rewritemiddle
- \NC@do \tabu@rewritelast}%
- \else \let\tabu@prev\tabu@temp
- \fi
- \ifcase \tabu@cnt \expandafter\tabu@endrewrite
- \else \expandafter\NC@find \expandafter\tabu@rewritemiddle
- \fi
-}% \NC@rewrite@\tabu@rewritelast
-%% Choosing the strategy --------------------------------------------
-\def\tabu@endrewrite {%
- \let\tabu@temp \NC@find
- \ifx \@arrayright\relax \let\@arrayright \@empty \fi
- \count@=%
- \ifx \@finalstrut\tabu@finalstrut \z@ % outer in mode 0 print
- \iftabu@measuring
- \xdef\tabu@mkpreambuffer{\tabu@mkpreambuffer
- \tabu@target \csname tabu@\the\tabu@nested.T\endcsname
- \tabucolX \csname tabu@\the\tabu@nested.X\endcsname
- \edef\@halignto {\ifx\@arrayright\@empty to\tabu@target\fi}}%
- \fi
- \else\iftabu@measuring 4 % X columns
- \xdef\tabu@mkpreambuffer{\tabu@{\tabu@mkpreambuffer
- \tabu@target \the\tabu@target
- \tabu@spreadtarget \the\tabu@spreadtarget}%
- \def\noexpand\tabu@Xcoefs{\tabu@Xcoefs}%
- \edef\tabu@halignto{\ifx \@arrayright\@empty to\tabu@target\fi}}%
- \let\tabu@Xcoefs \relax
- \else\ifcase\tabu@nested \thr@@ % outer, no X
- \global\let\tabu@afterendpar \relax
- \else \@ne % inner, no X, outer in mode 1 or 2
- \fi
- \ifdefined\tabu@usetabu
- \else \ifdim\tabu@target=\z@
- \else \let\tabu@temp \tabu@extracolsep
- \fi\fi
- \fi
- \fi
- \xdef\tabu@mkpreambuffer{\count@ \the\count@ \tabu@mkpreambuffer}%
- \tabu@temp
-}% \tabu@endrewrite
-\def\tabu@extracolsep{\@defaultunits \expandafter\let
- \expandafter\tabu@temp \expandafter=\the\@temptokena \relax\@nnil
- \ifx \tabu@temp\@sptoken
- \expandafter\tabu@gobblespace \expandafter\tabu@extracolsep
- \else
- \edef\tabu@temp{\noexpand\NC@find
- \if |\noexpand\tabu@temp @%
- \else\if !\noexpand\tabu@temp @%
- \else !%
- \fi\fi
- {\noexpand\extracolsep\noexpand\@flushglue}}%
- \fi
- \tabu@temp
-}% \tabu@extrac@lsep
-%% Implementing the strategy ----------------------------------------
-\long\def\tabu@pream #1\@preamble {%
- \let\tabu@ \tabu@@ \tabu@mkpreambuffer \tabu@aftergroupcleanup
- \NC@list\expandafter {\tabu@NC@list}% in case of nesting...
- \ifdefined\tabu@usetabu \tabu@usetabu \tabu@target \z@ \fi
- \let\tabu@savedpreamble \@preamble
- \global\let\tabu@elapsedtime \relax
- \tabu@thebody ={#1\tabu@aftergroupcleanup}%
- \tabu@thebody =\expandafter{\the\expandafter\tabu@thebody
- \@preamble}%
- \edef\tabuthepreamble {\the\tabu@thebody}% ( no @ allowed for \scantokens )
- \tabu@select
-}% \tabu@pream
-\long\def\tabu@longpream #1\LT@bchunk #2\LT@bchunk{%
- \let\tabu@ \tabu@@ \tabu@mkpreambuffer \tabu@aftergroupcleanup
- \NC@list\expandafter {\tabu@NC@list}% in case of nesting...
- \let\tabu@savedpreamble \@preamble
- \global\let\tabu@elapsedtime \relax
- \tabu@thebody ={#1\LT@bchunk #2\tabu@aftergroupcleanup \LT@bchunk}%
- \edef\tabuthepreamble {\the\tabu@thebody}% ( no @ allowed for \scantokens )
- \tabu@select
-}% \tabu@longpream
-\def\tabu@select {%
- \ifnum\tabu@nested>\z@ \tabuscantokensfalse \fi
- \ifnum \count@=\@ne \iftabu@measuring \count@=\tw@ \fi\fi
- \ifcase \count@
- \global\let\tabu@elapsedtime \relax
- \tabu@seteverycr
- \expandafter \tabuthepreamble % vertical adjustment (inherited from outer)
- \or % exit in vertical measure + struts per cell because no X and outer in mode 3
- \tabu@evr{\tabu@verticalinit}\tabu@celllalign@def{\tabu@verticalmeasure}%
- \def\tabu@cellralign{\tabu@verticalspacing}%
- \tabu@seteverycr
- \expandafter \tabuthepreamble
- \or % exit without measure because no X and outer in mode 4
- \tabu@evr{}\tabu@celllalign@def{}\let\tabu@cellralign \@empty
- \tabu@seteverycr
- \expandafter \tabuthepreamble
- \else % needs trials
- \tabu@evr{}\tabu@celllalign@def{}\let\tabu@cellralign \@empty
- \tabu@savecounters
- \expandafter \tabu@setstrategy
- \fi
-}% \tabu@select
-\def\tabu@@ {\gdef\tabu@mkpreambuffer}
-%% Protections to set up before trials ------------------------------
-\def\tabu@setstrategy {\begingroup % <trials group>
- \tabu@trialh@@k \tabu@cnt \z@ % number of trials
- \hbadness \@M \let\hbadness \@tempcnta
- \hfuzz \maxdimen \let\hfuzz \@tempdima
- \let\write \tabu@nowrite\let\GenericError \tabu@GenericError
- \let\savetabu \@gobble \let\tabudefaulttarget \linewidth
- \let\@footnotetext \@gobble \let\@xfootnote \tabu@xfootnote
- \let\color \tabu@nocolor\let\rowcolor \tabu@norowcolor
- \let\tabu@aftergroupcleanup \relax % only after the last trial
- \tabu@mkpreambuffer
- \ifnum \count@>\thr@@ \let\@halignto \@empty \tabucolX@init
- \def\tabu@lasttry{\m@ne\p@}\fi
- \begingroup \iffalse{\fi \ifnum0=`}\fi
- \toks@{}\def\tabu@stack{b}\iftabuscantokens \endlinechar=10 \obeyspaces \fi %
- \tabu@collectbody \tabu@strategy %
-}% \tabu@setstrategy
-\def\tabu@savecounters{%
- \def\@elt ##1{\csname c@##1\endcsname\the\csname c@##1\endcsname}%
- \edef\tabu@clckpt {\begingroup \globaldefs=\@ne \cl@@ckpt \endgroup}\let\@elt \relax
-}% \tabu@savecounters
-\def\tabucolX@init {% \tabucolX <= \tabu@target / (sum coefs > 0)
- \dimen@ \z@ \tabu@Xsum \z@ \tabucolX \z@ \let\tabu@ \tabu@Xinit \tabu@Xcoefs
- \ifdim \dimen@>\z@
- \@tempdima \dimexpr \tabu@target *\p@/\dimen@ + \tabu@hfuzz\relax
- \ifdim \tabucolX<\@tempdima \tabucolX \@tempdima \fi
- \fi
-}% \tabucolX@init
-\def\tabu@Xinit #1#2{\tabu@Xcol #1 \advance \tabu@Xsum
- \ifdim #2\p@>\z@ #2\p@ \advance\dimen@ #2\p@
- \else -#2\p@ \tabu@negcoeftrue
- \@tempdima \dimexpr \tabu@target*\p@/\dimexpr-#2\p@\relax \relax
- \ifdim \tabucolX<\@tempdima \tabucolX \@tempdima \fi
- \tabu@wddef{#1}{0pt}%
- \fi
-}% \tabu@Xinit
-%% Collecting the environment body ----------------------------------
-\long\def\tabu@collectbody #1#2\end #3{%
- \edef\tabu@stack{\tabu@pushbegins #2\begin\end\expandafter\@gobble\tabu@stack}%
- \ifx \tabu@stack\@empty
- \toks@\expandafter{\expandafter\tabu@thebody\expandafter{\the\toks@ #2}%
- \def\tabu@end@envir{\end{#3}}%
- \iftabuscantokens
- \iftabu@long \def\tabu@endenvir {\end{#3}\tabu@gobbleX}%
- \else \def\tabu@endenvir {\let\endarray \@empty
- \end{#3}\tabu@gobbleX}%
- \fi
- \else \def\tabu@endenvir {\end{#3}}\fi}%
- \let\tabu@collectbody \tabu@endofcollect
- \else\def\tabu@temp{#3}%
- \ifx \tabu@temp\@empty \toks@\expandafter{\the\toks@ #2\end }%
- \else \ifx\tabu@temp\tabu@@spxiii \toks@\expandafter{\the\toks@ #2\end #3}%
- \else \ifx\tabu@temp\tabu@X \toks@\expandafter{\the\toks@ #2\end #3}%
- \else \toks@\expandafter{\the\toks@ #2\end{#3}}%
- \fi\fi\fi
- \fi
- \tabu@collectbody{#1}%
-}% \tabu@collectbody
-\long\def\tabu@pushbegins#1\begin#2{\ifx\end#2\else b\expandafter\tabu@pushbegins\fi}%
-\def\tabu@endofcollect #1{\ifnum0=`{}\fi
- \expandafter\endgroup \the\toks@ #1%
-}% \tabu@endofcollect
-%% The trials: switching between strategies -------------------------
-\def\tabu@strategy {\relax % stops \count@ assignment !
- \ifcase\count@ % case 0 = print with vertical adjustment (outer is finished)
- \expandafter \tabu@endoftrials
- \or % case 1 = exit in vertical measure (outer in mode 3)
- \expandafter\xdef\csname tabu@\the\tabu@nested.T\endcsname{\the\tabu@target}%
- \expandafter\xdef\csname tabu@\the\tabu@nested.X\endcsname{\the\tabucolX}%
- \expandafter \tabu@endoftrials
- \or % case 2 = exit with a rule replacing the table (outer in mode 4)
- \expandafter \tabu@quickend
- \or % case 3 = outer is in mode 3 because of no X
- \begingroup
- \tabu@evr{\tabu@verticalinit}\tabu@celllalign@def{\tabu@verticalmeasure}%
- \def\tabu@cellralign{\tabu@verticalspacing}%
- \expandafter \tabu@measuring
- \else % case 4 = horizontal measure
- \begingroup
- \global\let\tabu@elapsedtime \tabu@message@etime
- \long\def\multicolumn##1##2##3{\multispan{##1}}%
- \let\tabu@startpboxORI \@startpbox
- \iftabu@spread
- \def\tabu@naturalXmax {\z@}%
- \let\tabu@naturalXmin \tabu@naturalXmax
- \tabu@evr{\global\tabu@naturalX \z@}%
- \let\@startpbox \tabu@startpboxmeasure
- \else\iftabu@negcoef
- \let\@startpbox \tabu@startpboxmeasure
- \else \let\@startpbox \tabu@startpboxquick
- \fi\fi
- \expandafter \tabu@measuring
- \fi
-}% \tabu@strategy
-\def\tabu@measuring{\expandafter \tabu@trial \expandafter
- \count@ \the\count@ \tabu@endtrial
-}% \tabu@measuring
-\def\tabu@trial{\iftabu@long \tabu@longtrial \else \tabu@shorttrial \fi}
-\def\tabu@shorttrial {\setbox\tabu@box \hbox\bgroup \tabu@seteverycr
- \ifx \tabu@savecounters\relax \else
- \let\tabu@savecounters \relax \tabu@clckpt \fi
- $\iftabuscantokens \tabu@rescan \else \expandafter\@secondoftwo \fi
- \expandafter{\expandafter \tabuthepreamble
- \the\tabu@thebody
- \csname tabu@adl@endtrial\endcsname
- \endarray}$\egroup % got \tabu@box
-}% \tabu@shorttrial
-\def\tabu@longtrial {\setbox\tabu@box \hbox\bgroup \tabu@seteverycr
- \ifx \tabu@savecounters\relax \else
- \let\tabu@savecounters \relax \tabu@clckpt \fi
- \iftabuscantokens \tabu@rescan \else \expandafter\@secondoftwo \fi
- \expandafter{\expandafter \tabuthepreamble
- \the\tabu@thebody
- \tabuendlongtrial}\egroup % got \tabu@box
-}% \tabu@longtrial
-\def\tabuendlongtrial{% no @ allowed for \scantokens
- \LT@echunk \global\setbox\@ne \hbox{\unhbox\@ne}\kern\wd\@ne
- \LT@get@widths
-}% \tabuendlongtrial
-\def\tabu@adl@endtrial{% <arydshln in nested trials - problem for global column counters!>
- \crcr \noalign{\global\adl@ncol \tabu@nbcols}}% anything global is crap, junky and fails !
-\def\tabu@seteverycr {\tabu@reset
- \everycr \expandafter{\the\everycr \tabu@everycr}%
- \let\everycr \tabu@noeverycr % <for ialign>
-}% \tabu@seteverycr
-\def\tabu@noeverycr{{\aftergroup\tabu@restoreeverycr \afterassignment}\toks@}
-\def\tabu@restoreeverycr {\let\everycr \tabu@@everycr}
-\def\tabu@everycr {\iftabu@everyrow \noalign{\tabu@everyrow}\fi}
-\def\tabu@endoftrials {%
- \iftabuscantokens \expandafter\@firstoftwo
- \else \expandafter\@secondoftwo
- \fi
- {\expandafter \tabu@closetrialsgroup \expandafter
- \tabu@rescan \expandafter{%
- \expandafter\tabuthepreamble
- \the\expandafter\tabu@thebody
- \iftabu@long \else \endarray \fi}}
- {\expandafter\tabu@closetrialsgroup \expandafter
- \tabuthepreamble
- \the\tabu@thebody}%
- \tabu@endenvir % Finish !
-}% \tabu@endoftrials
-\def\tabu@closetrialsgroup {%
- \toks@\expandafter{\tabu@endenvir}%
- \edef\tabu@bufferX{\endgroup
- \tabucolX \the\tabucolX
- \tabu@target \the\tabu@target
- \tabu@cnt \the\tabu@cnt
- \def\noexpand\tabu@endenvir{\the\toks@}%
- %Quid de \@halignto = \tabu@halignto ??
- }% \tabu@bufferX
- \tabu@bufferX
- \ifcase\tabu@nested % print out (outer in mode 0)
- \global\tabu@cnt \tabu@cnt
- \tabu@evr{\tabu@verticaldynamicadjustment}%
- \tabu@celllalign@def{\everypar{}}\let\tabu@cellralign \@empty
- \let\@finalstrut \tabu@finalstrut
- \else % vertical measure of nested tabu
- \tabu@evr{\tabu@verticalinit}%
- \tabu@celllalign@def{\tabu@verticalmeasure}%
- \def\tabu@cellralign{\tabu@verticalspacing}%
- \fi
- \tabu@clckpt \let\@halignto \tabu@halignto
- \let\@halignto \@empty
- \tabu@seteverycr
- \ifdim \tabustrutrule>\z@ \ifnum\tabu@nested=\z@
- \setbox\@arstrutbox \box\voidb@x % force \@arstrutbox to be rebuilt (visible struts)
- \fi\fi
-}% \tabu@closetrialsgroup
-\def\tabu@quickend {\expandafter \endgroup \expandafter
- \tabu@target \the\tabu@target \tabu@quickrule
- \let\endarray \relax \tabu@endenvir
-}% \tabu@quickend
-\def\tabu@endtrial {\relax % stops \count@ assignment !
- \ifcase \count@ \tabu@err % case 0 = impossible here
- \or \tabu@err % case 1 = impossible here
- \or \tabu@err % case 2 = impossible here
- \or % case 3 = outer goes into mode 0
- \def\tabu@bufferX{\endgroup}\count@ \z@
- \else % case 4 = outer goes into mode 3
- \iftabu@spread \tabu@spreadarith % inner into mode 1 (outer in mode 3)
- \else \tabu@arith % or 2 (outer in mode 4)
- \fi
- \count@=%
- \ifcase\tabu@nested \thr@@ % outer goes into mode 3
- \else\iftabu@measuring \tw@ % outer is in mode 4
- \else \@ne % outer is in mode 3
- \fi\fi
- \edef\tabu@bufferX{\endgroup
- \tabucolX \the\tabucolX
- \tabu@target \the\tabu@target}%
- \fi
- \expandafter \tabu@bufferX \expandafter
- \count@ \the\count@ \tabu@strategy
-}% \tabu@endtrial
-\def\tabu@err{\errmessage{(tabu) Internal impossible error! (\count@=\the\count@)}}
-%% The algorithms: compute the widths / stop or go on ---------------
-\def\tabu@arithnegcoef {%
- \@tempdima \z@ \dimen@ \z@ \let\tabu@ \tabu@arith@negcoef \tabu@Xcoefs
-}% \tabu@arithnegcoef
-\def\tabu@arith@negcoef #1#2{%
- \ifdim #2\p@>\z@ \advance\dimen@ #2\p@ % saturated by definition
- \advance\@tempdima #2\tabucolX
- \else
- \ifdim -#2\tabucolX <\tabu@wd{#1}% c_i X < natural width <= \tabu@target-> saturated
- \advance\dimen@ -#2\p@
- \advance\@tempdima -#2\tabucolX
- \else
- \advance\@tempdima \tabu@wd{#1}% natural width <= c_i X => neutralised
- \ifdim \tabu@wd{#1}<\tabu@target \else % neutralised
- \advance\dimen@ -#2\p@ % saturated (natural width = tabu@target)
- \fi
- \fi
- \fi
-}% \tabu@arith@negcoef
-\def\tabu@givespace #1#2{% here \tabu@DELTA < \z@
- \ifdim \@tempdima=\z@
- \tabu@wddef{#1}{\the\dimexpr -\tabu@DELTA*\p@/\tabu@Xsum}%
- \else
- \tabu@wddef{#1}{\the\dimexpr \tabu@hsize{#1}{#2}
- *(\p@ -\tabu@DELTA*\p@/\@tempdima)/\p@\relax}%
- \fi
-}% \tabu@givespace
-\def\tabu@arith {\advance\tabu@cnt \@ne
- \ifnum \tabu@cnt=\@ne \tabu@message{\tabu@titles}\fi
- \tabu@arithnegcoef
- \@tempdimb \dimexpr \wd\tabu@box -\@tempdima \relax % <incompressible material>
- \tabu@DELTA = \dimexpr \wd\tabu@box - \tabu@target \relax
- \tabu@message{\tabu@message@arith}%
- \ifdim \tabu@DELTA <\tabu@hfuzz
- \ifdim \tabu@DELTA<\z@ % wd (tabu)<\tabu@target ?
- \let\tabu@ \tabu@givespace \tabu@Xcoefs
- \advance\@tempdima \@tempdimb \advance\@tempdima -\tabu@DELTA % for message
- \else % already converged: nothing to do but nearly impossible...
- \fi
- \tabucolX \maxdimen
- \tabu@measuringfalse
- \else % need for narrower X columns
- \tabucolX =\dimexpr (\@tempdima -\tabu@DELTA) *\p@/\tabu@Xsum \relax
- \tabu@measuringtrue
- \@whilesw \iftabu@measuring\fi {%
- \advance\tabu@cnt \@ne
- \tabu@arithnegcoef
- \tabu@DELTA =\dimexpr \@tempdima+\@tempdimb -\tabu@target \relax % always < 0 here
- \tabu@message{\tabu@header
- \tabu@msgalign \tabucolX { }{ }{ }{ }{ }\@@
- \tabu@msgalign \@tempdima+\@tempdimb { }{ }{ }{ }{ }\@@
- \tabu@msgalign \tabu@target { }{ }{ }{ }{ }\@@
- \tabu@msgalign@PT \dimen@ { }{}{}{}{}{}{}\@@
- \ifdim -\tabu@DELTA<\tabu@hfuzz \tabu@spaces target ok\else
- \tabu@msgalign \dimexpr -\tabu@DELTA *\p@/\dimen@ {}{}{}{}{}\@@
- \fi}%
- \ifdim -\tabu@DELTA<\tabu@hfuzz
- \advance\@tempdima \@tempdimb % for message
- \tabu@measuringfalse
- \else
- \advance\tabucolX \dimexpr -\tabu@DELTA *\p@/\dimen@ \relax
- \fi
- }%
- \fi
- \tabu@message{\tabu@message@reached}%
- \edef\tabu@bufferX{\endgroup \tabu@cnt \the\tabu@cnt
- \tabucolX \the\tabucolX
- \tabu@target \the\tabu@target}%
-}% \tabu@arith
-\def\tabu@spreadarith {%
- \dimen@ \z@ \@tempdima \tabu@naturalXmax \let\tabu@ \tabu@spread@arith \tabu@Xcoefs
- \edef\tabu@naturalXmin {\the\dimexpr\tabu@naturalXmin*\dimen@/\p@}%
- \@tempdimc =\dimexpr \wd\tabu@box -\tabu@naturalXmax+\tabu@naturalXmin \relax
- \iftabu@measuring
- \tabu@target =\dimexpr \@tempdimc+\tabu@spreadtarget \relax
- \edef\tabu@bufferX{\endgroup \tabucolX \the\tabucolX \tabu@target\the\tabu@target}%
- \else
- \tabu@message{\tabu@message@spreadarith}%
- \ifdim \dimexpr \@tempdimc+\tabu@spreadtarget >\tabu@target
- \tabu@message{(tabu) spread
- \ifdim \@tempdimc>\tabu@target useless here: default target used%
- \else too large: reduced to fit default target\fi.}%
- \else
- \tabu@target =\dimexpr \@tempdimc+\tabu@spreadtarget \relax
- \tabu@message{(tabu) spread: New target set to \the\tabu@target^^J}%
- \fi
- \begingroup \let\tabu@wddef \@gobbletwo
- \@tempdimb \@tempdima
- \tabucolX@init
- \tabu@arithnegcoef
- \wd\tabu@box =\dimexpr \wd\tabu@box +\@tempdima-\@tempdimb \relax
- \expandafter\endgroup \expandafter\tabucolX \the\tabucolX
- \tabu@arith
- \fi
-}% \tabu@spreadarith
-\def\tabu@spread@arith #1#2{%
- \ifdim #2\p@>\z@ \advance\dimen@ #2\p@
- \else \advance\@tempdima \tabu@wd{#1}\relax
- \fi
-}% \tabu@spread@arith
-%% Reporting in the .log file ---------------------------------------
-\def\tabu@message@defaulttarget{%
- \ifnum\tabu@nested=\z@^^J(tabu) Default target:
- \ifx\tabudefaulttarget\linewidth \string\linewidth
- \ifdim \tabu@thetarget=\linewidth \else
- -\the\dimexpr\linewidth-\tabu@thetarget\fi =
- \else\ifx\tabudefaulttarget\linegoal\string\linegoal=
- \fi\fi
- \else (tabu) Default target (nested): \fi
- \the\tabu@target \on@line
- \ifnum\tabu@nested=\z@ , page \the\c@page\fi}
-\def\tabu@message@target {^^J(tabu) Target specified:
- \the\tabu@target \on@line, page \the\c@page}
-\def\tabu@message@arith {\tabu@header
- \tabu@msgalign \tabucolX { }{ }{ }{ }{ }\@@
- \tabu@msgalign \wd\tabu@box { }{ }{ }{ }{ }\@@
- \tabu@msgalign \tabu@target { }{ }{ }{ }{ }\@@
- \tabu@msgalign@PT \dimen@ { }{}{}{}{}{}{}\@@
- \ifdim \tabu@DELTA<\tabu@hfuzz giving space\else
- \tabu@msgalign \dimexpr (\@tempdima-\tabu@DELTA) *\p@/\tabu@Xsum -\tabucolX {}{}{}{}{}\@@
- \fi
-}% \tabu@message@arith
-\def\tabu@message@spreadarith {\tabu@spreadheader
- \tabu@msgalign \tabu@spreadtarget { }{ }{ }{ }{}\@@
- \tabu@msgalign \wd\tabu@box { }{ }{ }{ }{}\@@
- \tabu@msgalign -\tabu@naturalXmax { }{}{}{}{}\@@
- \tabu@msgalign \tabu@naturalXmin { }{ }{ }{ }{}\@@
- \tabu@msgalign \ifdim \dimexpr\@tempdimc>\tabu@target \tabu@target
- \else \@tempdimc+\tabu@spreadtarget \fi
- {}{}{}{}{}\@@}
-\def\tabu@message@negcoef #1#2{
- \tabu@spaces\tabu@spaces\space * #1. X[\rem@pt#2]:
- \space width = \tabu@wd {#1}
- \expandafter\string\csname tabu@\the\tabu@nested.W\number#1\endcsname
- \ifdim -\tabu@pt#2\tabucolX<\tabu@target
- < \number-\rem@pt#2 X
- = \the\dimexpr -\tabu@pt#2\tabucolX \relax
- \else
- <= \the\tabu@target\space < \number-\rem@pt#2 X\fi}
-\def\tabu@message@reached{\tabu@header
- ******* Reached Target:
- hfuzz = \tabu@hfuzz\on@line\space *******}
-\def\tabu@message@etime{\edef\tabu@stoptime{\the\pdfelapsedtime}%
- \tabu@message{(tabu)\tabu@spaces Time elapsed during measure:
- \the\numexpr(\tabu@stoptime-\tabu@starttime-32767)/65536\relax sec
- \the\numexpr\numexpr(\tabu@stoptime-\tabu@starttime)
- -\numexpr(\tabu@stoptime-\tabu@starttime-32767)/65536\relax*65536\relax
- *1000/65536\relax ms \tabu@spaces(\the\tabu@cnt\space
- cycle\ifnum\tabu@cnt>\@ne s\fi)^^J^^J}}
-\def\tabu@message@verticalsp {%
- \ifdim \@tempdima>\tabu@ht
- \ifdim \@tempdimb>\tabu@dp
- \expandafter\expandafter\expandafter\string\tabu@ht =
- \tabu@msgalign \@tempdima { }{ }{ }{ }{ }\@@
- \expandafter\expandafter\expandafter\string\tabu@dp =
- \tabu@msgalign \@tempdimb { }{ }{ }{ }{ }\@@^^J%
- \else
- \expandafter\expandafter\expandafter\string\tabu@ht =
- \tabu@msgalign \@tempdima { }{ }{ }{ }{ }\@@^^J%
- \fi
- \else\ifdim \@tempdimb>\tabu@dp
- \tabu@spaces\tabu@spaces\tabu@spaces
- \expandafter\expandafter\expandafter\string\tabu@dp =
- \tabu@msgalign \@tempdimb { }{ }{ }{ }{ }\@@^^J\fi
- \fi
-}% \tabu@message@verticalsp
-\edef\tabu@spaces{\@spaces}
-\def\tabu@strippt{\expandafter\tabu@pt\the}
-{\@makeother\P \@makeother\T\lowercase{\gdef\tabu@pt #1PT{#1}}}
-\def\tabu@msgalign{\expandafter\tabu@msg@align\the\dimexpr}
-\def\tabu@msgalign@PT{\expandafter\tabu@msg@align\romannumeral-`\0\tabu@strippt}
-\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) }%
- \def\tabu@titles{\ifnum \tabu@nested=\z@
- (tabu) Try#1 #1 tabu X #1 #1 #1tabu Width #1 #1 Target
- #1 #1 #1 Coefs #1 #1 #1 Update^^J\fi}%
- \def\tabu@spreadheader{%
- (tabu) Try#1 #1 Spread #1 #1 tabu Width #1 #1 #1 Nat. X #1 #1 #1 #1Nat. Min.
- #1 New Target^^J%
- (tabu) sprd}
- \def\tabu@message@save {\begingroup
- \def\x ####1{\tabu@msg@align ####1{ }{ }{ }{ }{}\@@}
- \def\z ####1{\expandafter\x\expandafter{\romannumeral-`\0\tabu@strippt
- \dimexpr####1\p@{ }{ }}}%
- \let\color \relax \def\tabu@rulesstyle ####1####2{\detokenize{####1}}%
- \let\CT@arc@ \relax \let\@preamble \@gobble
- \let\tabu@savedpream \@firstofone
- \let\tabu@savedparams \@firstofone
- \def\tabu@target ####1\relax {(tabu) target #1 #1 #1 #1 #1 = \x{####1}^^J}%
- \def\tabucolX ####1\relax {(tabu) X columns width#1 = \x{####1}^^J}%
- \def\tabu@nbcols ####1\relax {(tabu) Number of columns: \z{####1}^^J}%
- \def\tabu@aligndefault ####1{(tabu) Default alignment: #1 #1 ####1^^J}%
- \def\col@sep ####1\relax {(tabu) column sep #1 #1 #1 = \x{####1}^^J}%
- \def\arrayrulewidth ####1\relax{(tabu) arrayrulewidth #1 = \x{####1}}%
- \def\doublerulesep ####1\relax { doublerulesep = \x{####1}^^J}%
- \def\extratabsurround####1\relax{(tabu) extratabsurround = \x{####1}^^J}%
- \def\extrarowheight ####1\relax{(tabu) extrarowheight #1 = \x{####1}}%
- \def\extrarowdepth ####1\relax {extrarowdepth = \x{####1}^^J}%
- \def\abovetabulinesep####1\relax{(tabu) abovetabulinesep=\x{####1} }%
- \def\belowtabulinesep####1\relax{ belowtabulinesep=\x{####1}^^J}%
- \def\arraystretch ####1{(tabu) arraystretch #1 #1 = \z{####1}^^J}%
- \def\minrowclearance####1\relax{(tabu) minrowclearance #1 = \x{####1}^^J}%
- \def\tabu@arc@L ####1{(tabu) taburulecolor #1 #1 = ####1^^J}%
- \def\tabu@drsc@L ####1{(tabu) tabudoublerulecolor= ####1^^J}%
- \def\tabu@evr@L ####1{(tabu) everyrow #1 #1 #1 #1 = \detokenize{####1}^^J}%
- \def\tabu@ls@L ####1{(tabu) line style = \detokenize{####1}^^J}%
- \def\NC@find ####1\@nil{(tabu) tabu preamble#1 #1 = \detokenize{####1}^^J}%
- \def\tabu@wddef####1####2{(tabu) Natural width ####1 = \x{####2}^^J}%
- \let\edef \@gobbletwo \let\def \@empty \let\let \@gobbletwo
- \tabu@message{%
- (tabu) \string\savetabu{\tabu@temp}: \on@line^^J%
- \tabu@usetabu \@nil^^J}%
- \endgroup}
-}\do{ }
-%% Measuring the natural width (varwidth) - store the results -------
-\def\tabu@startpboxmeasure #1{\bgroup % entering \vtop
- \edef\tabu@temp{\expandafter\@secondoftwo \ifx\tabu@hsize #1\else\relax\fi}%
- \ifodd 1\ifx \tabu@temp\@empty 0 \else % starts with \tabu@hsize ?
- \iftabu@spread \else % if spread -> measure
- \ifdim \tabu@temp\p@>\z@ 0 \fi\fi\fi% if coef>0 -> do not measure
- \let\@startpbox \tabu@startpboxORI % restore immediately (nesting)
- \tabu@measuringtrue % for the quick option...
- \tabu@Xcol =\expandafter\@firstoftwo\ifx\tabu@hsize #1\fi
- \ifdim \tabu@temp\p@>\z@ \ifdim \tabu@temp\tabucolX<\tabu@target
- \tabu@target=\tabu@temp\tabucolX \fi\fi
- \setbox\tabu@box \hbox \bgroup
- \begin{varwidth}\tabu@target
- \let\FV@ListProcessLine \tabu@FV@ListProcessLine % \hbox to natural width...
- \narrowragged \arraybackslash \parfillskip \@flushglue
- \ifdefined\pdfadjustspacing \pdfadjustspacing\z@ \fi
- \bgroup \aftergroup\tabu@endpboxmeasure
- \ifdefined \cellspacetoplimit \tabu@cellspacepatch \fi
- \else \expandafter\@gobble
- \tabu@startpboxquick{#1}% \@gobble \bgroup
- \fi
-}% \tabu@startpboxmeasure
-\def\tabu@cellspacepatch{\def\bcolumn##1\@nil{}\let\ecolumn\@empty
- \bgroup\color@begingroup}
-\def\tabu@endpboxmeasure {%
- \@finalstrut \@arstrutbox
- \end{varwidth}\egroup % <got my \tabu@box>
- \ifdim \tabu@temp\p@ <\z@ % neg coef
- \ifdim \tabu@wd\tabu@Xcol <\wd\tabu@box
- \tabu@wddef\tabu@Xcol {\the\wd\tabu@box}%
- \tabu@debug{\tabu@message@endpboxmeasure}%
- \fi
- \else % spread coef>0
- \global\advance \tabu@naturalX \wd\tabu@box
- \@tempdima =\dimexpr \wd\tabu@box *\p@/\dimexpr \tabu@temp\p@\relax \relax
- \ifdim \tabu@naturalXmax <\tabu@naturalX
- \xdef\tabu@naturalXmax {\the\tabu@naturalX}\fi
- \ifdim \tabu@naturalXmin <\@tempdima
- \xdef\tabu@naturalXmin {\the\@tempdima}\fi
- \fi
- \box\tabu@box \egroup % end of \vtop (measure) restore \tabu@target
-}% \tabu@endpboxmeasure
-\def\tabu@wddef #1{\expandafter\xdef
- \csname tabu@\the\tabu@nested.W\number#1\endcsname}
-\def\tabu@wd #1{\csname tabu@\the\tabu@nested.W\number#1\endcsname}
-\def\tabu@message@endpboxmeasure{\tabu@spaces\tabu@spaces<-> % <-> save natural wd
- \the\tabu@Xcol. X[\tabu@temp]:
- target = \the\tabucolX \space
- \expandafter\expandafter\expandafter\string\tabu@wd\tabu@Xcol
- =\tabu@wd\tabu@Xcol
-}% \tabu@message@endpboxmeasure
-\def\tabu@startpboxquick {\bgroup
- \let\@startpbox \tabu@startpboxORI % restore immediately
- \let\tabu \tabu@quick % \begin is expanded before...
- \expandafter\@gobble \@startpbox % gobbles \bgroup
-}% \tabu@startpboxquick
-\def\tabu@quick {\begingroup \iffalse{\fi \ifnum0=`}\fi
- \toks@{}\def\tabu@stack{b}\tabu@collectbody \tabu@endquick
-}% \tabu@quick
-\def\tabu@endquick {%
- \ifodd 1\ifx\tabu@end@envir\tabu@endtabu \else
- \ifx\tabu@end@envir\tabu@endtabus \else 0\fi\fi\relax
- \endgroup
- \else \let\endtabu \relax
- \tabu@end@envir
- \fi
-}% \tabu@quick
-\def\tabu@endtabu {\end{tabu}}
-\def\tabu@endtabus {\end{tabu*}}
-%% Measuring the heights and depths - store the results -------------
-\def\tabu@verticalmeasure{\everypar{}%
- \ifnum \currentgrouptype>12 % 14=semi-simple, 15=math shift group
- \setbox\tabu@box =\hbox\bgroup
- \let\tabu@verticalspacing \tabu@verticalsp@lcr
- \d@llarbegin % after \hbox ...
- \else
- \edef\tabu@temp{\ifnum\currentgrouptype=5\vtop
- \else\ifnum\currentgrouptype=12\vcenter
- \else\vbox\fi\fi}%
- \setbox\tabu@box \hbox\bgroup$\tabu@temp \bgroup
- \let\tabu@verticalspacing \tabu@verticalsp@pmb
- \fi
-}% \tabu@verticalmeasure
-\def\tabu@verticalsp@lcr{%
- \d@llarend \egroup % <got my \tabu@box>
- \@tempdima \dimexpr \ht\tabu@box+\abovetabulinesep
- \@tempdimb \dimexpr \dp\tabu@box+\belowtabulinesep \relax
- \ifdim\tabustrutrule>\z@ \tabu@debug{\tabu@message@verticalsp}\fi
- \ifdim \tabu@ht<\@tempdima \tabu@htdef{\the\@tempdima}\fi
- \ifdim \tabu@dp<\@tempdimb \tabu@dpdef{\the\@tempdimb}\fi
- \noindent\vrule height\@tempdima depth\@tempdimb
-}% \tabu@verticalsp@lcr
-\def\tabu@verticalsp@pmb{% inserts struts as needed
- \par \expandafter\egroup
- \expandafter$\expandafter
- \egroup \expandafter
- \@tempdimc \the\prevdepth
- \@tempdima \dimexpr \ht\tabu@box+\abovetabulinesep
- \@tempdimb \dimexpr \dp\tabu@box+\belowtabulinesep \relax
- \ifdim\tabustrutrule>\z@ \tabu@debug{\tabu@message@verticalsp}\fi
- \ifdim \tabu@ht<\@tempdima \tabu@htdef{\the\@tempdima}\fi
- \ifdim \tabu@dp<\@tempdimb \tabu@dpdef{\the\@tempdimb}\fi
- \let\@finalstrut \@gobble
- \hrule height\@tempdima depth\@tempdimb width\hsize
-%% \box\tabu@box
-}% \tabu@verticalsp@pmb
-
-\def\tabu@verticalinit{%
- \ifnum \c@taburow=\z@ \tabu@rearstrut \fi % after \tabu@reset !
- \advance\c@taburow \@ne
- \tabu@htdef{\the\ht\@arstrutbox}\tabu@dpdef{\the\dp\@arstrutbox}%
- \advance\c@taburow \m@ne
-}% \tabu@verticalinit
-\def\tabu@htdef {\expandafter\xdef \csname tabu@\the\tabu@nested.H\the\c@taburow\endcsname}
-\def\tabu@ht {\csname tabu@\the\tabu@nested.H\the\c@taburow\endcsname}
-\def\tabu@dpdef {\expandafter\xdef \csname tabu@\the\tabu@nested.D\the\c@taburow\endcsname}
-\def\tabu@dp {\csname tabu@\the\tabu@nested.D\the\c@taburow\endcsname}
-\def\tabu@verticaldynamicadjustment {%
- \advance\c@taburow \@ne
- \extrarowheight \dimexpr\tabu@ht - \ht\strutbox
- \extrarowdepth \dimexpr\tabu@dp - \dp\strutbox
- \let\arraystretch \@empty
- \advance\c@taburow \m@ne
-}% \tabu@verticaldynamicadjustment
-\def\tabuphantomline{\crcr \noalign{%
- {\globaldefs \@ne
- \setbox\@arstrutbox \box\voidb@x
- \let\tabu@@celllalign \tabu@celllalign
- \let\tabu@@cellralign \tabu@cellralign
- \let\tabu@@cellleft \tabu@cellleft
- \let\tabu@@cellright \tabu@cellright
- \let\tabu@@thevline \tabu@thevline
- \let\tabu@celllalign \@empty
- \let\tabu@cellralign \@empty
- \let\tabu@cellright \@empty
- \let\tabu@cellleft \@empty
- \let\tabu@thevline \relax}%
- \edef\tabu@temp{\tabu@multispan \tabu@nbcols{\noindent &}}%
- \toks@\expandafter{\tabu@temp \noindent\tabu@everyrowfalse \cr
- \noalign{\tabu@rearstrut
- {\globaldefs\@ne
- \let\tabu@celllalign \tabu@@celllalign
- \let\tabu@cellralign \tabu@@cellralign
- \let\tabu@cellleft \tabu@@cellleft
- \let\tabu@cellright \tabu@@cellright
- \let\tabu@thevline \tabu@@thevline}}}%
- \expandafter}\the\toks@
-}% \tabuphantomline
-%% \firsthline and \lasthline corrections ---------------------------
-\def\tabu@firstline {\tabu@hlineAZ \tabu@firsthlinecorrection {}}
-\def\tabu@firsthline{\tabu@hlineAZ \tabu@firsthlinecorrection \hline}
-\def\tabu@lastline {\tabu@hlineAZ \tabu@lasthlinecorrection {}}
-\def\tabu@lasthline {\tabu@hlineAZ \tabu@lasthlinecorrection \hline}
-\def\tabu@hline {% replaces \hline if no colortbl (see \AtBeginDocument)
- \noalign{\ifnum0=`}\fi
- {\CT@arc@\hrule height\arrayrulewidth}%
- \futurelet \tabu@temp \tabu@xhline
-}% \tabu@hline
-\def\tabu@xhline{%
- \ifx \tabu@temp \hline
- {\ifx \CT@drsc@\relax \vskip
- \else\ifx \CT@drsc@\@empty \vskip
- \else \CT@drsc@\hrule height
- \fi\fi
- \doublerulesep}%
- \fi
- \ifnum0=`{\fi}%
-}% \tabu@xhline
-\def\tabu@hlineAZ #1#2{\noalign{\ifnum0=`}\fi \dimen@ \z@ \count@ \z@
- \toks@{}\def\tabu@hlinecorrection{#1}\def\tabu@temp{#2}%
- \tabu@hlineAZsurround
-}% \tabu@hlineAZ
-\newcommand*\tabu@hlineAZsurround[1][\extratabsurround]{%
- \extratabsurround #1\let\tabucline \tabucline@scan
- \let\hline \tabu@hlinescan \let\firsthline \hline
- \let\cline \tabu@clinescan \let\lasthline \hline
- \expandafter \futurelet \expandafter \tabu@temp
- \expandafter \tabu@nexthlineAZ \tabu@temp
-}% \tabu@hlineAZsurround
-\def\tabu@hlinescan {\tabu@thick \arrayrulewidth \tabu@xhlineAZ \hline}
-\def\tabu@clinescan #1{\tabu@thick \arrayrulewidth \tabu@xhlineAZ {\cline{#1}}}
-\def\tabucline@scan{\@testopt \tabucline@sc@n {}}
-\def\tabucline@sc@n #1[#2]{\tabu@xhlineAZ {\tabucline[{#1}]{#2}}}
-\def\tabu@nexthlineAZ{%
- \ifx \tabu@temp\hline \else
- \ifx \tabu@temp\cline \else
- \ifx \tabu@temp\tabucline \else
- \tabu@hlinecorrection
- \fi\fi\fi
-}% \tabu@nexthlineAZ
-\def\tabu@xhlineAZ #1{%
- \toks@\expandafter{\the\toks@ #1}%
- \@tempdimc \tabu@thick % The last line width
- \ifcase\count@ \@tempdimb \tabu@thick % The first line width
- \else \advance\dimen@ \dimexpr \tabu@thick+\doublerulesep \relax
- \fi
- \advance\count@ \@ne \futurelet \tabu@temp \tabu@nexthlineAZ
-}% \tabu@xhlineAZ
-\def\tabu@firsthlinecorrection{% \count@ = number of \hline -1
- \@tempdima \dimexpr \ht\@arstrutbox+\dimen@
- \edef\firsthline{% <local in \noalign>
- \omit \hbox to\z@{\hss{\noexpand\tabu@DBG{yellow}\vrule
- height \the\dimexpr\@tempdima+\extratabsurround
- depth \dp\@arstrutbox
- width \tabustrutrule}\hss}\cr
- \noalign{\vskip -\the\dimexpr \@tempdima+\@tempdimb
- +\dp\@arstrutbox \relax}%
- \the\toks@
- }\ifnum0=`{\fi
- \expandafter}\firsthline % we are then !
-}% \tabu@firsthlinecorrection
-\def\tabu@lasthlinecorrection{%
- \@tempdima \dimexpr \dp\@arstrutbox+\dimen@+\@tempdimb+\@tempdimc
- \edef\lasthline{% <local in \noalign>
- \the\toks@
- \noalign{\vskip -\the\dimexpr\dimen@+\@tempdimb+\dp\@arstrutbox}%
- \omit \hbox to\z@{\hss{\noexpand\tabu@DBG{yellow}\vrule
- depth \the\dimexpr \dp\@arstrutbox+\@tempdimb+\dimen@
- +\extratabsurround-\@tempdimc
- height \z@
- width \tabustrutrule}\hss}\cr
- }\ifnum0=`{\fi
- \expandafter}\lasthline % we are then !
-}% \tabu@lasthlinecorrection
-\def\tabu@LT@@hline{%
- \ifx\LT@next\hline
- \global\let\LT@next \@gobble
- \ifx \CT@drsc@\relax
- \gdef\CT@LT@sep{%
- \noalign{\penalty-\@medpenalty\vskip\doublerulesep}}%
- \else
- \gdef\CT@LT@sep{%
- \multispan\LT@cols{%
- \CT@drsc@\leaders\hrule\@height\doublerulesep\hfill}\cr}%
- \fi
- \else
- \global\let\LT@next\empty
- \gdef\CT@LT@sep{%
- \noalign{\penalty-\@lowpenalty\vskip-\arrayrulewidth}}%
- \fi
- \ifnum0=`{\fi}%
- \multispan\LT@cols
- {\CT@arc@\leaders\hrule\@height\arrayrulewidth\hfill}\cr
- \CT@LT@sep
- \multispan\LT@cols
- {\CT@arc@\leaders\hrule\@height\arrayrulewidth\hfill}\cr
- \noalign{\penalty\@M}%
- \LT@next
-}% \tabu@LT@@hline
-%% Horizontal lines : \tabucline ------------------------------------
-\let\tabu@start \@tempcnta
-\let\tabu@stop \@tempcntb
-\newcommand*\tabucline{\noalign{\ifnum0=`}\fi \tabu@cline}
-\newcommand*\tabu@cline[2][]{\tabu@startstop{#2}%
- \ifnum \tabu@stop<\z@ \toks@{}%
- \else \tabu@clinearg{#1}\tabu@thestyle
- \edef\tabucline{\toks@{%
- \ifnum \tabu@start>\z@ \omit
- \tabu@multispan\tabu@start {\span\omit}&\fi
- \omit \tabu@multispan\tabu@stop {\span\omit}%
- \tabu@thehline\cr
- }}\tabucline
- \tabu@tracinglines{(tabu:tabucline) Style: #1^^J\the\toks@^^J^^J}%
- \fi
- \futurelet \tabu@temp \tabu@xcline
-}% \tabu@cline
-\def\tabu@clinearg #1{%
- \ifx\\#1\\\let\tabu@thestyle \tabu@ls@
- \else \@defaultunits \expandafter\let\expandafter\@tempa
- \romannumeral-`\0#1\relax \@nnil
- \ifx \hbox\@tempa \tabu@clinebox{#1}%
- \else\ifx \box\@tempa \tabu@clinebox{#1}%
- \else\ifx \vbox\@tempa \tabu@clinebox{#1}%
- \else\ifx \vtop\@tempa \tabu@clinebox{#1}%
- \else\ifx \copy\@tempa \tabu@clinebox{#1}%
- \else\ifx \leaders\@tempa \tabu@clineleads{#1}%
- \else\ifx \cleaders\@tempa \tabu@clineleads{#1}%
- \else\ifx \xleaders\@tempa \tabu@clineleads{#1}%
- \else\tabu@getline {#1}%
- \fi\fi\fi\fi\fi\fi\fi\fi
- \fi
-}% \tabu@clinearg
-\def\tabu@clinebox #1{\tabu@clineleads{\xleaders#1\hss}}
-\def\tabu@clineleads #1{%
- \let\tabu@thestyle \relax \let\tabu@leaders \@undefined
- \gdef\tabu@thehrule{#1}}
-\def\tabu@thehline{\begingroup
- \ifdefined\tabu@leaders
- \noexpand\tabu@thehleaders
- \else \noexpand\tabu@thehrule
- \fi \endgroup
-}% \tabu@thehline
-\def\tabu@xcline{%
- \ifx \tabu@temp\tabucline
- \toks@\expandafter{\the\toks@ \noalign
- {\ifx\CT@drsc@\relax \vskip
- \else \CT@drsc@\hrule height
- \fi
- \doublerulesep}}%
- \fi
- \tabu@docline
-}% \tabu@xcline
-\def\tabu@docline {\ifnum0=`{\fi \expandafter}\the\toks@}
-\def\tabu@docline@evr {\xdef\tabu@doclineafter{\the\toks@}%
- \ifnum0=`{\fi}\aftergroup\tabu@doclineafter}
-\def\tabu@multispan #1#2{%
- \ifnum\numexpr#1>\@ne #2\expandafter\tabu@multispan
- \else \expandafter\@gobbletwo
- \fi {#1-1}{#2}%
-}% \tabu@multispan
-\def\tabu@startstop #1{\tabu@start@stop #1\relax 1-\tabu@nbcols \@nnil}
-\def\tabu@start@stop #1-#2\@nnil{%
- \@defaultunits \tabu@start\number 0#1\relax \@nnil
- \@defaultunits \tabu@stop \number 0#2\relax \@nnil
- \tabu@stop \ifnum \tabu@start>\tabu@nbcols \m@ne
- \else\ifnum \tabu@stop=\z@ \tabu@nbcols
- \else\ifnum \tabu@stop>\tabu@nbcols \tabu@nbcols
- \else \tabu@stop
- \fi\fi\fi
- \advance\tabu@start \m@ne
- \ifnum \tabu@start>\z@ \advance\tabu@stop -\tabu@start \fi
-}% \tabu@start@stop
-%% Numbers: siunitx S columns (and \tabudecimal) -------------------
-\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
-%% Verbatim inside X columns ----------------------------------------
-\def\tabu@verbatim{%
- \let\verb \tabu@verb
- \let\FV@DefineCheckEnd \tabu@FV@DefineCheckEnd
-}% \tabu@verbatim
-\let\tabu@ltx@verb \verb
-\def\tabu@verb{\@ifstar {\tabu@ltx@verb*} \tabu@ltx@verb}
-\def\tabu@fancyvrb {%
- \def\tabu@FV@DefineCheckEnd ##1{%
- \def\tabu@FV@DefineCheckEnd{%
- ##1% <original definition (if fancyvrb is loaded)>
- \let\FV@CheckEnd \tabu@FV@CheckEnd
- \let\FV@@CheckEnd \tabu@FV@@CheckEnd
- \let\FV@@@CheckEnd \tabu@FV@@@CheckEnd
- \edef\FV@EndScanning{%
- \def\noexpand\next{\noexpand\end{\FV@EnvironName}}%
- \global\let\noexpand\FV@EnvironName\relax
- \noexpand\next}%
- \xdef\FV@EnvironName{\detokenize\expandafter{\FV@EnvironName}}}%
- }\expandafter\tabu@FV@DefineCheckEnd\expandafter{\FV@DefineCheckEnd}
-}% \tabu@fancyvrb
-\def\tabu@FV@CheckEnd #1{\expandafter\FV@@CheckEnd \detokenize{#1\end{}}\@nil}
-\edef\tabu@FV@@@CheckEnd {\detokenize{\end{}}}
-\begingroup
-\catcode`\[1 \catcode`\]2
-\@makeother\{ \@makeother\}
- \edef\x[\endgroup
- \def\noexpand\tabu@FV@@CheckEnd ##1\detokenize[\end{]##2\detokenize[}]##3%
- ]\x \@nil{\def\@tempa{#2}\def\@tempb{#3}}
-\def\tabu@FV@ListProcessLine #1{%
- \hbox {%to \hsize{%
- \kern\leftmargin
- \hbox {%to \linewidth{%
- \FV@LeftListNumber
- \FV@LeftListFrame
- \FancyVerbFormatLine{#1}\hss
-%% DG/SR modification begin - Jan. 28, 1998 (for numbers=right add-on)
-%% \FV@RightListFrame}%
- \FV@RightListFrame
- \FV@RightListNumber}%
-%% DG/SR modification end
- \hss}}
-%% \savetabu --------------------------------------------------------
-\newcommand*\savetabu[1]{\noalign{%
- \tabu@sanitizearg{#1}\tabu@temp
- \ifx \tabu@temp\@empty \tabu@savewarn{}{The tabu will not be saved}\else
- \@ifundefined{tabu@saved@\tabu@temp}{}{\tabu@savewarn{#1}{Overwriting}}%
- \ifdefined\tabu@restored \expandafter\let
- \csname tabu@saved@\tabu@temp \endcsname \tabu@restored
- \else {\tabu@save}%
- \fi
- \fi}%
-}% \savetabu
-\def\tabu@save {%
- \toks0\expandafter{\tabu@saved@}%
- \iftabu@negcoef
- \let\tabu@wddef \relax \let\tabu@ \tabu@savewd \edef\tabu@savewd{\tabu@Xcoefs}%
- \toks0\expandafter{\the\toks\expandafter0\tabu@savewd}\fi
- \toks1\expandafter{\tabu@savedpream}%
- \toks2\expandafter{\tabu@savedpreamble}%
- \let\@preamble \relax
- \let\tabu@savedpream \relax \let\tabu@savedparams \relax
- \edef\tabu@preamble{%
- \def\noexpand\tabu@aligndefault{\tabu@align}%
- \def\tabu@savedparams {\noexpand\the\toks0}%
- \def\tabu@savedpream {\noexpand\the\toks1}}%
- \edef\tabu@usetabu{%
- \def\@preamble {\noexpand\the\toks2}%
- \tabu@target \the\tabu@target \relax
- \tabucolX \the\tabucolX \relax
- \tabu@nbcols \the\tabu@nbcols \relax
- \def\noexpand\tabu@aligndefault{\tabu@align}%
- \def\tabu@savedparams {\noexpand\the\toks0}%
- \def\tabu@savedpream {\noexpand\the\toks1}}%
- \let\tabu@aligndefault \relax \let\@sharp \relax
- \edef\@tempa{\noexpand\tabu@s@ved
- {\tabu@usetabu}
- {\tabu@preamble}
- {\the\toks1}}\@tempa
- \tabu@message@save
-}% \tabu@save
-\long\def\tabu@s@ved #1#2#3{%
- \def\tabu@usetabu{#1}% <for \tabu@message@save>
- \expandafter\gdef\csname tabu@saved@\tabu@temp\endcsname ##1{%
- \ifodd ##1% \usetabu
- \tabu@measuringfalse \tabu@spreadfalse % Just in case...
- \gdef\tabu@usetabu {%
- \ifdim \tabu@target>\z@ \tabu@warn@usetabu \fi
- \global\let\tabu@usetabu \@undefined
- \def\@halignto {to\tabu@target}%
- #1%
- \ifx \tabu@align\tabu@aligndefault@text
- \ifnum \tabu@nested=\z@
- \let\tabu@align \tabu@aligndefault \fi\fi}%
- \else % \preamble
- \gdef\tabu@preamble {%
- \global\let\tabu@preamble \@undefined
- #2%
- \ifx \tabu@align\tabu@aligndefault@text
- \ifnum \tabu@nested=\z@
- \let\tabu@align \tabu@aligndefault \fi\fi}%
- \fi
- #3}%
-}% \tabu@s@ved
-\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#2{\ifdim #2\p@<\z@ \tabu@wddef{#1}{\tabu@wd{#1}}\fi}
-\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}
-%% \rowfont ---------------------------------------------------------
-\newskip \tabu@cellskip
-\def\tabu@rowfont{\ifdim \baselineskip=\z@\noalign\fi
- {\ifnum0=`}\fi \tabu@row@font}
-\newcommand*\tabu@row@font[2][]{%
- \ifnum7=\currentgrouptype
- \global\let\tabu@@cellleft \tabu@cellleft
- \global\let\tabu@@cellright \tabu@cellright
- \global\let\tabu@@celllalign \tabu@celllalign
- \global\let\tabu@@cellralign \tabu@cellralign
- \global\let\tabu@@rowfontreset\tabu@rowfontreset
- \fi
- \global\let\tabu@rowfontreset \tabu@rowfont@reset
- \expandafter\gdef\expandafter\tabu@cellleft\expandafter{\tabu@cellleft #2}%
- \ifcsname tabu@cell@#1\endcsname % row alignment
- \csname tabu@cell@#1\endcsname \fi
- \ifnum0=`{\fi}% end of group / noalign group
-}% \rowfont
-\def\tabu@ifcolorleavevmode #1{\let\color \tabu@leavevmodecolor #1\let\color\tabu@color}%
-\def\tabu@rowfont@reset{%
- \global\let\tabu@rowfontreset \tabu@@rowfontreset
- \global\let\tabu@cellleft \tabu@@cellleft
- \global\let\tabu@cellright \tabu@@cellright
- \global\let\tabu@cellfont \@empty
- \global\let\tabu@celllalign \tabu@@celllalign
- \global\let\tabu@cellralign \tabu@@cellralign
-}% \tabu@@rowfontreset
-\let\tabu@rowfontreset \@empty % overwritten \AtBeginDocument if colortbl
-%% \tabu@prepnext@tok -----------------------------------------------
-\newif \iftabu@cellright
-\def\tabu@prepnext@tok{%
- \ifnum \count@<\z@ % <first initialisation>
- \@tempcnta \@M % <not initialized by array.sty>
- \tabu@nbcols\z@
- \let\tabu@fornoopORI \@fornoop
- \tabu@cellrightfalse
- \else
- \ifcase \numexpr \count@-\@tempcnta \relax % (case 0): prev. token is left
- \advance \tabu@nbcols \@ne
- \iftabu@cellright % before-previous token is right and is finished
- \tabu@cellrightfalse % <only once>
- \tabu@righttok
- \fi
- \tabu@lefttok
- \or % (case 1) previous token is right
- \tabu@cellrighttrue \let\@fornoop \tabu@lastnoop
- \else % special column: do not change the token
- \iftabu@cellright % before-previous token is right
- \tabu@cellrightfalse
- \tabu@righttok
- \fi
- \fi % \ifcase
- \fi
- \tabu@prepnext@tokORI
-}% \tabu@prepnext@tok
-\long\def\tabu@lastnoop#1\@@#2#3{\tabu@lastn@@p #2\@nextchar \in@\in@@}
-\def\tabu@lastn@@p #1\@nextchar #2#3\in@@{%
- \ifx \in@#2\else
- \let\@fornoop \tabu@fornoopORI
- \xdef\tabu@mkpreambuffer{\tabu@nbcols\the\tabu@nbcols \tabu@mkpreambuffer}%
- \toks0\expandafter{\expandafter\tabu@everyrowtrue \the\toks0}%
- \expandafter\prepnext@tok
- \fi
-}% \tabu@lastnoop
-\def\tabu@righttok{%
- \advance \count@ \m@ne
- \toks\count@\expandafter {\the\toks\count@ \tabu@cellright \tabu@cellralign}%
- \advance \count@ \@ne
-}% \tabu@righttok
-\def\tabu@lefttok{\toks\count@\expandafter{\expandafter\tabu@celllalign
- \the\toks\count@ \tabu@cellleft}% after because of $
-}% \tabu@lefttok
-%% Neutralisation of glues ------------------------------------------
-\let\tabu@cellleft \@empty
-\let\tabu@cellright \@empty
-\tabu@celllalign@def{\tabu@cellleft}%
-\let\tabu@cellralign \@empty
-\def\tabu@cell@align #1#2#3{%
- \let\tabu@maybesiunitx \toks@ \tabu@celllalign
- \global \expandafter \tabu@celllalign@def \expandafter {\the\toks@ #1}%
- \toks@\expandafter{\tabu@cellralign #2}%
- \xdef\tabu@cellralign{\the\toks@}%
- \toks@\expandafter{\tabu@cellleft #3}%
- \xdef\tabu@cellleft{\the\toks@}%
-}% \tabu@cell@align
-\def\tabu@cell@l{% force alignment to left
- \tabu@cell@align
- {\tabu@removehfil \raggedright \tabu@cellleft}% left
- {\tabu@flush1\tabu@ignorehfil}% right
- \raggedright
-}% \tabu@cell@l
-\def\tabu@cell@c{% force alignment to center
- \tabu@cell@align
- {\tabu@removehfil \centering \tabu@flush{.5}\tabu@cellleft}
- {\tabu@flush{.5}\tabu@ignorehfil}
- \centering
-}% \tabu@cell@c
-\def\tabu@cell@r{% force alignment to right
- \tabu@cell@align
- {\tabu@removehfil \raggedleft \tabu@flush1\tabu@cellleft}
- \tabu@ignorehfil
- \raggedleft
-}% \tabu@cell@r
-\def\tabu@cell@j{% force justification (for p, m, b columns)
- \tabu@cell@align
- {\tabu@justify\tabu@cellleft}
- {}
- \tabu@justify
-}% \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)
- \tabu@cell@align
- {\tabu@removehfil \RaggedRight \tabu@cellleft}
- {\tabu@flush 1\tabu@ignorehfil}
- \RaggedRight
-}% \tabu@cell@L
-\def\tabu@cell@C{% force alignment to center (ragged2e)
- \tabu@cell@align
- {\tabu@removehfil \Centering \tabu@flush{.5}\tabu@cellleft}
- {\tabu@flush{.5}\tabu@ignorehfil}
- \Centering
-}% \tabu@cell@C
-\def\tabu@cell@R{% force alignment to right (ragged2e)
- \tabu@cell@align
- {\tabu@removehfil \RaggedLeft \tabu@flush 1\tabu@cellleft}
- \tabu@ignorehfil
- \RaggedLeft
-}% \tabu@cell@R
-\def\tabu@cell@J{% force justification (ragged2e)
- \tabu@cell@align
- {\justifying \tabu@cellleft}
- {}
- \justifying
-}% \tabu@cell@J
-\def\tabu@flush#1{%
- \iftabu@colortbl % colortbl uses \hfill rather than \hfil
- \hskip \ifnum13<\currentgrouptype \stretch{#1}%
- \else \ifdim#1pt<\p@ \tabu@cellskip
- \else \stretch{#1}
- \fi\fi \relax
- \else % array.sty
- \ifnum 13<\currentgrouptype
- \hfil \hskip1sp \relax \fi
- \fi
-}% \tabu@flush
-\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}
-\def\tabu@nohfil{% \hfil -> do nothing + restore original \hfil
- \def\hfil{\let\hfil \tabu@hfil}% local to (alignment template) group
-}% \tabu@nohfil
-\def\tabu@colortblalignments {% if 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
-}% \tabu@colortblalignments
-%% Taking care of footnotes and hyperfootnotes ----------------------
-\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
-%% No need for \arraybackslash ! ------------------------------------
-\def\tabu@latextwoe {%
-\def\tabu@temp##1##2##3{{\toks@\expandafter{##2##3}\xdef##1{\the\toks@}}}
-\tabu@temp \tabu@centering \centering \arraybackslash
-\tabu@temp \tabu@raggedleft \raggedleft \arraybackslash
-\tabu@temp \tabu@raggedright \raggedright \arraybackslash
-}% \tabu@latextwoe
-\def\tabu@raggedtwoe {%
-\def\tabu@temp ##1##2##3{{\toks@\expandafter{##2##3}\xdef##1{\the\toks@}}}
-\tabu@temp \tabu@Centering \Centering \arraybackslash
-\tabu@temp \tabu@RaggedLeft \RaggedLeft \arraybackslash
-\tabu@temp \tabu@RaggedRight \RaggedRight \arraybackslash
-\tabu@temp \tabu@justifying \justifying \arraybackslash
-}% \tabu@raggedtwoe
-\def\tabu@normalcrbackslash{\let\\\@normalcr}
-\def\tabu@trivlist{\expandafter\def\expandafter\@trivlist\expandafter{%
- \expandafter\tabu@normalcrbackslash \@trivlist}}
-%% Utilities: \fbox \fcolorbox and \tabudecimal -------------------
-\def\tabu@fbox {\leavevmode\afterassignment\tabu@beginfbox \setbox\@tempboxa\hbox}
-\def\tabu@beginfbox {\bgroup \kern\fboxsep
- \bgroup\aftergroup\tabu@endfbox}
-\def\tabu@endfbox {\kern\fboxsep\egroup\egroup
- \@frameb@x\relax}
-\def\tabu@color@b@x #1#2{\leavevmode \bgroup
- \def\tabu@docolor@b@x{#1{#2\color@block{\wd\z@}{\ht\z@}{\dp\z@}\box\z@}}%
- \afterassignment\tabu@begincolor@b@x \setbox\z@ \hbox
-}% \tabu@color@b@x
-\def\tabu@begincolor@b@x {\kern\fboxsep \bgroup
- \aftergroup\tabu@endcolor@b@x \set@color}
-\def\tabu@endcolor@b@x {\kern\fboxsep \egroup
- \dimen@\ht\z@ \advance\dimen@ \fboxsep \ht\z@ \dimen@
- \dimen@\dp\z@ \advance\dimen@ \fboxsep \dp\z@ \dimen@
- \tabu@docolor@b@x \egroup
-}% \tabu@endcolor@b@x
-%% Corrections (arydshln, delarray, colortbl) -----------------------
-\def\tabu@fix@arrayright {%% \@arrayright is missing from \endarray
- \iftabu@colortbl
- \ifdefined\adl@array % <colortbl + arydshln>
- \def\tabu@endarray{%
- \adl@endarray \egroup \adl@arrayrestore \CT@end \egroup %<original>
- \@arrayright % <FC>
- \gdef\@preamble{}}% <FC>
- \else % <colortbl / no arydshln>
- \def\tabu@endarray{%
- \crcr \egroup \egroup %<original>
- \@arrayright % <FC>
- \gdef\@preamble{}\CT@end}%
- \fi
- \else
- \ifdefined\adl@array % <arydshln / no colortbl>
- \def\tabu@endarray{%
- \adl@endarray \egroup \adl@arrayrestore \egroup %<original>
- \@arrayright % <FC>
- \gdef\@preamble{}}% <FC>
- \else % <no arydshln / no colotbl + \@arrayright missing>
- \PackageWarning{tabu}
- {\string\@arrayright\space is missing from the
- \MessageBreak definition of \string\endarray.
- \MessageBreak Compatibility with delarray.sty is broken.}%
- \fi\fi
-}% \tabu@fix@arrayright
-\def\tabu@adl@xarraydashrule #1#2#3{%
- \ifnum\@lastchclass=\adl@class@start\else
- \ifnum\@lastchclass=\@ne\else
- \ifnum\@lastchclass=5 \else % <FC> @-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 % <fix> arydshln
- \let\adl@act@endpbox \tabu@adl@act@endpbox % <fix> arydshln
- \let\adl@act@@endpbox \tabu@adl@act@endpbox % <fix> arydshln
- \let\@preamerror \@preamerr % <fix> arydshln
-}% \tabu@adl@fix
-%% Correction for longtable' \@startbox definition ------------------
-%% => \everypar is ``missing'' : TeX should be in vertical mode
-\def\tabu@LT@startpbox #1{%
- \bgroup
- \let\@footnotetext\LT@p@ftntext
- \setlength\hsize{#1}%
- \@arrayparboxrestore
- \everypar{%
- \vrule \@height \ht\@arstrutbox \@width \z@
- \everypar{}}%
-}% \tabu@LT@startpbox
-%% \tracingtabu and the package options ------------------
-\DeclareOption{delarray}{\AtEndOfPackage{\RequirePackage{delarray}}}
-\DeclareOption{linegoal}{%
- \AtEndOfPackage{%
- \RequirePackage{linegoal}[2010/12/07]%
- \let\tabudefaulttarget \linegoal% \linegoal is \linewidth if not pdfTeX
-}}
-\DeclareOption{scantokens}{\tabuscantokenstrue}
-\DeclareOption{debugshow}{\AtEndOfPackage{\tracingtabu=\tw@}}
-\def\tracingtabu {\begingroup\@ifnextchar=%
- {\afterassignment\tabu@tracing\count@}
- {\afterassignment\tabu@tracing\count@1\relax}}
-\def\tabu@tracing{\expandafter\endgroup
- \expandafter\tabu@tr@cing \the\count@ \relax
-}% \tabu@tracing
-\def\tabu@tr@cing #1\relax {%
- \ifnum#1>\thr@@ \let\tabu@tracinglines\message
- \else \let\tabu@tracinglines\@gobble
- \fi
- \ifnum#1>\tw@ \let\tabu@DBG \tabu@@DBG
- \def\tabu@mkarstrut {\tabu@DBG@arstrut}%
- \tabustrutrule 1.5\p@
- \else \let\tabu@DBG \@gobble
- \def\tabu@mkarstrut {\tabu@arstrut}%
- \tabustrutrule \z@
- \fi
- \ifnum#1>\@ne \let\tabu@debug \message
- \else \let\tabu@debug \@gobble
- \fi
- \ifnum#1>\z@
- \let\tabu@message \message
- \let\tabu@tracing@save \tabu@message@save
- \let\tabu@starttimer \tabu@pdftimer
- \else
- \let\tabu@message \@gobble
- \let\tabu@tracing@save \@gobble
- \let\tabu@starttimer \relax
- \fi
-}% \tabu@tr@cing
-%% Setup \AtBeginDocument
-\AtBeginDocument{\tabu@AtBeginDocument}
-\def\tabu@AtBeginDocument{\let\tabu@AtBeginDocument \@undefined
- \ifdefined\arrayrulecolor \tabu@colortbltrue % <colortbl>
- \tabu@colortblalignments % different glues are used
- \else \tabu@colortblfalse \fi
- \ifdefined\CT@arc@ \else \let\CT@arc@ \relax \fi
- \ifdefined\CT@drsc@\else \let\CT@drsc@ \relax \fi
- \let\tabu@arc@L \CT@arc@ \let\tabu@drsc@L \CT@drsc@
- \ifodd 1\ifcsname siunitx_table_collect_begin:Nn\endcsname % <siunitx: ok>
- \expandafter\ifx
- \csname siunitx_table_collect_begin:Nn\endcsname\relax 0\fi\fi\relax
- \tabu@siunitxtrue
- \else \let\tabu@maybesiunitx \@firstofone % <not siunitx: setup>
- \let\tabu@siunitx \tabu@nosiunitx
- \tabu@siunitxfalse
- \fi
- \ifdefined\adl@array % <arydshln>
- \else \let\tabu@adl@fix \relax
- \let\tabu@adl@endtrial \@empty \fi
- \ifdefined\longtable % <longtable>
- \else \let\longtabu \tabu@nolongtabu \fi
- \ifdefined\cellspacetoplimit \tabu@warn@cellspace\fi
- \csname\ifcsname ifHy@hyperfootnotes\endcsname % <hyperfootnotes>
- ifHy@hyperfootnotes\else iffalse\fi\endcsname
- \let\tabu@footnotetext \tabu@Hy@ftntext
- \let\tabu@xfootnote \tabu@Hy@xfootnote \fi
- \ifdefined\FV@DefineCheckEnd% <fancyvrb>
- \tabu@fancyvrb \fi
- \ifdefined\color % <color / xcolor>
- \let\tabu@color \color
- \def\tabu@leavevmodecolor ##1{%
- \def\tabu@leavevmodecolor {\leavevmode ##1}%
- }\expandafter\tabu@leavevmodecolor\expandafter{\color}%
- \else
- \let\tabu@color \tabu@nocolor
- \let\tabu@leavevmodecolor \@firstofone \fi
- \tabu@latextwoe
- \ifdefined\@raggedtwoe@everyselectfont % <ragged2e>
- \tabu@raggedtwoe
- \else
- \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 \fi
- \expandafter\in@ \expandafter\@arrayright \expandafter{\endarray}%
- \ifin@ \let\tabu@endarray \endarray
- \else \tabu@fix@arrayright \fi% <fix for colortbl & arydshln (delarray)>
- \everyrow{}%
-}% \tabu@AtBeginDocument
-\def\tabu@warn@cellspace{%
- \PackageWarning{tabu}{%
- Package cellspace has some limitations
- \MessageBreak And redefines some macros of array.sty.
- \MessageBreak Please use \string\tabulinesep\space to control
- \MessageBreak vertical spacing of lines inside tabu environment}%
-}% \tabu@warn@cellspace
-%% tabu Package initialisation
-\tabuscantokensfalse
-\let\tabu@arc@G \relax
-\let\tabu@drsc@G \relax
-\let\tabu@evr@G \@empty
-\let\tabu@rc@G \@empty
-\def\tabu@ls@G {\tabu@linestyle@}%
-\let\tabu@@rowfontreset \@empty % <init>
-\let\tabu@@celllalign \@empty
-\let\tabu@@cellralign \@empty
-\let\tabu@@cellleft \@empty
-\let\tabu@@cellright \@empty
-\def\tabu@naturalXmin {\z@}
-\def\tabu@naturalXmax {\z@}
-\let\tabu@rowfontreset \@empty
-\def\tabulineon {4pt}\let\tabulineoff \tabulineon
-\tabu@everyrowtrue
-\ifdefined\pdfelapsedtime % <pdfTeX>
- \def\tabu@pdftimer {\xdef\tabu@starttime{\the\pdfelapsedtime}}%
-\else \let\tabu@pdftimer \relax \let\tabu@message@etime \relax
-\fi
-\tracingtabu=\z@
-\newtabulinestyle {=\maxdimen}% creates the 'factory' settings \tabu@linestyle@
-\tabulinestyle{}
-\taburowcolors{}
-\let\tabudefaulttarget \linewidth
-\ProcessOptions* % \ProcessOptions* is quicker !
-\endinput
-%%
-%% End of file `tabu.sty'.
+%% +%% 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. +%% Copyright (FC) 2010-2011 - lppl +%% +%% tabu : 2011/02/26 v2.8 - tabu : Flexible LaTeX tabulars +%% +%% ********************************************************************************************** +%% \begin{tabu} { preamble } => default target: \linewidth or \linegoal +%% \begin{tabu} to <dimen>{ preamble } => target specified +%% \begin{tabu} spread <dimen>{ preamble } => target relative to the ``natural width'' +%% +%% tabu works in text and in math modes. +%% +%% X columns: automatic width adjustment + horizontal and vertical alignment +%% \begin{tabu} { X[4c] X[1c] X[-2ml] } +%% +%% Horizontal lines and / or leaders: +%% \hline\hline => double horizontal line +%% \firsthline\hline => for nested tabulars +%% \lasthline\hline => for nested tabulars +%% \tabucline[line spec]{column-column} => ``funny'' lines (dash/leader) +%% Automatic lines / leaders : +%% \everyrow{\hline\hline} +%% +%% Vertical lines and / or leaders: +%% \begin{tabu} { |[3pt red] X[4c] X[1c] X[-2ml] |[3pt blue] } +%% \begin{tabu} { |[3pt red] X[4c] X[1c] X[-2ml] |[3pt on 2pt off 4pt blue] } +%% +%% Fixed vertical spacing adjustment: +%% \extrarowheight=<dimen> \extrarowdepth=<dimen> +%% or: \extrarowsep=<dimen> => may be prefixed by \global +%% +%% Dynamic vertical spacing adjustment: +%% \abovetabulinesep=<dimen> \belowtabulinesep=<dimen> +%% or: \tabulinesep=<dimen> => may be prefixed by \global +%% +%% delarray.sty shortcuts: in math and text modes +%% \begin{tabu} .... \({ preamble }\) +%% +%% Algorithms reports: +%% \tracingtabu=1 \tracingtabu=2 +%% +%% ********************************************************************************************** +%% +%% 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 +%% lppl copyright 2010-2011 by FC <florent.chervet@free.fr> +%% + +\NeedsTeXFormat{LaTeX2e}[2005/12/01] +\ProvidesPackage{tabu_doxygen}[2011/02/26 v2.8 - flexible LaTeX tabulars (FC), frozen version for doxygen] +\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={% + \edef\tabu@AtEnd{\tabu@AtEnd + \catcode#1 \the\catcode#1}% + \catcode#1=% +}% \TMP@EnsureCode +\TMP@EnsureCode 33 = 12 % ! +\TMP@EnsureCode 58 = 12 % : (for siunitx) +\TMP@EnsureCode124 = 12 % | +\TMP@EnsureCode 36 = 3 % $ = math shift +\TMP@EnsureCode 38 = 4 % & = tab alignment character +\TMP@EnsureCode 32 = 10 % space +\TMP@EnsureCode 94 = 7 % ^ +\TMP@EnsureCode 95 = 8 % _ +%% Constants -------------------------------------------------------- +\newcount \c@taburow \def\thetaburow {\number\c@taburow} +\newcount \tabu@nbcols +\newcount \tabu@cnt +\newcount \tabu@Xcol +\let\tabu@start \@tempcnta +\let\tabu@stop \@tempcntb +\newcount \tabu@alloc \tabu@alloc=\m@ne +\newcount \tabu@nested +\def\tabu@alloc@{\global\advance\tabu@alloc \@ne \tabu@nested\tabu@alloc} +\newdimen \tabu@target +\newdimen \tabu@spreadtarget +\newdimen \tabu@naturalX +\newdimen \tabucolX +\let\tabu@DELTA \@tempdimc +\let\tabu@thick \@tempdima +\let\tabu@on \@tempdimb +\let\tabu@off \@tempdimc +\newdimen \tabu@Xsum +\newdimen \extrarowdepth +\newdimen \abovetabulinesep +\newdimen \belowtabulinesep +\newdimen \tabustrutrule \tabustrutrule \z@ +\newtoks \tabu@thebody +\newtoks \tabu@footnotes +\newsavebox \tabu@box +\newsavebox \tabu@arstrutbox +\newsavebox \tabu@hleads +\newsavebox \tabu@vleads +\newif \iftabu@colortbl +\newif \iftabu@siunitx +\newif \iftabu@measuring +\newif \iftabu@spread +\newif \iftabu@negcoef +\newif \iftabu@everyrow +\def\tabu@everyrowtrue {\global\let\iftabu@everyrow \iftrue} +\def\tabu@everyrowfalse{\global\let\iftabu@everyrow \iffalse} +\newif \iftabu@long +\newif \iftabuscantokens +\def\tabu@rescan {\tabu@verbatim \scantokens } +%% Utilities (for internal usage) ----------------------------------- +\def\tabu@gobblespace #1 {#1} +\def\tabu@gobbletoken #1#2{#1} +\def\tabu@gobbleX{\futurelet\@let@token \tabu@gobblex} +\def\tabu@gobblex{\if ^^J\noexpand\@let@token \expandafter\@gobble + \else\ifx \@sptoken\@let@token + \expandafter\tabu@gobblespace\expandafter\tabu@gobbleX + \fi\fi +}% \tabu@gobblex +\def\tabu@X{^^J} +{\obeyspaces +\global\let\tabu@spxiii= % saves an active space (for \ifx) +\gdef\tabu@@spxiii{ }} +\def\tabu@ifenvir {% only for \multicolumn + \expandafter\tabu@if@nvir\csname\@currenvir\endcsname +}% \tabu@ifenvir +\def\tabu@if@nvir #1{\csname @\ifx\tabu#1first\else + \ifx\longtabu#1first\else + second\fi\fi oftwo\endcsname +}% \tabu@ifenvir +\def\tabu@modulo #1#2{\numexpr\ifnum\numexpr#1=\z@ 0\else #1-(#1-(#2-1)/2)/(#2)*(#2)\fi} +{\catcode`\&=3 +\gdef\tabu@strtrim #1{% #1 = control sequence to trim + \ifodd 1\ifx #1\@empty \else \ifx #1\space \else 0\fi \fi + \let\tabu@c@l@r \@empty \let#1\@empty + \else \expandafter \tabu@trimspaces #1\@nnil + \fi +}% \tabu@strtrim +\gdef\tabu@trimspaces #1\@nnil{\let\tabu@c@l@r=#2\tabu@firstspace .#1& }% +\gdef\tabu@firstspace #1#2#3 &{\tabu@lastspace #2#3&} +\gdef\tabu@lastspace #1{\def #3{#1}% + \ifx #3\tabu@c@l@r \def\tabu@c@l@r{\protect\color{#1}}\expandafter\remove@to@nnil \fi + \tabu@trimspaces #1\@nnil} +}% \catcode +\def\tabu@sanitizearg #1#2{{% + \csname \ifcsname if@safe@actives\endcsname % <babel> + @safe@activestrue\else + relax\fi \endcsname + \edef#2{#1}\tabu@strtrim#2\@onelevel@sanitize#2% + \expandafter}\expandafter\def\expandafter#2\expandafter{#2}% +}% \tabu@sanitizearg +\def\tabu@textbar #1{\begingroup \endlinechar\m@ne \scantokens{\def\:{|}}% + \expandafter\endgroup \expandafter#1\:% !!! semi simple group !!! +}% \tabu@textbar +\def\tabu@everyrow@bgroup{\iftabu@everyrow \begingroup \else \noalign{\ifnum0=`}\fi \fi} +\def\tabu@everyrow@egroup{% + \iftabu@everyrow \expandafter \endgroup \the\toks@ + \else \ifnum0=`{\fi}% + \fi +}% \tabu@everyrow@egroup +\def\tabu@arstrut {\global\setbox\@arstrutbox \hbox{\vrule + height \arraystretch \dimexpr\ht\strutbox+\extrarowheight + depth \arraystretch \dimexpr\dp\strutbox+\extrarowdepth + width \z@}% +}% \tabu@arstrut +\def\tabu@rearstrut {% + \@tempdima \arraystretch\dimexpr\ht\strutbox+\extrarowheight \relax + \@tempdimb \arraystretch\dimexpr\dp\strutbox+\extrarowdepth \relax + \ifodd 1\ifdim \ht\@arstrutbox=\@tempdima + \ifdim \dp\@arstrutbox=\@tempdimb 0 \fi\fi + \tabu@mkarstrut + \fi +}% \tabu@rearstrut +\def\tabu@@DBG #1{\ifdim\tabustrutrule>\z@ \color{#1}\fi} +\def\tabu@DBG@arstrut {\global\setbox\@arstrutbox + \hbox to\z@{\hbox to\z@{\hss + {\tabu@DBG{cyan}\vrule + height \arraystretch \dimexpr\ht\strutbox+\extrarowheight + depth \z@ + width \tabustrutrule}\kern-\tabustrutrule + {\tabu@DBG{pink}\vrule + height \z@ + depth \arraystretch \dimexpr\dp\strutbox+\extrarowdepth + width \tabustrutrule}}}% +}% \tabu@DBG@arstrut +\def\tabu@save@decl{\toks\count@ \expandafter{\the\toks\expandafter\count@ + \@nextchar}}% +\def\tabu@savedecl{\ifcat$\d@llarend\else + \let\save@decl \tabu@save@decl \fi % no inversion of tokens in text mode +}% \tabu@savedecl +\def\tabu@finalstrut #1{\unskip\ifhmode\nobreak\fi\vrule height\z@ depth\z@ width\z@} +\newcommand*\tabuDisableCommands {\g@addto@macro\tabu@trialh@@k } +\let\tabu@trialh@@k \@empty +\def\tabu@nowrite #1#{{\afterassignment}\toks@} +\let\tabu@write\write +\let\tabu@immediate\immediate +\def\tabu@WRITE{\begingroup + \def\immediate\write{\aftergroup\endgroup + \tabu@immediate\tabu@write}% +}% \tabu@WRITE +\expandafter\def\expandafter\tabu@GenericError\expandafter{% + \expandafter\tabu@WRITE\GenericError} +\def\tabu@warn{\tabu@WRITE\PackageWarning{tabu}} +\def\tabu@noxfootnote [#1]{\@gobble} +\def\tabu@nocolor #1#{\@gobble} +\newcommand*\tabu@norowcolor[2][]{} +\def\tabu@maybesiunitx #1{\def\tabu@temp{#1}% + \futurelet\@let@token \tabu@m@ybesiunitx} +\def\tabu@m@ybesiunitx #1{\def\tabu@m@ybesiunitx {% + \ifx #1\@let@token \let\tabu@cellleft \@empty \let\tabu@cellright \@empty \fi + \tabu@temp}% \tabu@m@ybesiunitx +}\expandafter\tabu@m@ybesiunitx \csname siunitx_table_collect_begin:Nn\endcsname +\def\tabu@celllalign@def #1{\def\tabu@celllalign{\tabu@maybesiunitx{#1}}}% +%% Fixed vertical spacing adjustment: \extrarowsep ------------------ +\newcommand*\extrarowsep{\edef\tabu@C@extra{\the\numexpr\tabu@C@extra+1}% + \iftabu@everyrow \aftergroup\tabu@Gextra + \else \aftergroup\tabu@n@Gextra + \fi + \@ifnextchar={\tabu@gobbletoken\tabu@extra} \tabu@extra +}% \extrarowsep +\def\tabu@extra {\@ifnextchar_% + {\tabu@gobbletoken{\tabu@setextra\extrarowheight \extrarowdepth}} + {\ifx ^\@let@token \def\tabu@temp{% + \tabu@gobbletoken{\tabu@setextra\extrarowdepth \extrarowheight}}% + \else \let\tabu@temp \@empty + \afterassignment \tabu@setextrasep \extrarowdepth + \fi \tabu@temp}% +}% \tabu@extra +\def\tabu@setextra #1#2{\def\tabu@temp{\tabu@extr@#1#2}\afterassignment\tabu@temp#2} +\def\tabu@extr@ #1#2{\@ifnextchar^% + {\tabu@gobbletoken{\tabu@setextra\extrarowdepth \extrarowheight}} + {\ifx _\@let@token \def\tabu@temp{% + \tabu@gobbletoken{\tabu@setextra\extrarowheight \extrarowdepth}}% + \else \let\tabu@temp \@empty + \tabu@Gsave \tabu@G@extra \tabu@C@extra \extrarowheight \extrarowdepth + \fi \tabu@temp}% +}% \tabu@extr@ +\def\tabu@setextrasep {\extrarowheight=\extrarowdepth + \tabu@Gsave \tabu@G@extra \tabu@C@extra \extrarowheight \extrarowdepth +}% \tabu@setextrasep +\def\tabu@Gextra{\ifx \tabu@G@extra\@empty \else {\tabu@Rextra}\fi} +\def\tabu@n@Gextra{\ifx \tabu@G@extra\@empty \else \noalign{\tabu@Rextra}\fi} +\def\tabu@Rextra{\tabu@Grestore \tabu@G@extra \tabu@C@extra} +\let\tabu@C@extra \z@ +\let\tabu@G@extra \@empty +%% Dynamic vertical spacing adjustment: \tabulinesep ---------------- +\newcommand*\tabulinesep{\edef\tabu@C@linesep{\the\numexpr\tabu@C@linesep+1}% + \iftabu@everyrow \aftergroup\tabu@Glinesep + \else \aftergroup\tabu@n@Glinesep + \fi + \@ifnextchar={\tabu@gobbletoken\tabu@linesep} \tabu@linesep +}% \tabulinesep +\def\tabu@linesep {\@ifnextchar_% + {\tabu@gobbletoken{\tabu@setsep\abovetabulinesep \belowtabulinesep}} + {\ifx ^\@let@token \def\tabu@temp{% + \tabu@gobbletoken{\tabu@setsep\belowtabulinesep \abovetabulinesep}}% + \else \let\tabu@temp \@empty + \afterassignment \tabu@setlinesep \abovetabulinesep + \fi \tabu@temp}% +}% \tabu@linesep +\def\tabu@setsep #1#2{\def\tabu@temp{\tabu@sets@p#1#2}\afterassignment\tabu@temp#2} +\def\tabu@sets@p #1#2{\@ifnextchar^% + {\tabu@gobbletoken{\tabu@setsep\belowtabulinesep \abovetabulinesep}} + {\ifx _\@let@token \def\tabu@temp{% + \tabu@gobbletoken{\tabu@setsep\abovetabulinesep \belowtabulinesep}}% + \else \let\tabu@temp \@empty + \tabu@Gsave \tabu@G@linesep \tabu@C@linesep \abovetabulinesep \belowtabulinesep + \fi \tabu@temp}% +}% \tabu@sets@p +\def\tabu@setlinesep {\belowtabulinesep=\abovetabulinesep + \tabu@Gsave \tabu@G@linesep \tabu@C@linesep \abovetabulinesep \belowtabulinesep +}% \tabu@setlinesep +\def\tabu@Glinesep{\ifx \tabu@G@linesep\@empty \else {\tabu@Rlinesep}\fi} +\def\tabu@n@Glinesep{\ifx \tabu@G@linesep\@empty \else \noalign{\tabu@Rlinesep}\fi} +\def\tabu@Rlinesep{\tabu@Grestore \tabu@G@linesep \tabu@C@linesep} +\let\tabu@C@linesep \z@ +\let\tabu@G@linesep \@empty +%% \global\extrarowsep and \global\tabulinesep ------------------- +\def\tabu@Gsave #1#2#3#4{\xdef#1{#1% + \toks#2{\toks\the\currentgrouplevel{\global#3\the#3\global#4\the#4}}}% +}% \tabu@Gsave +\def\tabu@Grestore#1#2{% + \toks#2{}#1\toks\currentgrouplevel\expandafter{\expandafter}\the\toks#2\relax + \ifcat$\the\toks\currentgrouplevel$\else + \global\let#1\@empty \global\let#2\z@ + \the\toks\currentgrouplevel + \fi +}% \tabu@Grestore +%% Setting code for every row --------------------------------------- +\newcommand*\everyrow{\tabu@everyrow@bgroup + \tabu@start \z@ \tabu@stop \z@ \tabu@evrstartstop +}% \everyrow +\def\tabu@evrstartstop {\@ifnextchar^% + {\afterassignment \tabu@evrstartstop \tabu@stop=}% + {\ifx ^\@let@token + \afterassignment\tabu@evrstartstop \tabu@start=% + \else \afterassignment\tabu@everyr@w \toks@ + \fi}% +}% \tabu@evrstartstop +\def\tabu@everyr@w {% + \xdef\tabu@everyrow{% + \noexpand\tabu@everyrowfalse + \let\noalign \relax + \noexpand\tabu@rowfontreset + \iftabu@colortbl \noexpand\tabu@rc@ \fi % \taburowcolors + \let\noexpand\tabu@docline \noexpand\tabu@docline@evr + \the\toks@ + \noexpand\tabu@evrh@@k + \noexpand\tabu@rearstrut + \global\advance\c@taburow \@ne}% + \iftabu@everyrow \toks@\expandafter + {\expandafter\def\expandafter\tabu@evr@L\expandafter{\the\toks@}\ignorespaces}% + \else \xdef\tabu@evr@G{\the\toks@}% + \fi + \tabu@everyrow@egroup +}% \tabu@everyr@w +\def\tabu@evr {\def\tabu@evrh@@k} % for internal use only +\tabu@evr{} +%% line style and leaders ------------------------------------------- +\newcommand*\newtabulinestyle [1]{% + {\@for \@tempa :=#1\do{\expandafter\tabu@newlinestyle \@tempa==\@nil}}% +}% \newtabulinestyle +\def\tabu@newlinestyle #1=#2=#3\@nil{\tabu@getline {#2}% + \tabu@sanitizearg {#1}\@tempa + \ifodd 1\ifx \@tempa\@empty \ifdefined\tabu@linestyle@ 0 \fi\fi + \global\expandafter\let + \csname tabu@linestyle@\@tempa \endcsname =\tabu@thestyle \fi +}% \tabu@newlinestyle +\newcommand*\tabulinestyle [1]{\tabu@everyrow@bgroup \tabu@getline{#1}% + \iftabu@everyrow + \toks@\expandafter{\expandafter \def \expandafter + \tabu@ls@L\expandafter{\tabu@thestyle}\ignorespaces}% + \gdef\tabu@ls@{\tabu@ls@L}% + \else + \global\let\tabu@ls@G \tabu@thestyle + \gdef\tabu@ls@{\tabu@ls@G}% + \fi + \tabu@everyrow@egroup +}% \tabulinestyle +\newcommand*\taburulecolor{\tabu@everyrow@bgroup \tabu@textbar \tabu@rulecolor} +\def\tabu@rulecolor #1{\toks@{}% + \def\tabu@temp #1##1#1{\tabu@ruledrsc{##1}}\@ifnextchar #1% + \tabu@temp + \tabu@rulearc +}% \tabu@rulecolor +\def\tabu@ruledrsc #1{\edef\tabu@temp{#1}\tabu@strtrim\tabu@temp + \ifx \tabu@temp\@empty \def\tabu@temp{\tabu@rule@drsc@ {}{}}% + \else \edef\tabu@temp{\noexpand\tabu@rule@drsc@ {}{\tabu@temp}}% + \fi + \tabu@temp +}% \tabu@ruledrsc@ +\def\tabu@ruledrsc@ #1#{\tabu@rule@drsc@ {#1}} +\def\tabu@rule@drsc@ #1#2{% + \iftabu@everyrow + \ifx \\#1#2\\\toks@{\let\CT@drsc@ \relax}% + \else \toks@{\def\CT@drsc@{\color #1{#2}}}% + \fi + \else + \ifx \\#1#2\\\global\let\CT@drsc@ \relax + \else \gdef\CT@drsc@{\color #1{#2}}% + \fi + \fi + \tabu@rulearc +}% \tabu@rule@drsc@ +\def\tabu@rulearc #1#{\tabu@rule@arc@ {#1}} +\def\tabu@rule@arc@ #1#2{% + \iftabu@everyrow + \ifx \\#1#2\\\toks@\expandafter{\the\toks@ \def\CT@arc@{}}% + \else \toks@\expandafter{\the\toks@ \def\CT@arc@{\color #1{#2}}}% + \fi + \toks@\expandafter{\the\toks@ + \let\tabu@arc@L \CT@arc@ + \let\tabu@drsc@L \CT@drsc@ + \ignorespaces}% + \else + \ifx \\#1#2\\\gdef\CT@arc@{}% + \else \gdef\CT@arc@{\color #1{#2}}% + \fi + \global\let\tabu@arc@G \CT@arc@ + \global\let\tabu@drsc@G \CT@drsc@ + \fi + \tabu@everyrow@egroup +}% \tabu@rule@arc@ +\def\taburowcolors {\tabu@everyrow@bgroup \@testopt \tabu@rowcolors 1} +\def\tabu@rowcolors [#1]#2#{\tabu@rowc@lors{#1}{#2}} +\def\tabu@rowc@lors #1#2#3{% + \toks@{}\@defaultunits \count@ =\number0#2\relax \@nnil + \@defaultunits \tabu@start =\number0#1\relax \@nnil + \ifnum \count@<\tw@ \count@=\tw@ \fi + \advance\tabu@start \m@ne + \ifnum \tabu@start<\z@ \tabu@start \z@ \fi + \tabu@rowcolorseries #3\in@..\in@ \@nnil +}% \tabu@rowcolors +\def\tabu@rowcolorseries #1..#2\in@ #3\@nnil {% + \ifx \in@#1\relax + \iftabu@everyrow \toks@{\def\tabu@rc@{}\let\tabu@rc@L \tabu@rc@}% + \else \gdef\tabu@rc@{}\global\let\tabu@rc@G \tabu@rc@ + \fi + \else + \ifx \\#2\\\tabu@rowcolorserieserror \fi + \tabu@sanitizearg{#1}\tabu@temp + \tabu@sanitizearg{#2}\@tempa + \advance\count@ \m@ne + \iftabu@everyrow + \def\tabu@rc@ ##1##2##3##4{\def\tabu@rc@{% + \ifnum ##2=\c@taburow + \definecolorseries{tabu@rcseries@\the\tabu@nested}{rgb}{last}{##3}{##4}\fi + \ifnum \c@taburow<##2 \else + \ifnum \tabu@modulo {\c@taburow-##2}{##1+1}=\z@ + \resetcolorseries[{##1}]{tabu@rcseries@\the\tabu@nested}\fi + \xglobal\colorlet{tabu@rc@\the\tabu@nested}{tabu@rcseries@\the\tabu@nested!!+}% + \rowcolor{tabu@rc@\the\tabu@nested}\fi}% + }\edef\x{\noexpand\tabu@rc@ {\the\count@} + {\the\tabu@start} + {\tabu@temp} + {\@tempa}% + }\x + \toks@\expandafter{\expandafter\def\expandafter\tabu@rc@\expandafter{\tabu@rc@}}% + \toks@\expandafter{\the\toks@ \let\tabu@rc@L \tabu@rc@ \ignorespaces}% + \else % inside \noalign + \definecolorseries{tabu@rcseries@\the\tabu@nested}{rgb}{last}{\tabu@temp}{\@tempa}% + \expandafter\resetcolorseries\expandafter[\the\count@]{tabu@rcseries@\the\tabu@nested}% + \xglobal\colorlet{tabu@rc@\the\tabu@nested}{tabu@rcseries@\the\tabu@nested!!+}% + \let\noalign \relax \rowcolor{tabu@rc@\the\tabu@nested}% + \def\tabu@rc@ ##1##2{\gdef\tabu@rc@{% + \ifnum \tabu@modulo {\c@taburow-##2}{##1+1}=\@ne + \resetcolorseries[{##1}]{tabu@rcseries@\the\tabu@nested}\fi + \xglobal\colorlet{tabu@rc@\the\tabu@nested}{tabu@rcseries@\the\tabu@nested!!+}% + \rowcolor{tabu@rc@\the\tabu@nested}}% + }\edef\x{\noexpand\tabu@rc@{\the\count@}{\the\c@taburow}}\x + \global\let\tabu@rc@G \tabu@rc@ + \fi + \fi + \tabu@everyrow@egroup +}% \tabu@rowcolorseries +\tabuDisableCommands {\let\tabu@rc@ \@empty } +\def\tabu@rowcolorserieserror {\PackageError{tabu} + {Invalid syntax for \string\taburowcolors + \MessageBreak Please look at the documentation!}\@ehd +}% \tabu@rowcolorserieserror +\newcommand*\tabureset {% + \tabulinesep=\z@ \extrarowsep=\z@ \extratabsurround=\z@ + \tabulinestyle{}\everyrow{}\taburulecolor||{}\taburowcolors{}% +}% \tabureset +%% Parsing the line styles ------------------------------------------ +\def\tabu@getline #1{\begingroup + \csname \ifcsname if@safe@actives\endcsname % <babel> + @safe@activestrue\else + relax\fi \endcsname + \edef\tabu@temp{#1}\tabu@sanitizearg{#1}\@tempa + \let\tabu@thestyle \relax + \ifcsname tabu@linestyle@\@tempa \endcsname + \edef\tabu@thestyle{\endgroup + \def\tabu@thestyle{\expandafter\noexpand + \csname tabu@linestyle@\@tempa\endcsname}% + }\tabu@thestyle + \else \expandafter\tabu@definestyle \tabu@temp \@nil + \fi +}% \tabu@getline +\def\tabu@definestyle #1#2\@nil {\endlinechar \m@ne \makeatletter + \tabu@thick \maxdimen \tabu@on \maxdimen \tabu@off \maxdimen + \let\tabu@c@lon \@undefined \let\tabu@c@loff \@undefined + \ifodd 1\ifcat .#1\else\ifcat\relax #1\else 0\fi\fi % catcode 12 or non expandable cs + \def\tabu@temp{\tabu@getparam{thick}}% + \else \def\tabu@temp{\tabu@getparam{thick}\maxdimen}% + \fi + {% + \let\tabu@ \relax + \def\:{\obeyspaces \tabu@oXIII \tabu@commaXIII \edef\:}% (space active \: happy ;-)) + \scantokens{\:{\tabu@temp #1#2 \tabu@\tabu@}}% + \expandafter}\expandafter + \def\expandafter\:\expandafter{\:}% line spec rewritten now ;-) + \def\;{\def\:}% + \scantokens\expandafter{\expandafter\;\expandafter{\:}}% space is now inactive (catcode 10) + \let\tabu@ \tabu@getcolor \:% all arguments are ready now ;-) + \ifdefined\tabu@c@lon \else \let\tabu@c@lon\@empty \fi + \ifx \tabu@c@lon\@empty \def\tabu@c@lon{\CT@arc@}\fi + \ifdefined\tabu@c@loff \else \let\tabu@c@loff \@empty \fi + \ifdim \tabu@on=\maxdimen \ifdim \tabu@off<\maxdimen + \tabu@on \tabulineon \fi\fi + \ifdim \tabu@off=\maxdimen \ifdim \tabu@on<\maxdimen + \tabu@off \tabulineoff \fi\fi + \ifodd 1\ifdim \tabu@off=\maxdimen \ifdim \tabu@on=\maxdimen 0 \fi\fi + \in@true % <leaders> + \else \in@false % <rule> + \fi + \ifdim\tabu@thick=\maxdimen \def\tabu@thick{\arrayrulewidth}% + \else \edef\tabu@thick{\the\tabu@thick}% + \fi + \edef \tabu@thestyle ##1##2{\endgroup + \def\tabu@thestyle{% + \ifin@ \noexpand\tabu@leadersstyle {\tabu@thick} + {\the\tabu@on}{##1} + {\the\tabu@off}{##2}% + \else \noexpand\tabu@rulesstyle + {##1\vrule width \tabu@thick}% + {##1\leaders \hrule height \tabu@thick \hfil}% + \fi}% + }\expandafter \expandafter + \expandafter \tabu@thestyle \expandafter + \expandafter \expandafter + {\expandafter\tabu@c@lon\expandafter}\expandafter{\tabu@c@loff}% +}% \tabu@definestyle +{\catcode`\O=\active \lccode`\O=`\o \catcode`\,=\active + \lowercase{\gdef\tabu@oXIII {\catcode`\o=\active \let O=\tabu@oxiii}} + \gdef\tabu@commaXIII {\catcode`\,=\active \let ,=\space} +}% \catcode +\def\tabu@oxiii #1{% + \ifcase \ifx n#1\z@ \else + \ifx f#1\@ne\else + \tw@ \fi\fi + \expandafter\tabu@onxiii + \or \expandafter\tabu@ofxiii + \else o% + \fi#1}% +\def\tabu@onxiii #1#2{% + \ifcase \ifx !#2\tw@ \else + \ifcat.\noexpand#2\z@ \else + \ifx \tabu@spxiii#2\@ne\else + \tw@ \fi\fi\fi + \tabu@getparam{on}#2\expandafter\@gobble + \or \expandafter\tabu@onxiii % (space is active) + \else o\expandafter\@firstofone + \fi{#1#2}}% +\def\tabu@ofxiii #1#2{% + \ifx #2f\expandafter\tabu@offxiii + \else o\expandafter\@firstofone + \fi{#1#2}} +\def\tabu@offxiii #1#2{% + \ifcase \ifx !#2\tw@ \else + \ifcat.\noexpand#2\z@ \else + \ifx\tabu@spxiii#2\@ne \else + \tw@ \fi\fi\fi + \tabu@getparam{off}#2\expandafter\@gobble + \or \expandafter\tabu@offxiii % (space is active) + \else o\expandafter\@firstofone + \fi{#1#2}} +\def\tabu@getparam #1{\tabu@ \csname tabu@#1\endcsname=} +\def\tabu@getcolor #1{% \tabu@ <- \tabu@getcolor after \edef + \ifx \tabu@#1\else % no more spec + \let\tabu@theparam=#1\afterassignment \tabu@getc@l@r #1\fi +}% \tabu@getcolor +\def\tabu@getc@l@r #1\tabu@ {% + \def\tabu@temp{#1}\tabu@strtrim \tabu@temp + \ifx \tabu@temp\@empty + \else%\ifcsname \string\color@\tabu@temp \endcsname % if the color exists + \ifx \tabu@theparam \tabu@off \let\tabu@c@loff \tabu@c@l@r + \else \let\tabu@c@lon \tabu@c@l@r + \fi + %\else \tabu@warncolour{\tabu@temp}% + \fi%\fi + \tabu@ % next spec +}% \tabu@getc@l@r +\def\tabu@warncolour #1{\PackageWarning{tabu} + {Color #1 is not defined. Default color used}% +}% \tabu@warncolour +\def\tabu@leadersstyle #1#2#3#4#5{\def\tabu@leaders{{#1}{#2}{#3}{#4}{#5}}% + \ifx \tabu@leaders\tabu@leaders@G \else + \tabu@LEADERS{#1}{#2}{#3}{#4}{#5}\fi +}% \tabu@leadersstyle +\def\tabu@rulesstyle #1#2{\let\tabu@leaders \@undefined + \gdef\tabu@thevrule{#1}\gdef\tabu@thehrule{#2}% +}% \tabu@rulesstyle +%% The leaders boxes ------------------------------------------------ +\def\tabu@LEADERS #1#2#3#4#5{%% width, dash, dash color, gap, gap color + {\let\color \tabu@color % => during trials -> \color = \tabu@nocolor + {% % but the leaders boxes should have colors ! + \def\@therule{\vrule}\def\@thick{height}\def\@length{width}% + \def\@box{\hbox}\def\@unbox{\unhbox}\def\@elt{\wd}% + \def\@skip{\hskip}\def\@ss{\hss}\def\tabu@leads{\tabu@hleads}% + \tabu@l@@d@rs {#1}{#2}{#3}{#4}{#5}% + \global\let\tabu@thehleaders \tabu@theleaders + }% + {% + \def\@therule{\hrule}\def\@thick{width}\def\@length{height}% + \def\@box{\vbox}\def\@unbox{\unvbox}\def\@elt{\ht}% + \def\@skip{\vskip}\def\@ss{\vss}\def\tabu@leads{\tabu@vleads}% + \tabu@l@@d@rs {#1}{#2}{#3}{#4}{#5}% + \global\let\tabu@thevleaders \tabu@theleaders + }% + \gdef\tabu@leaders@G{{#1}{#2}{#3}{#4}{#5}}% + }% +}% \tabu@LEADERS +\def\tabu@therule #1#2{\@therule \@thick#1\@length\dimexpr#2/2 \@depth\z@} +\def\tabu@l@@d@rs #1#2#3#4#5{%% width, dash, dash color, gap, gap color + \global\setbox \tabu@leads=\@box{% + {#3\tabu@therule{#1}{#2}}% + \ifx\\#5\\\@skip#4\else{#5\tabu@therule{#1}{#4*2}}\fi + {#3\tabu@therule{#1}{#2}}}% + \global\setbox\tabu@leads=\@box to\@elt\tabu@leads{\@ss + {#3\tabu@therule{#1}{#2}}\@unbox\tabu@leads}% + \edef\tabu@theleaders ##1{\def\noexpand\tabu@theleaders {% + {##1\tabu@therule{#1}{#2}}% + \xleaders \copy\tabu@leads \@ss + \tabu@therule{0pt}{-#2}{##1\tabu@therule{#1}{#2}}}% + }\tabu@theleaders{#3}% +}% \tabu@l@@d@rs +%% \tabu \endtabu \tabu* \longtabu \endlongtabu \longtabu* ---------- +\newcommand*\tabu {\tabu@longfalse + \ifmmode \def\tabu@ {\array}\def\endtabu {\endarray}% + \else \def\tabu@ {\tabu@tabular}\def\endtabu {\endtabular}\fi + \expandafter\let\csname tabu*\endcsname \tabu + \expandafter\def\csname endtabu*\endcsname{\endtabu}% + \tabu@spreadfalse \tabu@negcoeffalse \tabu@settarget +}% {tabu} +\let\tabu@tabular \tabular % <For LyX: some users redefine \tabular...> +\expandafter\def\csname tabu*\endcsname{\tabuscantokenstrue \tabu} +\newcommand*\longtabu {\tabu@longtrue + \ifmmode\PackageError{tabu}{longtabu not allowed in math mode}\fi + \def\tabu@{\longtable}\def\endlongtabu{\endlongtable}% + \LTchunksize=\@M + \expandafter\let\csname tabu*\endcsname \tabu + \expandafter\def\csname endlongtabu*\endcsname{\endlongtabu}% + \let\LT@startpbox \tabu@LT@startpbox % \everypar{ array struts } + \tabu@spreadfalse \tabu@negcoeffalse \tabu@settarget +}% {longtabu} +\expandafter\def\csname longtabu*\endcsname{\tabuscantokenstrue \longtabu} +\def\tabu@nolongtabu{\PackageError{tabu} + {longtabu requires the longtable package}\@ehd} +%% Read the target and then : \tabular or \@array ------------------ +\def\tabu@settarget {\futurelet\@let@token \tabu@sett@rget } +\def\tabu@sett@rget {\tabu@target \z@ + \ifcase \ifx \bgroup\@let@token \z@ \else + \ifx \@sptoken\@let@token \@ne \else + \if t\@let@token \tw@ \else + \if s\@let@token \thr@@\else + \z@\fi\fi\fi\fi + \expandafter\tabu@begin + \or \expandafter\tabu@gobblespace\expandafter\tabu@settarget + \or \expandafter\tabu@to + \or \expandafter\tabu@spread + \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@linegoalt@rget } +\def\tabu@linegoalt@rget {% + \ifx \tabu@temp\LNGL@setlinegoal + \LNGL@setlinegoal \expandafter \@firstoftwo \fi % @gobbles \LNGL@setlinegoal + \tabu@begin +}% \tabu@linegoalt@rget +\def\tabu@begin #1#{% + \iftabu@measuring \expandafter\tabu@nestedmeasure \fi + \ifdim \tabu@target=\z@ \let\tabu@halignto \@empty + \else \edef\tabu@halignto{\tabu@halignto\the\tabu@target}% + \fi + \@testopt \tabu@tabu@ \tabu@aligndefault #1\@nil +}% \tabu@begin +\long\def\tabu@tabu@ [#1]#2\@nil #3{\tabu@setup + \def\tabu@align {#1}\def\tabu@savedpream{\NC@find #3}% + \tabu@ [\tabu@align ]#2{#3\tabu@rewritefirst }% +}% \tabu@tabu@ +\def\tabu@nestedmeasure {% + \ifodd 1\iftabu@spread \else \ifdim\tabu@target=\z@ \else 0 \fi\fi\relax + \tabu@spreadtrue + \else \begingroup \iffalse{\fi \ifnum0=`}\fi + \toks@{}\def\tabu@stack{b}% + \expandafter\tabu@collectbody\expandafter\tabu@quickrule + \expandafter\endgroup + \fi +}% \tabu@nestedmeasure +\def\tabu@quickrule {\indent\vrule height\z@ depth\z@ width\tabu@target} +%% \tabu@setup \tabu@init \tabu@indent +\def\tabu@setup{\tabu@alloc@ + \ifcase \tabu@nested + \ifmmode \else \iftabu@spread\else \ifdim\tabu@target=\z@ + \let\tabu@afterendpar \par + \fi\fi\fi + \def\tabu@aligndefault{c}\tabu@init \tabu@indent + \else % <nested tabu> + \def\tabu@aligndefault{t}\let\tabudefaulttarget \linewidth + \fi + \let\tabu@thetarget \tabudefaulttarget \let\tabu@restored \@undefined + \edef\tabu@NC@list{\the\NC@list}\NC@list{\NC@do \tabu@rewritefirst}% + \everycr{}\let\@startpbox \tabu@startpbox % for nested tabu inside longtabu... + \let\@endpbox \tabu@endpbox % idem " " " " " " + \let\@tabarray \tabu@tabarray % idem " " " " " " + \tabu@setcleanup \tabu@setreset +}% \tabu@setup +\def\tabu@init{\tabu@starttimer \tabu@measuringfalse + \edef\tabu@hfuzz {\the\dimexpr\hfuzz+1sp}\global\tabu@footnotes{}% + \let\firsthline \tabu@firsthline \let\lasthline \tabu@lasthline + \let\firstline \tabu@firstline \let\lastline \tabu@lastline + \let\hline \tabu@hline \let\@xhline \tabu@xhline + \let\color \tabu@color \let\@arstrutbox \tabu@arstrutbox + \iftabu@colortbl\else\let\LT@@hline \tabu@LT@@hline \fi + \tabu@trivlist %<restore \\=\@normalcr inside lists> + \let\@footnotetext \tabu@footnotetext \let\@xfootnotetext \tabu@xfootnotetext + \let\@xfootnote \tabu@xfootnote \let\centering \tabu@centering + \let\raggedright \tabu@raggedright \let\raggedleft \tabu@raggedleft + \let\tabudecimal \tabu@tabudecimal \let\Centering \tabu@Centering + \let\RaggedRight \tabu@RaggedRight \let\RaggedLeft \tabu@RaggedLeft + \let\justifying \tabu@justifying \let\rowfont \tabu@rowfont + \let\fbox \tabu@fbox \let\color@b@x \tabu@color@b@x + \let\tabu@@everycr \everycr \let\tabu@@everypar \everypar + \let\tabu@prepnext@tokORI \prepnext@tok\let\prepnext@tok \tabu@prepnext@tok + \let\tabu@multicolumnORI\multicolumn \let\multicolumn \tabu@multicolumn + \let\tabu@startpbox \@startpbox % for nested tabu inside longtabu pfff !!! + \let\tabu@endpbox \@endpbox % idem " " " " " " " + \let\tabu@tabarray \@tabarray % idem " " " " " " " + \tabu@adl@fix \let\endarray \tabu@endarray % <fix> colortbl & arydshln (delarray) + \iftabu@colortbl\CT@everycr\expandafter{\expandafter\iftabu@everyrow \the\CT@everycr \fi}\fi +}% \tabu@init +\def\tabu@indent{% correction for indentation + \ifdim \parindent>\z@\ifx \linewidth\tabudefaulttarget + \everypar\expandafter{% + \the\everypar\everypar\expandafter{\the\everypar}% + \setbox\z@=\lastbox + \ifdim\wd\z@>\z@ \edef\tabu@thetarget + {\the\dimexpr -\wd\z@+\tabudefaulttarget}\fi + \box\z@}% + \fi\fi +}% \tabu@indent +\def\tabu@setcleanup {% saves last global assignments + \ifodd 1\ifmmode \else \iftabu@long \else 0\fi\fi\relax + \def\tabu@aftergroupcleanup{% + \def\tabu@aftergroupcleanup{\aftergroup\tabu@cleanup}}% + \else + \def\tabu@aftergroupcleanup{% + \aftergroup\aftergroup\aftergroup\tabu@cleanup + \let\tabu@aftergroupcleanup \relax}% + \fi + \let\tabu@arc@Gsave \tabu@arc@G + \let\tabu@arc@G \tabu@arc@L % <init> + \let\tabu@drsc@Gsave \tabu@drsc@G + \let\tabu@drsc@G \tabu@drsc@L % <init> + \let\tabu@ls@Gsave \tabu@ls@G + \let\tabu@ls@G \tabu@ls@L % <init> + \let\tabu@rc@Gsave \tabu@rc@G + \let\tabu@rc@G \tabu@rc@L % <init> + \let\tabu@evr@Gsave \tabu@evr@G + \let\tabu@evr@G \tabu@evr@L % <init> + \let\tabu@celllalign@save \tabu@celllalign + \let\tabu@cellralign@save \tabu@cellralign + \let\tabu@cellleft@save \tabu@cellleft + \let\tabu@cellright@save \tabu@cellright + \let\tabu@@celllalign@save \tabu@@celllalign + \let\tabu@@cellralign@save \tabu@@cellralign + \let\tabu@@cellleft@save \tabu@@cellleft + \let\tabu@@cellright@save \tabu@@cellright + \let\tabu@rowfontreset@save \tabu@rowfontreset + \let\tabu@@rowfontreset@save\tabu@@rowfontreset + \let\tabu@rowfontreset \@empty + \edef\tabu@alloc@save {\the\tabu@alloc}% restore at \tabu@reset + \edef\c@taburow@save {\the\c@taburow}% + \edef\tabu@naturalX@save {\the\tabu@naturalX}% + \let\tabu@naturalXmin@save \tabu@naturalXmin + \let\tabu@naturalXmax@save \tabu@naturalXmax + \let\tabu@mkarstrut@save \tabu@mkarstrut + \edef\tabu@clarstrut{% + \extrarowheight \the\dimexpr \ht\@arstrutbox-\ht\strutbox \relax + \extrarowdepth \the\dimexpr \dp\@arstrutbox-\dp\strutbox \relax + \let\noexpand\@arraystretch \@ne \noexpand\tabu@rearstrut}% +}% \tabu@setcleanup +\def\tabu@cleanup {\begingroup + \globaldefs\@ne \tabu@everyrowtrue + \let\tabu@arc@G \tabu@arc@Gsave + \let\CT@arc@ \tabu@arc@G + \let\tabu@drsc@G \tabu@drsc@Gsave + \let\CT@drsc@ \tabu@drsc@G + \let\tabu@ls@G \tabu@ls@Gsave + \let\tabu@ls@ \tabu@ls@G + \let\tabu@rc@G \tabu@rc@Gsave + \let\tabu@rc@ \tabu@rc@G + \let\CT@do@color \relax + \let\tabu@evr@G \tabu@evr@Gsave + \let\tabu@celllalign \tabu@celllalign@save + \let\tabu@cellralign \tabu@cellralign@save + \let\tabu@cellleft \tabu@cellleft@save + \let\tabu@cellright \tabu@cellright@save + \let\tabu@@celllalign \tabu@@celllalign@save + \let\tabu@@cellralign \tabu@@cellralign@save + \let\tabu@@cellleft \tabu@@cellleft@save + \let\tabu@@cellright \tabu@@cellright@save + \let\tabu@rowfontreset \tabu@rowfontreset@save + \let\tabu@@rowfontreset \tabu@@rowfontreset@save + \tabu@naturalX =\tabu@naturalX@save + \let\tabu@naturalXmax \tabu@naturalXmax@save + \let\tabu@naturalXmin \tabu@naturalXmin@save + \let\tabu@mkarstrut \tabu@mkarstrut@save + \c@taburow =\c@taburow@save + \ifcase \tabu@nested \tabu@alloc \m@ne\fi + \endgroup % <end of \globaldefs> + \ifcase \tabu@nested + \the\tabu@footnotes \global\tabu@footnotes{}% + \tabu@afterendpar \tabu@elapsedtime + \fi + \tabu@clarstrut + \everyrow\expandafter {\tabu@evr@G}% +}% \tabu@cleanup +\let\tabu@afterendpar \relax +\def\tabu@setreset {% + \edef\tabu@savedparams {% \relax for \tabu@message@save + \ifmmode \col@sep \the\arraycolsep + \else \col@sep \the\tabcolsep \fi \relax + \arrayrulewidth \the\arrayrulewidth \relax + \doublerulesep \the\doublerulesep \relax + \extratabsurround \the\extratabsurround \relax + \extrarowheight \the\extrarowheight \relax + \extrarowdepth \the\extrarowdepth \relax + \abovetabulinesep \the\abovetabulinesep \relax + \belowtabulinesep \the\belowtabulinesep \relax + \def\noexpand\arraystretch{\arraystretch}% + \ifdefined\minrowclearance \minrowclearance\the\minrowclearance\relax\fi}% + \begingroup + \@temptokena\expandafter{\tabu@savedparams}% => only for \savetabu / \usetabu + \ifx \tabu@arc@L\relax \else \tabu@setsave \tabu@arc@L \fi + \ifx \tabu@drsc@L\relax \else \tabu@setsave \tabu@drsc@L \fi + \tabu@setsave \tabu@ls@L \tabu@setsave \tabu@evr@L + \expandafter \endgroup \expandafter + \def\expandafter\tabu@saved@ \expandafter{\the\@temptokena + \let\tabu@arc@G \tabu@arc@L + \let\tabu@drsc@G \tabu@drsc@L + \let\tabu@ls@G \tabu@ls@L + \let\tabu@rc@G \tabu@rc@L + \let\tabu@evr@G \tabu@evr@L}% + \def\tabu@reset{\tabu@savedparams + \tabu@everyrowtrue \c@taburow \z@ + \let\CT@arc@ \tabu@arc@L + \let\CT@drsc@ \tabu@drsc@L + \let\tabu@ls@ \tabu@ls@L + \let\tabu@rc@ \tabu@rc@L + \global\tabu@alloc \tabu@alloc@save + \everyrow\expandafter{\tabu@evr@L}}% +}% \tabu@reset +\def\tabu@setsave #1{\expandafter\tabu@sets@ve #1\@nil{#1}} +\long\def\tabu@sets@ve #1\@nil #2{\@temptokena\expandafter{\the\@temptokena \def#2{#1}}} +%% The Rewriting Process ------------------------------------------- +\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 +\newcommand*\tabucolumn [1]{\expandafter \def \expandafter + \tabu@highprioritycolumns\expandafter{\tabu@highprioritycolumns + \NC@do #1}}% +\let\tabu@highprioritycolumns \@empty +%% The | ``column'' : rewriting process -------------------------- +\tabu@privatecolumntype |{\tabu@rewritevline} +\newcommand*\tabu@rewritevline[1][]{\tabu@vlinearg{#1}% + \expandafter \NC@find \tabu@rewritten} +\def\tabu@lines #1{% + \ifx|#1\else \tabu@privatecolumntype #1{\tabu@rewritevline}\fi + \NC@list\expandafter{\the\NC@list \NC@do #1}% +}% \tabu@lines@ +\def\tabu@vlinearg #1{% + \ifx\\#1\\\def\tabu@thestyle {\tabu@ls@}% + \else\tabu@getline {#1}% + \fi + \def\tabu@rewritten ##1{\def\tabu@rewritten{!{##1\tabu@thevline}}% + }\expandafter\tabu@rewritten\expandafter{\tabu@thestyle}% + \expandafter \tabu@keepls \tabu@thestyle \@nil +}% \tabu@vlinearg +\def\tabu@keepls #1\@nil{% + \ifcat $\@cdr #1\@nil $% + \ifx \relax#1\else + \ifx \tabu@ls@#1\else + \let#1\relax + \xdef\tabu@mkpreambuffer{\tabu@mkpreambuffer + \tabu@savels\noexpand#1}\fi\fi\fi +}% \tabu@keepls +\def\tabu@thevline {\begingroup + \ifdefined\tabu@leaders + \setbox\@tempboxa=\vtop to\dimexpr + \ht\@arstrutbox+\dp\@arstrutbox{{\tabu@thevleaders}}% + \ht\@tempboxa=\ht\@arstrutbox \dp\@tempboxa=\dp\@arstrutbox + \box\@tempboxa + \else + \tabu@thevrule + \fi \endgroup +}% \tabu@thevline +\def\tabu@savels #1{% + \expandafter\let\csname\string#1\endcsname #1% + \expandafter\def\expandafter\tabu@reset\expandafter{\tabu@reset + \tabu@resetls#1}}% +\def\tabu@resetls #1{\expandafter\let\expandafter#1\csname\string#1\endcsname}% +%% \multicolumn inside tabu environment ----------------------------- +\tabu@newcolumntype \tabu@rewritemulticolumn{% + \aftergroup \tabu@endrewritemulticolumn % after \@mkpream group + \NC@list{\NC@do *}\tabu@textbar \tabu@lines + \tabu@savedecl + \tabu@privatecolumns + \NC@list\expandafter{\the\expandafter\NC@list \tabu@NC@list}% + \let\tabu@savels \relax + \NC@find +}% \tabu@rewritemulticolumn +\def\tabu@endrewritemulticolumn{\gdef\tabu@mkpreambuffer{}\endgroup} +\def\tabu@multicolumn{\tabu@ifenvir \tabu@multic@lumn \tabu@multicolumnORI} +\long\def\tabu@multic@lumn #1#2#3{\multispan{#1}\begingroup + \tabu@everyrowtrue + \NC@list{\NC@do \tabu@rewritemulticolumn}% + \expandafter\@gobbletwo % gobbles \multispan{#1} + \tabu@multicolumnORI{#1}{\tabu@rewritemulticolumn #2}% + {\iftabuscantokens \tabu@rescan \else \expandafter\@firstofone \fi + {#3}}% +}% \tabu@multic@lumn +%% The X column(s): rewriting process ----------------------------- +\tabu@privatecolumntype X[1][]{\begingroup \tabu@siunitx{\endgroup \tabu@rewriteX {#1}}} +\def\tabu@nosiunitx #1{#1{}{}\expandafter \NC@find \tabu@rewritten } +\def\tabu@siunitx #1{\@ifnextchar \bgroup + {\tabu@rewriteX@Ss{#1}} + {\tabu@nosiunitx{#1}}} +\def\tabu@rewriteX@Ss #1#2{\@temptokena{}% + \@defaultunits \let\tabu@temp =#2\relax\@nnil + \ifodd 1\ifx S\tabu@temp \else \ifx s\tabu@temp \else 0 \fi\fi + \def\NC@find{\def\NC@find >####1####2<####3\relax{#1 {####1}{####3}% + }\expandafter\NC@find \the\@temptokena \relax + }\expandafter\NC@rewrite@S \@gobble #2\relax + \else \tabu@siunitxerror + \fi + \expandafter \NC@find \tabu@rewritten +}% \tabu@rewriteX@Ss +\def\tabu@siunitxerror {\PackageError{tabu}{Not a S nor s column ! + \MessageBreak X column can only embed siunitx S or s columns}\@ehd +}% \tabu@siunitxerror +\def\tabu@rewriteX #1#2#3{\tabu@Xarg {#1}{#2}{#3}% + \iftabu@measuring + \else \tabu@measuringtrue % first X column found in the preamble + \let\@halignto \relax \let\tabu@halignto \relax + \iftabu@spread \tabu@spreadtarget \tabu@target \tabu@target \z@ + \else \tabu@spreadtarget \z@ \fi + \ifdim \tabu@target=\z@ + \setlength\tabu@target \tabu@thetarget + \tabu@message{\tabu@message@defaulttarget}% + \else \tabu@message{\tabu@message@target}\fi + \fi +}% \tabu@rewriteX +\def\tabu@rewriteXrestore #1#2#3{\let\@halignto \relax + \def\tabu@rewritten{l}} +\def\tabu@Xarg #1#2#3{% + \advance\tabu@Xcol \@ne \let\tabu@Xlcr \@empty + \let\tabu@Xdisp \@empty \let\tabu@Xmath \@empty + \ifx\\#1\\% <shortcut when no option> + \def\tabu@rewritten{p}\tabucolX \p@ % <default coef = 1> + \else + \let\tabu@rewritten \@empty \let\tabu@temp \@empty \tabucolX \z@ + \tabu@Xparse {}#1\relax + \fi + \tabu@Xrewritten{#2}{#3}% +}% \tabu@Xarg +\def\tabu@Xparse #1{\futurelet\@let@token \tabu@Xtest} +\expandafter\def\expandafter\tabu@Xparsespace\space{\tabu@Xparse{}} +\def\tabu@Xtest{% + \ifcase \ifx \relax\@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 j\@let@token 7\else + \if L\@let@token 8\else + \if C\@let@token 9\else + \if R\@let@token 10\else + \if J\@let@token 11\else + \ifx \@sptoken\@let@token 12\else + \if .\@let@token 13\else + \if -\@let@token 13\else + \ifcat $\@let@token 14\else + 15\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\relax + \or \tabu@Xtype {p}% + \or \tabu@Xtype {m}% + \or \tabu@Xtype {b}% + \or \tabu@Xalign \raggedright\relax + \or \tabu@Xalign \centering\relax + \or \tabu@Xalign \raggedleft\relax + \or \tabu@Xalign \tabu@justify\relax + \or \tabu@Xalign \RaggedRight\raggedright + \or \tabu@Xalign \Centering\centering + \or \tabu@Xalign \RaggedLeft\raggedleft + \or \tabu@Xalign \justifying\tabu@justify + \or \expandafter \tabu@Xparsespace + \or \expandafter \tabu@Xcoef + \or \expandafter \tabu@Xm@th + \or \tabu@Xcoef{}% + \else\expandafter \tabu@Xparse + \fi +}% \tabu@Xtest +\def\tabu@Xalign #1#2{% + \ifx \tabu@Xlcr\@empty \else \PackageWarning{tabu} + {Duplicate horizontal alignment specification}\fi + \ifdefined#1\def\tabu@Xlcr{#1}\let#1\relax + \else \def\tabu@Xlcr{#2}\let#2\relax\fi + \expandafter\tabu@Xparse +}% \tabu@Xalign +\def\tabu@Xtype #1{% + \ifx \tabu@rewritten\@empty \else \PackageWarning{tabu} + {Duplicate vertical alignment specification}\fi + \def\tabu@rewritten{#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\tabucolX \tabu@temp\the\tabu@cnt\p@ + \tabu@Xparse{}% +}% \tabu@Xc@ef +\def\tabu@Xm@th #1{\futurelet \@let@token \tabu@Xd@sp} +\def\tabu@Xd@sp{\let\tabu@Xmath=$% + \ifx $\@let@token \def\tabu@Xdisp{\displaystyle}% + \expandafter\tabu@Xparse + \else \expandafter\tabu@Xparse\expandafter{\expandafter}% + \fi +}% \tabu@Xd@sp +\def\tabu@Xrewritten {% + \ifx \tabu@rewritten\@empty \def\tabu@rewritten{p}\fi + \ifdim \tabucolX<\z@ \tabu@negcoeftrue + \else\ifdim \tabucolX=\z@ \tabucolX \p@ + \fi\fi + \edef\tabu@temp{{\the\tabu@Xcol}{\tabu@strippt\tabucolX}}% + \edef\tabu@Xcoefs{\tabu@Xcoefs \tabu@ \tabu@temp}% + \edef\tabu@rewritten ##1##2{\def\noexpand\tabu@rewritten{% + >{\tabu@Xlcr \ifx$\tabu@Xmath$\tabu@Xdisp\fi ##1}% + \tabu@rewritten {\tabu@hsize \tabu@temp}% + <{##2\ifx$\tabu@Xmath$\fi}}% + }\tabu@rewritten +}% \tabu@Xrewritten +\def\tabu@hsize #1#2{% + \ifdim #2\p@<\z@ + \ifdim \tabucolX=\maxdimen \tabu@wd{#1}\else + \ifdim \tabu@wd{#1}<-#2\tabucolX \tabu@wd{#1}\else -#2\tabucolX\fi + \fi + \else #2\tabucolX + \fi +}% \tabu@hsize +%% \usetabu and \preamble: rewriting process --------------------- +\tabu@privatecolumntype \usetabu [1]{% + \ifx\\#1\\\tabu@saveerr{}\else + \@ifundefined{tabu@saved@\string#1} + {\tabu@saveerr{#1}} + {\let\tabu@rewriteX \tabu@rewriteXrestore + \csname tabu@saved@\string#1\expandafter\endcsname\expandafter\@ne}% + \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\z@}% + \fi +}% \NC@rewrite@\preamble +%% Controlling the rewriting process ------------------------------- +\tabu@newcolumntype \tabu@rewritefirst{% + \iftabu@long \aftergroup \tabu@longpream % <the whole implementation is here !> + \else \aftergroup \tabu@pream + \fi + \let\tabu@ \relax \let\tabu@hsize \relax + \let\tabu@Xcoefs \@empty \let\tabu@savels \relax + \tabu@Xcol \z@ \tabu@cnt \tw@ + \gdef\tabu@mkpreambuffer{\tabu@{}}\tabu@measuringfalse + \global\setbox\@arstrutbox \box\@arstrutbox + \NC@list{\NC@do *}\tabu@textbar \tabu@lines + \NC@list\expandafter{\the\NC@list \NC@do X}% + \iftabu@siunitx % <siunitx S and s columns> + \NC@list\expandafter{\the\NC@list \NC@do S\NC@do s}\fi + \NC@list\expandafter{\the\expandafter\NC@list \tabu@highprioritycolumns}% + \expandafter\def\expandafter\tabu@NC@list\expandafter{% + \the\expandafter\NC@list \tabu@NC@list}% % * | X S <original> + \NC@list\expandafter{\expandafter \NC@do \expandafter\usetabu + \expandafter \NC@do \expandafter\preamble + \the\NC@list \NC@do \tabu@rewritemiddle + \NC@do \tabu@rewritelast}% + \tabu@savedecl + \tabu@privatecolumns + \edef\tabu@prev{\the\@temptokena}\NC@find \tabu@rewritemiddle +}% NC@rewrite@\tabu@rewritefirst +\tabu@newcolumntype \tabu@rewritemiddle{% + \edef\tabu@temp{\the\@temptokena}\NC@find \tabu@rewritelast +}% \NC@rewrite@\tabu@rewritemiddle +\tabu@newcolumntype \tabu@rewritelast{% + \ifx \tabu@temp\tabu@prev \advance\tabu@cnt \m@ne + \NC@list\expandafter{\tabu@NC@list \NC@do \tabu@rewritemiddle + \NC@do \tabu@rewritelast}% + \else \let\tabu@prev\tabu@temp + \fi + \ifcase \tabu@cnt \expandafter\tabu@endrewrite + \else \expandafter\NC@find \expandafter\tabu@rewritemiddle + \fi +}% \NC@rewrite@\tabu@rewritelast +%% Choosing the strategy -------------------------------------------- +\def\tabu@endrewrite {% + \let\tabu@temp \NC@find + \ifx \@arrayright\relax \let\@arrayright \@empty \fi + \count@=% + \ifx \@finalstrut\tabu@finalstrut \z@ % outer in mode 0 print + \iftabu@measuring + \xdef\tabu@mkpreambuffer{\tabu@mkpreambuffer + \tabu@target \csname tabu@\the\tabu@nested.T\endcsname + \tabucolX \csname tabu@\the\tabu@nested.X\endcsname + \edef\@halignto {\ifx\@arrayright\@empty to\tabu@target\fi}}% + \fi + \else\iftabu@measuring 4 % X columns + \xdef\tabu@mkpreambuffer{\tabu@{\tabu@mkpreambuffer + \tabu@target \the\tabu@target + \tabu@spreadtarget \the\tabu@spreadtarget}% + \def\noexpand\tabu@Xcoefs{\tabu@Xcoefs}% + \edef\tabu@halignto{\ifx \@arrayright\@empty to\tabu@target\fi}}% + \let\tabu@Xcoefs \relax + \else\ifcase\tabu@nested \thr@@ % outer, no X + \global\let\tabu@afterendpar \relax + \else \@ne % inner, no X, outer in mode 1 or 2 + \fi + \ifdefined\tabu@usetabu + \else \ifdim\tabu@target=\z@ + \else \let\tabu@temp \tabu@extracolsep + \fi\fi + \fi + \fi + \xdef\tabu@mkpreambuffer{\count@ \the\count@ \tabu@mkpreambuffer}% + \tabu@temp +}% \tabu@endrewrite +\def\tabu@extracolsep{\@defaultunits \expandafter\let + \expandafter\tabu@temp \expandafter=\the\@temptokena \relax\@nnil + \ifx \tabu@temp\@sptoken + \expandafter\tabu@gobblespace \expandafter\tabu@extracolsep + \else + \edef\tabu@temp{\noexpand\NC@find + \if |\noexpand\tabu@temp @% + \else\if !\noexpand\tabu@temp @% + \else !% + \fi\fi + {\noexpand\extracolsep\noexpand\@flushglue}}% + \fi + \tabu@temp +}% \tabu@extrac@lsep +%% Implementing the strategy ---------------------------------------- +\long\def\tabu@pream #1\@preamble {% + \let\tabu@ \tabu@@ \tabu@mkpreambuffer \tabu@aftergroupcleanup + \NC@list\expandafter {\tabu@NC@list}% in case of nesting... + \ifdefined\tabu@usetabu \tabu@usetabu \tabu@target \z@ \fi + \let\tabu@savedpreamble \@preamble + \global\let\tabu@elapsedtime \relax + \tabu@thebody ={#1\tabu@aftergroupcleanup}% + \tabu@thebody =\expandafter{\the\expandafter\tabu@thebody + \@preamble}% + \edef\tabuthepreamble {\the\tabu@thebody}% ( no @ allowed for \scantokens ) + \tabu@select +}% \tabu@pream +\long\def\tabu@longpream #1\LT@bchunk #2\LT@bchunk{% + \let\tabu@ \tabu@@ \tabu@mkpreambuffer \tabu@aftergroupcleanup + \NC@list\expandafter {\tabu@NC@list}% in case of nesting... + \let\tabu@savedpreamble \@preamble + \global\let\tabu@elapsedtime \relax + \tabu@thebody ={#1\LT@bchunk #2\tabu@aftergroupcleanup \LT@bchunk}% + \edef\tabuthepreamble {\the\tabu@thebody}% ( no @ allowed for \scantokens ) + \tabu@select +}% \tabu@longpream +\def\tabu@select {% + \ifnum\tabu@nested>\z@ \tabuscantokensfalse \fi + \ifnum \count@=\@ne \iftabu@measuring \count@=\tw@ \fi\fi + \ifcase \count@ + \global\let\tabu@elapsedtime \relax + \tabu@seteverycr + \expandafter \tabuthepreamble % vertical adjustment (inherited from outer) + \or % exit in vertical measure + struts per cell because no X and outer in mode 3 + \tabu@evr{\tabu@verticalinit}\tabu@celllalign@def{\tabu@verticalmeasure}% + \def\tabu@cellralign{\tabu@verticalspacing}% + \tabu@seteverycr + \expandafter \tabuthepreamble + \or % exit without measure because no X and outer in mode 4 + \tabu@evr{}\tabu@celllalign@def{}\let\tabu@cellralign \@empty + \tabu@seteverycr + \expandafter \tabuthepreamble + \else % needs trials + \tabu@evr{}\tabu@celllalign@def{}\let\tabu@cellralign \@empty + \tabu@savecounters + \expandafter \tabu@setstrategy + \fi +}% \tabu@select +\def\tabu@@ {\gdef\tabu@mkpreambuffer} +%% Protections to set up before trials ------------------------------ +\def\tabu@setstrategy {\begingroup % <trials group> + \tabu@trialh@@k \tabu@cnt \z@ % number of trials + \hbadness \@M \let\hbadness \@tempcnta + \hfuzz \maxdimen \let\hfuzz \@tempdima + \let\write \tabu@nowrite\let\GenericError \tabu@GenericError + \let\savetabu \@gobble \let\tabudefaulttarget \linewidth + \let\@footnotetext \@gobble \let\@xfootnote \tabu@xfootnote + \let\color \tabu@nocolor\let\rowcolor \tabu@norowcolor + \let\tabu@aftergroupcleanup \relax % only after the last trial + \tabu@mkpreambuffer + \ifnum \count@>\thr@@ \let\@halignto \@empty \tabucolX@init + \def\tabu@lasttry{\m@ne\p@}\fi + \begingroup \iffalse{\fi \ifnum0=`}\fi + \toks@{}\def\tabu@stack{b}\iftabuscantokens \endlinechar=10 \obeyspaces \fi % + \tabu@collectbody \tabu@strategy % +}% \tabu@setstrategy +\def\tabu@savecounters{% + \def\@elt ##1{\csname c@##1\endcsname\the\csname c@##1\endcsname}% + \edef\tabu@clckpt {\begingroup \globaldefs=\@ne \cl@@ckpt \endgroup}\let\@elt \relax +}% \tabu@savecounters +\def\tabucolX@init {% \tabucolX <= \tabu@target / (sum coefs > 0) + \dimen@ \z@ \tabu@Xsum \z@ \tabucolX \z@ \let\tabu@ \tabu@Xinit \tabu@Xcoefs + \ifdim \dimen@>\z@ + \@tempdima \dimexpr \tabu@target *\p@/\dimen@ + \tabu@hfuzz\relax + \ifdim \tabucolX<\@tempdima \tabucolX \@tempdima \fi + \fi +}% \tabucolX@init +\def\tabu@Xinit #1#2{\tabu@Xcol #1 \advance \tabu@Xsum + \ifdim #2\p@>\z@ #2\p@ \advance\dimen@ #2\p@ + \else -#2\p@ \tabu@negcoeftrue + \@tempdima \dimexpr \tabu@target*\p@/\dimexpr-#2\p@\relax \relax + \ifdim \tabucolX<\@tempdima \tabucolX \@tempdima \fi + \tabu@wddef{#1}{0pt}% + \fi +}% \tabu@Xinit +%% Collecting the environment body ---------------------------------- +\long\def\tabu@collectbody #1#2\end #3{% + \edef\tabu@stack{\tabu@pushbegins #2\begin\end\expandafter\@gobble\tabu@stack}% + \ifx \tabu@stack\@empty + \toks@\expandafter{\expandafter\tabu@thebody\expandafter{\the\toks@ #2}% + \def\tabu@end@envir{\end{#3}}% + \iftabuscantokens + \iftabu@long \def\tabu@endenvir {\end{#3}\tabu@gobbleX}% + \else \def\tabu@endenvir {\let\endarray \@empty + \end{#3}\tabu@gobbleX}% + \fi + \else \def\tabu@endenvir {\end{#3}}\fi}% + \let\tabu@collectbody \tabu@endofcollect + \else\def\tabu@temp{#3}% + \ifx \tabu@temp\@empty \toks@\expandafter{\the\toks@ #2\end }% + \else \ifx\tabu@temp\tabu@@spxiii \toks@\expandafter{\the\toks@ #2\end #3}% + \else \ifx\tabu@temp\tabu@X \toks@\expandafter{\the\toks@ #2\end #3}% + \else \toks@\expandafter{\the\toks@ #2\end{#3}}% + \fi\fi\fi + \fi + \tabu@collectbody{#1}% +}% \tabu@collectbody +\long\def\tabu@pushbegins#1\begin#2{\ifx\end#2\else b\expandafter\tabu@pushbegins\fi}% +\def\tabu@endofcollect #1{\ifnum0=`{}\fi + \expandafter\endgroup \the\toks@ #1% +}% \tabu@endofcollect +%% The trials: switching between strategies ------------------------- +\def\tabu@strategy {\relax % stops \count@ assignment ! + \ifcase\count@ % case 0 = print with vertical adjustment (outer is finished) + \expandafter \tabu@endoftrials + \or % case 1 = exit in vertical measure (outer in mode 3) + \expandafter\xdef\csname tabu@\the\tabu@nested.T\endcsname{\the\tabu@target}% + \expandafter\xdef\csname tabu@\the\tabu@nested.X\endcsname{\the\tabucolX}% + \expandafter \tabu@endoftrials + \or % case 2 = exit with a rule replacing the table (outer in mode 4) + \expandafter \tabu@quickend + \or % case 3 = outer is in mode 3 because of no X + \begingroup + \tabu@evr{\tabu@verticalinit}\tabu@celllalign@def{\tabu@verticalmeasure}% + \def\tabu@cellralign{\tabu@verticalspacing}% + \expandafter \tabu@measuring + \else % case 4 = horizontal measure + \begingroup + \global\let\tabu@elapsedtime \tabu@message@etime + \long\def\multicolumn##1##2##3{\multispan{##1}}% + \let\tabu@startpboxORI \@startpbox + \iftabu@spread + \def\tabu@naturalXmax {\z@}% + \let\tabu@naturalXmin \tabu@naturalXmax + \tabu@evr{\global\tabu@naturalX \z@}% + \let\@startpbox \tabu@startpboxmeasure + \else\iftabu@negcoef + \let\@startpbox \tabu@startpboxmeasure + \else \let\@startpbox \tabu@startpboxquick + \fi\fi + \expandafter \tabu@measuring + \fi +}% \tabu@strategy +\def\tabu@measuring{\expandafter \tabu@trial \expandafter + \count@ \the\count@ \tabu@endtrial +}% \tabu@measuring +\def\tabu@trial{\iftabu@long \tabu@longtrial \else \tabu@shorttrial \fi} +\def\tabu@shorttrial {\setbox\tabu@box \hbox\bgroup \tabu@seteverycr + \ifx \tabu@savecounters\relax \else + \let\tabu@savecounters \relax \tabu@clckpt \fi + $\iftabuscantokens \tabu@rescan \else \expandafter\@secondoftwo \fi + \expandafter{\expandafter \tabuthepreamble + \the\tabu@thebody + \csname tabu@adl@endtrial\endcsname + \endarray}$\egroup % got \tabu@box +}% \tabu@shorttrial +\def\tabu@longtrial {\setbox\tabu@box \hbox\bgroup \tabu@seteverycr + \ifx \tabu@savecounters\relax \else + \let\tabu@savecounters \relax \tabu@clckpt \fi + \iftabuscantokens \tabu@rescan \else \expandafter\@secondoftwo \fi + \expandafter{\expandafter \tabuthepreamble + \the\tabu@thebody + \tabuendlongtrial}\egroup % got \tabu@box +}% \tabu@longtrial +\def\tabuendlongtrial{% no @ allowed for \scantokens + \LT@echunk \global\setbox\@ne \hbox{\unhbox\@ne}\kern\wd\@ne + \LT@get@widths +}% \tabuendlongtrial +\def\tabu@adl@endtrial{% <arydshln in nested trials - problem for global column counters!> + \crcr \noalign{\global\adl@ncol \tabu@nbcols}}% anything global is crap, junky and fails ! +\def\tabu@seteverycr {\tabu@reset + \everycr \expandafter{\the\everycr \tabu@everycr}% + \let\everycr \tabu@noeverycr % <for ialign> +}% \tabu@seteverycr +\def\tabu@noeverycr{{\aftergroup\tabu@restoreeverycr \afterassignment}\toks@} +\def\tabu@restoreeverycr {\let\everycr \tabu@@everycr} +\def\tabu@everycr {\iftabu@everyrow \noalign{\tabu@everyrow}\fi} +\def\tabu@endoftrials {% + \iftabuscantokens \expandafter\@firstoftwo + \else \expandafter\@secondoftwo + \fi + {\expandafter \tabu@closetrialsgroup \expandafter + \tabu@rescan \expandafter{% + \expandafter\tabuthepreamble + \the\expandafter\tabu@thebody + \iftabu@long \else \endarray \fi}} + {\expandafter\tabu@closetrialsgroup \expandafter + \tabuthepreamble + \the\tabu@thebody}% + \tabu@endenvir % Finish ! +}% \tabu@endoftrials +\def\tabu@closetrialsgroup {% + \toks@\expandafter{\tabu@endenvir}% + \edef\tabu@bufferX{\endgroup + \tabucolX \the\tabucolX + \tabu@target \the\tabu@target + \tabu@cnt \the\tabu@cnt + \def\noexpand\tabu@endenvir{\the\toks@}% + %Quid de \@halignto = \tabu@halignto ?? + }% \tabu@bufferX + \tabu@bufferX + \ifcase\tabu@nested % print out (outer in mode 0) + \global\tabu@cnt \tabu@cnt + \tabu@evr{\tabu@verticaldynamicadjustment}% + \tabu@celllalign@def{\everypar{}}\let\tabu@cellralign \@empty + \let\@finalstrut \tabu@finalstrut + \else % vertical measure of nested tabu + \tabu@evr{\tabu@verticalinit}% + \tabu@celllalign@def{\tabu@verticalmeasure}% + \def\tabu@cellralign{\tabu@verticalspacing}% + \fi + \tabu@clckpt \let\@halignto \tabu@halignto + \let\@halignto \@empty + \tabu@seteverycr + \ifdim \tabustrutrule>\z@ \ifnum\tabu@nested=\z@ + \setbox\@arstrutbox \box\voidb@x % force \@arstrutbox to be rebuilt (visible struts) + \fi\fi +}% \tabu@closetrialsgroup +\def\tabu@quickend {\expandafter \endgroup \expandafter + \tabu@target \the\tabu@target \tabu@quickrule + \let\endarray \relax \tabu@endenvir +}% \tabu@quickend +\def\tabu@endtrial {\relax % stops \count@ assignment ! + \ifcase \count@ \tabu@err % case 0 = impossible here + \or \tabu@err % case 1 = impossible here + \or \tabu@err % case 2 = impossible here + \or % case 3 = outer goes into mode 0 + \def\tabu@bufferX{\endgroup}\count@ \z@ + \else % case 4 = outer goes into mode 3 + \iftabu@spread \tabu@spreadarith % inner into mode 1 (outer in mode 3) + \else \tabu@arith % or 2 (outer in mode 4) + \fi + \count@=% + \ifcase\tabu@nested \thr@@ % outer goes into mode 3 + \else\iftabu@measuring \tw@ % outer is in mode 4 + \else \@ne % outer is in mode 3 + \fi\fi + \edef\tabu@bufferX{\endgroup + \tabucolX \the\tabucolX + \tabu@target \the\tabu@target}% + \fi + \expandafter \tabu@bufferX \expandafter + \count@ \the\count@ \tabu@strategy +}% \tabu@endtrial +\def\tabu@err{\errmessage{(tabu) Internal impossible error! (\count@=\the\count@)}} +%% The algorithms: compute the widths / stop or go on --------------- +\def\tabu@arithnegcoef {% + \@tempdima \z@ \dimen@ \z@ \let\tabu@ \tabu@arith@negcoef \tabu@Xcoefs +}% \tabu@arithnegcoef +\def\tabu@arith@negcoef #1#2{% + \ifdim #2\p@>\z@ \advance\dimen@ #2\p@ % saturated by definition + \advance\@tempdima #2\tabucolX + \else + \ifdim -#2\tabucolX <\tabu@wd{#1}% c_i X < natural width <= \tabu@target-> saturated + \advance\dimen@ -#2\p@ + \advance\@tempdima -#2\tabucolX + \else + \advance\@tempdima \tabu@wd{#1}% natural width <= c_i X => neutralised + \ifdim \tabu@wd{#1}<\tabu@target \else % neutralised + \advance\dimen@ -#2\p@ % saturated (natural width = tabu@target) + \fi + \fi + \fi +}% \tabu@arith@negcoef +\def\tabu@givespace #1#2{% here \tabu@DELTA < \z@ + \ifdim \@tempdima=\z@ + \tabu@wddef{#1}{\the\dimexpr -\tabu@DELTA*\p@/\tabu@Xsum}% + \else + \tabu@wddef{#1}{\the\dimexpr \tabu@hsize{#1}{#2} + *(\p@ -\tabu@DELTA*\p@/\@tempdima)/\p@\relax}% + \fi +}% \tabu@givespace +\def\tabu@arith {\advance\tabu@cnt \@ne + \ifnum \tabu@cnt=\@ne \tabu@message{\tabu@titles}\fi + \tabu@arithnegcoef + \@tempdimb \dimexpr \wd\tabu@box -\@tempdima \relax % <incompressible material> + \tabu@DELTA = \dimexpr \wd\tabu@box - \tabu@target \relax + \tabu@message{\tabu@message@arith}% + \ifdim \tabu@DELTA <\tabu@hfuzz + \ifdim \tabu@DELTA<\z@ % wd (tabu)<\tabu@target ? + \let\tabu@ \tabu@givespace \tabu@Xcoefs + \advance\@tempdima \@tempdimb \advance\@tempdima -\tabu@DELTA % for message + \else % already converged: nothing to do but nearly impossible... + \fi + \tabucolX \maxdimen + \tabu@measuringfalse + \else % need for narrower X columns + \tabucolX =\dimexpr (\@tempdima -\tabu@DELTA) *\p@/\tabu@Xsum \relax + \tabu@measuringtrue + \@whilesw \iftabu@measuring\fi {% + \advance\tabu@cnt \@ne + \tabu@arithnegcoef + \tabu@DELTA =\dimexpr \@tempdima+\@tempdimb -\tabu@target \relax % always < 0 here + \tabu@message{\tabu@header + \tabu@msgalign \tabucolX { }{ }{ }{ }{ }\@@ + \tabu@msgalign \@tempdima+\@tempdimb { }{ }{ }{ }{ }\@@ + \tabu@msgalign \tabu@target { }{ }{ }{ }{ }\@@ + \tabu@msgalign@PT \dimen@ { }{}{}{}{}{}{}\@@ + \ifdim -\tabu@DELTA<\tabu@hfuzz \tabu@spaces target ok\else + \tabu@msgalign \dimexpr -\tabu@DELTA *\p@/\dimen@ {}{}{}{}{}\@@ + \fi}% + \ifdim -\tabu@DELTA<\tabu@hfuzz + \advance\@tempdima \@tempdimb % for message + \tabu@measuringfalse + \else + \advance\tabucolX \dimexpr -\tabu@DELTA *\p@/\dimen@ \relax + \fi + }% + \fi + \tabu@message{\tabu@message@reached}% + \edef\tabu@bufferX{\endgroup \tabu@cnt \the\tabu@cnt + \tabucolX \the\tabucolX + \tabu@target \the\tabu@target}% +}% \tabu@arith +\def\tabu@spreadarith {% + \dimen@ \z@ \@tempdima \tabu@naturalXmax \let\tabu@ \tabu@spread@arith \tabu@Xcoefs + \edef\tabu@naturalXmin {\the\dimexpr\tabu@naturalXmin*\dimen@/\p@}% + \@tempdimc =\dimexpr \wd\tabu@box -\tabu@naturalXmax+\tabu@naturalXmin \relax + \iftabu@measuring + \tabu@target =\dimexpr \@tempdimc+\tabu@spreadtarget \relax + \edef\tabu@bufferX{\endgroup \tabucolX \the\tabucolX \tabu@target\the\tabu@target}% + \else + \tabu@message{\tabu@message@spreadarith}% + \ifdim \dimexpr \@tempdimc+\tabu@spreadtarget >\tabu@target + \tabu@message{(tabu) spread + \ifdim \@tempdimc>\tabu@target useless here: default target used% + \else too large: reduced to fit default target\fi.}% + \else + \tabu@target =\dimexpr \@tempdimc+\tabu@spreadtarget \relax + \tabu@message{(tabu) spread: New target set to \the\tabu@target^^J}% + \fi + \begingroup \let\tabu@wddef \@gobbletwo + \@tempdimb \@tempdima + \tabucolX@init + \tabu@arithnegcoef + \wd\tabu@box =\dimexpr \wd\tabu@box +\@tempdima-\@tempdimb \relax + \expandafter\endgroup \expandafter\tabucolX \the\tabucolX + \tabu@arith + \fi +}% \tabu@spreadarith +\def\tabu@spread@arith #1#2{% + \ifdim #2\p@>\z@ \advance\dimen@ #2\p@ + \else \advance\@tempdima \tabu@wd{#1}\relax + \fi +}% \tabu@spread@arith +%% Reporting in the .log file --------------------------------------- +\def\tabu@message@defaulttarget{% + \ifnum\tabu@nested=\z@^^J(tabu) Default target: + \ifx\tabudefaulttarget\linewidth \string\linewidth + \ifdim \tabu@thetarget=\linewidth \else + -\the\dimexpr\linewidth-\tabu@thetarget\fi = + \else\ifx\tabudefaulttarget\linegoal\string\linegoal= + \fi\fi + \else (tabu) Default target (nested): \fi + \the\tabu@target \on@line + \ifnum\tabu@nested=\z@ , page \the\c@page\fi} +\def\tabu@message@target {^^J(tabu) Target specified: + \the\tabu@target \on@line, page \the\c@page} +\def\tabu@message@arith {\tabu@header + \tabu@msgalign \tabucolX { }{ }{ }{ }{ }\@@ + \tabu@msgalign \wd\tabu@box { }{ }{ }{ }{ }\@@ + \tabu@msgalign \tabu@target { }{ }{ }{ }{ }\@@ + \tabu@msgalign@PT \dimen@ { }{}{}{}{}{}{}\@@ + \ifdim \tabu@DELTA<\tabu@hfuzz giving space\else + \tabu@msgalign \dimexpr (\@tempdima-\tabu@DELTA) *\p@/\tabu@Xsum -\tabucolX {}{}{}{}{}\@@ + \fi +}% \tabu@message@arith +\def\tabu@message@spreadarith {\tabu@spreadheader + \tabu@msgalign \tabu@spreadtarget { }{ }{ }{ }{}\@@ + \tabu@msgalign \wd\tabu@box { }{ }{ }{ }{}\@@ + \tabu@msgalign -\tabu@naturalXmax { }{}{}{}{}\@@ + \tabu@msgalign \tabu@naturalXmin { }{ }{ }{ }{}\@@ + \tabu@msgalign \ifdim \dimexpr\@tempdimc>\tabu@target \tabu@target + \else \@tempdimc+\tabu@spreadtarget \fi + {}{}{}{}{}\@@} +\def\tabu@message@negcoef #1#2{ + \tabu@spaces\tabu@spaces\space * #1. X[\rem@pt#2]: + \space width = \tabu@wd {#1} + \expandafter\string\csname tabu@\the\tabu@nested.W\number#1\endcsname + \ifdim -\tabu@pt#2\tabucolX<\tabu@target + < \number-\rem@pt#2 X + = \the\dimexpr -\tabu@pt#2\tabucolX \relax + \else + <= \the\tabu@target\space < \number-\rem@pt#2 X\fi} +\def\tabu@message@reached{\tabu@header + ******* Reached Target: + hfuzz = \tabu@hfuzz\on@line\space *******} +\def\tabu@message@etime{\edef\tabu@stoptime{\the\pdfelapsedtime}% + \tabu@message{(tabu)\tabu@spaces Time elapsed during measure: + \the\numexpr(\tabu@stoptime-\tabu@starttime-32767)/65536\relax sec + \the\numexpr\numexpr(\tabu@stoptime-\tabu@starttime) + -\numexpr(\tabu@stoptime-\tabu@starttime-32767)/65536\relax*65536\relax + *1000/65536\relax ms \tabu@spaces(\the\tabu@cnt\space + cycle\ifnum\tabu@cnt>\@ne s\fi)^^J^^J}} +\def\tabu@message@verticalsp {% + \ifdim \@tempdima>\tabu@ht + \ifdim \@tempdimb>\tabu@dp + \expandafter\expandafter\expandafter\string\tabu@ht = + \tabu@msgalign \@tempdima { }{ }{ }{ }{ }\@@ + \expandafter\expandafter\expandafter\string\tabu@dp = + \tabu@msgalign \@tempdimb { }{ }{ }{ }{ }\@@^^J% + \else + \expandafter\expandafter\expandafter\string\tabu@ht = + \tabu@msgalign \@tempdima { }{ }{ }{ }{ }\@@^^J% + \fi + \else\ifdim \@tempdimb>\tabu@dp + \tabu@spaces\tabu@spaces\tabu@spaces + \expandafter\expandafter\expandafter\string\tabu@dp = + \tabu@msgalign \@tempdimb { }{ }{ }{ }{ }\@@^^J\fi + \fi +}% \tabu@message@verticalsp +\edef\tabu@spaces{\@spaces} +\def\tabu@strippt{\expandafter\tabu@pt\the} +{\@makeother\P \@makeother\T\lowercase{\gdef\tabu@pt #1PT{#1}}} +\def\tabu@msgalign{\expandafter\tabu@msg@align\the\dimexpr} +\def\tabu@msgalign@PT{\expandafter\tabu@msg@align\romannumeral-`\0\tabu@strippt} +\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) }% + \def\tabu@titles{\ifnum \tabu@nested=\z@ + (tabu) Try#1 #1 tabu X #1 #1 #1tabu Width #1 #1 Target + #1 #1 #1 Coefs #1 #1 #1 Update^^J\fi}% + \def\tabu@spreadheader{% + (tabu) Try#1 #1 Spread #1 #1 tabu Width #1 #1 #1 Nat. X #1 #1 #1 #1Nat. Min. + #1 New Target^^J% + (tabu) sprd} + \def\tabu@message@save {\begingroup + \def\x ####1{\tabu@msg@align ####1{ }{ }{ }{ }{}\@@} + \def\z ####1{\expandafter\x\expandafter{\romannumeral-`\0\tabu@strippt + \dimexpr####1\p@{ }{ }}}% + \let\color \relax \def\tabu@rulesstyle ####1####2{\detokenize{####1}}% + \let\CT@arc@ \relax \let\@preamble \@gobble + \let\tabu@savedpream \@firstofone + \let\tabu@savedparams \@firstofone + \def\tabu@target ####1\relax {(tabu) target #1 #1 #1 #1 #1 = \x{####1}^^J}% + \def\tabucolX ####1\relax {(tabu) X columns width#1 = \x{####1}^^J}% + \def\tabu@nbcols ####1\relax {(tabu) Number of columns: \z{####1}^^J}% + \def\tabu@aligndefault ####1{(tabu) Default alignment: #1 #1 ####1^^J}% + \def\col@sep ####1\relax {(tabu) column sep #1 #1 #1 = \x{####1}^^J}% + \def\arrayrulewidth ####1\relax{(tabu) arrayrulewidth #1 = \x{####1}}% + \def\doublerulesep ####1\relax { doublerulesep = \x{####1}^^J}% + \def\extratabsurround####1\relax{(tabu) extratabsurround = \x{####1}^^J}% + \def\extrarowheight ####1\relax{(tabu) extrarowheight #1 = \x{####1}}% + \def\extrarowdepth ####1\relax {extrarowdepth = \x{####1}^^J}% + \def\abovetabulinesep####1\relax{(tabu) abovetabulinesep=\x{####1} }% + \def\belowtabulinesep####1\relax{ belowtabulinesep=\x{####1}^^J}% + \def\arraystretch ####1{(tabu) arraystretch #1 #1 = \z{####1}^^J}% + \def\minrowclearance####1\relax{(tabu) minrowclearance #1 = \x{####1}^^J}% + \def\tabu@arc@L ####1{(tabu) taburulecolor #1 #1 = ####1^^J}% + \def\tabu@drsc@L ####1{(tabu) tabudoublerulecolor= ####1^^J}% + \def\tabu@evr@L ####1{(tabu) everyrow #1 #1 #1 #1 = \detokenize{####1}^^J}% + \def\tabu@ls@L ####1{(tabu) line style = \detokenize{####1}^^J}% + \def\NC@find ####1\@nil{(tabu) tabu preamble#1 #1 = \detokenize{####1}^^J}% + \def\tabu@wddef####1####2{(tabu) Natural width ####1 = \x{####2}^^J}% + \let\edef \@gobbletwo \let\def \@empty \let\let \@gobbletwo + \tabu@message{% + (tabu) \string\savetabu{\tabu@temp}: \on@line^^J% + \tabu@usetabu \@nil^^J}% + \endgroup} +}\do{ } +%% Measuring the natural width (varwidth) - store the results ------- +\def\tabu@startpboxmeasure #1{\bgroup % entering \vtop + \edef\tabu@temp{\expandafter\@secondoftwo \ifx\tabu@hsize #1\else\relax\fi}% + \ifodd 1\ifx \tabu@temp\@empty 0 \else % starts with \tabu@hsize ? + \iftabu@spread \else % if spread -> measure + \ifdim \tabu@temp\p@>\z@ 0 \fi\fi\fi% if coef>0 -> do not measure + \let\@startpbox \tabu@startpboxORI % restore immediately (nesting) + \tabu@measuringtrue % for the quick option... + \tabu@Xcol =\expandafter\@firstoftwo\ifx\tabu@hsize #1\fi + \ifdim \tabu@temp\p@>\z@ \ifdim \tabu@temp\tabucolX<\tabu@target + \tabu@target=\tabu@temp\tabucolX \fi\fi + \setbox\tabu@box \hbox \bgroup + \begin{varwidth}\tabu@target + \let\FV@ListProcessLine \tabu@FV@ListProcessLine % \hbox to natural width... + \narrowragged \arraybackslash \parfillskip \@flushglue + \ifdefined\pdfadjustspacing \pdfadjustspacing\z@ \fi + \bgroup \aftergroup\tabu@endpboxmeasure + \ifdefined \cellspacetoplimit \tabu@cellspacepatch \fi + \else \expandafter\@gobble + \tabu@startpboxquick{#1}% \@gobble \bgroup + \fi +}% \tabu@startpboxmeasure +\def\tabu@cellspacepatch{\def\bcolumn##1\@nil{}\let\ecolumn\@empty + \bgroup\color@begingroup} +\def\tabu@endpboxmeasure {% + \@finalstrut \@arstrutbox + \end{varwidth}\egroup % <got my \tabu@box> + \ifdim \tabu@temp\p@ <\z@ % neg coef + \ifdim \tabu@wd\tabu@Xcol <\wd\tabu@box + \tabu@wddef\tabu@Xcol {\the\wd\tabu@box}% + \tabu@debug{\tabu@message@endpboxmeasure}% + \fi + \else % spread coef>0 + \global\advance \tabu@naturalX \wd\tabu@box + \@tempdima =\dimexpr \wd\tabu@box *\p@/\dimexpr \tabu@temp\p@\relax \relax + \ifdim \tabu@naturalXmax <\tabu@naturalX + \xdef\tabu@naturalXmax {\the\tabu@naturalX}\fi + \ifdim \tabu@naturalXmin <\@tempdima + \xdef\tabu@naturalXmin {\the\@tempdima}\fi + \fi + \box\tabu@box \egroup % end of \vtop (measure) restore \tabu@target +}% \tabu@endpboxmeasure +\def\tabu@wddef #1{\expandafter\xdef + \csname tabu@\the\tabu@nested.W\number#1\endcsname} +\def\tabu@wd #1{\csname tabu@\the\tabu@nested.W\number#1\endcsname} +\def\tabu@message@endpboxmeasure{\tabu@spaces\tabu@spaces<-> % <-> save natural wd + \the\tabu@Xcol. X[\tabu@temp]: + target = \the\tabucolX \space + \expandafter\expandafter\expandafter\string\tabu@wd\tabu@Xcol + =\tabu@wd\tabu@Xcol +}% \tabu@message@endpboxmeasure +\def\tabu@startpboxquick {\bgroup + \let\@startpbox \tabu@startpboxORI % restore immediately + \let\tabu \tabu@quick % \begin is expanded before... + \expandafter\@gobble \@startpbox % gobbles \bgroup +}% \tabu@startpboxquick +\def\tabu@quick {\begingroup \iffalse{\fi \ifnum0=`}\fi + \toks@{}\def\tabu@stack{b}\tabu@collectbody \tabu@endquick +}% \tabu@quick +\def\tabu@endquick {% + \ifodd 1\ifx\tabu@end@envir\tabu@endtabu \else + \ifx\tabu@end@envir\tabu@endtabus \else 0\fi\fi\relax + \endgroup + \else \let\endtabu \relax + \tabu@end@envir + \fi +}% \tabu@quick +\def\tabu@endtabu {\end{tabu}} +\def\tabu@endtabus {\end{tabu*}} +%% Measuring the heights and depths - store the results ------------- +\def\tabu@verticalmeasure{\everypar{}% + \ifnum \currentgrouptype>12 % 14=semi-simple, 15=math shift group + \setbox\tabu@box =\hbox\bgroup + \let\tabu@verticalspacing \tabu@verticalsp@lcr + \d@llarbegin % after \hbox ... + \else + \edef\tabu@temp{\ifnum\currentgrouptype=5\vtop + \else\ifnum\currentgrouptype=12\vcenter + \else\vbox\fi\fi}% + \setbox\tabu@box \hbox\bgroup$\tabu@temp \bgroup + \let\tabu@verticalspacing \tabu@verticalsp@pmb + \fi +}% \tabu@verticalmeasure +\def\tabu@verticalsp@lcr{% + \d@llarend \egroup % <got my \tabu@box> + \@tempdima \dimexpr \ht\tabu@box+\abovetabulinesep + \@tempdimb \dimexpr \dp\tabu@box+\belowtabulinesep \relax + \ifdim\tabustrutrule>\z@ \tabu@debug{\tabu@message@verticalsp}\fi + \ifdim \tabu@ht<\@tempdima \tabu@htdef{\the\@tempdima}\fi + \ifdim \tabu@dp<\@tempdimb \tabu@dpdef{\the\@tempdimb}\fi + \noindent\vrule height\@tempdima depth\@tempdimb +}% \tabu@verticalsp@lcr +\def\tabu@verticalsp@pmb{% inserts struts as needed + \par \expandafter\egroup + \expandafter$\expandafter + \egroup \expandafter + \@tempdimc \the\prevdepth + \@tempdima \dimexpr \ht\tabu@box+\abovetabulinesep + \@tempdimb \dimexpr \dp\tabu@box+\belowtabulinesep \relax + \ifdim\tabustrutrule>\z@ \tabu@debug{\tabu@message@verticalsp}\fi + \ifdim \tabu@ht<\@tempdima \tabu@htdef{\the\@tempdima}\fi + \ifdim \tabu@dp<\@tempdimb \tabu@dpdef{\the\@tempdimb}\fi + \let\@finalstrut \@gobble + \hrule height\@tempdima depth\@tempdimb width\hsize +%% \box\tabu@box +}% \tabu@verticalsp@pmb + +\def\tabu@verticalinit{% + \ifnum \c@taburow=\z@ \tabu@rearstrut \fi % after \tabu@reset ! + \advance\c@taburow \@ne + \tabu@htdef{\the\ht\@arstrutbox}\tabu@dpdef{\the\dp\@arstrutbox}% + \advance\c@taburow \m@ne +}% \tabu@verticalinit +\def\tabu@htdef {\expandafter\xdef \csname tabu@\the\tabu@nested.H\the\c@taburow\endcsname} +\def\tabu@ht {\csname tabu@\the\tabu@nested.H\the\c@taburow\endcsname} +\def\tabu@dpdef {\expandafter\xdef \csname tabu@\the\tabu@nested.D\the\c@taburow\endcsname} +\def\tabu@dp {\csname tabu@\the\tabu@nested.D\the\c@taburow\endcsname} +\def\tabu@verticaldynamicadjustment {% + \advance\c@taburow \@ne + \extrarowheight \dimexpr\tabu@ht - \ht\strutbox + \extrarowdepth \dimexpr\tabu@dp - \dp\strutbox + \let\arraystretch \@empty + \advance\c@taburow \m@ne +}% \tabu@verticaldynamicadjustment +\def\tabuphantomline{\crcr \noalign{% + {\globaldefs \@ne + \setbox\@arstrutbox \box\voidb@x + \let\tabu@@celllalign \tabu@celllalign + \let\tabu@@cellralign \tabu@cellralign + \let\tabu@@cellleft \tabu@cellleft + \let\tabu@@cellright \tabu@cellright + \let\tabu@@thevline \tabu@thevline + \let\tabu@celllalign \@empty + \let\tabu@cellralign \@empty + \let\tabu@cellright \@empty + \let\tabu@cellleft \@empty + \let\tabu@thevline \relax}% + \edef\tabu@temp{\tabu@multispan \tabu@nbcols{\noindent &}}% + \toks@\expandafter{\tabu@temp \noindent\tabu@everyrowfalse \cr + \noalign{\tabu@rearstrut + {\globaldefs\@ne + \let\tabu@celllalign \tabu@@celllalign + \let\tabu@cellralign \tabu@@cellralign + \let\tabu@cellleft \tabu@@cellleft + \let\tabu@cellright \tabu@@cellright + \let\tabu@thevline \tabu@@thevline}}}% + \expandafter}\the\toks@ +}% \tabuphantomline +%% \firsthline and \lasthline corrections --------------------------- +\def\tabu@firstline {\tabu@hlineAZ \tabu@firsthlinecorrection {}} +\def\tabu@firsthline{\tabu@hlineAZ \tabu@firsthlinecorrection \hline} +\def\tabu@lastline {\tabu@hlineAZ \tabu@lasthlinecorrection {}} +\def\tabu@lasthline {\tabu@hlineAZ \tabu@lasthlinecorrection \hline} +\def\tabu@hline {% replaces \hline if no colortbl (see \AtBeginDocument) + \noalign{\ifnum0=`}\fi + {\CT@arc@\hrule height\arrayrulewidth}% + \futurelet \tabu@temp \tabu@xhline +}% \tabu@hline +\def\tabu@xhline{% + \ifx \tabu@temp \hline + {\ifx \CT@drsc@\relax \vskip + \else\ifx \CT@drsc@\@empty \vskip + \else \CT@drsc@\hrule height + \fi\fi + \doublerulesep}% + \fi + \ifnum0=`{\fi}% +}% \tabu@xhline +\def\tabu@hlineAZ #1#2{\noalign{\ifnum0=`}\fi \dimen@ \z@ \count@ \z@ + \toks@{}\def\tabu@hlinecorrection{#1}\def\tabu@temp{#2}% + \tabu@hlineAZsurround +}% \tabu@hlineAZ +\newcommand*\tabu@hlineAZsurround[1][\extratabsurround]{% + \extratabsurround #1\let\tabucline \tabucline@scan + \let\hline \tabu@hlinescan \let\firsthline \hline + \let\cline \tabu@clinescan \let\lasthline \hline + \expandafter \futurelet \expandafter \tabu@temp + \expandafter \tabu@nexthlineAZ \tabu@temp +}% \tabu@hlineAZsurround +\def\tabu@hlinescan {\tabu@thick \arrayrulewidth \tabu@xhlineAZ \hline} +\def\tabu@clinescan #1{\tabu@thick \arrayrulewidth \tabu@xhlineAZ {\cline{#1}}} +\def\tabucline@scan{\@testopt \tabucline@sc@n {}} +\def\tabucline@sc@n #1[#2]{\tabu@xhlineAZ {\tabucline[{#1}]{#2}}} +\def\tabu@nexthlineAZ{% + \ifx \tabu@temp\hline \else + \ifx \tabu@temp\cline \else + \ifx \tabu@temp\tabucline \else + \tabu@hlinecorrection + \fi\fi\fi +}% \tabu@nexthlineAZ +\def\tabu@xhlineAZ #1{% + \toks@\expandafter{\the\toks@ #1}% + \@tempdimc \tabu@thick % The last line width + \ifcase\count@ \@tempdimb \tabu@thick % The first line width + \else \advance\dimen@ \dimexpr \tabu@thick+\doublerulesep \relax + \fi + \advance\count@ \@ne \futurelet \tabu@temp \tabu@nexthlineAZ +}% \tabu@xhlineAZ +\def\tabu@firsthlinecorrection{% \count@ = number of \hline -1 + \@tempdima \dimexpr \ht\@arstrutbox+\dimen@ + \edef\firsthline{% <local in \noalign> + \omit \hbox to\z@{\hss{\noexpand\tabu@DBG{yellow}\vrule + height \the\dimexpr\@tempdima+\extratabsurround + depth \dp\@arstrutbox + width \tabustrutrule}\hss}\cr + \noalign{\vskip -\the\dimexpr \@tempdima+\@tempdimb + +\dp\@arstrutbox \relax}% + \the\toks@ + }\ifnum0=`{\fi + \expandafter}\firsthline % we are then ! +}% \tabu@firsthlinecorrection +\def\tabu@lasthlinecorrection{% + \@tempdima \dimexpr \dp\@arstrutbox+\dimen@+\@tempdimb+\@tempdimc + \edef\lasthline{% <local in \noalign> + \the\toks@ + \noalign{\vskip -\the\dimexpr\dimen@+\@tempdimb+\dp\@arstrutbox}% + \omit \hbox to\z@{\hss{\noexpand\tabu@DBG{yellow}\vrule + depth \the\dimexpr \dp\@arstrutbox+\@tempdimb+\dimen@ + +\extratabsurround-\@tempdimc + height \z@ + width \tabustrutrule}\hss}\cr + }\ifnum0=`{\fi + \expandafter}\lasthline % we are then ! +}% \tabu@lasthlinecorrection +\def\tabu@LT@@hline{% + \ifx\LT@next\hline + \global\let\LT@next \@gobble + \ifx \CT@drsc@\relax + \gdef\CT@LT@sep{% + \noalign{\penalty-\@medpenalty\vskip\doublerulesep}}% + \else + \gdef\CT@LT@sep{% + \multispan\LT@cols{% + \CT@drsc@\leaders\hrule\@height\doublerulesep\hfill}\cr}% + \fi + \else + \global\let\LT@next\empty + \gdef\CT@LT@sep{% + \noalign{\penalty-\@lowpenalty\vskip-\arrayrulewidth}}% + \fi + \ifnum0=`{\fi}% + \multispan\LT@cols + {\CT@arc@\leaders\hrule\@height\arrayrulewidth\hfill}\cr + \CT@LT@sep + \multispan\LT@cols + {\CT@arc@\leaders\hrule\@height\arrayrulewidth\hfill}\cr + \noalign{\penalty\@M}% + \LT@next +}% \tabu@LT@@hline +%% Horizontal lines : \tabucline ------------------------------------ +\let\tabu@start \@tempcnta +\let\tabu@stop \@tempcntb +\newcommand*\tabucline{\noalign{\ifnum0=`}\fi \tabu@cline} +\newcommand*\tabu@cline[2][]{\tabu@startstop{#2}% + \ifnum \tabu@stop<\z@ \toks@{}% + \else \tabu@clinearg{#1}\tabu@thestyle + \edef\tabucline{\toks@{% + \ifnum \tabu@start>\z@ \omit + \tabu@multispan\tabu@start {\span\omit}&\fi + \omit \tabu@multispan\tabu@stop {\span\omit}% + \tabu@thehline\cr + }}\tabucline + \tabu@tracinglines{(tabu:tabucline) Style: #1^^J\the\toks@^^J^^J}% + \fi + \futurelet \tabu@temp \tabu@xcline +}% \tabu@cline +\def\tabu@clinearg #1{% + \ifx\\#1\\\let\tabu@thestyle \tabu@ls@ + \else \@defaultunits \expandafter\let\expandafter\@tempa + \romannumeral-`\0#1\relax \@nnil + \ifx \hbox\@tempa \tabu@clinebox{#1}% + \else\ifx \box\@tempa \tabu@clinebox{#1}% + \else\ifx \vbox\@tempa \tabu@clinebox{#1}% + \else\ifx \vtop\@tempa \tabu@clinebox{#1}% + \else\ifx \copy\@tempa \tabu@clinebox{#1}% + \else\ifx \leaders\@tempa \tabu@clineleads{#1}% + \else\ifx \cleaders\@tempa \tabu@clineleads{#1}% + \else\ifx \xleaders\@tempa \tabu@clineleads{#1}% + \else\tabu@getline {#1}% + \fi\fi\fi\fi\fi\fi\fi\fi + \fi +}% \tabu@clinearg +\def\tabu@clinebox #1{\tabu@clineleads{\xleaders#1\hss}} +\def\tabu@clineleads #1{% + \let\tabu@thestyle \relax \let\tabu@leaders \@undefined + \gdef\tabu@thehrule{#1}} +\def\tabu@thehline{\begingroup + \ifdefined\tabu@leaders + \noexpand\tabu@thehleaders + \else \noexpand\tabu@thehrule + \fi \endgroup +}% \tabu@thehline +\def\tabu@xcline{% + \ifx \tabu@temp\tabucline + \toks@\expandafter{\the\toks@ \noalign + {\ifx\CT@drsc@\relax \vskip + \else \CT@drsc@\hrule height + \fi + \doublerulesep}}% + \fi + \tabu@docline +}% \tabu@xcline +\def\tabu@docline {\ifnum0=`{\fi \expandafter}\the\toks@} +\def\tabu@docline@evr {\xdef\tabu@doclineafter{\the\toks@}% + \ifnum0=`{\fi}\aftergroup\tabu@doclineafter} +\def\tabu@multispan #1#2{% + \ifnum\numexpr#1>\@ne #2\expandafter\tabu@multispan + \else \expandafter\@gobbletwo + \fi {#1-1}{#2}% +}% \tabu@multispan +\def\tabu@startstop #1{\tabu@start@stop #1\relax 1-\tabu@nbcols \@nnil} +\def\tabu@start@stop #1-#2\@nnil{% + \@defaultunits \tabu@start\number 0#1\relax \@nnil + \@defaultunits \tabu@stop \number 0#2\relax \@nnil + \tabu@stop \ifnum \tabu@start>\tabu@nbcols \m@ne + \else\ifnum \tabu@stop=\z@ \tabu@nbcols + \else\ifnum \tabu@stop>\tabu@nbcols \tabu@nbcols + \else \tabu@stop + \fi\fi\fi + \advance\tabu@start \m@ne + \ifnum \tabu@start>\z@ \advance\tabu@stop -\tabu@start \fi +}% \tabu@start@stop +%% Numbers: siunitx S columns (and \tabudecimal) ------------------- +\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 +%% Verbatim inside X columns ---------------------------------------- +\def\tabu@verbatim{% + \let\verb \tabu@verb + \let\FV@DefineCheckEnd \tabu@FV@DefineCheckEnd +}% \tabu@verbatim +\let\tabu@ltx@verb \verb +\def\tabu@verb{\@ifstar {\tabu@ltx@verb*} \tabu@ltx@verb} +\def\tabu@fancyvrb {% + \def\tabu@FV@DefineCheckEnd ##1{% + \def\tabu@FV@DefineCheckEnd{% + ##1% <original definition (if fancyvrb is loaded)> + \let\FV@CheckEnd \tabu@FV@CheckEnd + \let\FV@@CheckEnd \tabu@FV@@CheckEnd + \let\FV@@@CheckEnd \tabu@FV@@@CheckEnd + \edef\FV@EndScanning{% + \def\noexpand\next{\noexpand\end{\FV@EnvironName}}% + \global\let\noexpand\FV@EnvironName\relax + \noexpand\next}% + \xdef\FV@EnvironName{\detokenize\expandafter{\FV@EnvironName}}}% + }\expandafter\tabu@FV@DefineCheckEnd\expandafter{\FV@DefineCheckEnd} +}% \tabu@fancyvrb +\def\tabu@FV@CheckEnd #1{\expandafter\FV@@CheckEnd \detokenize{#1\end{}}\@nil} +\edef\tabu@FV@@@CheckEnd {\detokenize{\end{}}} +\begingroup +\catcode`\[1 \catcode`\]2 +\@makeother\{ \@makeother\} + \edef\x[\endgroup + \def\noexpand\tabu@FV@@CheckEnd ##1\detokenize[\end{]##2\detokenize[}]##3% + ]\x \@nil{\def\@tempa{#2}\def\@tempb{#3}} +\def\tabu@FV@ListProcessLine #1{% + \hbox {%to \hsize{% + \kern\leftmargin + \hbox {%to \linewidth{% + \FV@LeftListNumber + \FV@LeftListFrame + \FancyVerbFormatLine{#1}\hss +%% DG/SR modification begin - Jan. 28, 1998 (for numbers=right add-on) +%% \FV@RightListFrame}% + \FV@RightListFrame + \FV@RightListNumber}% +%% DG/SR modification end + \hss}} +%% \savetabu -------------------------------------------------------- +\newcommand*\savetabu[1]{\noalign{% + \tabu@sanitizearg{#1}\tabu@temp + \ifx \tabu@temp\@empty \tabu@savewarn{}{The tabu will not be saved}\else + \@ifundefined{tabu@saved@\tabu@temp}{}{\tabu@savewarn{#1}{Overwriting}}% + \ifdefined\tabu@restored \expandafter\let + \csname tabu@saved@\tabu@temp \endcsname \tabu@restored + \else {\tabu@save}% + \fi + \fi}% +}% \savetabu +\def\tabu@save {% + \toks0\expandafter{\tabu@saved@}% + \iftabu@negcoef + \let\tabu@wddef \relax \let\tabu@ \tabu@savewd \edef\tabu@savewd{\tabu@Xcoefs}% + \toks0\expandafter{\the\toks\expandafter0\tabu@savewd}\fi + \toks1\expandafter{\tabu@savedpream}% + \toks2\expandafter{\tabu@savedpreamble}% + \let\@preamble \relax + \let\tabu@savedpream \relax \let\tabu@savedparams \relax + \edef\tabu@preamble{% + \def\noexpand\tabu@aligndefault{\tabu@align}% + \def\tabu@savedparams {\noexpand\the\toks0}% + \def\tabu@savedpream {\noexpand\the\toks1}}% + \edef\tabu@usetabu{% + \def\@preamble {\noexpand\the\toks2}% + \tabu@target \the\tabu@target \relax + \tabucolX \the\tabucolX \relax + \tabu@nbcols \the\tabu@nbcols \relax + \def\noexpand\tabu@aligndefault{\tabu@align}% + \def\tabu@savedparams {\noexpand\the\toks0}% + \def\tabu@savedpream {\noexpand\the\toks1}}% + \let\tabu@aligndefault \relax \let\@sharp \relax + \edef\@tempa{\noexpand\tabu@s@ved + {\tabu@usetabu} + {\tabu@preamble} + {\the\toks1}}\@tempa + \tabu@message@save +}% \tabu@save +\long\def\tabu@s@ved #1#2#3{% + \def\tabu@usetabu{#1}% <for \tabu@message@save> + \expandafter\gdef\csname tabu@saved@\tabu@temp\endcsname ##1{% + \ifodd ##1% \usetabu + \tabu@measuringfalse \tabu@spreadfalse % Just in case... + \gdef\tabu@usetabu {% + \ifdim \tabu@target>\z@ \tabu@warn@usetabu \fi + \global\let\tabu@usetabu \@undefined + \def\@halignto {to\tabu@target}% + #1% + \ifx \tabu@align\tabu@aligndefault@text + \ifnum \tabu@nested=\z@ + \let\tabu@align \tabu@aligndefault \fi\fi}% + \else % \preamble + \gdef\tabu@preamble {% + \global\let\tabu@preamble \@undefined + #2% + \ifx \tabu@align\tabu@aligndefault@text + \ifnum \tabu@nested=\z@ + \let\tabu@align \tabu@aligndefault \fi\fi}% + \fi + #3}% +}% \tabu@s@ved +\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#2{\ifdim #2\p@<\z@ \tabu@wddef{#1}{\tabu@wd{#1}}\fi} +\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} +%% \rowfont --------------------------------------------------------- +\newskip \tabu@cellskip +\def\tabu@rowfont{\ifdim \baselineskip=\z@\noalign\fi + {\ifnum0=`}\fi \tabu@row@font} +\newcommand*\tabu@row@font[2][]{% + \ifnum7=\currentgrouptype + \global\let\tabu@@cellleft \tabu@cellleft + \global\let\tabu@@cellright \tabu@cellright + \global\let\tabu@@celllalign \tabu@celllalign + \global\let\tabu@@cellralign \tabu@cellralign + \global\let\tabu@@rowfontreset\tabu@rowfontreset + \fi + \global\let\tabu@rowfontreset \tabu@rowfont@reset + \expandafter\gdef\expandafter\tabu@cellleft\expandafter{\tabu@cellleft #2}% + \ifcsname tabu@cell@#1\endcsname % row alignment + \csname tabu@cell@#1\endcsname \fi + \ifnum0=`{\fi}% end of group / noalign group +}% \rowfont +\def\tabu@ifcolorleavevmode #1{\let\color \tabu@leavevmodecolor #1\let\color\tabu@color}% +\def\tabu@rowfont@reset{% + \global\let\tabu@rowfontreset \tabu@@rowfontreset + \global\let\tabu@cellleft \tabu@@cellleft + \global\let\tabu@cellright \tabu@@cellright + \global\let\tabu@cellfont \@empty + \global\let\tabu@celllalign \tabu@@celllalign + \global\let\tabu@cellralign \tabu@@cellralign +}% \tabu@@rowfontreset +\let\tabu@rowfontreset \@empty % overwritten \AtBeginDocument if colortbl +%% \tabu@prepnext@tok ----------------------------------------------- +\newif \iftabu@cellright +\def\tabu@prepnext@tok{% + \ifnum \count@<\z@ % <first initialisation> + \@tempcnta \@M % <not initialized by array.sty> + \tabu@nbcols\z@ + \let\tabu@fornoopORI \@fornoop + \tabu@cellrightfalse + \else + \ifcase \numexpr \count@-\@tempcnta \relax % (case 0): prev. token is left + \advance \tabu@nbcols \@ne + \iftabu@cellright % before-previous token is right and is finished + \tabu@cellrightfalse % <only once> + \tabu@righttok + \fi + \tabu@lefttok + \or % (case 1) previous token is right + \tabu@cellrighttrue \let\@fornoop \tabu@lastnoop + \else % special column: do not change the token + \iftabu@cellright % before-previous token is right + \tabu@cellrightfalse + \tabu@righttok + \fi + \fi % \ifcase + \fi + \tabu@prepnext@tokORI +}% \tabu@prepnext@tok +\long\def\tabu@lastnoop#1\@@#2#3{\tabu@lastn@@p #2\@nextchar \in@\in@@} +\def\tabu@lastn@@p #1\@nextchar #2#3\in@@{% + \ifx \in@#2\else + \let\@fornoop \tabu@fornoopORI + \xdef\tabu@mkpreambuffer{\tabu@nbcols\the\tabu@nbcols \tabu@mkpreambuffer}% + \toks0\expandafter{\expandafter\tabu@everyrowtrue \the\toks0}% + \expandafter\prepnext@tok + \fi +}% \tabu@lastnoop +\def\tabu@righttok{% + \advance \count@ \m@ne + \toks\count@\expandafter {\the\toks\count@ \tabu@cellright \tabu@cellralign}% + \advance \count@ \@ne +}% \tabu@righttok +\def\tabu@lefttok{\toks\count@\expandafter{\expandafter\tabu@celllalign + \the\toks\count@ \tabu@cellleft}% after because of $ +}% \tabu@lefttok +%% Neutralisation of glues ------------------------------------------ +\let\tabu@cellleft \@empty +\let\tabu@cellright \@empty +\tabu@celllalign@def{\tabu@cellleft}% +\let\tabu@cellralign \@empty +\def\tabu@cell@align #1#2#3{% + \let\tabu@maybesiunitx \toks@ \tabu@celllalign + \global \expandafter \tabu@celllalign@def \expandafter {\the\toks@ #1}% + \toks@\expandafter{\tabu@cellralign #2}% + \xdef\tabu@cellralign{\the\toks@}% + \toks@\expandafter{\tabu@cellleft #3}% + \xdef\tabu@cellleft{\the\toks@}% +}% \tabu@cell@align +\def\tabu@cell@l{% force alignment to left + \tabu@cell@align + {\tabu@removehfil \raggedright \tabu@cellleft}% left + {\tabu@flush1\tabu@ignorehfil}% right + \raggedright +}% \tabu@cell@l +\def\tabu@cell@c{% force alignment to center + \tabu@cell@align + {\tabu@removehfil \centering \tabu@flush{.5}\tabu@cellleft} + {\tabu@flush{.5}\tabu@ignorehfil} + \centering +}% \tabu@cell@c +\def\tabu@cell@r{% force alignment to right + \tabu@cell@align + {\tabu@removehfil \raggedleft \tabu@flush1\tabu@cellleft} + \tabu@ignorehfil + \raggedleft +}% \tabu@cell@r +\def\tabu@cell@j{% force justification (for p, m, b columns) + \tabu@cell@align + {\tabu@justify\tabu@cellleft} + {} + \tabu@justify +}% \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) + \tabu@cell@align + {\tabu@removehfil \RaggedRight \tabu@cellleft} + {\tabu@flush 1\tabu@ignorehfil} + \RaggedRight +}% \tabu@cell@L +\def\tabu@cell@C{% force alignment to center (ragged2e) + \tabu@cell@align + {\tabu@removehfil \Centering \tabu@flush{.5}\tabu@cellleft} + {\tabu@flush{.5}\tabu@ignorehfil} + \Centering +}% \tabu@cell@C +\def\tabu@cell@R{% force alignment to right (ragged2e) + \tabu@cell@align + {\tabu@removehfil \RaggedLeft \tabu@flush 1\tabu@cellleft} + \tabu@ignorehfil + \RaggedLeft +}% \tabu@cell@R +\def\tabu@cell@J{% force justification (ragged2e) + \tabu@cell@align + {\justifying \tabu@cellleft} + {} + \justifying +}% \tabu@cell@J +\def\tabu@flush#1{% + \iftabu@colortbl % colortbl uses \hfill rather than \hfil + \hskip \ifnum13<\currentgrouptype \stretch{#1}% + \else \ifdim#1pt<\p@ \tabu@cellskip + \else \stretch{#1} + \fi\fi \relax + \else % array.sty + \ifnum 13<\currentgrouptype + \hfil \hskip1sp \relax \fi + \fi +}% \tabu@flush +\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} +\def\tabu@nohfil{% \hfil -> do nothing + restore original \hfil + \def\hfil{\let\hfil \tabu@hfil}% local to (alignment template) group +}% \tabu@nohfil +\def\tabu@colortblalignments {% if 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 +}% \tabu@colortblalignments +%% Taking care of footnotes and hyperfootnotes ---------------------- +\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 +%% No need for \arraybackslash ! ------------------------------------ +\def\tabu@latextwoe {% +\def\tabu@temp##1##2##3{{\toks@\expandafter{##2##3}\xdef##1{\the\toks@}}} +\tabu@temp \tabu@centering \centering \arraybackslash +\tabu@temp \tabu@raggedleft \raggedleft \arraybackslash +\tabu@temp \tabu@raggedright \raggedright \arraybackslash +}% \tabu@latextwoe +\def\tabu@raggedtwoe {% +\def\tabu@temp ##1##2##3{{\toks@\expandafter{##2##3}\xdef##1{\the\toks@}}} +\tabu@temp \tabu@Centering \Centering \arraybackslash +\tabu@temp \tabu@RaggedLeft \RaggedLeft \arraybackslash +\tabu@temp \tabu@RaggedRight \RaggedRight \arraybackslash +\tabu@temp \tabu@justifying \justifying \arraybackslash +}% \tabu@raggedtwoe +\def\tabu@normalcrbackslash{\let\\\@normalcr} +\def\tabu@trivlist{\expandafter\def\expandafter\@trivlist\expandafter{% + \expandafter\tabu@normalcrbackslash \@trivlist}} +%% Utilities: \fbox \fcolorbox and \tabudecimal ------------------- +\def\tabu@fbox {\leavevmode\afterassignment\tabu@beginfbox \setbox\@tempboxa\hbox} +\def\tabu@beginfbox {\bgroup \kern\fboxsep + \bgroup\aftergroup\tabu@endfbox} +\def\tabu@endfbox {\kern\fboxsep\egroup\egroup + \@frameb@x\relax} +\def\tabu@color@b@x #1#2{\leavevmode \bgroup + \def\tabu@docolor@b@x{#1{#2\color@block{\wd\z@}{\ht\z@}{\dp\z@}\box\z@}}% + \afterassignment\tabu@begincolor@b@x \setbox\z@ \hbox +}% \tabu@color@b@x +\def\tabu@begincolor@b@x {\kern\fboxsep \bgroup + \aftergroup\tabu@endcolor@b@x \set@color} +\def\tabu@endcolor@b@x {\kern\fboxsep \egroup + \dimen@\ht\z@ \advance\dimen@ \fboxsep \ht\z@ \dimen@ + \dimen@\dp\z@ \advance\dimen@ \fboxsep \dp\z@ \dimen@ + \tabu@docolor@b@x \egroup +}% \tabu@endcolor@b@x +%% Corrections (arydshln, delarray, colortbl) ----------------------- +\def\tabu@fix@arrayright {%% \@arrayright is missing from \endarray + \iftabu@colortbl + \ifdefined\adl@array % <colortbl + arydshln> + \def\tabu@endarray{% + \adl@endarray \egroup \adl@arrayrestore \CT@end \egroup %<original> + \@arrayright % <FC> + \gdef\@preamble{}}% <FC> + \else % <colortbl / no arydshln> + \def\tabu@endarray{% + \crcr \egroup \egroup %<original> + \@arrayright % <FC> + \gdef\@preamble{}\CT@end}% + \fi + \else + \ifdefined\adl@array % <arydshln / no colortbl> + \def\tabu@endarray{% + \adl@endarray \egroup \adl@arrayrestore \egroup %<original> + \@arrayright % <FC> + \gdef\@preamble{}}% <FC> + \else % <no arydshln / no colotbl + \@arrayright missing> + \PackageWarning{tabu} + {\string\@arrayright\space is missing from the + \MessageBreak definition of \string\endarray. + \MessageBreak Compatibility with delarray.sty is broken.}% + \fi\fi +}% \tabu@fix@arrayright +\def\tabu@adl@xarraydashrule #1#2#3{% + \ifnum\@lastchclass=\adl@class@start\else + \ifnum\@lastchclass=\@ne\else + \ifnum\@lastchclass=5 \else % <FC> @-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 % <fix> arydshln + \let\adl@act@endpbox \tabu@adl@act@endpbox % <fix> arydshln + \let\adl@act@@endpbox \tabu@adl@act@endpbox % <fix> arydshln + \let\@preamerror \@preamerr % <fix> arydshln +}% \tabu@adl@fix +%% Correction for longtable' \@startbox definition ------------------ +%% => \everypar is ``missing'' : TeX should be in vertical mode +\def\tabu@LT@startpbox #1{% + \bgroup + \let\@footnotetext\LT@p@ftntext + \setlength\hsize{#1}% + \@arrayparboxrestore + \everypar{% + \vrule \@height \ht\@arstrutbox \@width \z@ + \everypar{}}% +}% \tabu@LT@startpbox +%% \tracingtabu and the package options ------------------ +\DeclareOption{delarray}{\AtEndOfPackage{\RequirePackage{delarray}}} +\DeclareOption{linegoal}{% + \AtEndOfPackage{% + \RequirePackage{linegoal}[2010/12/07]% + \let\tabudefaulttarget \linegoal% \linegoal is \linewidth if not pdfTeX +}} +\DeclareOption{scantokens}{\tabuscantokenstrue} +\DeclareOption{debugshow}{\AtEndOfPackage{\tracingtabu=\tw@}} +\def\tracingtabu {\begingroup\@ifnextchar=% + {\afterassignment\tabu@tracing\count@} + {\afterassignment\tabu@tracing\count@1\relax}} +\def\tabu@tracing{\expandafter\endgroup + \expandafter\tabu@tr@cing \the\count@ \relax +}% \tabu@tracing +\def\tabu@tr@cing #1\relax {% + \ifnum#1>\thr@@ \let\tabu@tracinglines\message + \else \let\tabu@tracinglines\@gobble + \fi + \ifnum#1>\tw@ \let\tabu@DBG \tabu@@DBG + \def\tabu@mkarstrut {\tabu@DBG@arstrut}% + \tabustrutrule 1.5\p@ + \else \let\tabu@DBG \@gobble + \def\tabu@mkarstrut {\tabu@arstrut}% + \tabustrutrule \z@ + \fi + \ifnum#1>\@ne \let\tabu@debug \message + \else \let\tabu@debug \@gobble + \fi + \ifnum#1>\z@ + \let\tabu@message \message + \let\tabu@tracing@save \tabu@message@save + \let\tabu@starttimer \tabu@pdftimer + \else + \let\tabu@message \@gobble + \let\tabu@tracing@save \@gobble + \let\tabu@starttimer \relax + \fi +}% \tabu@tr@cing +%% Setup \AtBeginDocument +\AtBeginDocument{\tabu@AtBeginDocument} +\def\tabu@AtBeginDocument{\let\tabu@AtBeginDocument \@undefined + \ifdefined\arrayrulecolor \tabu@colortbltrue % <colortbl> + \tabu@colortblalignments % different glues are used + \else \tabu@colortblfalse \fi + \ifdefined\CT@arc@ \else \let\CT@arc@ \relax \fi + \ifdefined\CT@drsc@\else \let\CT@drsc@ \relax \fi + \let\tabu@arc@L \CT@arc@ \let\tabu@drsc@L \CT@drsc@ + \ifodd 1\ifcsname siunitx_table_collect_begin:Nn\endcsname % <siunitx: ok> + \expandafter\ifx + \csname siunitx_table_collect_begin:Nn\endcsname\relax 0\fi\fi\relax + \tabu@siunitxtrue + \else \let\tabu@maybesiunitx \@firstofone % <not siunitx: setup> + \let\tabu@siunitx \tabu@nosiunitx + \tabu@siunitxfalse + \fi + \ifdefined\adl@array % <arydshln> + \else \let\tabu@adl@fix \relax + \let\tabu@adl@endtrial \@empty \fi + \ifdefined\longtable % <longtable> + \else \let\longtabu \tabu@nolongtabu \fi + \ifdefined\cellspacetoplimit \tabu@warn@cellspace\fi + \csname\ifcsname ifHy@hyperfootnotes\endcsname % <hyperfootnotes> + ifHy@hyperfootnotes\else iffalse\fi\endcsname + \let\tabu@footnotetext \tabu@Hy@ftntext + \let\tabu@xfootnote \tabu@Hy@xfootnote \fi + \ifdefined\FV@DefineCheckEnd% <fancyvrb> + \tabu@fancyvrb \fi + \ifdefined\color % <color / xcolor> + \let\tabu@color \color + \def\tabu@leavevmodecolor ##1{% + \def\tabu@leavevmodecolor {\leavevmode ##1}% + }\expandafter\tabu@leavevmodecolor\expandafter{\color}% + \else + \let\tabu@color \tabu@nocolor + \let\tabu@leavevmodecolor \@firstofone \fi + \tabu@latextwoe + \ifdefined\@raggedtwoe@everyselectfont % <ragged2e> + \tabu@raggedtwoe + \else + \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 \fi + \expandafter\in@ \expandafter\@arrayright \expandafter{\endarray}% + \ifin@ \let\tabu@endarray \endarray + \else \tabu@fix@arrayright \fi% <fix for colortbl & arydshln (delarray)> + \everyrow{}% +}% \tabu@AtBeginDocument +\def\tabu@warn@cellspace{% + \PackageWarning{tabu}{% + Package cellspace has some limitations + \MessageBreak And redefines some macros of array.sty. + \MessageBreak Please use \string\tabulinesep\space to control + \MessageBreak vertical spacing of lines inside tabu environment}% +}% \tabu@warn@cellspace +%% tabu Package initialisation +\tabuscantokensfalse +\let\tabu@arc@G \relax +\let\tabu@drsc@G \relax +\let\tabu@evr@G \@empty +\let\tabu@rc@G \@empty +\def\tabu@ls@G {\tabu@linestyle@}% +\let\tabu@@rowfontreset \@empty % <init> +\let\tabu@@celllalign \@empty +\let\tabu@@cellralign \@empty +\let\tabu@@cellleft \@empty +\let\tabu@@cellright \@empty +\def\tabu@naturalXmin {\z@} +\def\tabu@naturalXmax {\z@} +\let\tabu@rowfontreset \@empty +\def\tabulineon {4pt}\let\tabulineoff \tabulineon +\tabu@everyrowtrue +\ifdefined\pdfelapsedtime % <pdfTeX> + \def\tabu@pdftimer {\xdef\tabu@starttime{\the\pdfelapsedtime}}% +\else \let\tabu@pdftimer \relax \let\tabu@message@etime \relax +\fi +\tracingtabu=\z@ +\newtabulinestyle {=\maxdimen}% creates the 'factory' settings \tabu@linestyle@ +\tabulinestyle{} +\taburowcolors{} +\let\tabudefaulttarget \linewidth +\ProcessOptions* % \ProcessOptions* is quicker ! +\endinput +%% +%% End of file `tabu.sty'. |