%%
%% This is file `collectbox.sty',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% collectbox.dtx  (with options: `collectbox.sty')
%% 
%% IMPORTANT NOTICE:
%% 
%% For the copyright see the source file.
%% 
%% Any modified versions of this file must be renamed
%% with new filenames distinct from collectbox.sty.
%% 
%% For distribution of the original source see the terms
%% for copying and modification in the file collectbox.dtx.
%% 
%% This generated file may be distributed as long as the
%% original source files, as listed above, are part of the
%% same distribution. (The sources need not necessarily be
%% in the same archive or directory.)
%% Copyright (C) 2012 by Martin Scharrer <martin@scharrer-online.de>
%% --------------------------------------------------------------------
%% This work may be distributed and/or modified under the
%% conditions of the LaTeX Project Public License, either version 1.3
%% of this license or (at your option) any later version.
%% The latest version of this license is in
%%   http://www.latex-project.org/lppl.txt
%% and version 1.3 or later is part of all distributions of LaTeX
%% version 2005/12/01 or later.
%%
%% This work has the LPPL maintenance status `maintained'.
%%
%% The Current Maintainer of this work is Martin Scharrer.
%%
%% This work consists of the files collectbox.dtx and collectbox.ins
%% and the derived filebase collectbox.sty.
%%
\NeedsTeXFormat{LaTeX2e}[1999/12/01]
\ProvidesPackage{collectbox}[%
    2012/05/17
    v0.4b
    Collect macro arguments as boxes]
\newsavebox\collectedbox
\newcommand*\collectbox{%
    \@ifstar
        {\collectbox@a{{\BOXCONTENT}}}%
        {\collectbox@a{}}%
}
\long\def\collectbox@a#1{%
    \@ifnextchar[%
        {\collectbox@b{#1}}%
        {\collectbox@b{#1}[]}%
}
\long\def\collectbox@b#1[#2]#3{%
    \@ifnextchar[%
        {\collectbox@c{#2}{#3#1}}%
        {\collectbox@c{#2}{#3#1}[]}%
}
\long\def\collectbox@c#1#2[#3]{%
    \collectbox@{#1}{#2}{#3}%
}
\let\collect@box\hbox
\let\collectbox@mode\leavevmode
\newcommand\collectbox@[3]{%
    \begingroup
    \collectbox@mode
    \@temptokena{#3\collectbox@end#2\endgroup}%
    \setbox\collectedbox\collect@box\bgroup
       \collectbox@setgroup
       #1\bgroup
       \aftergroup\the
       \aftergroup\@temptokena
       \collectbox@bgroup
}
\let\collectbox@macro\collectbox@
\newcommand\collectbox@env[3]{%
    \collectbox@mode
    \def\collectboxenvend{#3\collectbox@end#2\collectbox@currenvir}%
    \setbox\collectedbox\collect@box\bgroup
       \collectbox@setgroup
       \collectbox@reset
       \ignorespaces
       #1%
}
\def\collectbox@currenvir{%
    \edef\@currenvir{\@currenvir}%
}
\def\collectbox@macro@bgroup{%
    \@ifnextchar\bgroup
        {\let\@let@token=}%
        {\collectbox@arg}%
}
\def\collectbox@env@bgroup{%
    \collectbox@reset
    \ignorespaces
}
\let\collectbox@bgroup\collectbox@macro@bgroup
\def\collectbox@setgroup{%
    \color@setgroup
}
\def\collectbox@endgroup{%
    \collectbox@endcode
    \color@endgroup
}
\let\collectbox@endcode\relax
\newcommand\@collectbox[1]{%
    \begingroup
    \collectbox@mode
    \@temptokena{\collectbox@end#1\endgroup}%
    \setbox\collectedbox\collect@box\bgroup
       \collectbox@setgroup\bgroup
       \aftergroup\the
       \aftergroup\@temptokena
       \collectbox@bgroup
}
\newcommand\@Collectbox[2]{%
    \begingroup
    \collectbox@mode
    \sbox\collectedbox{#2}%
    \collectbox@setdims
    #1%
    \endgroup
}
\def\collectbox@arg#1{%
    #1\egroup
}
\def\collectbox@end{%
    \collectbox@endgroup
    \egroup
    \collectbox@setdims
    \ifcollectboxenv
        \collectbox@reset
        \collectbox@currenvir
    \fi
}
\def\collectbox@setdims{%
    \collectbox@protecteddef\BOXCONTENT{\usebox\collectedbox}%
    \collectbox@protecteddef\width{\wd\collectedbox}%
    \collectbox@protecteddef\height{\ht\collectedbox}%
    \collectbox@protecteddef\depth{\dp\collectedbox}%
    \collectbox@protecteddef\totalheight{\@ovri}%
    \totalheight\height
    \advance\totalheight\depth
}%
\def\collectbox@reset{%
    \let\collectbox@endcode\relax
    \let\collectbox@bgroup\collectbox@macro@bgroup
    \let\collectbox@\collectbox@macro
    \collectboxenvfalse
}
\begingroup
\expandafter\ifx\csname protected\endcsname\relax
    \let\collectbox@protecteddef\def%
\else
    \gdef\collectbox@protecteddef{\protected\def}%
\fi
\endgroup
\let\collectbox@code\empty
\newcommand\collectboxto[1]{%
    \@ifnextchar[%
        {\collectboxto@a{#1}}%
        {\collectboxto@a{#1}[]}%
}
\long\def\collectboxto@a#1[#2]#3{%
    \@ifnextchar[%
        {\collectboxto@b{#1}{#2}{#3}}%
        {\collectboxto@b{#1}{#2}{#3}[]}%
}
\long\def\collectboxto@b#1#2#3[#4]{%
    \collectboxto@{#1}{#2}{#3}{#4}%
}
\newcommand\collectboxto@[4]{%
    \collectbox@mode
    \setbox#1\collect@box\bgroup
       \def\collectbox@code{#4\collectbox@endgroup\egroup#3}%
       \collectbox@setgroup#2\bgroup
       \aftergroup\collectbox@code
       \collectbox@bgroup
}
\newcommand\@collectboxto[2]{%
    \collectbox@mode
    \setbox#1\collect@box\bgroup
       \def\collectbox@code{\collectbox@endgroup\egroup#2}%
       \collectbox@setgroup\bgroup
       \aftergroup\collectbox@code
       \collectbox@bgroup
}
\newcommand\nocollectbox@[3]{%
    \collectbox@mode
    \collect@box\bgroup
       \def\collectbox@code{#3\egroup#2}%
       #1\bgroup
       \aftergroup\collectbox@code
       \collectbox@bgroup
}
\newcommand\nocollectbox@to[4]{%
    \collectbox@mode
    \collect@box to #1\bgroup
       \def\collectbox@code{#4\egroup#3}%
       #2\bgroup
       \aftergroup\collectbox@code
       \collectbox@bgroup
}
\newcommand*\collectboxcheckenv[1]{%
    \begingroup
    \def\@tempa{#1}%
    \expandafter\endgroup
    \ifx\@currenvir\@tempa
        \@collectboxisenv{#1}%
    \fi
}
\def\@collectboxisenv#1{%
    \collectbox@noindent
    \collectboxenvtrue
    \edef\@currenvir{\@currenvir\noexpand\empty}%
    \let\collectbox@bgroup\collectbox@env@bgroup
    \let\collectbox@endcode\collectbox@env@endcode
    \let\collectbox@\collectbox@env
    \expandafter\ifx\csname end#1\endcsname\relax
        \expandafter\let\csname end#1\endcsname\collectbox@envend
    \fi
}
\newif\ifcollectboxenv
\let\collectbox@noindent\noindent
\def\collectbox@env@endcode{\ifhmode\unskip\fi}%
\def\collectbox@envend{\collectboxenvend}%
\def\collectboxenvend{%
    \egroup
    \collectbox@currenvir
}%
\newcommand\collectboxtabular[3][c]{%
    \collectbox@tab{tabular}{[#1]{#2}}{}{#3}{}%
}
\newcommand\collectboxtabularstar[4][c]{%
    \collectbox@tab{tabular*}{[#1]{#2}{#3}}{}{#4}{}%
}
\newcommand\collectboxarray[2]{%
    \collectbox@tab{array}{{#1}}{\(}{#2}{\)}%
}
\def\collectbox@checkarray{%
\@ifpackageloaded{array}{%
    \let\collectbox@realarraycr\@arraycr
    \def\collectbox@setarraycr{%
        \let\@arraycr\collebox@cr
        \def\ialign{\let\@arraycr\collectbox@realarraycr \everycr {}\tabskip \z@skip \halign}%
    }%
}{%
    \let\collectbox@realarraycr\@tabularcr
    \def\collectbox@setarraycr{%
        \let\@tabularcr\collebox@cr
        \def\ialign{\let\noexpand\@tabularcr\noexpand\collectbox@realarraycr \everycr {}\tabskip \z@skip \halign}%
    }%
}%
}
\collectbox@checkarray
\AtBeginDocument{\collectbox@checkarray}%
\def\collectbox@dorealarraycr{%
    \expandafter\collectbox@realarraycr\collectbox@aftercrstuff
}
\let\collectbox@aftercrstuff\empty
\def\collectbox@tab#1#2#3#4#5{%
    \begingroup
    \collectbox@mode
    \def\collectbox@codeafter{#4\endgroup}%
    \def\collectbox@endtabenv{\end{#1}#5\collectbox@end}%
    \def\collectbox@dotab{#3\begin{#1}#2}%
    \setbox\collectedbox\collect@box\bgroup
       \collectbox@setgroup
       \collectbox@setarraycr
       \afterassignment\collectbox@dotab
       \let\@let@token=%
}
\def\collebox@cr{%
    \@ifstar\collebox@@cr\collebox@@cr%
}
\def\collebox@@cr{%
    \@ifnextchar[%
        \collebox@@cr@opt
        {\collebox@@@cr{}}%
}
\def\collebox@@cr@opt[#1]{%
    \collebox@@@cr{[#1]}%
}
\def\collebox@@@cr#1{%
    \def\collectbox@aftercrstuff{#1}%
    \expandafter\collebox@@@@cr
    \romannumeral-`0%
}
\def\collebox@@@@cr{%
    \@ifnextchar\egroup{\collectbox@dorealarraycr\collectbox@aftertab}{%
        \ifx\@let@token\noalign
            \expandafter\collectbox@handlenoalign
        \else
            \expandafter\collectbox@dorealarraycr
        \fi
    }%
}
\def\collectbox@handlenoalign#1#2{%
    \collectbox@dorealarraycr
    \noalign{\bgroup\aftergroup\collectbox@afternoalign#2}%
}
\def\collectbox@handlenextnoalign#1#2{%
    \egroup
    \noalign{\bgroup\aftergroup\collectbox@afternoalign#2}%
}
\def\collectbox@afternoalign{%
    \expandafter\collectbox@@afternoalign
    \romannumeral-`0%
}
\def\collectbox@@afternoalign{%
    \@ifnextchar\egroup{\egroup\collectbox@aftertab}{%
        \ifx\@let@token\noalign
            \expandafter\collectbox@handlenextnoalign
        \else
            \expandafter\egroup
        \fi
    }%
}
\def\collectbox@aftertab{%
    \collectbox@endtabenv
    \afterassignment\collectbox@codeafter
    \let\@let@token=%
}
\endinput
%%
%% End of file `collectbox.sty'.
