1
0
mirror of https://github.com/moparisthebest/xeps synced 2024-11-21 08:45:04 -05:00
xeps/deps/collectbox.sty
2014-03-13 19:01:04 +01:00

329 lines
9.2 KiB
TeX

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