1%% 2%% This is file `tabu.sty', 3%% generated with the docstrip utility. 4%% 5%% The original source files were: 6%% 7%% tabu.dtx (with options: `package') 8%% 9%% This is a generated file. 10%% Copyright (FC) 2010-2011 - lppl 11%% 12%% tabu : 2011/02/26 v2.8 - tabu : Flexible LaTeX tabulars 13%% 14%% ********************************************************************************************** 15%% \begin{tabu} { preamble } => default target: \linewidth or \linegoal 16%% \begin{tabu} to <dimen>{ preamble } => target specified 17%% \begin{tabu} spread <dimen>{ preamble } => target relative to the ``natural width'' 18%% 19%% tabu works in text and in math modes. 20%% 21%% X columns: automatic width adjustment + horizontal and vertical alignment 22%% \begin{tabu} { X[4c] X[1c] X[-2ml] } 23%% 24%% Horizontal lines and / or leaders: 25%% \hline\hline => double horizontal line 26%% \firsthline\hline => for nested tabulars 27%% \lasthline\hline => for nested tabulars 28%% \tabucline[line spec]{column-column} => ``funny'' lines (dash/leader) 29%% Automatic lines / leaders : 30%% \everyrow{\hline\hline} 31%% 32%% Vertical lines and / or leaders: 33%% \begin{tabu} { |[3pt red] X[4c] X[1c] X[-2ml] |[3pt blue] } 34%% \begin{tabu} { |[3pt red] X[4c] X[1c] X[-2ml] |[3pt on 2pt off 4pt blue] } 35%% 36%% Fixed vertical spacing adjustment: 37%% \extrarowheight=<dimen> \extrarowdepth=<dimen> 38%% or: \extrarowsep=<dimen> => may be prefixed by \global 39%% 40%% Dynamic vertical spacing adjustment: 41%% \abovetabulinesep=<dimen> \belowtabulinesep=<dimen> 42%% or: \tabulinesep=<dimen> => may be prefixed by \global 43%% 44%% delarray.sty shortcuts: in math and text modes 45%% \begin{tabu} .... \({ preamble }\) 46%% 47%% Algorithms reports: 48%% \tracingtabu=1 \tracingtabu=2 49%% 50%% ********************************************************************************************** 51%% 52%% This work may be distributed and/or modified under the 53%% conditions of the LaTeX Project Public License, either 54%% version 1.3 of this license or (at your option) any later 55%% version. The latest version of this license is in 56%% http://www.latex-project.org/lppl.txt 57%% 58%% This work consists of the main source file tabu.dtx 59%% and the derived files 60%% tabu.sty, tabu.pdf, tabu.ins 61%% 62%% tabu : Flexible LaTeX tabulars 63%% lppl copyright 2010-2011 by FC <florent.chervet@free.fr> 64%% 65 66\NeedsTeXFormat{LaTeX2e}[2005/12/01] 67\ProvidesPackage{tabu_doxygen}[2011/02/26 v2.8 - flexible LaTeX tabulars (FC), frozen version for doxygen] 68\RequirePackage{array}[2008/09/09] 69\RequirePackage{varwidth}[2009/03/30] 70\AtEndOfPackage{\tabu@AtEnd \let\tabu@AtEnd \@undefined} 71\let\tabu@AtEnd\@empty 72\def\TMP@EnsureCode#1={% 73 \edef\tabu@AtEnd{\tabu@AtEnd 74 \catcode#1 \the\catcode#1}% 75 \catcode#1=% 76}% \TMP@EnsureCode 77\TMP@EnsureCode 33 = 12 % ! 78\TMP@EnsureCode 58 = 12 % : (for siunitx) 79\TMP@EnsureCode124 = 12 % | 80\TMP@EnsureCode 36 = 3 % $ = math shift 81\TMP@EnsureCode 38 = 4 % & = tab alignment character 82\TMP@EnsureCode 32 = 10 % space 83\TMP@EnsureCode 94 = 7 % ^ 84\TMP@EnsureCode 95 = 8 % _ 85%% Constants -------------------------------------------------------- 86\newcount \c@taburow \def\thetaburow {\number\c@taburow} 87\newcount \tabu@nbcols 88\newcount \tabu@cnt 89\newcount \tabu@Xcol 90\let\tabu@start \@tempcnta 91\let\tabu@stop \@tempcntb 92\newcount \tabu@alloc \tabu@alloc=\m@ne 93\newcount \tabu@nested 94\def\tabu@alloc@{\global\advance\tabu@alloc \@ne \tabu@nested\tabu@alloc} 95\newdimen \tabu@target 96\newdimen \tabu@spreadtarget 97\newdimen \tabu@naturalX 98\newdimen \tabucolX 99\let\tabu@DELTA \@tempdimc 100\let\tabu@thick \@tempdima 101\let\tabu@on \@tempdimb 102\let\tabu@off \@tempdimc 103\newdimen \tabu@Xsum 104\newdimen \extrarowdepth 105\newdimen \abovetabulinesep 106\newdimen \belowtabulinesep 107\newdimen \tabustrutrule \tabustrutrule \z@ 108\newtoks \tabu@thebody 109\newtoks \tabu@footnotes 110\newsavebox \tabu@box 111\newsavebox \tabu@arstrutbox 112\newsavebox \tabu@hleads 113\newsavebox \tabu@vleads 114\newif \iftabu@colortbl 115\newif \iftabu@siunitx 116\newif \iftabu@measuring 117\newif \iftabu@spread 118\newif \iftabu@negcoef 119\newif \iftabu@everyrow 120\def\tabu@everyrowtrue {\global\let\iftabu@everyrow \iftrue} 121\def\tabu@everyrowfalse{\global\let\iftabu@everyrow \iffalse} 122\newif \iftabu@long 123\newif \iftabuscantokens 124\def\tabu@rescan {\tabu@verbatim \scantokens } 125%% Utilities (for internal usage) ----------------------------------- 126\def\tabu@gobblespace #1 {#1} 127\def\tabu@gobbletoken #1#2{#1} 128\def\tabu@gobbleX{\futurelet\@let@token \tabu@gobblex} 129\def\tabu@gobblex{\if ^^J\noexpand\@let@token \expandafter\@gobble 130 \else\ifx \@sptoken\@let@token 131 \expandafter\tabu@gobblespace\expandafter\tabu@gobbleX 132 \fi\fi 133}% \tabu@gobblex 134\def\tabu@X{^^J} 135{\obeyspaces 136\global\let\tabu@spxiii= % saves an active space (for \ifx) 137\gdef\tabu@@spxiii{ }} 138\def\tabu@ifenvir {% only for \multicolumn 139 \expandafter\tabu@if@nvir\csname\@currenvir\endcsname 140}% \tabu@ifenvir 141\def\tabu@if@nvir #1{\csname @\ifx\tabu#1first\else 142 \ifx\longtabu#1first\else 143 second\fi\fi oftwo\endcsname 144}% \tabu@ifenvir 145\def\tabu@modulo #1#2{\numexpr\ifnum\numexpr#1=\z@ 0\else #1-(#1-(#2-1)/2)/(#2)*(#2)\fi} 146{\catcode`\&=3 147\gdef\tabu@strtrim #1{% #1 = control sequence to trim 148 \ifodd 1\ifx #1\@empty \else \ifx #1\space \else 0\fi \fi 149 \let\tabu@c@l@r \@empty \let#1\@empty 150 \else \expandafter \tabu@trimspaces #1\@nnil 151 \fi 152}% \tabu@strtrim 153\gdef\tabu@trimspaces #1\@nnil{\let\tabu@c@l@r=#2\tabu@firstspace .#1& }% 154\gdef\tabu@firstspace #1#2#3 &{\tabu@lastspace #2#3&} 155\gdef\tabu@lastspace #1{\def #3{#1}% 156 \ifx #3\tabu@c@l@r \def\tabu@c@l@r{\protect\color{#1}}\expandafter\remove@to@nnil \fi 157 \tabu@trimspaces #1\@nnil} 158}% \catcode 159\def\tabu@sanitizearg #1#2{{% 160 \csname \ifcsname if@safe@actives\endcsname % <babel> 161 @safe@activestrue\else 162 relax\fi \endcsname 163 \edef#2{#1}\tabu@strtrim#2\@onelevel@sanitize#2% 164 \expandafter}\expandafter\def\expandafter#2\expandafter{#2}% 165}% \tabu@sanitizearg 166\def\tabu@textbar #1{\begingroup \endlinechar\m@ne \scantokens{\def\:{|}}% 167 \expandafter\endgroup \expandafter#1\:% !!! semi simple group !!! 168}% \tabu@textbar 169\def\tabu@everyrow@bgroup{\iftabu@everyrow \begingroup \else \noalign{\ifnum0=`}\fi \fi} 170\def\tabu@everyrow@egroup{% 171 \iftabu@everyrow \expandafter \endgroup \the\toks@ 172 \else \ifnum0=`{\fi}% 173 \fi 174}% \tabu@everyrow@egroup 175\def\tabu@arstrut {\global\setbox\@arstrutbox \hbox{\vrule 176 height \arraystretch \dimexpr\ht\strutbox+\extrarowheight 177 depth \arraystretch \dimexpr\dp\strutbox+\extrarowdepth 178 width \z@}% 179}% \tabu@arstrut 180\def\tabu@rearstrut {% 181 \@tempdima \arraystretch\dimexpr\ht\strutbox+\extrarowheight \relax 182 \@tempdimb \arraystretch\dimexpr\dp\strutbox+\extrarowdepth \relax 183 \ifodd 1\ifdim \ht\@arstrutbox=\@tempdima 184 \ifdim \dp\@arstrutbox=\@tempdimb 0 \fi\fi 185 \tabu@mkarstrut 186 \fi 187}% \tabu@rearstrut 188\def\tabu@@DBG #1{\ifdim\tabustrutrule>\z@ \color{#1}\fi} 189\def\tabu@DBG@arstrut {\global\setbox\@arstrutbox 190 \hbox to\z@{\hbox to\z@{\hss 191 {\tabu@DBG{cyan}\vrule 192 height \arraystretch \dimexpr\ht\strutbox+\extrarowheight 193 depth \z@ 194 width \tabustrutrule}\kern-\tabustrutrule 195 {\tabu@DBG{pink}\vrule 196 height \z@ 197 depth \arraystretch \dimexpr\dp\strutbox+\extrarowdepth 198 width \tabustrutrule}}}% 199}% \tabu@DBG@arstrut 200\def\tabu@save@decl{\toks\count@ \expandafter{\the\toks\expandafter\count@ 201 \@nextchar}}% 202\def\tabu@savedecl{\ifcat$\d@llarend\else 203 \let\save@decl \tabu@save@decl \fi % no inversion of tokens in text mode 204}% \tabu@savedecl 205\def\tabu@finalstrut #1{\unskip\ifhmode\nobreak\fi\vrule height\z@ depth\z@ width\z@} 206\newcommand*\tabuDisableCommands {\g@addto@macro\tabu@trialh@@k } 207\let\tabu@trialh@@k \@empty 208\def\tabu@nowrite #1#{{\afterassignment}\toks@} 209\let\tabu@write\write 210\let\tabu@immediate\immediate 211\def\tabu@WRITE{\begingroup 212 \def\immediate\write{\aftergroup\endgroup 213 \tabu@immediate\tabu@write}% 214}% \tabu@WRITE 215\expandafter\def\expandafter\tabu@GenericError\expandafter{% 216 \expandafter\tabu@WRITE\GenericError} 217\def\tabu@warn{\tabu@WRITE\PackageWarning{tabu}} 218\def\tabu@noxfootnote [#1]{\@gobble} 219\def\tabu@nocolor #1#{\@gobble} 220\newcommand*\tabu@norowcolor[2][]{} 221\def\tabu@maybesiunitx #1{\def\tabu@temp{#1}% 222 \futurelet\@let@token \tabu@m@ybesiunitx} 223\def\tabu@m@ybesiunitx #1{\def\tabu@m@ybesiunitx {% 224 \ifx #1\@let@token \let\tabu@cellleft \@empty \let\tabu@cellright \@empty \fi 225 \tabu@temp}% \tabu@m@ybesiunitx 226}\expandafter\tabu@m@ybesiunitx \csname siunitx_table_collect_begin:Nn\endcsname 227\def\tabu@celllalign@def #1{\def\tabu@celllalign{\tabu@maybesiunitx{#1}}}% 228%% Fixed vertical spacing adjustment: \extrarowsep ------------------ 229\newcommand*\extrarowsep{\edef\tabu@C@extra{\the\numexpr\tabu@C@extra+1}% 230 \iftabu@everyrow \aftergroup\tabu@Gextra 231 \else \aftergroup\tabu@n@Gextra 232 \fi 233 \@ifnextchar={\tabu@gobbletoken\tabu@extra} \tabu@extra 234}% \extrarowsep 235\def\tabu@extra {\@ifnextchar_% 236 {\tabu@gobbletoken{\tabu@setextra\extrarowheight \extrarowdepth}} 237 {\ifx ^\@let@token \def\tabu@temp{% 238 \tabu@gobbletoken{\tabu@setextra\extrarowdepth \extrarowheight}}% 239 \else \let\tabu@temp \@empty 240 \afterassignment \tabu@setextrasep \extrarowdepth 241 \fi \tabu@temp}% 242}% \tabu@extra 243\def\tabu@setextra #1#2{\def\tabu@temp{\tabu@extr@#1#2}\afterassignment\tabu@temp#2} 244\def\tabu@extr@ #1#2{\@ifnextchar^% 245 {\tabu@gobbletoken{\tabu@setextra\extrarowdepth \extrarowheight}} 246 {\ifx _\@let@token \def\tabu@temp{% 247 \tabu@gobbletoken{\tabu@setextra\extrarowheight \extrarowdepth}}% 248 \else \let\tabu@temp \@empty 249 \tabu@Gsave \tabu@G@extra \tabu@C@extra \extrarowheight \extrarowdepth 250 \fi \tabu@temp}% 251}% \tabu@extr@ 252\def\tabu@setextrasep {\extrarowheight=\extrarowdepth 253 \tabu@Gsave \tabu@G@extra \tabu@C@extra \extrarowheight \extrarowdepth 254}% \tabu@setextrasep 255\def\tabu@Gextra{\ifx \tabu@G@extra\@empty \else {\tabu@Rextra}\fi} 256\def\tabu@n@Gextra{\ifx \tabu@G@extra\@empty \else \noalign{\tabu@Rextra}\fi} 257\def\tabu@Rextra{\tabu@Grestore \tabu@G@extra \tabu@C@extra} 258\let\tabu@C@extra \z@ 259\let\tabu@G@extra \@empty 260%% Dynamic vertical spacing adjustment: \tabulinesep ---------------- 261\newcommand*\tabulinesep{\edef\tabu@C@linesep{\the\numexpr\tabu@C@linesep+1}% 262 \iftabu@everyrow \aftergroup\tabu@Glinesep 263 \else \aftergroup\tabu@n@Glinesep 264 \fi 265 \@ifnextchar={\tabu@gobbletoken\tabu@linesep} \tabu@linesep 266}% \tabulinesep 267\def\tabu@linesep {\@ifnextchar_% 268 {\tabu@gobbletoken{\tabu@setsep\abovetabulinesep \belowtabulinesep}} 269 {\ifx ^\@let@token \def\tabu@temp{% 270 \tabu@gobbletoken{\tabu@setsep\belowtabulinesep \abovetabulinesep}}% 271 \else \let\tabu@temp \@empty 272 \afterassignment \tabu@setlinesep \abovetabulinesep 273 \fi \tabu@temp}% 274}% \tabu@linesep 275\def\tabu@setsep #1#2{\def\tabu@temp{\tabu@sets@p#1#2}\afterassignment\tabu@temp#2} 276\def\tabu@sets@p #1#2{\@ifnextchar^% 277 {\tabu@gobbletoken{\tabu@setsep\belowtabulinesep \abovetabulinesep}} 278 {\ifx _\@let@token \def\tabu@temp{% 279 \tabu@gobbletoken{\tabu@setsep\abovetabulinesep \belowtabulinesep}}% 280 \else \let\tabu@temp \@empty 281 \tabu@Gsave \tabu@G@linesep \tabu@C@linesep \abovetabulinesep \belowtabulinesep 282 \fi \tabu@temp}% 283}% \tabu@sets@p 284\def\tabu@setlinesep {\belowtabulinesep=\abovetabulinesep 285 \tabu@Gsave \tabu@G@linesep \tabu@C@linesep \abovetabulinesep \belowtabulinesep 286}% \tabu@setlinesep 287\def\tabu@Glinesep{\ifx \tabu@G@linesep\@empty \else {\tabu@Rlinesep}\fi} 288\def\tabu@n@Glinesep{\ifx \tabu@G@linesep\@empty \else \noalign{\tabu@Rlinesep}\fi} 289\def\tabu@Rlinesep{\tabu@Grestore \tabu@G@linesep \tabu@C@linesep} 290\let\tabu@C@linesep \z@ 291\let\tabu@G@linesep \@empty 292%% \global\extrarowsep and \global\tabulinesep ------------------- 293\def\tabu@Gsave #1#2#3#4{\xdef#1{#1% 294 \toks#2{\toks\the\currentgrouplevel{\global#3\the#3\global#4\the#4}}}% 295}% \tabu@Gsave 296\def\tabu@Grestore#1#2{% 297 \toks#2{}#1\toks\currentgrouplevel\expandafter{\expandafter}\the\toks#2\relax 298 \ifcat$\the\toks\currentgrouplevel$\else 299 \global\let#1\@empty \global\let#2\z@ 300 \the\toks\currentgrouplevel 301 \fi 302}% \tabu@Grestore 303%% Setting code for every row --------------------------------------- 304\newcommand*\everyrow{\tabu@everyrow@bgroup 305 \tabu@start \z@ \tabu@stop \z@ \tabu@evrstartstop 306}% \everyrow 307\def\tabu@evrstartstop {\@ifnextchar^% 308 {\afterassignment \tabu@evrstartstop \tabu@stop=}% 309 {\ifx ^\@let@token 310 \afterassignment\tabu@evrstartstop \tabu@start=% 311 \else \afterassignment\tabu@everyr@w \toks@ 312 \fi}% 313}% \tabu@evrstartstop 314\def\tabu@everyr@w {% 315 \xdef\tabu@everyrow{% 316 \noexpand\tabu@everyrowfalse 317 \let\noalign \relax 318 \noexpand\tabu@rowfontreset 319 \iftabu@colortbl \noexpand\tabu@rc@ \fi % \taburowcolors 320 \let\noexpand\tabu@docline \noexpand\tabu@docline@evr 321 \the\toks@ 322 \noexpand\tabu@evrh@@k 323 \noexpand\tabu@rearstrut 324 \global\advance\c@taburow \@ne}% 325 \iftabu@everyrow \toks@\expandafter 326 {\expandafter\def\expandafter\tabu@evr@L\expandafter{\the\toks@}\ignorespaces}% 327 \else \xdef\tabu@evr@G{\the\toks@}% 328 \fi 329 \tabu@everyrow@egroup 330}% \tabu@everyr@w 331\def\tabu@evr {\def\tabu@evrh@@k} % for internal use only 332\tabu@evr{} 333%% line style and leaders ------------------------------------------- 334\newcommand*\newtabulinestyle [1]{% 335 {\@for \@tempa :=#1\do{\expandafter\tabu@newlinestyle \@tempa==\@nil}}% 336}% \newtabulinestyle 337\def\tabu@newlinestyle #1=#2=#3\@nil{\tabu@getline {#2}% 338 \tabu@sanitizearg {#1}\@tempa 339 \ifodd 1\ifx \@tempa\@empty \ifdefined\tabu@linestyle@ 0 \fi\fi 340 \global\expandafter\let 341 \csname tabu@linestyle@\@tempa \endcsname =\tabu@thestyle \fi 342}% \tabu@newlinestyle 343\newcommand*\tabulinestyle [1]{\tabu@everyrow@bgroup \tabu@getline{#1}% 344 \iftabu@everyrow 345 \toks@\expandafter{\expandafter \def \expandafter 346 \tabu@ls@L\expandafter{\tabu@thestyle}\ignorespaces}% 347 \gdef\tabu@ls@{\tabu@ls@L}% 348 \else 349 \global\let\tabu@ls@G \tabu@thestyle 350 \gdef\tabu@ls@{\tabu@ls@G}% 351 \fi 352 \tabu@everyrow@egroup 353}% \tabulinestyle 354\newcommand*\taburulecolor{\tabu@everyrow@bgroup \tabu@textbar \tabu@rulecolor} 355\def\tabu@rulecolor #1{\toks@{}% 356 \def\tabu@temp #1##1#1{\tabu@ruledrsc{##1}}\@ifnextchar #1% 357 \tabu@temp 358 \tabu@rulearc 359}% \tabu@rulecolor 360\def\tabu@ruledrsc #1{\edef\tabu@temp{#1}\tabu@strtrim\tabu@temp 361 \ifx \tabu@temp\@empty \def\tabu@temp{\tabu@rule@drsc@ {}{}}% 362 \else \edef\tabu@temp{\noexpand\tabu@rule@drsc@ {}{\tabu@temp}}% 363 \fi 364 \tabu@temp 365}% \tabu@ruledrsc@ 366\def\tabu@ruledrsc@ #1#{\tabu@rule@drsc@ {#1}} 367\def\tabu@rule@drsc@ #1#2{% 368 \iftabu@everyrow 369 \ifx \\#1#2\\\toks@{\let\CT@drsc@ \relax}% 370 \else \toks@{\def\CT@drsc@{\color #1{#2}}}% 371 \fi 372 \else 373 \ifx \\#1#2\\\global\let\CT@drsc@ \relax 374 \else \gdef\CT@drsc@{\color #1{#2}}% 375 \fi 376 \fi 377 \tabu@rulearc 378}% \tabu@rule@drsc@ 379\def\tabu@rulearc #1#{\tabu@rule@arc@ {#1}} 380\def\tabu@rule@arc@ #1#2{% 381 \iftabu@everyrow 382 \ifx \\#1#2\\\toks@\expandafter{\the\toks@ \def\CT@arc@{}}% 383 \else \toks@\expandafter{\the\toks@ \def\CT@arc@{\color #1{#2}}}% 384 \fi 385 \toks@\expandafter{\the\toks@ 386 \let\tabu@arc@L \CT@arc@ 387 \let\tabu@drsc@L \CT@drsc@ 388 \ignorespaces}% 389 \else 390 \ifx \\#1#2\\\gdef\CT@arc@{}% 391 \else \gdef\CT@arc@{\color #1{#2}}% 392 \fi 393 \global\let\tabu@arc@G \CT@arc@ 394 \global\let\tabu@drsc@G \CT@drsc@ 395 \fi 396 \tabu@everyrow@egroup 397}% \tabu@rule@arc@ 398\def\taburowcolors {\tabu@everyrow@bgroup \@testopt \tabu@rowcolors 1} 399\def\tabu@rowcolors [#1]#2#{\tabu@rowc@lors{#1}{#2}} 400\def\tabu@rowc@lors #1#2#3{% 401 \toks@{}\@defaultunits \count@ =\number0#2\relax \@nnil 402 \@defaultunits \tabu@start =\number0#1\relax \@nnil 403 \ifnum \count@<\tw@ \count@=\tw@ \fi 404 \advance\tabu@start \m@ne 405 \ifnum \tabu@start<\z@ \tabu@start \z@ \fi 406 \tabu@rowcolorseries #3\in@..\in@ \@nnil 407}% \tabu@rowcolors 408\def\tabu@rowcolorseries #1..#2\in@ #3\@nnil {% 409 \ifx \in@#1\relax 410 \iftabu@everyrow \toks@{\def\tabu@rc@{}\let\tabu@rc@L \tabu@rc@}% 411 \else \gdef\tabu@rc@{}\global\let\tabu@rc@G \tabu@rc@ 412 \fi 413 \else 414 \ifx \\#2\\\tabu@rowcolorserieserror \fi 415 \tabu@sanitizearg{#1}\tabu@temp 416 \tabu@sanitizearg{#2}\@tempa 417 \advance\count@ \m@ne 418 \iftabu@everyrow 419 \def\tabu@rc@ ##1##2##3##4{\def\tabu@rc@{% 420 \ifnum ##2=\c@taburow 421 \definecolorseries{tabu@rcseries@\the\tabu@nested}{rgb}{last}{##3}{##4}\fi 422 \ifnum \c@taburow<##2 \else 423 \ifnum \tabu@modulo {\c@taburow-##2}{##1+1}=\z@ 424 \resetcolorseries[{##1}]{tabu@rcseries@\the\tabu@nested}\fi 425 \xglobal\colorlet{tabu@rc@\the\tabu@nested}{tabu@rcseries@\the\tabu@nested!!+}% 426 \rowcolor{tabu@rc@\the\tabu@nested}\fi}% 427 }\edef\x{\noexpand\tabu@rc@ {\the\count@} 428 {\the\tabu@start} 429 {\tabu@temp} 430 {\@tempa}% 431 }\x 432 \toks@\expandafter{\expandafter\def\expandafter\tabu@rc@\expandafter{\tabu@rc@}}% 433 \toks@\expandafter{\the\toks@ \let\tabu@rc@L \tabu@rc@ \ignorespaces}% 434 \else % inside \noalign 435 \definecolorseries{tabu@rcseries@\the\tabu@nested}{rgb}{last}{\tabu@temp}{\@tempa}% 436 \expandafter\resetcolorseries\expandafter[\the\count@]{tabu@rcseries@\the\tabu@nested}% 437 \xglobal\colorlet{tabu@rc@\the\tabu@nested}{tabu@rcseries@\the\tabu@nested!!+}% 438 \let\noalign \relax \rowcolor{tabu@rc@\the\tabu@nested}% 439 \def\tabu@rc@ ##1##2{\gdef\tabu@rc@{% 440 \ifnum \tabu@modulo {\c@taburow-##2}{##1+1}=\@ne 441 \resetcolorseries[{##1}]{tabu@rcseries@\the\tabu@nested}\fi 442 \xglobal\colorlet{tabu@rc@\the\tabu@nested}{tabu@rcseries@\the\tabu@nested!!+}% 443 \rowcolor{tabu@rc@\the\tabu@nested}}% 444 }\edef\x{\noexpand\tabu@rc@{\the\count@}{\the\c@taburow}}\x 445 \global\let\tabu@rc@G \tabu@rc@ 446 \fi 447 \fi 448 \tabu@everyrow@egroup 449}% \tabu@rowcolorseries 450\tabuDisableCommands {\let\tabu@rc@ \@empty } 451\def\tabu@rowcolorserieserror {\PackageError{tabu} 452 {Invalid syntax for \string\taburowcolors 453 \MessageBreak Please look at the documentation!}\@ehd 454}% \tabu@rowcolorserieserror 455\newcommand*\tabureset {% 456 \tabulinesep=\z@ \extrarowsep=\z@ \extratabsurround=\z@ 457 \tabulinestyle{}\everyrow{}\taburulecolor||{}\taburowcolors{}% 458}% \tabureset 459%% Parsing the line styles ------------------------------------------ 460\def\tabu@getline #1{\begingroup 461 \csname \ifcsname if@safe@actives\endcsname % <babel> 462 @safe@activestrue\else 463 relax\fi \endcsname 464 \edef\tabu@temp{#1}\tabu@sanitizearg{#1}\@tempa 465 \let\tabu@thestyle \relax 466 \ifcsname tabu@linestyle@\@tempa \endcsname 467 \edef\tabu@thestyle{\endgroup 468 \def\tabu@thestyle{\expandafter\noexpand 469 \csname tabu@linestyle@\@tempa\endcsname}% 470 }\tabu@thestyle 471 \else \expandafter\tabu@definestyle \tabu@temp \@nil 472 \fi 473}% \tabu@getline 474\def\tabu@definestyle #1#2\@nil {\endlinechar \m@ne \makeatletter 475 \tabu@thick \maxdimen \tabu@on \maxdimen \tabu@off \maxdimen 476 \let\tabu@c@lon \@undefined \let\tabu@c@loff \@undefined 477 \ifodd 1\ifcat .#1\else\ifcat\relax #1\else 0\fi\fi % catcode 12 or non expandable cs 478 \def\tabu@temp{\tabu@getparam{thick}}% 479 \else \def\tabu@temp{\tabu@getparam{thick}\maxdimen}% 480 \fi 481 {% 482 \let\tabu@ \relax 483 \def\:{\obeyspaces \tabu@oXIII \tabu@commaXIII \edef\:}% (space active \: happy ;-)) 484 \scantokens{\:{\tabu@temp #1#2 \tabu@\tabu@}}% 485 \expandafter}\expandafter 486 \def\expandafter\:\expandafter{\:}% line spec rewritten now ;-) 487 \def\;{\def\:}% 488 \scantokens\expandafter{\expandafter\;\expandafter{\:}}% space is now inactive (catcode 10) 489 \let\tabu@ \tabu@getcolor \:% all arguments are ready now ;-) 490 \ifdefined\tabu@c@lon \else \let\tabu@c@lon\@empty \fi 491 \ifx \tabu@c@lon\@empty \def\tabu@c@lon{\CT@arc@}\fi 492 \ifdefined\tabu@c@loff \else \let\tabu@c@loff \@empty \fi 493 \ifdim \tabu@on=\maxdimen \ifdim \tabu@off<\maxdimen 494 \tabu@on \tabulineon \fi\fi 495 \ifdim \tabu@off=\maxdimen \ifdim \tabu@on<\maxdimen 496 \tabu@off \tabulineoff \fi\fi 497 \ifodd 1\ifdim \tabu@off=\maxdimen \ifdim \tabu@on=\maxdimen 0 \fi\fi 498 \in@true % <leaders> 499 \else \in@false % <rule> 500 \fi 501 \ifdim\tabu@thick=\maxdimen \def\tabu@thick{\arrayrulewidth}% 502 \else \edef\tabu@thick{\the\tabu@thick}% 503 \fi 504 \edef \tabu@thestyle ##1##2{\endgroup 505 \def\tabu@thestyle{% 506 \ifin@ \noexpand\tabu@leadersstyle {\tabu@thick} 507 {\the\tabu@on}{##1} 508 {\the\tabu@off}{##2}% 509 \else \noexpand\tabu@rulesstyle 510 {##1\vrule width \tabu@thick}% 511 {##1\leaders \hrule height \tabu@thick \hfil}% 512 \fi}% 513 }\expandafter \expandafter 514 \expandafter \tabu@thestyle \expandafter 515 \expandafter \expandafter 516 {\expandafter\tabu@c@lon\expandafter}\expandafter{\tabu@c@loff}% 517}% \tabu@definestyle 518{\catcode`\O=\active \lccode`\O=`\o \catcode`\,=\active 519 \lowercase{\gdef\tabu@oXIII {\catcode`\o=\active \let O=\tabu@oxiii}} 520 \gdef\tabu@commaXIII {\catcode`\,=\active \let ,=\space} 521}% \catcode 522\def\tabu@oxiii #1{% 523 \ifcase \ifx n#1\z@ \else 524 \ifx f#1\@ne\else 525 \tw@ \fi\fi 526 \expandafter\tabu@onxiii 527 \or \expandafter\tabu@ofxiii 528 \else o% 529 \fi#1}% 530\def\tabu@onxiii #1#2{% 531 \ifcase \ifx !#2\tw@ \else 532 \ifcat.\noexpand#2\z@ \else 533 \ifx \tabu@spxiii#2\@ne\else 534 \tw@ \fi\fi\fi 535 \tabu@getparam{on}#2\expandafter\@gobble 536 \or \expandafter\tabu@onxiii % (space is active) 537 \else o\expandafter\@firstofone 538 \fi{#1#2}}% 539\def\tabu@ofxiii #1#2{% 540 \ifx #2f\expandafter\tabu@offxiii 541 \else o\expandafter\@firstofone 542 \fi{#1#2}} 543\def\tabu@offxiii #1#2{% 544 \ifcase \ifx !#2\tw@ \else 545 \ifcat.\noexpand#2\z@ \else 546 \ifx\tabu@spxiii#2\@ne \else 547 \tw@ \fi\fi\fi 548 \tabu@getparam{off}#2\expandafter\@gobble 549 \or \expandafter\tabu@offxiii % (space is active) 550 \else o\expandafter\@firstofone 551 \fi{#1#2}} 552\def\tabu@getparam #1{\tabu@ \csname tabu@#1\endcsname=} 553\def\tabu@getcolor #1{% \tabu@ <- \tabu@getcolor after \edef 554 \ifx \tabu@#1\else % no more spec 555 \let\tabu@theparam=#1\afterassignment \tabu@getc@l@r #1\fi 556}% \tabu@getcolor 557\def\tabu@getc@l@r #1\tabu@ {% 558 \def\tabu@temp{#1}\tabu@strtrim \tabu@temp 559 \ifx \tabu@temp\@empty 560 \else%\ifcsname \string\color@\tabu@temp \endcsname % if the color exists 561 \ifx \tabu@theparam \tabu@off \let\tabu@c@loff \tabu@c@l@r 562 \else \let\tabu@c@lon \tabu@c@l@r 563 \fi 564 %\else \tabu@warncolour{\tabu@temp}% 565 \fi%\fi 566 \tabu@ % next spec 567}% \tabu@getc@l@r 568\def\tabu@warncolour #1{\PackageWarning{tabu} 569 {Color #1 is not defined. Default color used}% 570}% \tabu@warncolour 571\def\tabu@leadersstyle #1#2#3#4#5{\def\tabu@leaders{{#1}{#2}{#3}{#4}{#5}}% 572 \ifx \tabu@leaders\tabu@leaders@G \else 573 \tabu@LEADERS{#1}{#2}{#3}{#4}{#5}\fi 574}% \tabu@leadersstyle 575\def\tabu@rulesstyle #1#2{\let\tabu@leaders \@undefined 576 \gdef\tabu@thevrule{#1}\gdef\tabu@thehrule{#2}% 577}% \tabu@rulesstyle 578%% The leaders boxes ------------------------------------------------ 579\def\tabu@LEADERS #1#2#3#4#5{%% width, dash, dash color, gap, gap color 580 {\let\color \tabu@color % => during trials -> \color = \tabu@nocolor 581 {% % but the leaders boxes should have colors ! 582 \def\@therule{\vrule}\def\@thick{height}\def\@length{width}% 583 \def\@box{\hbox}\def\@unbox{\unhbox}\def\@elt{\wd}% 584 \def\@skip{\hskip}\def\@ss{\hss}\def\tabu@leads{\tabu@hleads}% 585 \tabu@l@@d@rs {#1}{#2}{#3}{#4}{#5}% 586 \global\let\tabu@thehleaders \tabu@theleaders 587 }% 588 {% 589 \def\@therule{\hrule}\def\@thick{width}\def\@length{height}% 590 \def\@box{\vbox}\def\@unbox{\unvbox}\def\@elt{\ht}% 591 \def\@skip{\vskip}\def\@ss{\vss}\def\tabu@leads{\tabu@vleads}% 592 \tabu@l@@d@rs {#1}{#2}{#3}{#4}{#5}% 593 \global\let\tabu@thevleaders \tabu@theleaders 594 }% 595 \gdef\tabu@leaders@G{{#1}{#2}{#3}{#4}{#5}}% 596 }% 597}% \tabu@LEADERS 598\def\tabu@therule #1#2{\@therule \@thick#1\@length\dimexpr#2/2 \@depth\z@} 599\def\tabu@l@@d@rs #1#2#3#4#5{%% width, dash, dash color, gap, gap color 600 \global\setbox \tabu@leads=\@box{% 601 {#3\tabu@therule{#1}{#2}}% 602 \ifx\\#5\\\@skip#4\else{#5\tabu@therule{#1}{#4*2}}\fi 603 {#3\tabu@therule{#1}{#2}}}% 604 \global\setbox\tabu@leads=\@box to\@elt\tabu@leads{\@ss 605 {#3\tabu@therule{#1}{#2}}\@unbox\tabu@leads}% 606 \edef\tabu@theleaders ##1{\def\noexpand\tabu@theleaders {% 607 {##1\tabu@therule{#1}{#2}}% 608 \xleaders \copy\tabu@leads \@ss 609 \tabu@therule{0pt}{-#2}{##1\tabu@therule{#1}{#2}}}% 610 }\tabu@theleaders{#3}% 611}% \tabu@l@@d@rs 612%% \tabu \endtabu \tabu* \longtabu \endlongtabu \longtabu* ---------- 613\newcommand*\tabu {\tabu@longfalse 614 \ifmmode \def\tabu@ {\array}\def\endtabu {\endarray}% 615 \else \def\tabu@ {\tabu@tabular}\def\endtabu {\endtabular}\fi 616 \expandafter\let\csname tabu*\endcsname \tabu 617 \expandafter\def\csname endtabu*\endcsname{\endtabu}% 618 \tabu@spreadfalse \tabu@negcoeffalse \tabu@settarget 619}% {tabu} 620\let\tabu@tabular \tabular % <For LyX: some users redefine \tabular...> 621\expandafter\def\csname tabu*\endcsname{\tabuscantokenstrue \tabu} 622\newcommand*\longtabu {\tabu@longtrue 623 \ifmmode\PackageError{tabu}{longtabu not allowed in math mode}\fi 624 \def\tabu@{\longtable}\def\endlongtabu{\endlongtable}% 625 \LTchunksize=\@M 626 \expandafter\let\csname tabu*\endcsname \tabu 627 \expandafter\def\csname endlongtabu*\endcsname{\endlongtabu}% 628 \let\LT@startpbox \tabu@LT@startpbox % \everypar{ array struts } 629 \tabu@spreadfalse \tabu@negcoeffalse \tabu@settarget 630}% {longtabu} 631\expandafter\def\csname longtabu*\endcsname{\tabuscantokenstrue \longtabu} 632\def\tabu@nolongtabu{\PackageError{tabu} 633 {longtabu requires the longtable package}\@ehd} 634%% Read the target and then : \tabular or \@array ------------------ 635\def\tabu@settarget {\futurelet\@let@token \tabu@sett@rget } 636\def\tabu@sett@rget {\tabu@target \z@ 637 \ifcase \ifx \bgroup\@let@token \z@ \else 638 \ifx \@sptoken\@let@token \@ne \else 639 \if t\@let@token \tw@ \else 640 \if s\@let@token \thr@@\else 641 \z@\fi\fi\fi\fi 642 \expandafter\tabu@begin 643 \or \expandafter\tabu@gobblespace\expandafter\tabu@settarget 644 \or \expandafter\tabu@to 645 \or \expandafter\tabu@spread 646 \fi 647}% \tabu@sett@rget 648\def\tabu@to to{\def\tabu@halignto{to}\tabu@gettarget} 649\def\tabu@spread spread{\tabu@spreadtrue\def\tabu@halignto{spread}\tabu@gettarget} 650\def\tabu@gettarget {\afterassignment\tabu@linegoaltarget \tabu@target } 651\def\tabu@linegoaltarget {\futurelet\tabu@temp \tabu@linegoalt@rget } 652\def\tabu@linegoalt@rget {% 653 \ifx \tabu@temp\LNGL@setlinegoal 654 \LNGL@setlinegoal \expandafter \@firstoftwo \fi % @gobbles \LNGL@setlinegoal 655 \tabu@begin 656}% \tabu@linegoalt@rget 657\def\tabu@begin #1#{% 658 \iftabu@measuring \expandafter\tabu@nestedmeasure \fi 659 \ifdim \tabu@target=\z@ \let\tabu@halignto \@empty 660 \else \edef\tabu@halignto{\tabu@halignto\the\tabu@target}% 661 \fi 662 \@testopt \tabu@tabu@ \tabu@aligndefault #1\@nil 663}% \tabu@begin 664\long\def\tabu@tabu@ [#1]#2\@nil #3{\tabu@setup 665 \def\tabu@align {#1}\def\tabu@savedpream{\NC@find #3}% 666 \tabu@ [\tabu@align ]#2{#3\tabu@rewritefirst }% 667}% \tabu@tabu@ 668\def\tabu@nestedmeasure {% 669 \ifodd 1\iftabu@spread \else \ifdim\tabu@target=\z@ \else 0 \fi\fi\relax 670 \tabu@spreadtrue 671 \else \begingroup \iffalse{\fi \ifnum0=`}\fi 672 \toks@{}\def\tabu@stack{b}% 673 \expandafter\tabu@collectbody\expandafter\tabu@quickrule 674 \expandafter\endgroup 675 \fi 676}% \tabu@nestedmeasure 677\def\tabu@quickrule {\indent\vrule height\z@ depth\z@ width\tabu@target} 678%% \tabu@setup \tabu@init \tabu@indent 679\def\tabu@setup{\tabu@alloc@ 680 \ifcase \tabu@nested 681 \ifmmode \else \iftabu@spread\else \ifdim\tabu@target=\z@ 682 \let\tabu@afterendpar \par 683 \fi\fi\fi 684 \def\tabu@aligndefault{c}\tabu@init \tabu@indent 685 \else % <nested tabu> 686 \def\tabu@aligndefault{t}\let\tabudefaulttarget \linewidth 687 \fi 688 \let\tabu@thetarget \tabudefaulttarget \let\tabu@restored \@undefined 689 \edef\tabu@NC@list{\the\NC@list}\NC@list{\NC@do \tabu@rewritefirst}% 690 \everycr{}\let\@startpbox \tabu@startpbox % for nested tabu inside longtabu... 691 \let\@endpbox \tabu@endpbox % idem " " " " " " 692 \let\@tabarray \tabu@tabarray % idem " " " " " " 693 \tabu@setcleanup \tabu@setreset 694}% \tabu@setup 695\def\tabu@init{\tabu@starttimer \tabu@measuringfalse 696 \edef\tabu@hfuzz {\the\dimexpr\hfuzz+1sp}\global\tabu@footnotes{}% 697 \let\firsthline \tabu@firsthline \let\lasthline \tabu@lasthline 698 \let\firstline \tabu@firstline \let\lastline \tabu@lastline 699 \let\hline \tabu@hline \let\@xhline \tabu@xhline 700 \let\color \tabu@color \let\@arstrutbox \tabu@arstrutbox 701 \iftabu@colortbl\else\let\LT@@hline \tabu@LT@@hline \fi 702 \tabu@trivlist %<restore \\=\@normalcr inside lists> 703 \let\@footnotetext \tabu@footnotetext \let\@xfootnotetext \tabu@xfootnotetext 704 \let\@xfootnote \tabu@xfootnote \let\centering \tabu@centering 705 \let\raggedright \tabu@raggedright \let\raggedleft \tabu@raggedleft 706 \let\tabudecimal \tabu@tabudecimal \let\Centering \tabu@Centering 707 \let\RaggedRight \tabu@RaggedRight \let\RaggedLeft \tabu@RaggedLeft 708 \let\justifying \tabu@justifying \let\rowfont \tabu@rowfont 709 \let\fbox \tabu@fbox \let\color@b@x \tabu@color@b@x 710 \let\tabu@@everycr \everycr \let\tabu@@everypar \everypar 711 \let\tabu@prepnext@tokORI \prepnext@tok\let\prepnext@tok \tabu@prepnext@tok 712 \let\tabu@multicolumnORI\multicolumn \let\multicolumn \tabu@multicolumn 713 \let\tabu@startpbox \@startpbox % for nested tabu inside longtabu pfff !!! 714 \let\tabu@endpbox \@endpbox % idem " " " " " " " 715 \let\tabu@tabarray \@tabarray % idem " " " " " " " 716 \tabu@adl@fix \let\endarray \tabu@endarray % <fix> colortbl & arydshln (delarray) 717 \iftabu@colortbl\CT@everycr\expandafter{\expandafter\iftabu@everyrow \the\CT@everycr \fi}\fi 718}% \tabu@init 719\def\tabu@indent{% correction for indentation 720 \ifdim \parindent>\z@\ifx \linewidth\tabudefaulttarget 721 \everypar\expandafter{% 722 \the\everypar\everypar\expandafter{\the\everypar}% 723 \setbox\z@=\lastbox 724 \ifdim\wd\z@>\z@ \edef\tabu@thetarget 725 {\the\dimexpr -\wd\z@+\tabudefaulttarget}\fi 726 \box\z@}% 727 \fi\fi 728}% \tabu@indent 729\def\tabu@setcleanup {% saves last global assignments 730 \ifodd 1\ifmmode \else \iftabu@long \else 0\fi\fi\relax 731 \def\tabu@aftergroupcleanup{% 732 \def\tabu@aftergroupcleanup{\aftergroup\tabu@cleanup}}% 733 \else 734 \def\tabu@aftergroupcleanup{% 735 \aftergroup\aftergroup\aftergroup\tabu@cleanup 736 \let\tabu@aftergroupcleanup \relax}% 737 \fi 738 \let\tabu@arc@Gsave \tabu@arc@G 739 \let\tabu@arc@G \tabu@arc@L % <init> 740 \let\tabu@drsc@Gsave \tabu@drsc@G 741 \let\tabu@drsc@G \tabu@drsc@L % <init> 742 \let\tabu@ls@Gsave \tabu@ls@G 743 \let\tabu@ls@G \tabu@ls@L % <init> 744 \let\tabu@rc@Gsave \tabu@rc@G 745 \let\tabu@rc@G \tabu@rc@L % <init> 746 \let\tabu@evr@Gsave \tabu@evr@G 747 \let\tabu@evr@G \tabu@evr@L % <init> 748 \let\tabu@celllalign@save \tabu@celllalign 749 \let\tabu@cellralign@save \tabu@cellralign 750 \let\tabu@cellleft@save \tabu@cellleft 751 \let\tabu@cellright@save \tabu@cellright 752 \let\tabu@@celllalign@save \tabu@@celllalign 753 \let\tabu@@cellralign@save \tabu@@cellralign 754 \let\tabu@@cellleft@save \tabu@@cellleft 755 \let\tabu@@cellright@save \tabu@@cellright 756 \let\tabu@rowfontreset@save \tabu@rowfontreset 757 \let\tabu@@rowfontreset@save\tabu@@rowfontreset 758 \let\tabu@rowfontreset \@empty 759 \edef\tabu@alloc@save {\the\tabu@alloc}% restore at \tabu@reset 760 \edef\c@taburow@save {\the\c@taburow}% 761 \edef\tabu@naturalX@save {\the\tabu@naturalX}% 762 \let\tabu@naturalXmin@save \tabu@naturalXmin 763 \let\tabu@naturalXmax@save \tabu@naturalXmax 764 \let\tabu@mkarstrut@save \tabu@mkarstrut 765 \edef\tabu@clarstrut{% 766 \extrarowheight \the\dimexpr \ht\@arstrutbox-\ht\strutbox \relax 767 \extrarowdepth \the\dimexpr \dp\@arstrutbox-\dp\strutbox \relax 768 \let\noexpand\@arraystretch \@ne \noexpand\tabu@rearstrut}% 769}% \tabu@setcleanup 770\def\tabu@cleanup {\begingroup 771 \globaldefs\@ne \tabu@everyrowtrue 772 \let\tabu@arc@G \tabu@arc@Gsave 773 \let\CT@arc@ \tabu@arc@G 774 \let\tabu@drsc@G \tabu@drsc@Gsave 775 \let\CT@drsc@ \tabu@drsc@G 776 \let\tabu@ls@G \tabu@ls@Gsave 777 \let\tabu@ls@ \tabu@ls@G 778 \let\tabu@rc@G \tabu@rc@Gsave 779 \let\tabu@rc@ \tabu@rc@G 780 \let\CT@do@color \relax 781 \let\tabu@evr@G \tabu@evr@Gsave 782 \let\tabu@celllalign \tabu@celllalign@save 783 \let\tabu@cellralign \tabu@cellralign@save 784 \let\tabu@cellleft \tabu@cellleft@save 785 \let\tabu@cellright \tabu@cellright@save 786 \let\tabu@@celllalign \tabu@@celllalign@save 787 \let\tabu@@cellralign \tabu@@cellralign@save 788 \let\tabu@@cellleft \tabu@@cellleft@save 789 \let\tabu@@cellright \tabu@@cellright@save 790 \let\tabu@rowfontreset \tabu@rowfontreset@save 791 \let\tabu@@rowfontreset \tabu@@rowfontreset@save 792 \tabu@naturalX =\tabu@naturalX@save 793 \let\tabu@naturalXmax \tabu@naturalXmax@save 794 \let\tabu@naturalXmin \tabu@naturalXmin@save 795 \let\tabu@mkarstrut \tabu@mkarstrut@save 796 \c@taburow =\c@taburow@save 797 \ifcase \tabu@nested \tabu@alloc \m@ne\fi 798 \endgroup % <end of \globaldefs> 799 \ifcase \tabu@nested 800 \the\tabu@footnotes \global\tabu@footnotes{}% 801 \tabu@afterendpar \tabu@elapsedtime 802 \fi 803 \tabu@clarstrut 804 \everyrow\expandafter {\tabu@evr@G}% 805}% \tabu@cleanup 806\let\tabu@afterendpar \relax 807\def\tabu@setreset {% 808 \edef\tabu@savedparams {% \relax for \tabu@message@save 809 \ifmmode \col@sep \the\arraycolsep 810 \else \col@sep \the\tabcolsep \fi \relax 811 \arrayrulewidth \the\arrayrulewidth \relax 812 \doublerulesep \the\doublerulesep \relax 813 \extratabsurround \the\extratabsurround \relax 814 \extrarowheight \the\extrarowheight \relax 815 \extrarowdepth \the\extrarowdepth \relax 816 \abovetabulinesep \the\abovetabulinesep \relax 817 \belowtabulinesep \the\belowtabulinesep \relax 818 \def\noexpand\arraystretch{\arraystretch}% 819 \ifdefined\minrowclearance \minrowclearance\the\minrowclearance\relax\fi}% 820 \begingroup 821 \@temptokena\expandafter{\tabu@savedparams}% => only for \savetabu / \usetabu 822 \ifx \tabu@arc@L\relax \else \tabu@setsave \tabu@arc@L \fi 823 \ifx \tabu@drsc@L\relax \else \tabu@setsave \tabu@drsc@L \fi 824 \tabu@setsave \tabu@ls@L \tabu@setsave \tabu@evr@L 825 \expandafter \endgroup \expandafter 826 \def\expandafter\tabu@saved@ \expandafter{\the\@temptokena 827 \let\tabu@arc@G \tabu@arc@L 828 \let\tabu@drsc@G \tabu@drsc@L 829 \let\tabu@ls@G \tabu@ls@L 830 \let\tabu@rc@G \tabu@rc@L 831 \let\tabu@evr@G \tabu@evr@L}% 832 \def\tabu@reset{\tabu@savedparams 833 \tabu@everyrowtrue \c@taburow \z@ 834 \let\CT@arc@ \tabu@arc@L 835 \let\CT@drsc@ \tabu@drsc@L 836 \let\tabu@ls@ \tabu@ls@L 837 \let\tabu@rc@ \tabu@rc@L 838 \global\tabu@alloc \tabu@alloc@save 839 \everyrow\expandafter{\tabu@evr@L}}% 840}% \tabu@reset 841\def\tabu@setsave #1{\expandafter\tabu@sets@ve #1\@nil{#1}} 842\long\def\tabu@sets@ve #1\@nil #2{\@temptokena\expandafter{\the\@temptokena \def#2{#1}}} 843%% The Rewriting Process ------------------------------------------- 844\def\tabu@newcolumntype #1{% 845 \expandafter\tabu@new@columntype 846 \csname NC@find@\string#1\expandafter\endcsname 847 \csname NC@rewrite@\string#1\endcsname 848 {#1}% 849}% \tabu@newcolumntype 850\def\tabu@new@columntype #1#2#3{% 851 \def#1##1#3{\NC@{##1}}% 852 \let#2\relax \newcommand*#2% 853}% \tabu@new@columntype 854\def\tabu@privatecolumntype #1{% 855 \expandafter\tabu@private@columntype 856 \csname NC@find@\string#1\expandafter\endcsname 857 \csname NC@rewrite@\string#1\expandafter\endcsname 858 \csname tabu@NC@find@\string#1\expandafter\endcsname 859 \csname tabu@NC@rewrite@\string#1\endcsname 860 {#1}% 861}% \tabu@privatecolumntype 862\def\tabu@private@columntype#1#2#3#4{% 863 \g@addto@macro\tabu@privatecolumns{\let#1#3\let#2#4}% 864 \tabu@new@columntype#3#4% 865}% \tabu@private@columntype 866\let\tabu@privatecolumns \@empty 867\newcommand*\tabucolumn [1]{\expandafter \def \expandafter 868 \tabu@highprioritycolumns\expandafter{\tabu@highprioritycolumns 869 \NC@do #1}}% 870\let\tabu@highprioritycolumns \@empty 871%% The | ``column'' : rewriting process -------------------------- 872\tabu@privatecolumntype |{\tabu@rewritevline} 873\newcommand*\tabu@rewritevline[1][]{\tabu@vlinearg{#1}% 874 \expandafter \NC@find \tabu@rewritten} 875\def\tabu@lines #1{% 876 \ifx|#1\else \tabu@privatecolumntype #1{\tabu@rewritevline}\fi 877 \NC@list\expandafter{\the\NC@list \NC@do #1}% 878}% \tabu@lines@ 879\def\tabu@vlinearg #1{% 880 \ifx\\#1\\\def\tabu@thestyle {\tabu@ls@}% 881 \else\tabu@getline {#1}% 882 \fi 883 \def\tabu@rewritten ##1{\def\tabu@rewritten{!{##1\tabu@thevline}}% 884 }\expandafter\tabu@rewritten\expandafter{\tabu@thestyle}% 885 \expandafter \tabu@keepls \tabu@thestyle \@nil 886}% \tabu@vlinearg 887\def\tabu@keepls #1\@nil{% 888 \ifcat $\@cdr #1\@nil $% 889 \ifx \relax#1\else 890 \ifx \tabu@ls@#1\else 891 \let#1\relax 892 \xdef\tabu@mkpreambuffer{\tabu@mkpreambuffer 893 \tabu@savels\noexpand#1}\fi\fi\fi 894}% \tabu@keepls 895\def\tabu@thevline {\begingroup 896 \ifdefined\tabu@leaders 897 \setbox\@tempboxa=\vtop to\dimexpr 898 \ht\@arstrutbox+\dp\@arstrutbox{{\tabu@thevleaders}}% 899 \ht\@tempboxa=\ht\@arstrutbox \dp\@tempboxa=\dp\@arstrutbox 900 \box\@tempboxa 901 \else 902 \tabu@thevrule 903 \fi \endgroup 904}% \tabu@thevline 905\def\tabu@savels #1{% 906 \expandafter\let\csname\string#1\endcsname #1% 907 \expandafter\def\expandafter\tabu@reset\expandafter{\tabu@reset 908 \tabu@resetls#1}}% 909\def\tabu@resetls #1{\expandafter\let\expandafter#1\csname\string#1\endcsname}% 910%% \multicolumn inside tabu environment ----------------------------- 911\tabu@newcolumntype \tabu@rewritemulticolumn{% 912 \aftergroup \tabu@endrewritemulticolumn % after \@mkpream group 913 \NC@list{\NC@do *}\tabu@textbar \tabu@lines 914 \tabu@savedecl 915 \tabu@privatecolumns 916 \NC@list\expandafter{\the\expandafter\NC@list \tabu@NC@list}% 917 \let\tabu@savels \relax 918 \NC@find 919}% \tabu@rewritemulticolumn 920\def\tabu@endrewritemulticolumn{\gdef\tabu@mkpreambuffer{}\endgroup} 921\def\tabu@multicolumn{\tabu@ifenvir \tabu@multic@lumn \tabu@multicolumnORI} 922\long\def\tabu@multic@lumn #1#2#3{\multispan{#1}\begingroup 923 \tabu@everyrowtrue 924 \NC@list{\NC@do \tabu@rewritemulticolumn}% 925 \expandafter\@gobbletwo % gobbles \multispan{#1} 926 \tabu@multicolumnORI{#1}{\tabu@rewritemulticolumn #2}% 927 {\iftabuscantokens \tabu@rescan \else \expandafter\@firstofone \fi 928 {#3}}% 929}% \tabu@multic@lumn 930%% The X column(s): rewriting process ----------------------------- 931\tabu@privatecolumntype X[1][]{\begingroup \tabu@siunitx{\endgroup \tabu@rewriteX {#1}}} 932\def\tabu@nosiunitx #1{#1{}{}\expandafter \NC@find \tabu@rewritten } 933\def\tabu@siunitx #1{\@ifnextchar \bgroup 934 {\tabu@rewriteX@Ss{#1}} 935 {\tabu@nosiunitx{#1}}} 936\def\tabu@rewriteX@Ss #1#2{\@temptokena{}% 937 \@defaultunits \let\tabu@temp =#2\relax\@nnil 938 \ifodd 1\ifx S\tabu@temp \else \ifx s\tabu@temp \else 0 \fi\fi 939 \def\NC@find{\def\NC@find >####1####2<####3\relax{#1 {####1}{####3}% 940 }\expandafter\NC@find \the\@temptokena \relax 941 }\expandafter\NC@rewrite@S \@gobble #2\relax 942 \else \tabu@siunitxerror 943 \fi 944 \expandafter \NC@find \tabu@rewritten 945}% \tabu@rewriteX@Ss 946\def\tabu@siunitxerror {\PackageError{tabu}{Not a S nor s column ! 947 \MessageBreak X column can only embed siunitx S or s columns}\@ehd 948}% \tabu@siunitxerror 949\def\tabu@rewriteX #1#2#3{\tabu@Xarg {#1}{#2}{#3}% 950 \iftabu@measuring 951 \else \tabu@measuringtrue % first X column found in the preamble 952 \let\@halignto \relax \let\tabu@halignto \relax 953 \iftabu@spread \tabu@spreadtarget \tabu@target \tabu@target \z@ 954 \else \tabu@spreadtarget \z@ \fi 955 \ifdim \tabu@target=\z@ 956 \setlength\tabu@target \tabu@thetarget 957 \tabu@message{\tabu@message@defaulttarget}% 958 \else \tabu@message{\tabu@message@target}\fi 959 \fi 960}% \tabu@rewriteX 961\def\tabu@rewriteXrestore #1#2#3{\let\@halignto \relax 962 \def\tabu@rewritten{l}} 963\def\tabu@Xarg #1#2#3{% 964 \advance\tabu@Xcol \@ne \let\tabu@Xlcr \@empty 965 \let\tabu@Xdisp \@empty \let\tabu@Xmath \@empty 966 \ifx\\#1\\% <shortcut when no option> 967 \def\tabu@rewritten{p}\tabucolX \p@ % <default coef = 1> 968 \else 969 \let\tabu@rewritten \@empty \let\tabu@temp \@empty \tabucolX \z@ 970 \tabu@Xparse {}#1\relax 971 \fi 972 \tabu@Xrewritten{#2}{#3}% 973}% \tabu@Xarg 974\def\tabu@Xparse #1{\futurelet\@let@token \tabu@Xtest} 975\expandafter\def\expandafter\tabu@Xparsespace\space{\tabu@Xparse{}} 976\def\tabu@Xtest{% 977 \ifcase \ifx \relax\@let@token \z@ \else 978 \if ,\@let@token \m@ne\else 979 \if p\@let@token 1\else 980 \if m\@let@token 2\else 981 \if b\@let@token 3\else 982 \if l\@let@token 4\else 983 \if c\@let@token 5\else 984 \if r\@let@token 6\else 985 \if j\@let@token 7\else 986 \if L\@let@token 8\else 987 \if C\@let@token 9\else 988 \if R\@let@token 10\else 989 \if J\@let@token 11\else 990 \ifx \@sptoken\@let@token 12\else 991 \if .\@let@token 13\else 992 \if -\@let@token 13\else 993 \ifcat $\@let@token 14\else 994 15\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\relax 995 \or \tabu@Xtype {p}% 996 \or \tabu@Xtype {m}% 997 \or \tabu@Xtype {b}% 998 \or \tabu@Xalign \raggedright\relax 999 \or \tabu@Xalign \centering\relax 1000 \or \tabu@Xalign \raggedleft\relax 1001 \or \tabu@Xalign \tabu@justify\relax 1002 \or \tabu@Xalign \RaggedRight\raggedright 1003 \or \tabu@Xalign \Centering\centering 1004 \or \tabu@Xalign \RaggedLeft\raggedleft 1005 \or \tabu@Xalign \justifying\tabu@justify 1006 \or \expandafter \tabu@Xparsespace 1007 \or \expandafter \tabu@Xcoef 1008 \or \expandafter \tabu@Xm@th 1009 \or \tabu@Xcoef{}% 1010 \else\expandafter \tabu@Xparse 1011 \fi 1012}% \tabu@Xtest 1013\def\tabu@Xalign #1#2{% 1014 \ifx \tabu@Xlcr\@empty \else \PackageWarning{tabu} 1015 {Duplicate horizontal alignment specification}\fi 1016 \ifdefined#1\def\tabu@Xlcr{#1}\let#1\relax 1017 \else \def\tabu@Xlcr{#2}\let#2\relax\fi 1018 \expandafter\tabu@Xparse 1019}% \tabu@Xalign 1020\def\tabu@Xtype #1{% 1021 \ifx \tabu@rewritten\@empty \else \PackageWarning{tabu} 1022 {Duplicate vertical alignment specification}\fi 1023 \def\tabu@rewritten{#1}\expandafter\tabu@Xparse 1024}% \tabu@Xtype 1025\def\tabu@Xcoef#1{\edef\tabu@temp{\tabu@temp#1}% 1026 \afterassignment\tabu@Xc@ef \tabu@cnt\number\if-#10\fi 1027}% \tabu@Xcoef 1028\def\tabu@Xc@ef{\advance\tabucolX \tabu@temp\the\tabu@cnt\p@ 1029 \tabu@Xparse{}% 1030}% \tabu@Xc@ef 1031\def\tabu@Xm@th #1{\futurelet \@let@token \tabu@Xd@sp} 1032\def\tabu@Xd@sp{\let\tabu@Xmath=$% 1033 \ifx $\@let@token \def\tabu@Xdisp{\displaystyle}% 1034 \expandafter\tabu@Xparse 1035 \else \expandafter\tabu@Xparse\expandafter{\expandafter}% 1036 \fi 1037}% \tabu@Xd@sp 1038\def\tabu@Xrewritten {% 1039 \ifx \tabu@rewritten\@empty \def\tabu@rewritten{p}\fi 1040 \ifdim \tabucolX<\z@ \tabu@negcoeftrue 1041 \else\ifdim \tabucolX=\z@ \tabucolX \p@ 1042 \fi\fi 1043 \edef\tabu@temp{{\the\tabu@Xcol}{\tabu@strippt\tabucolX}}% 1044 \edef\tabu@Xcoefs{\tabu@Xcoefs \tabu@ \tabu@temp}% 1045 \edef\tabu@rewritten ##1##2{\def\noexpand\tabu@rewritten{% 1046 >{\tabu@Xlcr \ifx$\tabu@Xmath$\tabu@Xdisp\fi ##1}% 1047 \tabu@rewritten {\tabu@hsize \tabu@temp}% 1048 <{##2\ifx$\tabu@Xmath$\fi}}% 1049 }\tabu@rewritten 1050}% \tabu@Xrewritten 1051\def\tabu@hsize #1#2{% 1052 \ifdim #2\p@<\z@ 1053 \ifdim \tabucolX=\maxdimen \tabu@wd{#1}\else 1054 \ifdim \tabu@wd{#1}<-#2\tabucolX \tabu@wd{#1}\else -#2\tabucolX\fi 1055 \fi 1056 \else #2\tabucolX 1057 \fi 1058}% \tabu@hsize 1059%% \usetabu and \preamble: rewriting process --------------------- 1060\tabu@privatecolumntype \usetabu [1]{% 1061 \ifx\\#1\\\tabu@saveerr{}\else 1062 \@ifundefined{tabu@saved@\string#1} 1063 {\tabu@saveerr{#1}} 1064 {\let\tabu@rewriteX \tabu@rewriteXrestore 1065 \csname tabu@saved@\string#1\expandafter\endcsname\expandafter\@ne}% 1066 \fi 1067}% \NC@rewrite@\usetabu 1068\tabu@privatecolumntype \preamble [1]{% 1069 \ifx\\#1\\\tabu@saveerr{}\else 1070 \@ifundefined{tabu@saved@\string#1} 1071 {\tabu@saveerr{#1}} 1072 {\csname tabu@saved@\string#1\expandafter\endcsname\expandafter\z@}% 1073 \fi 1074}% \NC@rewrite@\preamble 1075%% Controlling the rewriting process ------------------------------- 1076\tabu@newcolumntype \tabu@rewritefirst{% 1077 \iftabu@long \aftergroup \tabu@longpream % <the whole implementation is here !> 1078 \else \aftergroup \tabu@pream 1079 \fi 1080 \let\tabu@ \relax \let\tabu@hsize \relax 1081 \let\tabu@Xcoefs \@empty \let\tabu@savels \relax 1082 \tabu@Xcol \z@ \tabu@cnt \tw@ 1083 \gdef\tabu@mkpreambuffer{\tabu@{}}\tabu@measuringfalse 1084 \global\setbox\@arstrutbox \box\@arstrutbox 1085 \NC@list{\NC@do *}\tabu@textbar \tabu@lines 1086 \NC@list\expandafter{\the\NC@list \NC@do X}% 1087 \iftabu@siunitx % <siunitx S and s columns> 1088 \NC@list\expandafter{\the\NC@list \NC@do S\NC@do s}\fi 1089 \NC@list\expandafter{\the\expandafter\NC@list \tabu@highprioritycolumns}% 1090 \expandafter\def\expandafter\tabu@NC@list\expandafter{% 1091 \the\expandafter\NC@list \tabu@NC@list}% % * | X S <original> 1092 \NC@list\expandafter{\expandafter \NC@do \expandafter\usetabu 1093 \expandafter \NC@do \expandafter\preamble 1094 \the\NC@list \NC@do \tabu@rewritemiddle 1095 \NC@do \tabu@rewritelast}% 1096 \tabu@savedecl 1097 \tabu@privatecolumns 1098 \edef\tabu@prev{\the\@temptokena}\NC@find \tabu@rewritemiddle 1099}% NC@rewrite@\tabu@rewritefirst 1100\tabu@newcolumntype \tabu@rewritemiddle{% 1101 \edef\tabu@temp{\the\@temptokena}\NC@find \tabu@rewritelast 1102}% \NC@rewrite@\tabu@rewritemiddle 1103\tabu@newcolumntype \tabu@rewritelast{% 1104 \ifx \tabu@temp\tabu@prev \advance\tabu@cnt \m@ne 1105 \NC@list\expandafter{\tabu@NC@list \NC@do \tabu@rewritemiddle 1106 \NC@do \tabu@rewritelast}% 1107 \else \let\tabu@prev\tabu@temp 1108 \fi 1109 \ifcase \tabu@cnt \expandafter\tabu@endrewrite 1110 \else \expandafter\NC@find \expandafter\tabu@rewritemiddle 1111 \fi 1112}% \NC@rewrite@\tabu@rewritelast 1113%% Choosing the strategy -------------------------------------------- 1114\def\tabu@endrewrite {% 1115 \let\tabu@temp \NC@find 1116 \ifx \@arrayright\relax \let\@arrayright \@empty \fi 1117 \count@=% 1118 \ifx \@finalstrut\tabu@finalstrut \z@ % outer in mode 0 print 1119 \iftabu@measuring 1120 \xdef\tabu@mkpreambuffer{\tabu@mkpreambuffer 1121 \tabu@target \csname tabu@\the\tabu@nested.T\endcsname 1122 \tabucolX \csname tabu@\the\tabu@nested.X\endcsname 1123 \edef\@halignto {\ifx\@arrayright\@empty to\tabu@target\fi}}% 1124 \fi 1125 \else\iftabu@measuring 4 % X columns 1126 \xdef\tabu@mkpreambuffer{\tabu@{\tabu@mkpreambuffer 1127 \tabu@target \the\tabu@target 1128 \tabu@spreadtarget \the\tabu@spreadtarget}% 1129 \def\noexpand\tabu@Xcoefs{\tabu@Xcoefs}% 1130 \edef\tabu@halignto{\ifx \@arrayright\@empty to\tabu@target\fi}}% 1131 \let\tabu@Xcoefs \relax 1132 \else\ifcase\tabu@nested \thr@@ % outer, no X 1133 \global\let\tabu@afterendpar \relax 1134 \else \@ne % inner, no X, outer in mode 1 or 2 1135 \fi 1136 \ifdefined\tabu@usetabu 1137 \else \ifdim\tabu@target=\z@ 1138 \else \let\tabu@temp \tabu@extracolsep 1139 \fi\fi 1140 \fi 1141 \fi 1142 \xdef\tabu@mkpreambuffer{\count@ \the\count@ \tabu@mkpreambuffer}% 1143 \tabu@temp 1144}% \tabu@endrewrite 1145\def\tabu@extracolsep{\@defaultunits \expandafter\let 1146 \expandafter\tabu@temp \expandafter=\the\@temptokena \relax\@nnil 1147 \ifx \tabu@temp\@sptoken 1148 \expandafter\tabu@gobblespace \expandafter\tabu@extracolsep 1149 \else 1150 \edef\tabu@temp{\noexpand\NC@find 1151 \if |\noexpand\tabu@temp @% 1152 \else\if !\noexpand\tabu@temp @% 1153 \else !% 1154 \fi\fi 1155 {\noexpand\extracolsep\noexpand\@flushglue}}% 1156 \fi 1157 \tabu@temp 1158}% \tabu@extrac@lsep 1159%% Implementing the strategy ---------------------------------------- 1160\long\def\tabu@pream #1\@preamble {% 1161 \let\tabu@ \tabu@@ \tabu@mkpreambuffer \tabu@aftergroupcleanup 1162 \NC@list\expandafter {\tabu@NC@list}% in case of nesting... 1163 \ifdefined\tabu@usetabu \tabu@usetabu \tabu@target \z@ \fi 1164 \let\tabu@savedpreamble \@preamble 1165 \global\let\tabu@elapsedtime \relax 1166 \tabu@thebody ={#1\tabu@aftergroupcleanup}% 1167 \tabu@thebody =\expandafter{\the\expandafter\tabu@thebody 1168 \@preamble}% 1169 \edef\tabuthepreamble {\the\tabu@thebody}% ( no @ allowed for \scantokens ) 1170 \tabu@select 1171}% \tabu@pream 1172\long\def\tabu@longpream #1\LT@bchunk #2\LT@bchunk{% 1173 \let\tabu@ \tabu@@ \tabu@mkpreambuffer \tabu@aftergroupcleanup 1174 \NC@list\expandafter {\tabu@NC@list}% in case of nesting... 1175 \let\tabu@savedpreamble \@preamble 1176 \global\let\tabu@elapsedtime \relax 1177 \tabu@thebody ={#1\LT@bchunk #2\tabu@aftergroupcleanup \LT@bchunk}% 1178 \edef\tabuthepreamble {\the\tabu@thebody}% ( no @ allowed for \scantokens ) 1179 \tabu@select 1180}% \tabu@longpream 1181\def\tabu@select {% 1182 \ifnum\tabu@nested>\z@ \tabuscantokensfalse \fi 1183 \ifnum \count@=\@ne \iftabu@measuring \count@=\tw@ \fi\fi 1184 \ifcase \count@ 1185 \global\let\tabu@elapsedtime \relax 1186 \tabu@seteverycr 1187 \expandafter \tabuthepreamble % vertical adjustment (inherited from outer) 1188 \or % exit in vertical measure + struts per cell because no X and outer in mode 3 1189 \tabu@evr{\tabu@verticalinit}\tabu@celllalign@def{\tabu@verticalmeasure}% 1190 \def\tabu@cellralign{\tabu@verticalspacing}% 1191 \tabu@seteverycr 1192 \expandafter \tabuthepreamble 1193 \or % exit without measure because no X and outer in mode 4 1194 \tabu@evr{}\tabu@celllalign@def{}\let\tabu@cellralign \@empty 1195 \tabu@seteverycr 1196 \expandafter \tabuthepreamble 1197 \else % needs trials 1198 \tabu@evr{}\tabu@celllalign@def{}\let\tabu@cellralign \@empty 1199 \tabu@savecounters 1200 \expandafter \tabu@setstrategy 1201 \fi 1202}% \tabu@select 1203\def\tabu@@ {\gdef\tabu@mkpreambuffer} 1204%% Protections to set up before trials ------------------------------ 1205\def\tabu@setstrategy {\begingroup % <trials group> 1206 \tabu@trialh@@k \tabu@cnt \z@ % number of trials 1207 \hbadness \@M \let\hbadness \@tempcnta 1208 \hfuzz \maxdimen \let\hfuzz \@tempdima 1209 \let\write \tabu@nowrite\let\GenericError \tabu@GenericError 1210 \let\savetabu \@gobble \let\tabudefaulttarget \linewidth 1211 \let\@footnotetext \@gobble \let\@xfootnote \tabu@xfootnote 1212 \let\color \tabu@nocolor\let\rowcolor \tabu@norowcolor 1213 \let\tabu@aftergroupcleanup \relax % only after the last trial 1214 \tabu@mkpreambuffer 1215 \ifnum \count@>\thr@@ \let\@halignto \@empty \tabucolX@init 1216 \def\tabu@lasttry{\m@ne\p@}\fi 1217 \begingroup \iffalse{\fi \ifnum0=`}\fi 1218 \toks@{}\def\tabu@stack{b}\iftabuscantokens \endlinechar=10 \obeyspaces \fi % 1219 \tabu@collectbody \tabu@strategy % 1220}% \tabu@setstrategy 1221\def\tabu@savecounters{% 1222 \def\@elt ##1{\csname c@##1\endcsname\the\csname c@##1\endcsname}% 1223 \edef\tabu@clckpt {\begingroup \globaldefs=\@ne \cl@@ckpt \endgroup}\let\@elt \relax 1224}% \tabu@savecounters 1225\def\tabucolX@init {% \tabucolX <= \tabu@target / (sum coefs > 0) 1226 \dimen@ \z@ \tabu@Xsum \z@ \tabucolX \z@ \let\tabu@ \tabu@Xinit \tabu@Xcoefs 1227 \ifdim \dimen@>\z@ 1228 \@tempdima \dimexpr \tabu@target *\p@/\dimen@ + \tabu@hfuzz\relax 1229 \ifdim \tabucolX<\@tempdima \tabucolX \@tempdima \fi 1230 \fi 1231}% \tabucolX@init 1232\def\tabu@Xinit #1#2{\tabu@Xcol #1 \advance \tabu@Xsum 1233 \ifdim #2\p@>\z@ #2\p@ \advance\dimen@ #2\p@ 1234 \else -#2\p@ \tabu@negcoeftrue 1235 \@tempdima \dimexpr \tabu@target*\p@/\dimexpr-#2\p@\relax \relax 1236 \ifdim \tabucolX<\@tempdima \tabucolX \@tempdima \fi 1237 \tabu@wddef{#1}{0pt}% 1238 \fi 1239}% \tabu@Xinit 1240%% Collecting the environment body ---------------------------------- 1241\long\def\tabu@collectbody #1#2\end #3{% 1242 \edef\tabu@stack{\tabu@pushbegins #2\begin\end\expandafter\@gobble\tabu@stack}% 1243 \ifx \tabu@stack\@empty 1244 \toks@\expandafter{\expandafter\tabu@thebody\expandafter{\the\toks@ #2}% 1245 \def\tabu@end@envir{\end{#3}}% 1246 \iftabuscantokens 1247 \iftabu@long \def\tabu@endenvir {\end{#3}\tabu@gobbleX}% 1248 \else \def\tabu@endenvir {\let\endarray \@empty 1249 \end{#3}\tabu@gobbleX}% 1250 \fi 1251 \else \def\tabu@endenvir {\end{#3}}\fi}% 1252 \let\tabu@collectbody \tabu@endofcollect 1253 \else\def\tabu@temp{#3}% 1254 \ifx \tabu@temp\@empty \toks@\expandafter{\the\toks@ #2\end }% 1255 \else \ifx\tabu@temp\tabu@@spxiii \toks@\expandafter{\the\toks@ #2\end #3}% 1256 \else \ifx\tabu@temp\tabu@X \toks@\expandafter{\the\toks@ #2\end #3}% 1257 \else \toks@\expandafter{\the\toks@ #2\end{#3}}% 1258 \fi\fi\fi 1259 \fi 1260 \tabu@collectbody{#1}% 1261}% \tabu@collectbody 1262\long\def\tabu@pushbegins#1\begin#2{\ifx\end#2\else b\expandafter\tabu@pushbegins\fi}% 1263\def\tabu@endofcollect #1{\ifnum0=`{}\fi 1264 \expandafter\endgroup \the\toks@ #1% 1265}% \tabu@endofcollect 1266%% The trials: switching between strategies ------------------------- 1267\def\tabu@strategy {\relax % stops \count@ assignment ! 1268 \ifcase\count@ % case 0 = print with vertical adjustment (outer is finished) 1269 \expandafter \tabu@endoftrials 1270 \or % case 1 = exit in vertical measure (outer in mode 3) 1271 \expandafter\xdef\csname tabu@\the\tabu@nested.T\endcsname{\the\tabu@target}% 1272 \expandafter\xdef\csname tabu@\the\tabu@nested.X\endcsname{\the\tabucolX}% 1273 \expandafter \tabu@endoftrials 1274 \or % case 2 = exit with a rule replacing the table (outer in mode 4) 1275 \expandafter \tabu@quickend 1276 \or % case 3 = outer is in mode 3 because of no X 1277 \begingroup 1278 \tabu@evr{\tabu@verticalinit}\tabu@celllalign@def{\tabu@verticalmeasure}% 1279 \def\tabu@cellralign{\tabu@verticalspacing}% 1280 \expandafter \tabu@measuring 1281 \else % case 4 = horizontal measure 1282 \begingroup 1283 \global\let\tabu@elapsedtime \tabu@message@etime 1284 \long\def\multicolumn##1##2##3{\multispan{##1}}% 1285 \let\tabu@startpboxORI \@startpbox 1286 \iftabu@spread 1287 \def\tabu@naturalXmax {\z@}% 1288 \let\tabu@naturalXmin \tabu@naturalXmax 1289 \tabu@evr{\global\tabu@naturalX \z@}% 1290 \let\@startpbox \tabu@startpboxmeasure 1291 \else\iftabu@negcoef 1292 \let\@startpbox \tabu@startpboxmeasure 1293 \else \let\@startpbox \tabu@startpboxquick 1294 \fi\fi 1295 \expandafter \tabu@measuring 1296 \fi 1297}% \tabu@strategy 1298\def\tabu@measuring{\expandafter \tabu@trial \expandafter 1299 \count@ \the\count@ \tabu@endtrial 1300}% \tabu@measuring 1301\def\tabu@trial{\iftabu@long \tabu@longtrial \else \tabu@shorttrial \fi} 1302\def\tabu@shorttrial {\setbox\tabu@box \hbox\bgroup \tabu@seteverycr 1303 \ifx \tabu@savecounters\relax \else 1304 \let\tabu@savecounters \relax \tabu@clckpt \fi 1305 $\iftabuscantokens \tabu@rescan \else \expandafter\@secondoftwo \fi 1306 \expandafter{\expandafter \tabuthepreamble 1307 \the\tabu@thebody 1308 \csname tabu@adl@endtrial\endcsname 1309 \endarray}$\egroup % got \tabu@box 1310}% \tabu@shorttrial 1311\def\tabu@longtrial {\setbox\tabu@box \hbox\bgroup \tabu@seteverycr 1312 \ifx \tabu@savecounters\relax \else 1313 \let\tabu@savecounters \relax \tabu@clckpt \fi 1314 \iftabuscantokens \tabu@rescan \else \expandafter\@secondoftwo \fi 1315 \expandafter{\expandafter \tabuthepreamble 1316 \the\tabu@thebody 1317 \tabuendlongtrial}\egroup % got \tabu@box 1318}% \tabu@longtrial 1319\def\tabuendlongtrial{% no @ allowed for \scantokens 1320 \LT@echunk \global\setbox\@ne \hbox{\unhbox\@ne}\kern\wd\@ne 1321 \LT@get@widths 1322}% \tabuendlongtrial 1323\def\tabu@adl@endtrial{% <arydshln in nested trials - problem for global column counters!> 1324 \crcr \noalign{\global\adl@ncol \tabu@nbcols}}% anything global is crap, junky and fails ! 1325\def\tabu@seteverycr {\tabu@reset 1326 \everycr \expandafter{\the\everycr \tabu@everycr}% 1327 \let\everycr \tabu@noeverycr % <for ialign> 1328}% \tabu@seteverycr 1329\def\tabu@noeverycr{{\aftergroup\tabu@restoreeverycr \afterassignment}\toks@} 1330\def\tabu@restoreeverycr {\let\everycr \tabu@@everycr} 1331\def\tabu@everycr {\iftabu@everyrow \noalign{\tabu@everyrow}\fi} 1332\def\tabu@endoftrials {% 1333 \iftabuscantokens \expandafter\@firstoftwo 1334 \else \expandafter\@secondoftwo 1335 \fi 1336 {\expandafter \tabu@closetrialsgroup \expandafter 1337 \tabu@rescan \expandafter{% 1338 \expandafter\tabuthepreamble 1339 \the\expandafter\tabu@thebody 1340 \iftabu@long \else \endarray \fi}} 1341 {\expandafter\tabu@closetrialsgroup \expandafter 1342 \tabuthepreamble 1343 \the\tabu@thebody}% 1344 \tabu@endenvir % Finish ! 1345}% \tabu@endoftrials 1346\def\tabu@closetrialsgroup {% 1347 \toks@\expandafter{\tabu@endenvir}% 1348 \edef\tabu@bufferX{\endgroup 1349 \tabucolX \the\tabucolX 1350 \tabu@target \the\tabu@target 1351 \tabu@cnt \the\tabu@cnt 1352 \def\noexpand\tabu@endenvir{\the\toks@}% 1353 %Quid de \@halignto = \tabu@halignto ?? 1354 }% \tabu@bufferX 1355 \tabu@bufferX 1356 \ifcase\tabu@nested % print out (outer in mode 0) 1357 \global\tabu@cnt \tabu@cnt 1358 \tabu@evr{\tabu@verticaldynamicadjustment}% 1359 \tabu@celllalign@def{\everypar{}}\let\tabu@cellralign \@empty 1360 \let\@finalstrut \tabu@finalstrut 1361 \else % vertical measure of nested tabu 1362 \tabu@evr{\tabu@verticalinit}% 1363 \tabu@celllalign@def{\tabu@verticalmeasure}% 1364 \def\tabu@cellralign{\tabu@verticalspacing}% 1365 \fi 1366 \tabu@clckpt \let\@halignto \tabu@halignto 1367 \let\@halignto \@empty 1368 \tabu@seteverycr 1369 \ifdim \tabustrutrule>\z@ \ifnum\tabu@nested=\z@ 1370 \setbox\@arstrutbox \box\voidb@x % force \@arstrutbox to be rebuilt (visible struts) 1371 \fi\fi 1372}% \tabu@closetrialsgroup 1373\def\tabu@quickend {\expandafter \endgroup \expandafter 1374 \tabu@target \the\tabu@target \tabu@quickrule 1375 \let\endarray \relax \tabu@endenvir 1376}% \tabu@quickend 1377\def\tabu@endtrial {\relax % stops \count@ assignment ! 1378 \ifcase \count@ \tabu@err % case 0 = impossible here 1379 \or \tabu@err % case 1 = impossible here 1380 \or \tabu@err % case 2 = impossible here 1381 \or % case 3 = outer goes into mode 0 1382 \def\tabu@bufferX{\endgroup}\count@ \z@ 1383 \else % case 4 = outer goes into mode 3 1384 \iftabu@spread \tabu@spreadarith % inner into mode 1 (outer in mode 3) 1385 \else \tabu@arith % or 2 (outer in mode 4) 1386 \fi 1387 \count@=% 1388 \ifcase\tabu@nested \thr@@ % outer goes into mode 3 1389 \else\iftabu@measuring \tw@ % outer is in mode 4 1390 \else \@ne % outer is in mode 3 1391 \fi\fi 1392 \edef\tabu@bufferX{\endgroup 1393 \tabucolX \the\tabucolX 1394 \tabu@target \the\tabu@target}% 1395 \fi 1396 \expandafter \tabu@bufferX \expandafter 1397 \count@ \the\count@ \tabu@strategy 1398}% \tabu@endtrial 1399\def\tabu@err{\errmessage{(tabu) Internal impossible error! (\count@=\the\count@)}} 1400%% The algorithms: compute the widths / stop or go on --------------- 1401\def\tabu@arithnegcoef {% 1402 \@tempdima \z@ \dimen@ \z@ \let\tabu@ \tabu@arith@negcoef \tabu@Xcoefs 1403}% \tabu@arithnegcoef 1404\def\tabu@arith@negcoef #1#2{% 1405 \ifdim #2\p@>\z@ \advance\dimen@ #2\p@ % saturated by definition 1406 \advance\@tempdima #2\tabucolX 1407 \else 1408 \ifdim -#2\tabucolX <\tabu@wd{#1}% c_i X < natural width <= \tabu@target-> saturated 1409 \advance\dimen@ -#2\p@ 1410 \advance\@tempdima -#2\tabucolX 1411 \else 1412 \advance\@tempdima \tabu@wd{#1}% natural width <= c_i X => neutralised 1413 \ifdim \tabu@wd{#1}<\tabu@target \else % neutralised 1414 \advance\dimen@ -#2\p@ % saturated (natural width = tabu@target) 1415 \fi 1416 \fi 1417 \fi 1418}% \tabu@arith@negcoef 1419\def\tabu@givespace #1#2{% here \tabu@DELTA < \z@ 1420 \ifdim \@tempdima=\z@ 1421 \tabu@wddef{#1}{\the\dimexpr -\tabu@DELTA*\p@/\tabu@Xsum}% 1422 \else 1423 \tabu@wddef{#1}{\the\dimexpr \tabu@hsize{#1}{#2} 1424 *(\p@ -\tabu@DELTA*\p@/\@tempdima)/\p@\relax}% 1425 \fi 1426}% \tabu@givespace 1427\def\tabu@arith {\advance\tabu@cnt \@ne 1428 \ifnum \tabu@cnt=\@ne \tabu@message{\tabu@titles}\fi 1429 \tabu@arithnegcoef 1430 \@tempdimb \dimexpr \wd\tabu@box -\@tempdima \relax % <incompressible material> 1431 \tabu@DELTA = \dimexpr \wd\tabu@box - \tabu@target \relax 1432 \tabu@message{\tabu@message@arith}% 1433 \ifdim \tabu@DELTA <\tabu@hfuzz 1434 \ifdim \tabu@DELTA<\z@ % wd (tabu)<\tabu@target ? 1435 \let\tabu@ \tabu@givespace \tabu@Xcoefs 1436 \advance\@tempdima \@tempdimb \advance\@tempdima -\tabu@DELTA % for message 1437 \else % already converged: nothing to do but nearly impossible... 1438 \fi 1439 \tabucolX \maxdimen 1440 \tabu@measuringfalse 1441 \else % need for narrower X columns 1442 \tabucolX =\dimexpr (\@tempdima -\tabu@DELTA) *\p@/\tabu@Xsum \relax 1443 \tabu@measuringtrue 1444 \@whilesw \iftabu@measuring\fi {% 1445 \advance\tabu@cnt \@ne 1446 \tabu@arithnegcoef 1447 \tabu@DELTA =\dimexpr \@tempdima+\@tempdimb -\tabu@target \relax % always < 0 here 1448 \tabu@message{\tabu@header 1449 \tabu@msgalign \tabucolX { }{ }{ }{ }{ }\@@ 1450 \tabu@msgalign \@tempdima+\@tempdimb { }{ }{ }{ }{ }\@@ 1451 \tabu@msgalign \tabu@target { }{ }{ }{ }{ }\@@ 1452 \tabu@msgalign@PT \dimen@ { }{}{}{}{}{}{}\@@ 1453 \ifdim -\tabu@DELTA<\tabu@hfuzz \tabu@spaces target ok\else 1454 \tabu@msgalign \dimexpr -\tabu@DELTA *\p@/\dimen@ {}{}{}{}{}\@@ 1455 \fi}% 1456 \ifdim -\tabu@DELTA<\tabu@hfuzz 1457 \advance\@tempdima \@tempdimb % for message 1458 \tabu@measuringfalse 1459 \else 1460 \advance\tabucolX \dimexpr -\tabu@DELTA *\p@/\dimen@ \relax 1461 \fi 1462 }% 1463 \fi 1464 \tabu@message{\tabu@message@reached}% 1465 \edef\tabu@bufferX{\endgroup \tabu@cnt \the\tabu@cnt 1466 \tabucolX \the\tabucolX 1467 \tabu@target \the\tabu@target}% 1468}% \tabu@arith 1469\def\tabu@spreadarith {% 1470 \dimen@ \z@ \@tempdima \tabu@naturalXmax \let\tabu@ \tabu@spread@arith \tabu@Xcoefs 1471 \edef\tabu@naturalXmin {\the\dimexpr\tabu@naturalXmin*\dimen@/\p@}% 1472 \@tempdimc =\dimexpr \wd\tabu@box -\tabu@naturalXmax+\tabu@naturalXmin \relax 1473 \iftabu@measuring 1474 \tabu@target =\dimexpr \@tempdimc+\tabu@spreadtarget \relax 1475 \edef\tabu@bufferX{\endgroup \tabucolX \the\tabucolX \tabu@target\the\tabu@target}% 1476 \else 1477 \tabu@message{\tabu@message@spreadarith}% 1478 \ifdim \dimexpr \@tempdimc+\tabu@spreadtarget >\tabu@target 1479 \tabu@message{(tabu) spread 1480 \ifdim \@tempdimc>\tabu@target useless here: default target used% 1481 \else too large: reduced to fit default target\fi.}% 1482 \else 1483 \tabu@target =\dimexpr \@tempdimc+\tabu@spreadtarget \relax 1484 \tabu@message{(tabu) spread: New target set to \the\tabu@target^^J}% 1485 \fi 1486 \begingroup \let\tabu@wddef \@gobbletwo 1487 \@tempdimb \@tempdima 1488 \tabucolX@init 1489 \tabu@arithnegcoef 1490 \wd\tabu@box =\dimexpr \wd\tabu@box +\@tempdima-\@tempdimb \relax 1491 \expandafter\endgroup \expandafter\tabucolX \the\tabucolX 1492 \tabu@arith 1493 \fi 1494}% \tabu@spreadarith 1495\def\tabu@spread@arith #1#2{% 1496 \ifdim #2\p@>\z@ \advance\dimen@ #2\p@ 1497 \else \advance\@tempdima \tabu@wd{#1}\relax 1498 \fi 1499}% \tabu@spread@arith 1500%% Reporting in the .log file --------------------------------------- 1501\def\tabu@message@defaulttarget{% 1502 \ifnum\tabu@nested=\z@^^J(tabu) Default target: 1503 \ifx\tabudefaulttarget\linewidth \string\linewidth 1504 \ifdim \tabu@thetarget=\linewidth \else 1505 -\the\dimexpr\linewidth-\tabu@thetarget\fi = 1506 \else\ifx\tabudefaulttarget\linegoal\string\linegoal= 1507 \fi\fi 1508 \else (tabu) Default target (nested): \fi 1509 \the\tabu@target \on@line 1510 \ifnum\tabu@nested=\z@ , page \the\c@page\fi} 1511\def\tabu@message@target {^^J(tabu) Target specified: 1512 \the\tabu@target \on@line, page \the\c@page} 1513\def\tabu@message@arith {\tabu@header 1514 \tabu@msgalign \tabucolX { }{ }{ }{ }{ }\@@ 1515 \tabu@msgalign \wd\tabu@box { }{ }{ }{ }{ }\@@ 1516 \tabu@msgalign \tabu@target { }{ }{ }{ }{ }\@@ 1517 \tabu@msgalign@PT \dimen@ { }{}{}{}{}{}{}\@@ 1518 \ifdim \tabu@DELTA<\tabu@hfuzz giving space\else 1519 \tabu@msgalign \dimexpr (\@tempdima-\tabu@DELTA) *\p@/\tabu@Xsum -\tabucolX {}{}{}{}{}\@@ 1520 \fi 1521}% \tabu@message@arith 1522\def\tabu@message@spreadarith {\tabu@spreadheader 1523 \tabu@msgalign \tabu@spreadtarget { }{ }{ }{ }{}\@@ 1524 \tabu@msgalign \wd\tabu@box { }{ }{ }{ }{}\@@ 1525 \tabu@msgalign -\tabu@naturalXmax { }{}{}{}{}\@@ 1526 \tabu@msgalign \tabu@naturalXmin { }{ }{ }{ }{}\@@ 1527 \tabu@msgalign \ifdim \dimexpr\@tempdimc>\tabu@target \tabu@target 1528 \else \@tempdimc+\tabu@spreadtarget \fi 1529 {}{}{}{}{}\@@} 1530\def\tabu@message@negcoef #1#2{ 1531 \tabu@spaces\tabu@spaces\space * #1. X[\rem@pt#2]: 1532 \space width = \tabu@wd {#1} 1533 \expandafter\string\csname tabu@\the\tabu@nested.W\number#1\endcsname 1534 \ifdim -\tabu@pt#2\tabucolX<\tabu@target 1535 < \number-\rem@pt#2 X 1536 = \the\dimexpr -\tabu@pt#2\tabucolX \relax 1537 \else 1538 <= \the\tabu@target\space < \number-\rem@pt#2 X\fi} 1539\def\tabu@message@reached{\tabu@header 1540 ******* Reached Target: 1541 hfuzz = \tabu@hfuzz\on@line\space *******} 1542\def\tabu@message@etime{\edef\tabu@stoptime{\the\pdfelapsedtime}% 1543 \tabu@message{(tabu)\tabu@spaces Time elapsed during measure: 1544 \the\numexpr(\tabu@stoptime-\tabu@starttime-32767)/65536\relax sec 1545 \the\numexpr\numexpr(\tabu@stoptime-\tabu@starttime) 1546 -\numexpr(\tabu@stoptime-\tabu@starttime-32767)/65536\relax*65536\relax 1547 *1000/65536\relax ms \tabu@spaces(\the\tabu@cnt\space 1548 cycle\ifnum\tabu@cnt>\@ne s\fi)^^J^^J}} 1549\def\tabu@message@verticalsp {% 1550 \ifdim \@tempdima>\tabu@ht 1551 \ifdim \@tempdimb>\tabu@dp 1552 \expandafter\expandafter\expandafter\string\tabu@ht = 1553 \tabu@msgalign \@tempdima { }{ }{ }{ }{ }\@@ 1554 \expandafter\expandafter\expandafter\string\tabu@dp = 1555 \tabu@msgalign \@tempdimb { }{ }{ }{ }{ }\@@^^J% 1556 \else 1557 \expandafter\expandafter\expandafter\string\tabu@ht = 1558 \tabu@msgalign \@tempdima { }{ }{ }{ }{ }\@@^^J% 1559 \fi 1560 \else\ifdim \@tempdimb>\tabu@dp 1561 \tabu@spaces\tabu@spaces\tabu@spaces 1562 \expandafter\expandafter\expandafter\string\tabu@dp = 1563 \tabu@msgalign \@tempdimb { }{ }{ }{ }{ }\@@^^J\fi 1564 \fi 1565}% \tabu@message@verticalsp 1566\edef\tabu@spaces{\@spaces} 1567\def\tabu@strippt{\expandafter\tabu@pt\the} 1568{\@makeother\P \@makeother\T\lowercase{\gdef\tabu@pt #1PT{#1}}} 1569\def\tabu@msgalign{\expandafter\tabu@msg@align\the\dimexpr} 1570\def\tabu@msgalign@PT{\expandafter\tabu@msg@align\romannumeral-`\0\tabu@strippt} 1571\def\do #1{% 1572 \def\tabu@msg@align##1.##2##3##4##5##6##7##8##9\@@{% 1573 \ifnum##1<10 #1 #1\else 1574 \ifnum##1<100 #1 \else 1575 \ifnum##1<\@m #1\fi\fi\fi 1576 ##1.##2##3##4##5##6##7##8#1}% 1577 \def\tabu@header{(tabu) \ifnum\tabu@cnt<10 #1\fi\the\tabu@cnt) }% 1578 \def\tabu@titles{\ifnum \tabu@nested=\z@ 1579 (tabu) Try#1 #1 tabu X #1 #1 #1tabu Width #1 #1 Target 1580 #1 #1 #1 Coefs #1 #1 #1 Update^^J\fi}% 1581 \def\tabu@spreadheader{% 1582 (tabu) Try#1 #1 Spread #1 #1 tabu Width #1 #1 #1 Nat. X #1 #1 #1 #1Nat. Min. 1583 #1 New Target^^J% 1584 (tabu) sprd} 1585 \def\tabu@message@save {\begingroup 1586 \def\x ####1{\tabu@msg@align ####1{ }{ }{ }{ }{}\@@} 1587 \def\z ####1{\expandafter\x\expandafter{\romannumeral-`\0\tabu@strippt 1588 \dimexpr####1\p@{ }{ }}}% 1589 \let\color \relax \def\tabu@rulesstyle ####1####2{\detokenize{####1}}% 1590 \let\CT@arc@ \relax \let\@preamble \@gobble 1591 \let\tabu@savedpream \@firstofone 1592 \let\tabu@savedparams \@firstofone 1593 \def\tabu@target ####1\relax {(tabu) target #1 #1 #1 #1 #1 = \x{####1}^^J}% 1594 \def\tabucolX ####1\relax {(tabu) X columns width#1 = \x{####1}^^J}% 1595 \def\tabu@nbcols ####1\relax {(tabu) Number of columns: \z{####1}^^J}% 1596 \def\tabu@aligndefault ####1{(tabu) Default alignment: #1 #1 ####1^^J}% 1597 \def\col@sep ####1\relax {(tabu) column sep #1 #1 #1 = \x{####1}^^J}% 1598 \def\arrayrulewidth ####1\relax{(tabu) arrayrulewidth #1 = \x{####1}}% 1599 \def\doublerulesep ####1\relax { doublerulesep = \x{####1}^^J}% 1600 \def\extratabsurround####1\relax{(tabu) extratabsurround = \x{####1}^^J}% 1601 \def\extrarowheight ####1\relax{(tabu) extrarowheight #1 = \x{####1}}% 1602 \def\extrarowdepth ####1\relax {extrarowdepth = \x{####1}^^J}% 1603 \def\abovetabulinesep####1\relax{(tabu) abovetabulinesep=\x{####1} }% 1604 \def\belowtabulinesep####1\relax{ belowtabulinesep=\x{####1}^^J}% 1605 \def\arraystretch ####1{(tabu) arraystretch #1 #1 = \z{####1}^^J}% 1606 \def\minrowclearance####1\relax{(tabu) minrowclearance #1 = \x{####1}^^J}% 1607 \def\tabu@arc@L ####1{(tabu) taburulecolor #1 #1 = ####1^^J}% 1608 \def\tabu@drsc@L ####1{(tabu) tabudoublerulecolor= ####1^^J}% 1609 \def\tabu@evr@L ####1{(tabu) everyrow #1 #1 #1 #1 = \detokenize{####1}^^J}% 1610 \def\tabu@ls@L ####1{(tabu) line style = \detokenize{####1}^^J}% 1611 \def\NC@find ####1\@nil{(tabu) tabu preamble#1 #1 = \detokenize{####1}^^J}% 1612 \def\tabu@wddef####1####2{(tabu) Natural width ####1 = \x{####2}^^J}% 1613 \let\edef \@gobbletwo \let\def \@empty \let\let \@gobbletwo 1614 \tabu@message{% 1615 (tabu) \string\savetabu{\tabu@temp}: \on@line^^J% 1616 \tabu@usetabu \@nil^^J}% 1617 \endgroup} 1618}\do{ } 1619%% Measuring the natural width (varwidth) - store the results ------- 1620\def\tabu@startpboxmeasure #1{\bgroup % entering \vtop 1621 \edef\tabu@temp{\expandafter\@secondoftwo \ifx\tabu@hsize #1\else\relax\fi}% 1622 \ifodd 1\ifx \tabu@temp\@empty 0 \else % starts with \tabu@hsize ? 1623 \iftabu@spread \else % if spread -> measure 1624 \ifdim \tabu@temp\p@>\z@ 0 \fi\fi\fi% if coef>0 -> do not measure 1625 \let\@startpbox \tabu@startpboxORI % restore immediately (nesting) 1626 \tabu@measuringtrue % for the quick option... 1627 \tabu@Xcol =\expandafter\@firstoftwo\ifx\tabu@hsize #1\fi 1628 \ifdim \tabu@temp\p@>\z@ \ifdim \tabu@temp\tabucolX<\tabu@target 1629 \tabu@target=\tabu@temp\tabucolX \fi\fi 1630 \setbox\tabu@box \hbox \bgroup 1631 \begin{varwidth}\tabu@target 1632 \let\FV@ListProcessLine \tabu@FV@ListProcessLine % \hbox to natural width... 1633 \narrowragged \arraybackslash \parfillskip \@flushglue 1634 \ifdefined\pdfadjustspacing \pdfadjustspacing\z@ \fi 1635 \bgroup \aftergroup\tabu@endpboxmeasure 1636 \ifdefined \cellspacetoplimit \tabu@cellspacepatch \fi 1637 \else \expandafter\@gobble 1638 \tabu@startpboxquick{#1}% \@gobble \bgroup 1639 \fi 1640}% \tabu@startpboxmeasure 1641\def\tabu@cellspacepatch{\def\bcolumn##1\@nil{}\let\ecolumn\@empty 1642 \bgroup\color@begingroup} 1643\def\tabu@endpboxmeasure {% 1644 \@finalstrut \@arstrutbox 1645 \end{varwidth}\egroup % <got my \tabu@box> 1646 \ifdim \tabu@temp\p@ <\z@ % neg coef 1647 \ifdim \tabu@wd\tabu@Xcol <\wd\tabu@box 1648 \tabu@wddef\tabu@Xcol {\the\wd\tabu@box}% 1649 \tabu@debug{\tabu@message@endpboxmeasure}% 1650 \fi 1651 \else % spread coef>0 1652 \global\advance \tabu@naturalX \wd\tabu@box 1653 \@tempdima =\dimexpr \wd\tabu@box *\p@/\dimexpr \tabu@temp\p@\relax \relax 1654 \ifdim \tabu@naturalXmax <\tabu@naturalX 1655 \xdef\tabu@naturalXmax {\the\tabu@naturalX}\fi 1656 \ifdim \tabu@naturalXmin <\@tempdima 1657 \xdef\tabu@naturalXmin {\the\@tempdima}\fi 1658 \fi 1659 \box\tabu@box \egroup % end of \vtop (measure) restore \tabu@target 1660}% \tabu@endpboxmeasure 1661\def\tabu@wddef #1{\expandafter\xdef 1662 \csname tabu@\the\tabu@nested.W\number#1\endcsname} 1663\def\tabu@wd #1{\csname tabu@\the\tabu@nested.W\number#1\endcsname} 1664\def\tabu@message@endpboxmeasure{\tabu@spaces\tabu@spaces<-> % <-> save natural wd 1665 \the\tabu@Xcol. X[\tabu@temp]: 1666 target = \the\tabucolX \space 1667 \expandafter\expandafter\expandafter\string\tabu@wd\tabu@Xcol 1668 =\tabu@wd\tabu@Xcol 1669}% \tabu@message@endpboxmeasure 1670\def\tabu@startpboxquick {\bgroup 1671 \let\@startpbox \tabu@startpboxORI % restore immediately 1672 \let\tabu \tabu@quick % \begin is expanded before... 1673 \expandafter\@gobble \@startpbox % gobbles \bgroup 1674}% \tabu@startpboxquick 1675\def\tabu@quick {\begingroup \iffalse{\fi \ifnum0=`}\fi 1676 \toks@{}\def\tabu@stack{b}\tabu@collectbody \tabu@endquick 1677}% \tabu@quick 1678\def\tabu@endquick {% 1679 \ifodd 1\ifx\tabu@end@envir\tabu@endtabu \else 1680 \ifx\tabu@end@envir\tabu@endtabus \else 0\fi\fi\relax 1681 \endgroup 1682 \else \let\endtabu \relax 1683 \tabu@end@envir 1684 \fi 1685}% \tabu@quick 1686\def\tabu@endtabu {\end{tabu}} 1687\def\tabu@endtabus {\end{tabu*}} 1688%% Measuring the heights and depths - store the results ------------- 1689\def\tabu@verticalmeasure{\everypar{}% 1690 \ifnum \currentgrouptype>12 % 14=semi-simple, 15=math shift group 1691 \setbox\tabu@box =\hbox\bgroup 1692 \let\tabu@verticalspacing \tabu@verticalsp@lcr 1693 \d@llarbegin % after \hbox ... 1694 \else 1695 \edef\tabu@temp{\ifnum\currentgrouptype=5\vtop 1696 \else\ifnum\currentgrouptype=12\vcenter 1697 \else\vbox\fi\fi}% 1698 \setbox\tabu@box \hbox\bgroup$\tabu@temp \bgroup 1699 \let\tabu@verticalspacing \tabu@verticalsp@pmb 1700 \fi 1701}% \tabu@verticalmeasure 1702\def\tabu@verticalsp@lcr{% 1703 \d@llarend \egroup % <got my \tabu@box> 1704 \@tempdima \dimexpr \ht\tabu@box+\abovetabulinesep 1705 \@tempdimb \dimexpr \dp\tabu@box+\belowtabulinesep \relax 1706 \ifdim\tabustrutrule>\z@ \tabu@debug{\tabu@message@verticalsp}\fi 1707 \ifdim \tabu@ht<\@tempdima \tabu@htdef{\the\@tempdima}\fi 1708 \ifdim \tabu@dp<\@tempdimb \tabu@dpdef{\the\@tempdimb}\fi 1709 \noindent\vrule height\@tempdima depth\@tempdimb 1710}% \tabu@verticalsp@lcr 1711\def\tabu@verticalsp@pmb{% inserts struts as needed 1712 \par \expandafter\egroup 1713 \expandafter$\expandafter 1714 \egroup \expandafter 1715 \@tempdimc \the\prevdepth 1716 \@tempdima \dimexpr \ht\tabu@box+\abovetabulinesep 1717 \@tempdimb \dimexpr \dp\tabu@box+\belowtabulinesep \relax 1718 \ifdim\tabustrutrule>\z@ \tabu@debug{\tabu@message@verticalsp}\fi 1719 \ifdim \tabu@ht<\@tempdima \tabu@htdef{\the\@tempdima}\fi 1720 \ifdim \tabu@dp<\@tempdimb \tabu@dpdef{\the\@tempdimb}\fi 1721 \let\@finalstrut \@gobble 1722 \hrule height\@tempdima depth\@tempdimb width\hsize 1723%% \box\tabu@box 1724}% \tabu@verticalsp@pmb 1725 1726\def\tabu@verticalinit{% 1727 \ifnum \c@taburow=\z@ \tabu@rearstrut \fi % after \tabu@reset ! 1728 \advance\c@taburow \@ne 1729 \tabu@htdef{\the\ht\@arstrutbox}\tabu@dpdef{\the\dp\@arstrutbox}% 1730 \advance\c@taburow \m@ne 1731}% \tabu@verticalinit 1732\def\tabu@htdef {\expandafter\xdef \csname tabu@\the\tabu@nested.H\the\c@taburow\endcsname} 1733\def\tabu@ht {\csname tabu@\the\tabu@nested.H\the\c@taburow\endcsname} 1734\def\tabu@dpdef {\expandafter\xdef \csname tabu@\the\tabu@nested.D\the\c@taburow\endcsname} 1735\def\tabu@dp {\csname tabu@\the\tabu@nested.D\the\c@taburow\endcsname} 1736\def\tabu@verticaldynamicadjustment {% 1737 \advance\c@taburow \@ne 1738 \extrarowheight \dimexpr\tabu@ht - \ht\strutbox 1739 \extrarowdepth \dimexpr\tabu@dp - \dp\strutbox 1740 \let\arraystretch \@empty 1741 \advance\c@taburow \m@ne 1742}% \tabu@verticaldynamicadjustment 1743\def\tabuphantomline{\crcr \noalign{% 1744 {\globaldefs \@ne 1745 \setbox\@arstrutbox \box\voidb@x 1746 \let\tabu@@celllalign \tabu@celllalign 1747 \let\tabu@@cellralign \tabu@cellralign 1748 \let\tabu@@cellleft \tabu@cellleft 1749 \let\tabu@@cellright \tabu@cellright 1750 \let\tabu@@thevline \tabu@thevline 1751 \let\tabu@celllalign \@empty 1752 \let\tabu@cellralign \@empty 1753 \let\tabu@cellright \@empty 1754 \let\tabu@cellleft \@empty 1755 \let\tabu@thevline \relax}% 1756 \edef\tabu@temp{\tabu@multispan \tabu@nbcols{\noindent &}}% 1757 \toks@\expandafter{\tabu@temp \noindent\tabu@everyrowfalse \cr 1758 \noalign{\tabu@rearstrut 1759 {\globaldefs\@ne 1760 \let\tabu@celllalign \tabu@@celllalign 1761 \let\tabu@cellralign \tabu@@cellralign 1762 \let\tabu@cellleft \tabu@@cellleft 1763 \let\tabu@cellright \tabu@@cellright 1764 \let\tabu@thevline \tabu@@thevline}}}% 1765 \expandafter}\the\toks@ 1766}% \tabuphantomline 1767%% \firsthline and \lasthline corrections --------------------------- 1768\def\tabu@firstline {\tabu@hlineAZ \tabu@firsthlinecorrection {}} 1769\def\tabu@firsthline{\tabu@hlineAZ \tabu@firsthlinecorrection \hline} 1770\def\tabu@lastline {\tabu@hlineAZ \tabu@lasthlinecorrection {}} 1771\def\tabu@lasthline {\tabu@hlineAZ \tabu@lasthlinecorrection \hline} 1772\def\tabu@hline {% replaces \hline if no colortbl (see \AtBeginDocument) 1773 \noalign{\ifnum0=`}\fi 1774 {\CT@arc@\hrule height\arrayrulewidth}% 1775 \futurelet \tabu@temp \tabu@xhline 1776}% \tabu@hline 1777\def\tabu@xhline{% 1778 \ifx \tabu@temp \hline 1779 {\ifx \CT@drsc@\relax \vskip 1780 \else\ifx \CT@drsc@\@empty \vskip 1781 \else \CT@drsc@\hrule height 1782 \fi\fi 1783 \doublerulesep}% 1784 \fi 1785 \ifnum0=`{\fi}% 1786}% \tabu@xhline 1787\def\tabu@hlineAZ #1#2{\noalign{\ifnum0=`}\fi \dimen@ \z@ \count@ \z@ 1788 \toks@{}\def\tabu@hlinecorrection{#1}\def\tabu@temp{#2}% 1789 \tabu@hlineAZsurround 1790}% \tabu@hlineAZ 1791\newcommand*\tabu@hlineAZsurround[1][\extratabsurround]{% 1792 \extratabsurround #1\let\tabucline \tabucline@scan 1793 \let\hline \tabu@hlinescan \let\firsthline \hline 1794 \let\cline \tabu@clinescan \let\lasthline \hline 1795 \expandafter \futurelet \expandafter \tabu@temp 1796 \expandafter \tabu@nexthlineAZ \tabu@temp 1797}% \tabu@hlineAZsurround 1798\def\tabu@hlinescan {\tabu@thick \arrayrulewidth \tabu@xhlineAZ \hline} 1799\def\tabu@clinescan #1{\tabu@thick \arrayrulewidth \tabu@xhlineAZ {\cline{#1}}} 1800\def\tabucline@scan{\@testopt \tabucline@sc@n {}} 1801\def\tabucline@sc@n #1[#2]{\tabu@xhlineAZ {\tabucline[{#1}]{#2}}} 1802\def\tabu@nexthlineAZ{% 1803 \ifx \tabu@temp\hline \else 1804 \ifx \tabu@temp\cline \else 1805 \ifx \tabu@temp\tabucline \else 1806 \tabu@hlinecorrection 1807 \fi\fi\fi 1808}% \tabu@nexthlineAZ 1809\def\tabu@xhlineAZ #1{% 1810 \toks@\expandafter{\the\toks@ #1}% 1811 \@tempdimc \tabu@thick % The last line width 1812 \ifcase\count@ \@tempdimb \tabu@thick % The first line width 1813 \else \advance\dimen@ \dimexpr \tabu@thick+\doublerulesep \relax 1814 \fi 1815 \advance\count@ \@ne \futurelet \tabu@temp \tabu@nexthlineAZ 1816}% \tabu@xhlineAZ 1817\def\tabu@firsthlinecorrection{% \count@ = number of \hline -1 1818 \@tempdima \dimexpr \ht\@arstrutbox+\dimen@ 1819 \edef\firsthline{% <local in \noalign> 1820 \omit \hbox to\z@{\hss{\noexpand\tabu@DBG{yellow}\vrule 1821 height \the\dimexpr\@tempdima+\extratabsurround 1822 depth \dp\@arstrutbox 1823 width \tabustrutrule}\hss}\cr 1824 \noalign{\vskip -\the\dimexpr \@tempdima+\@tempdimb 1825 +\dp\@arstrutbox \relax}% 1826 \the\toks@ 1827 }\ifnum0=`{\fi 1828 \expandafter}\firsthline % we are then ! 1829}% \tabu@firsthlinecorrection 1830\def\tabu@lasthlinecorrection{% 1831 \@tempdima \dimexpr \dp\@arstrutbox+\dimen@+\@tempdimb+\@tempdimc 1832 \edef\lasthline{% <local in \noalign> 1833 \the\toks@ 1834 \noalign{\vskip -\the\dimexpr\dimen@+\@tempdimb+\dp\@arstrutbox}% 1835 \omit \hbox to\z@{\hss{\noexpand\tabu@DBG{yellow}\vrule 1836 depth \the\dimexpr \dp\@arstrutbox+\@tempdimb+\dimen@ 1837 +\extratabsurround-\@tempdimc 1838 height \z@ 1839 width \tabustrutrule}\hss}\cr 1840 }\ifnum0=`{\fi 1841 \expandafter}\lasthline % we are then ! 1842}% \tabu@lasthlinecorrection 1843\def\tabu@LT@@hline{% 1844 \ifx\LT@next\hline 1845 \global\let\LT@next \@gobble 1846 \ifx \CT@drsc@\relax 1847 \gdef\CT@LT@sep{% 1848 \noalign{\penalty-\@medpenalty\vskip\doublerulesep}}% 1849 \else 1850 \gdef\CT@LT@sep{% 1851 \multispan\LT@cols{% 1852 \CT@drsc@\leaders\hrule\@height\doublerulesep\hfill}\cr}% 1853 \fi 1854 \else 1855 \global\let\LT@next\empty 1856 \gdef\CT@LT@sep{% 1857 \noalign{\penalty-\@lowpenalty\vskip-\arrayrulewidth}}% 1858 \fi 1859 \ifnum0=`{\fi}% 1860 \multispan\LT@cols 1861 {\CT@arc@\leaders\hrule\@height\arrayrulewidth\hfill}\cr 1862 \CT@LT@sep 1863 \multispan\LT@cols 1864 {\CT@arc@\leaders\hrule\@height\arrayrulewidth\hfill}\cr 1865 \noalign{\penalty\@M}% 1866 \LT@next 1867}% \tabu@LT@@hline 1868%% Horizontal lines : \tabucline ------------------------------------ 1869\let\tabu@start \@tempcnta 1870\let\tabu@stop \@tempcntb 1871\newcommand*\tabucline{\noalign{\ifnum0=`}\fi \tabu@cline} 1872\newcommand*\tabu@cline[2][]{\tabu@startstop{#2}% 1873 \ifnum \tabu@stop<\z@ \toks@{}% 1874 \else \tabu@clinearg{#1}\tabu@thestyle 1875 \edef\tabucline{\toks@{% 1876 \ifnum \tabu@start>\z@ \omit 1877 \tabu@multispan\tabu@start {\span\omit}&\fi 1878 \omit \tabu@multispan\tabu@stop {\span\omit}% 1879 \tabu@thehline\cr 1880 }}\tabucline 1881 \tabu@tracinglines{(tabu:tabucline) Style: #1^^J\the\toks@^^J^^J}% 1882 \fi 1883 \futurelet \tabu@temp \tabu@xcline 1884}% \tabu@cline 1885\def\tabu@clinearg #1{% 1886 \ifx\\#1\\\let\tabu@thestyle \tabu@ls@ 1887 \else \@defaultunits \expandafter\let\expandafter\@tempa 1888 \romannumeral-`\0#1\relax \@nnil 1889 \ifx \hbox\@tempa \tabu@clinebox{#1}% 1890 \else\ifx \box\@tempa \tabu@clinebox{#1}% 1891 \else\ifx \vbox\@tempa \tabu@clinebox{#1}% 1892 \else\ifx \vtop\@tempa \tabu@clinebox{#1}% 1893 \else\ifx \copy\@tempa \tabu@clinebox{#1}% 1894 \else\ifx \leaders\@tempa \tabu@clineleads{#1}% 1895 \else\ifx \cleaders\@tempa \tabu@clineleads{#1}% 1896 \else\ifx \xleaders\@tempa \tabu@clineleads{#1}% 1897 \else\tabu@getline {#1}% 1898 \fi\fi\fi\fi\fi\fi\fi\fi 1899 \fi 1900}% \tabu@clinearg 1901\def\tabu@clinebox #1{\tabu@clineleads{\xleaders#1\hss}} 1902\def\tabu@clineleads #1{% 1903 \let\tabu@thestyle \relax \let\tabu@leaders \@undefined 1904 \gdef\tabu@thehrule{#1}} 1905\def\tabu@thehline{\begingroup 1906 \ifdefined\tabu@leaders 1907 \noexpand\tabu@thehleaders 1908 \else \noexpand\tabu@thehrule 1909 \fi \endgroup 1910}% \tabu@thehline 1911\def\tabu@xcline{% 1912 \ifx \tabu@temp\tabucline 1913 \toks@\expandafter{\the\toks@ \noalign 1914 {\ifx\CT@drsc@\relax \vskip 1915 \else \CT@drsc@\hrule height 1916 \fi 1917 \doublerulesep}}% 1918 \fi 1919 \tabu@docline 1920}% \tabu@xcline 1921\def\tabu@docline {\ifnum0=`{\fi \expandafter}\the\toks@} 1922\def\tabu@docline@evr {\xdef\tabu@doclineafter{\the\toks@}% 1923 \ifnum0=`{\fi}\aftergroup\tabu@doclineafter} 1924\def\tabu@multispan #1#2{% 1925 \ifnum\numexpr#1>\@ne #2\expandafter\tabu@multispan 1926 \else \expandafter\@gobbletwo 1927 \fi {#1-1}{#2}% 1928}% \tabu@multispan 1929\def\tabu@startstop #1{\tabu@start@stop #1\relax 1-\tabu@nbcols \@nnil} 1930\def\tabu@start@stop #1-#2\@nnil{% 1931 \@defaultunits \tabu@start\number 0#1\relax \@nnil 1932 \@defaultunits \tabu@stop \number 0#2\relax \@nnil 1933 \tabu@stop \ifnum \tabu@start>\tabu@nbcols \m@ne 1934 \else\ifnum \tabu@stop=\z@ \tabu@nbcols 1935 \else\ifnum \tabu@stop>\tabu@nbcols \tabu@nbcols 1936 \else \tabu@stop 1937 \fi\fi\fi 1938 \advance\tabu@start \m@ne 1939 \ifnum \tabu@start>\z@ \advance\tabu@stop -\tabu@start \fi 1940}% \tabu@start@stop 1941%% Numbers: siunitx S columns (and \tabudecimal) ------------------- 1942\def\tabu@tabudecimal #1{% 1943 \def\tabu@decimal{#1}\@temptokena{}% 1944 \let\tabu@getdecimal@ \tabu@getdecimal@ignorespaces 1945 \tabu@scandecimal 1946}% \tabu@tabudecimal 1947\def\tabu@scandecimal{\futurelet \tabu@temp \tabu@getdecimal@} 1948\def\tabu@skipdecimal#1{#1\tabu@scandecimal} 1949\def\tabu@getdecimal@ignorespaces{% 1950 \ifcase 0\ifx\tabu@temp\ignorespaces\else 1951 \ifx\tabu@temp\@sptoken1\else 1952 2\fi\fi\relax 1953 \let\tabu@getdecimal@ \tabu@getdecimal 1954 \expandafter\tabu@skipdecimal 1955 \or \expandafter\tabu@gobblespace\expandafter\tabu@scandecimal 1956 \else \expandafter\tabu@skipdecimal 1957 \fi 1958}% \tabu@getdecimal@ignorespaces 1959\def\tabu@get@decimal#1{\@temptokena\expandafter{\the\@temptokena #1}% 1960 \tabu@scandecimal} 1961\def\do#1{% 1962 \def\tabu@get@decimalspace#1{% 1963 \@temptokena\expandafter{\the\@temptokena #1}\tabu@scandecimal}% 1964}\do{ } 1965\let\tabu@@tabudecimal \tabu@tabudecimal 1966\def\tabu@getdecimal{% 1967 \ifcase 0\ifx 0\tabu@temp\else 1968 \ifx 1\tabu@temp\else 1969 \ifx 2\tabu@temp\else 1970 \ifx 3\tabu@temp\else 1971 \ifx 4\tabu@temp\else 1972 \ifx 5\tabu@temp\else 1973 \ifx 6\tabu@temp\else 1974 \ifx 7\tabu@temp\else 1975 \ifx 8\tabu@temp\else 1976 \ifx 9\tabu@temp\else 1977 \ifx .\tabu@temp\else 1978 \ifx ,\tabu@temp\else 1979 \ifx -\tabu@temp\else 1980 \ifx +\tabu@temp\else 1981 \ifx e\tabu@temp\else 1982 \ifx E\tabu@temp\else 1983 \ifx\tabu@cellleft\tabu@temp1\else 1984 \ifx\ignorespaces\tabu@temp1\else 1985 \ifx\@sptoken\tabu@temp2\else 1986 3\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\relax 1987 \expandafter\tabu@get@decimal 1988 \or \expandafter\tabu@skipdecimal 1989 \or \expandafter\tabu@get@decimalspace 1990 \else\expandafter\tabu@printdecimal 1991 \fi 1992}% \tabu@getdecimal 1993\def\tabu@printdecimal{% 1994 \edef\tabu@temp{\the\@temptokena}% 1995 \ifx\tabu@temp\@empty\else 1996 \ifx\tabu@temp\space\else 1997 \expandafter\tabu@decimal\expandafter{\the\@temptokena}% 1998 \fi\fi 1999}% \tabu@printdecimal 2000%% Verbatim inside X columns ---------------------------------------- 2001\def\tabu@verbatim{% 2002 \let\verb \tabu@verb 2003 \let\FV@DefineCheckEnd \tabu@FV@DefineCheckEnd 2004}% \tabu@verbatim 2005\let\tabu@ltx@verb \verb 2006\def\tabu@verb{\@ifstar {\tabu@ltx@verb*} \tabu@ltx@verb} 2007\def\tabu@fancyvrb {% 2008 \def\tabu@FV@DefineCheckEnd ##1{% 2009 \def\tabu@FV@DefineCheckEnd{% 2010 ##1% <original definition (if fancyvrb is loaded)> 2011 \let\FV@CheckEnd \tabu@FV@CheckEnd 2012 \let\FV@@CheckEnd \tabu@FV@@CheckEnd 2013 \let\FV@@@CheckEnd \tabu@FV@@@CheckEnd 2014 \edef\FV@EndScanning{% 2015 \def\noexpand\next{\noexpand\end{\FV@EnvironName}}% 2016 \global\let\noexpand\FV@EnvironName\relax 2017 \noexpand\next}% 2018 \xdef\FV@EnvironName{\detokenize\expandafter{\FV@EnvironName}}}% 2019 }\expandafter\tabu@FV@DefineCheckEnd\expandafter{\FV@DefineCheckEnd} 2020}% \tabu@fancyvrb 2021\def\tabu@FV@CheckEnd #1{\expandafter\FV@@CheckEnd \detokenize{#1\end{}}\@nil} 2022\edef\tabu@FV@@@CheckEnd {\detokenize{\end{}}} 2023\begingroup 2024\catcode`\[1 \catcode`\]2 2025\@makeother\{ \@makeother\} 2026 \edef\x[\endgroup 2027 \def\noexpand\tabu@FV@@CheckEnd ##1\detokenize[\end{]##2\detokenize[}]##3% 2028 ]\x \@nil{\def\@tempa{#2}\def\@tempb{#3}} 2029\def\tabu@FV@ListProcessLine #1{% 2030 \hbox {%to \hsize{% 2031 \kern\leftmargin 2032 \hbox {%to \linewidth{% 2033 \FV@LeftListNumber 2034 \FV@LeftListFrame 2035 \FancyVerbFormatLine{#1}\hss 2036%% DG/SR modification begin - Jan. 28, 1998 (for numbers=right add-on) 2037%% \FV@RightListFrame}% 2038 \FV@RightListFrame 2039 \FV@RightListNumber}% 2040%% DG/SR modification end 2041 \hss}} 2042%% \savetabu -------------------------------------------------------- 2043\newcommand*\savetabu[1]{\noalign{% 2044 \tabu@sanitizearg{#1}\tabu@temp 2045 \ifx \tabu@temp\@empty \tabu@savewarn{}{The tabu will not be saved}\else 2046 \@ifundefined{tabu@saved@\tabu@temp}{}{\tabu@savewarn{#1}{Overwriting}}% 2047 \ifdefined\tabu@restored \expandafter\let 2048 \csname tabu@saved@\tabu@temp \endcsname \tabu@restored 2049 \else {\tabu@save}% 2050 \fi 2051 \fi}% 2052}% \savetabu 2053\def\tabu@save {% 2054 \toks0\expandafter{\tabu@saved@}% 2055 \iftabu@negcoef 2056 \let\tabu@wddef \relax \let\tabu@ \tabu@savewd \edef\tabu@savewd{\tabu@Xcoefs}% 2057 \toks0\expandafter{\the\toks\expandafter0\tabu@savewd}\fi 2058 \toks1\expandafter{\tabu@savedpream}% 2059 \toks2\expandafter{\tabu@savedpreamble}% 2060 \let\@preamble \relax 2061 \let\tabu@savedpream \relax \let\tabu@savedparams \relax 2062 \edef\tabu@preamble{% 2063 \def\noexpand\tabu@aligndefault{\tabu@align}% 2064 \def\tabu@savedparams {\noexpand\the\toks0}% 2065 \def\tabu@savedpream {\noexpand\the\toks1}}% 2066 \edef\tabu@usetabu{% 2067 \def\@preamble {\noexpand\the\toks2}% 2068 \tabu@target \the\tabu@target \relax 2069 \tabucolX \the\tabucolX \relax 2070 \tabu@nbcols \the\tabu@nbcols \relax 2071 \def\noexpand\tabu@aligndefault{\tabu@align}% 2072 \def\tabu@savedparams {\noexpand\the\toks0}% 2073 \def\tabu@savedpream {\noexpand\the\toks1}}% 2074 \let\tabu@aligndefault \relax \let\@sharp \relax 2075 \edef\@tempa{\noexpand\tabu@s@ved 2076 {\tabu@usetabu} 2077 {\tabu@preamble} 2078 {\the\toks1}}\@tempa 2079 \tabu@message@save 2080}% \tabu@save 2081\long\def\tabu@s@ved #1#2#3{% 2082 \def\tabu@usetabu{#1}% <for \tabu@message@save> 2083 \expandafter\gdef\csname tabu@saved@\tabu@temp\endcsname ##1{% 2084 \ifodd ##1% \usetabu 2085 \tabu@measuringfalse \tabu@spreadfalse % Just in case... 2086 \gdef\tabu@usetabu {% 2087 \ifdim \tabu@target>\z@ \tabu@warn@usetabu \fi 2088 \global\let\tabu@usetabu \@undefined 2089 \def\@halignto {to\tabu@target}% 2090 #1% 2091 \ifx \tabu@align\tabu@aligndefault@text 2092 \ifnum \tabu@nested=\z@ 2093 \let\tabu@align \tabu@aligndefault \fi\fi}% 2094 \else % \preamble 2095 \gdef\tabu@preamble {% 2096 \global\let\tabu@preamble \@undefined 2097 #2% 2098 \ifx \tabu@align\tabu@aligndefault@text 2099 \ifnum \tabu@nested=\z@ 2100 \let\tabu@align \tabu@aligndefault \fi\fi}% 2101 \fi 2102 #3}% 2103}% \tabu@s@ved 2104\def\tabu@aligndefault@text {\tabu@aligndefault}% 2105\def\tabu@warn@usetabu {\PackageWarning{tabu} 2106 {Specifying a target with \string\usetabu\space is useless 2107 \MessageBreak The target cannot be changed!}} 2108\def\tabu@savewd #1#2{\ifdim #2\p@<\z@ \tabu@wddef{#1}{\tabu@wd{#1}}\fi} 2109\def\tabu@savewarn#1#2{\PackageInfo{tabu} 2110 {User-name `#1' already used for \string\savetabu 2111 \MessageBreak #2}}% 2112\def\tabu@saveerr#1{\PackageError{tabu} 2113 {User-name `#1' is unknown for \string\usetabu 2114 \MessageBreak I cannot restore an unknown preamble!}\@ehd} 2115%% \rowfont --------------------------------------------------------- 2116\newskip \tabu@cellskip 2117\def\tabu@rowfont{\ifdim \baselineskip=\z@\noalign\fi 2118 {\ifnum0=`}\fi \tabu@row@font} 2119\newcommand*\tabu@row@font[2][]{% 2120 \ifnum7=\currentgrouptype 2121 \global\let\tabu@@cellleft \tabu@cellleft 2122 \global\let\tabu@@cellright \tabu@cellright 2123 \global\let\tabu@@celllalign \tabu@celllalign 2124 \global\let\tabu@@cellralign \tabu@cellralign 2125 \global\let\tabu@@rowfontreset\tabu@rowfontreset 2126 \fi 2127 \global\let\tabu@rowfontreset \tabu@rowfont@reset 2128 \expandafter\gdef\expandafter\tabu@cellleft\expandafter{\tabu@cellleft #2}% 2129 \ifcsname tabu@cell@#1\endcsname % row alignment 2130 \csname tabu@cell@#1\endcsname \fi 2131 \ifnum0=`{\fi}% end of group / noalign group 2132}% \rowfont 2133\def\tabu@ifcolorleavevmode #1{\let\color \tabu@leavevmodecolor #1\let\color\tabu@color}% 2134\def\tabu@rowfont@reset{% 2135 \global\let\tabu@rowfontreset \tabu@@rowfontreset 2136 \global\let\tabu@cellleft \tabu@@cellleft 2137 \global\let\tabu@cellright \tabu@@cellright 2138 \global\let\tabu@cellfont \@empty 2139 \global\let\tabu@celllalign \tabu@@celllalign 2140 \global\let\tabu@cellralign \tabu@@cellralign 2141}% \tabu@@rowfontreset 2142\let\tabu@rowfontreset \@empty % overwritten \AtBeginDocument if colortbl 2143%% \tabu@prepnext@tok ----------------------------------------------- 2144\newif \iftabu@cellright 2145\def\tabu@prepnext@tok{% 2146 \ifnum \count@<\z@ % <first initialisation> 2147 \@tempcnta \@M % <not initialized by array.sty> 2148 \tabu@nbcols\z@ 2149 \let\tabu@fornoopORI \@fornoop 2150 \tabu@cellrightfalse 2151 \else 2152 \ifcase \numexpr \count@-\@tempcnta \relax % (case 0): prev. token is left 2153 \advance \tabu@nbcols \@ne 2154 \iftabu@cellright % before-previous token is right and is finished 2155 \tabu@cellrightfalse % <only once> 2156 \tabu@righttok 2157 \fi 2158 \tabu@lefttok 2159 \or % (case 1) previous token is right 2160 \tabu@cellrighttrue \let\@fornoop \tabu@lastnoop 2161 \else % special column: do not change the token 2162 \iftabu@cellright % before-previous token is right 2163 \tabu@cellrightfalse 2164 \tabu@righttok 2165 \fi 2166 \fi % \ifcase 2167 \fi 2168 \tabu@prepnext@tokORI 2169}% \tabu@prepnext@tok 2170\long\def\tabu@lastnoop#1\@@#2#3{\tabu@lastn@@p #2\@nextchar \in@\in@@} 2171\def\tabu@lastn@@p #1\@nextchar #2#3\in@@{% 2172 \ifx \in@#2\else 2173 \let\@fornoop \tabu@fornoopORI 2174 \xdef\tabu@mkpreambuffer{\tabu@nbcols\the\tabu@nbcols \tabu@mkpreambuffer}% 2175 \toks0\expandafter{\expandafter\tabu@everyrowtrue \the\toks0}% 2176 \expandafter\prepnext@tok 2177 \fi 2178}% \tabu@lastnoop 2179\def\tabu@righttok{% 2180 \advance \count@ \m@ne 2181 \toks\count@\expandafter {\the\toks\count@ \tabu@cellright \tabu@cellralign}% 2182 \advance \count@ \@ne 2183}% \tabu@righttok 2184\def\tabu@lefttok{\toks\count@\expandafter{\expandafter\tabu@celllalign 2185 \the\toks\count@ \tabu@cellleft}% after because of $ 2186}% \tabu@lefttok 2187%% Neutralisation of glues ------------------------------------------ 2188\let\tabu@cellleft \@empty 2189\let\tabu@cellright \@empty 2190\tabu@celllalign@def{\tabu@cellleft}% 2191\let\tabu@cellralign \@empty 2192\def\tabu@cell@align #1#2#3{% 2193 \let\tabu@maybesiunitx \toks@ \tabu@celllalign 2194 \global \expandafter \tabu@celllalign@def \expandafter {\the\toks@ #1}% 2195 \toks@\expandafter{\tabu@cellralign #2}% 2196 \xdef\tabu@cellralign{\the\toks@}% 2197 \toks@\expandafter{\tabu@cellleft #3}% 2198 \xdef\tabu@cellleft{\the\toks@}% 2199}% \tabu@cell@align 2200\def\tabu@cell@l{% force alignment to left 2201 \tabu@cell@align 2202 {\tabu@removehfil \raggedright \tabu@cellleft}% left 2203 {\tabu@flush1\tabu@ignorehfil}% right 2204 \raggedright 2205}% \tabu@cell@l 2206\def\tabu@cell@c{% force alignment to center 2207 \tabu@cell@align 2208 {\tabu@removehfil \centering \tabu@flush{.5}\tabu@cellleft} 2209 {\tabu@flush{.5}\tabu@ignorehfil} 2210 \centering 2211}% \tabu@cell@c 2212\def\tabu@cell@r{% force alignment to right 2213 \tabu@cell@align 2214 {\tabu@removehfil \raggedleft \tabu@flush1\tabu@cellleft} 2215 \tabu@ignorehfil 2216 \raggedleft 2217}% \tabu@cell@r 2218\def\tabu@cell@j{% force justification (for p, m, b columns) 2219 \tabu@cell@align 2220 {\tabu@justify\tabu@cellleft} 2221 {} 2222 \tabu@justify 2223}% \tabu@cell@j 2224\def\tabu@justify{% 2225 \leftskip\z@skip \@rightskip\leftskip \rightskip\@rightskip 2226 \parfillskip\@flushglue 2227}% \tabu@justify 2228%% ragged2e settings 2229\def\tabu@cell@L{% force alignment to left (ragged2e) 2230 \tabu@cell@align 2231 {\tabu@removehfil \RaggedRight \tabu@cellleft} 2232 {\tabu@flush 1\tabu@ignorehfil} 2233 \RaggedRight 2234}% \tabu@cell@L 2235\def\tabu@cell@C{% force alignment to center (ragged2e) 2236 \tabu@cell@align 2237 {\tabu@removehfil \Centering \tabu@flush{.5}\tabu@cellleft} 2238 {\tabu@flush{.5}\tabu@ignorehfil} 2239 \Centering 2240}% \tabu@cell@C 2241\def\tabu@cell@R{% force alignment to right (ragged2e) 2242 \tabu@cell@align 2243 {\tabu@removehfil \RaggedLeft \tabu@flush 1\tabu@cellleft} 2244 \tabu@ignorehfil 2245 \RaggedLeft 2246}% \tabu@cell@R 2247\def\tabu@cell@J{% force justification (ragged2e) 2248 \tabu@cell@align 2249 {\justifying \tabu@cellleft} 2250 {} 2251 \justifying 2252}% \tabu@cell@J 2253\def\tabu@flush#1{% 2254 \iftabu@colortbl % colortbl uses \hfill rather than \hfil 2255 \hskip \ifnum13<\currentgrouptype \stretch{#1}% 2256 \else \ifdim#1pt<\p@ \tabu@cellskip 2257 \else \stretch{#1} 2258 \fi\fi \relax 2259 \else % array.sty 2260 \ifnum 13<\currentgrouptype 2261 \hfil \hskip1sp \relax \fi 2262 \fi 2263}% \tabu@flush 2264\let\tabu@hfil \hfil 2265\let\tabu@hfill \hfill 2266\let\tabu@hskip \hskip 2267\def\tabu@removehfil{% 2268 \iftabu@colortbl 2269 \unkern \tabu@cellskip =\lastskip 2270 \ifnum\gluestretchorder\tabu@cellskip =\tw@ \hskip-\tabu@cellskip 2271 \else \tabu@cellskip \z@skip 2272 \fi 2273 \else 2274 \ifdim\lastskip=1sp\unskip\fi 2275 \ifnum\gluestretchorder\lastskip =\@ne 2276 \hfilneg % \hfilneg for array.sty but not for colortbl... 2277 \fi 2278 \fi 2279}% \tabu@removehfil 2280\def\tabu@ignorehfil{\aftergroup \tabu@nohfil} 2281\def\tabu@nohfil{% \hfil -> do nothing + restore original \hfil 2282 \def\hfil{\let\hfil \tabu@hfil}% local to (alignment template) group 2283}% \tabu@nohfil 2284\def\tabu@colortblalignments {% if colortbl 2285 \def\tabu@nohfil{% 2286 \def\hfil {\let\hfil \tabu@hfil}% local to (alignment template) group 2287 \def\hfill {\let\hfill \tabu@hfill}% (colortbl uses \hfill) pfff... 2288 \def\hskip ####1\relax{\let\hskip \tabu@hskip}}% local 2289}% \tabu@colortblalignments 2290%% Taking care of footnotes and hyperfootnotes ---------------------- 2291\long\def\tabu@footnotetext #1{% 2292 \edef\@tempa{\the\tabu@footnotes 2293 \noexpand\footnotetext [\the\csname c@\@mpfn\endcsname]}% 2294 \global\tabu@footnotes\expandafter{\@tempa {#1}}}% 2295\long\def\tabu@xfootnotetext [#1]#2{% 2296 \global\tabu@footnotes\expandafter{\the\tabu@footnotes 2297 \footnotetext [{#1}]{#2}}} 2298\let\tabu@xfootnote \@xfootnote 2299\long\def\tabu@Hy@ftntext{\tabu@Hy@ftntxt {\the \c@footnote }} 2300\long\def\tabu@Hy@xfootnote [#1]{% 2301 \begingroup 2302 \value\@mpfn #1\relax 2303 \protected@xdef \@thefnmark {\thempfn}% 2304 \endgroup 2305 \@footnotemark \tabu@Hy@ftntxt {#1}% 2306}% \tabu@Hy@xfootnote 2307\long\def\tabu@Hy@ftntxt #1#2{% 2308 \edef\@tempa{% 2309 \the\tabu@footnotes 2310 \begingroup 2311 \value\@mpfn #1\relax 2312 \noexpand\protected@xdef\noexpand\@thefnmark {\noexpand\thempfn}% 2313 \expandafter \noexpand \expandafter 2314 \tabu@Hy@footnotetext \expandafter{\Hy@footnote@currentHref}% 2315 }% 2316 \global\tabu@footnotes\expandafter{\@tempa {#2}% 2317 \endgroup}% 2318}% \tabu@Hy@ftntxt 2319\long\def\tabu@Hy@footnotetext #1#2{% 2320 \H@@footnotetext{% 2321 \ifHy@nesting 2322 \hyper@@anchor {#1}{#2}% 2323 \else 2324 \Hy@raisedlink{% 2325 \hyper@@anchor {#1}{\relax}% 2326 }% 2327 \def\@currentHref {#1}% 2328 \let\@currentlabelname \@empty 2329 #2% 2330 \fi 2331 }% 2332}% \tabu@Hy@footnotetext 2333%% No need for \arraybackslash ! ------------------------------------ 2334\def\tabu@latextwoe {% 2335\def\tabu@temp##1##2##3{{\toks@\expandafter{##2##3}\xdef##1{\the\toks@}}} 2336\tabu@temp \tabu@centering \centering \arraybackslash 2337\tabu@temp \tabu@raggedleft \raggedleft \arraybackslash 2338\tabu@temp \tabu@raggedright \raggedright \arraybackslash 2339}% \tabu@latextwoe 2340\def\tabu@raggedtwoe {% 2341\def\tabu@temp ##1##2##3{{\toks@\expandafter{##2##3}\xdef##1{\the\toks@}}} 2342\tabu@temp \tabu@Centering \Centering \arraybackslash 2343\tabu@temp \tabu@RaggedLeft \RaggedLeft \arraybackslash 2344\tabu@temp \tabu@RaggedRight \RaggedRight \arraybackslash 2345\tabu@temp \tabu@justifying \justifying \arraybackslash 2346}% \tabu@raggedtwoe 2347\def\tabu@normalcrbackslash{\let\\\@normalcr} 2348\def\tabu@trivlist{\expandafter\def\expandafter\@trivlist\expandafter{% 2349 \expandafter\tabu@normalcrbackslash \@trivlist}} 2350%% Utilities: \fbox \fcolorbox and \tabudecimal ------------------- 2351\def\tabu@fbox {\leavevmode\afterassignment\tabu@beginfbox \setbox\@tempboxa\hbox} 2352\def\tabu@beginfbox {\bgroup \kern\fboxsep 2353 \bgroup\aftergroup\tabu@endfbox} 2354\def\tabu@endfbox {\kern\fboxsep\egroup\egroup 2355 \@frameb@x\relax} 2356\def\tabu@color@b@x #1#2{\leavevmode \bgroup 2357 \def\tabu@docolor@b@x{#1{#2\color@block{\wd\z@}{\ht\z@}{\dp\z@}\box\z@}}% 2358 \afterassignment\tabu@begincolor@b@x \setbox\z@ \hbox 2359}% \tabu@color@b@x 2360\def\tabu@begincolor@b@x {\kern\fboxsep \bgroup 2361 \aftergroup\tabu@endcolor@b@x \set@color} 2362\def\tabu@endcolor@b@x {\kern\fboxsep \egroup 2363 \dimen@\ht\z@ \advance\dimen@ \fboxsep \ht\z@ \dimen@ 2364 \dimen@\dp\z@ \advance\dimen@ \fboxsep \dp\z@ \dimen@ 2365 \tabu@docolor@b@x \egroup 2366}% \tabu@endcolor@b@x 2367%% Corrections (arydshln, delarray, colortbl) ----------------------- 2368\def\tabu@fix@arrayright {%% \@arrayright is missing from \endarray 2369 \iftabu@colortbl 2370 \ifdefined\adl@array % <colortbl + arydshln> 2371 \def\tabu@endarray{% 2372 \adl@endarray \egroup \adl@arrayrestore \CT@end \egroup %<original> 2373 \@arrayright % <FC> 2374 \gdef\@preamble{}}% <FC> 2375 \else % <colortbl / no arydshln> 2376 \def\tabu@endarray{% 2377 \crcr \egroup \egroup %<original> 2378 \@arrayright % <FC> 2379 \gdef\@preamble{}\CT@end}% 2380 \fi 2381 \else 2382 \ifdefined\adl@array % <arydshln / no colortbl> 2383 \def\tabu@endarray{% 2384 \adl@endarray \egroup \adl@arrayrestore \egroup %<original> 2385 \@arrayright % <FC> 2386 \gdef\@preamble{}}% <FC> 2387 \else % <no arydshln / no colotbl + \@arrayright missing> 2388 \PackageWarning{tabu} 2389 {\string\@arrayright\space is missing from the 2390 \MessageBreak definition of \string\endarray. 2391 \MessageBreak Compatibility with delarray.sty is broken.}% 2392 \fi\fi 2393}% \tabu@fix@arrayright 2394\def\tabu@adl@xarraydashrule #1#2#3{% 2395 \ifnum\@lastchclass=\adl@class@start\else 2396 \ifnum\@lastchclass=\@ne\else 2397 \ifnum\@lastchclass=5 \else % <FC> @-arg (class 5) and !-arg (class 1) 2398 \adl@leftrulefalse \fi\fi % must be treated the same 2399 \fi 2400 \ifadl@zwvrule\else \ifadl@inactive\else 2401 \@addtopreamble{\vrule\@width\arrayrulewidth 2402 \@height\z@ \@depth\z@}\fi \fi 2403 \ifadl@leftrule 2404 \@addtopreamble{\adl@vlineL{\CT@arc@}{\adl@dashgapcolor}% 2405 {\number#1}#3}% 2406 \else \@addtopreamble{\adl@vlineR{\CT@arc@}{\adl@dashgapcolor}% 2407 {\number#2}#3} 2408 \fi 2409}% \tabu@adl@xarraydashrule 2410\def\tabu@adl@act@endpbox {% 2411 \unskip \ifhmode \nobreak \fi \@finalstrut \@arstrutbox 2412 \egroup \egroup 2413 \adl@colhtdp \box\adl@box \hfil 2414}% \tabu@adl@act@endpbox 2415\def\tabu@adl@fix {% 2416 \let\adl@xarraydashrule \tabu@adl@xarraydashrule % <fix> arydshln 2417 \let\adl@act@endpbox \tabu@adl@act@endpbox % <fix> arydshln 2418 \let\adl@act@@endpbox \tabu@adl@act@endpbox % <fix> arydshln 2419 \let\@preamerror \@preamerr % <fix> arydshln 2420}% \tabu@adl@fix 2421%% Correction for longtable' \@startbox definition ------------------ 2422%% => \everypar is ``missing'' : TeX should be in vertical mode 2423\def\tabu@LT@startpbox #1{% 2424 \bgroup 2425 \let\@footnotetext\LT@p@ftntext 2426 \setlength\hsize{#1}% 2427 \@arrayparboxrestore 2428 \everypar{% 2429 \vrule \@height \ht\@arstrutbox \@width \z@ 2430 \everypar{}}% 2431}% \tabu@LT@startpbox 2432%% \tracingtabu and the package options ------------------ 2433\DeclareOption{delarray}{\AtEndOfPackage{\RequirePackage{delarray}}} 2434\DeclareOption{linegoal}{% 2435 \AtEndOfPackage{% 2436 \RequirePackage{linegoal}[2010/12/07]% 2437 \let\tabudefaulttarget \linegoal% \linegoal is \linewidth if not pdfTeX 2438}} 2439\DeclareOption{scantokens}{\tabuscantokenstrue} 2440\DeclareOption{debugshow}{\AtEndOfPackage{\tracingtabu=\tw@}} 2441\def\tracingtabu {\begingroup\@ifnextchar=% 2442 {\afterassignment\tabu@tracing\count@} 2443 {\afterassignment\tabu@tracing\count@1\relax}} 2444\def\tabu@tracing{\expandafter\endgroup 2445 \expandafter\tabu@tr@cing \the\count@ \relax 2446}% \tabu@tracing 2447\def\tabu@tr@cing #1\relax {% 2448 \ifnum#1>\thr@@ \let\tabu@tracinglines\message 2449 \else \let\tabu@tracinglines\@gobble 2450 \fi 2451 \ifnum#1>\tw@ \let\tabu@DBG \tabu@@DBG 2452 \def\tabu@mkarstrut {\tabu@DBG@arstrut}% 2453 \tabustrutrule 1.5\p@ 2454 \else \let\tabu@DBG \@gobble 2455 \def\tabu@mkarstrut {\tabu@arstrut}% 2456 \tabustrutrule \z@ 2457 \fi 2458 \ifnum#1>\@ne \let\tabu@debug \message 2459 \else \let\tabu@debug \@gobble 2460 \fi 2461 \ifnum#1>\z@ 2462 \let\tabu@message \message 2463 \let\tabu@tracing@save \tabu@message@save 2464 \let\tabu@starttimer \tabu@pdftimer 2465 \else 2466 \let\tabu@message \@gobble 2467 \let\tabu@tracing@save \@gobble 2468 \let\tabu@starttimer \relax 2469 \fi 2470}% \tabu@tr@cing 2471%% Setup \AtBeginDocument 2472\AtBeginDocument{\tabu@AtBeginDocument} 2473\def\tabu@AtBeginDocument{\let\tabu@AtBeginDocument \@undefined 2474 \ifdefined\arrayrulecolor \tabu@colortbltrue % <colortbl> 2475 \tabu@colortblalignments % different glues are used 2476 \else \tabu@colortblfalse \fi 2477 \ifdefined\CT@arc@ \else \let\CT@arc@ \relax \fi 2478 \ifdefined\CT@drsc@\else \let\CT@drsc@ \relax \fi 2479 \let\tabu@arc@L \CT@arc@ \let\tabu@drsc@L \CT@drsc@ 2480 \ifodd 1\ifcsname siunitx_table_collect_begin:Nn\endcsname % <siunitx: ok> 2481 \expandafter\ifx 2482 \csname siunitx_table_collect_begin:Nn\endcsname\relax 0\fi\fi\relax 2483 \tabu@siunitxtrue 2484 \else \let\tabu@maybesiunitx \@firstofone % <not siunitx: setup> 2485 \let\tabu@siunitx \tabu@nosiunitx 2486 \tabu@siunitxfalse 2487 \fi 2488 \ifdefined\adl@array % <arydshln> 2489 \else \let\tabu@adl@fix \relax 2490 \let\tabu@adl@endtrial \@empty \fi 2491 \ifdefined\longtable % <longtable> 2492 \else \let\longtabu \tabu@nolongtabu \fi 2493 \ifdefined\cellspacetoplimit \tabu@warn@cellspace\fi 2494 \csname\ifcsname ifHy@hyperfootnotes\endcsname % <hyperfootnotes> 2495 ifHy@hyperfootnotes\else iffalse\fi\endcsname 2496 \let\tabu@footnotetext \tabu@Hy@ftntext 2497 \let\tabu@xfootnote \tabu@Hy@xfootnote \fi 2498 \ifdefined\FV@DefineCheckEnd% <fancyvrb> 2499 \tabu@fancyvrb \fi 2500 \ifdefined\color % <color / xcolor> 2501 \let\tabu@color \color 2502 \def\tabu@leavevmodecolor ##1{% 2503 \def\tabu@leavevmodecolor {\leavevmode ##1}% 2504 }\expandafter\tabu@leavevmodecolor\expandafter{\color}% 2505 \else 2506 \let\tabu@color \tabu@nocolor 2507 \let\tabu@leavevmodecolor \@firstofone \fi 2508 \tabu@latextwoe 2509 \ifdefined\@raggedtwoe@everyselectfont % <ragged2e> 2510 \tabu@raggedtwoe 2511 \else 2512 \let\tabu@cell@L \tabu@cell@l 2513 \let\tabu@cell@R \tabu@cell@r 2514 \let\tabu@cell@C \tabu@cell@c 2515 \let\tabu@cell@J \tabu@cell@j \fi 2516 \expandafter\in@ \expandafter\@arrayright \expandafter{\endarray}% 2517 \ifin@ \let\tabu@endarray \endarray 2518 \else \tabu@fix@arrayright \fi% <fix for colortbl & arydshln (delarray)> 2519 \everyrow{}% 2520}% \tabu@AtBeginDocument 2521\def\tabu@warn@cellspace{% 2522 \PackageWarning{tabu}{% 2523 Package cellspace has some limitations 2524 \MessageBreak And redefines some macros of array.sty. 2525 \MessageBreak Please use \string\tabulinesep\space to control 2526 \MessageBreak vertical spacing of lines inside tabu environment}% 2527}% \tabu@warn@cellspace 2528%% tabu Package initialisation 2529\tabuscantokensfalse 2530\let\tabu@arc@G \relax 2531\let\tabu@drsc@G \relax 2532\let\tabu@evr@G \@empty 2533\let\tabu@rc@G \@empty 2534\def\tabu@ls@G {\tabu@linestyle@}% 2535\let\tabu@@rowfontreset \@empty % <init> 2536\let\tabu@@celllalign \@empty 2537\let\tabu@@cellralign \@empty 2538\let\tabu@@cellleft \@empty 2539\let\tabu@@cellright \@empty 2540\def\tabu@naturalXmin {\z@} 2541\def\tabu@naturalXmax {\z@} 2542\let\tabu@rowfontreset \@empty 2543\def\tabulineon {4pt}\let\tabulineoff \tabulineon 2544\tabu@everyrowtrue 2545\ifdefined\pdfelapsedtime % <pdfTeX> 2546 \def\tabu@pdftimer {\xdef\tabu@starttime{\the\pdfelapsedtime}}% 2547\else \let\tabu@pdftimer \relax \let\tabu@message@etime \relax 2548\fi 2549\tracingtabu=\z@ 2550\newtabulinestyle {=\maxdimen}% creates the 'factory' settings \tabu@linestyle@ 2551\tabulinestyle{} 2552\taburowcolors{} 2553\let\tabudefaulttarget \linewidth 2554\ProcessOptions* % \ProcessOptions* is quicker ! 2555\endinput 2556%% 2557%% End of file `tabu.sty'. 2558