From b75ddb92b4bc5135cdf583ff71bd1dc29ba48ba6 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Mon, 5 Sep 2011 23:28:46 +0000 Subject: adjustbox (5sep11) git-svn-id: svn://tug.org/texlive/trunk@23831 c570f23f-e606-0410-a88d-b1316a301751 --- .../texmf-dist/doc/latex/adjustbox/adjustbox.pdf | Bin 258720 -> 261650 bytes .../source/latex/adjustbox/adjustbox.dtx | 114 +++- .../texmf-dist/tex/latex/adjustbox/adjustbox.sty | 41 +- .../texmf-dist/tex/latex/adjustbox/collectbox.sty | 591 +++++++++++++++++++++ 4 files changed, 726 insertions(+), 20 deletions(-) create mode 100644 Master/texmf-dist/tex/latex/adjustbox/collectbox.sty (limited to 'Master') diff --git a/Master/texmf-dist/doc/latex/adjustbox/adjustbox.pdf b/Master/texmf-dist/doc/latex/adjustbox/adjustbox.pdf index e9183e92c75..1bd8a934f56 100644 Binary files a/Master/texmf-dist/doc/latex/adjustbox/adjustbox.pdf and b/Master/texmf-dist/doc/latex/adjustbox/adjustbox.pdf differ diff --git a/Master/texmf-dist/source/latex/adjustbox/adjustbox.dtx b/Master/texmf-dist/source/latex/adjustbox/adjustbox.dtx index aa7094a397a..855ad15f342 100644 --- a/Master/texmf-dist/source/latex/adjustbox/adjustbox.dtx +++ b/Master/texmf-dist/source/latex/adjustbox/adjustbox.dtx @@ -187,6 +187,7 @@ % \changes{v0.4}{2011/07/xx}{Added pdftex driver} % \changes{v0.5}{2011/08/13}{Added more macros and keys} % \changes{v0.5a}{2011/08/21}{Fixed \Key{left} and \Key{right} keys. Fixed \Key{valign}'='t} +% \changes{v0.6}{2011/09/04}{Added tabular support.} % % \GetFileInfo{adjustbox.dtx} % @@ -1143,7 +1144,10 @@ % \end{example} % % \subsection{Minipage or other inner Environment} -% The following keys will overwrite each other and only defined for \env{adjustbox} but do not apply for \Macro\includegraphics. +% The following keys set the way the content is processed before it is stored it in a box. +% These keys will overwrite each other and only the latest used key will take effect. +% Because they affect the inner content directly their order relative to other, normal keys is not meaningful. +% Also they are only defined for \env{adjustbox} but do not apply for \Macro\includegraphics. % Because they are therefore only used inside a mandatory argument and never in an optional these keys allow for optional bracket arguments. % % \DescribeKey{minipage}'=' @@ -1178,10 +1182,35 @@ % \end{examplecode} % \end{examples} % +% \DescribeKey{tabular}'='[]{} +% \DescribeKey{tabular*}'='[]{}{} +% \DescribeKey{array}'='[]{} +% Places the content in a \env{tabular}, \env{tabular*} or \env{array} environment, respectively. +% These keys require different implementations for macro (\Macro\adjustbox) and environment mode (\env{adjustbox} environment) in order to insert +% the end code correctly. Note that the environment mode is more efficient and fully stable, while the macro mode requires the last row to end with +% an explicit |\\| (which can be followed by \Macro\hline or any other macro which uses \Macro\noalign internally). In macro mode the |\\| is internally redefined +% to check for the closing brace. While this was successful tested for normal usages it might still cause issues with unusual or complicated cases. +% +% \begin{examples} +% \begin{examplecode} +% \adjustbox{tabular=lll}{% +% \hline +% A & B & C \\\hline +% a & b & c \\\hline +% } +% \end{examplecode} +% \begin{examplecode} +% \begin{adjustbox}{tabular=lll} +% A & B & C \\ +% a & b & c +% \end{adjustbox} +% \end{examplecode} +% \end{examples} +% +% % \DescribeKey{innerenv}'=' % \DescribeKey{innerenv}'='{} -% Wraps the inner content in the given \meta{environment} before it is stored as horizontal box. Only one inner environment can be used -% and further uses of this key will overwrite previous ones as well as any \Key{minipage} and \Key{innercode} key. +% Wraps the inner content in the given \meta{environment} before it is stored as horizontal box. % It should be kept in mind that there is some internal code between the begin of the environment and the content. For this reason % a \env{tabular}, \env{innerenv} or similar environment will not work here, because that code will be taken as part of the first cell. % @@ -1194,8 +1223,7 @@ % % % \DescribeKey{innercode}'='{}{} -% Places the given code before and after the inner content before it is stored as horizontal box. Only one set of inner code can be used -% and further uses of this key will overwrite previous ones as well as any \Key{minipage} and \Key{innerenv} key. +% Places the given code before and after the inner content before it is stored as horizontal box. % % \begin{example} % \begin{examplecode} @@ -1250,7 +1278,7 @@ % \subsection{Package header, options and dependencies} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % \begin{macrocode} -\ProvidesPackage{adjustbox}[2011/08/21 v0.5a Adjusting TeX boxes (trim, clip, ...)] +\ProvidesPackage{adjustbox}[2011/09/04 v0.6 Adjusting TeX boxes (trim, clip, ...)] % \end{macrocode} % % \begin{macrocode} @@ -1284,7 +1312,7 @@ % % \begin{macrocode} \RequirePackage{graphicx}[1999/02/16] -\RequirePackage{collectbox}[2011/08/11] +\RequirePackage{collectbox}[2011/08/22] % \end{macrocode} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -2606,6 +2634,69 @@ % \end{key} % % +% \begin{key}{adjbox}{tabular} +% \begin{macrocode} +\define@key{adjbox}{tabular}{% + \@ifnextchar[{% + \adjbox@tabular{tabular}% + }{% + \adjbox@tabular{tabular}{{#1}}\@nnil% + \remove@to@nnil + }#1\@nnil +} +% \end{macrocode} +% \end{key} +% +% +% \begin{macro}{\adjbox@tabular} +% \begin{macrocode} +\def\adjbox@tabular#1#2\@nnil{% + \ifcollectboxenv + \adjbox@innerenv{#1}{#2}\@nnil + \else + \def\adjbox@collectbox##1{\collectbox@tab{#1}{#2}{}{##1}{}}% + \fi +} +% \end{macrocode} +% \end{macro} +% +% +% \begin{key}{adjbox}{tabular*} +% \begin{macrocode} +\define@key{adjbox}{tabular*}{% + \adjbox@tabular{tabular*}#1\@nnil +} +% \end{macrocode} +% \end{key} +% +% +% \begin{key}{adjbox}{array} +% \begin{macrocode} +\define@key{adjbox}{array}{% + \@ifnextchar[{% + \adjbox@array% + }{% + \adjbox@array{{#1}}\@nnil% + \remove@to@nnil + }#1\@nnil +} +% \end{macrocode} +% \end{key} +% +% +% \begin{macro}{\adjbox@array} +% \begin{macrocode} +\def\adjbox@array#1\@nnil{% + \ifcollectboxenv + \adjbox@innercode{\(\begin{array}#1}{\end{array}\)}% + \else + \def\adjbox@collectbox##1{\collectbox@tab{array}{#1}{\(}{##1}{\)}}% + \fi +} +% \end{macrocode} +% \end{macro} +% +% % \begin{key}{adjbox}{innerenv} % \begin{macrocode} \define@key{adjbox}{innerenv}{% @@ -2636,13 +2727,6 @@ % \end{macrocode} % \end{key} % -% \begin{macro}{\adjbox@innerenv} -% \begin{macrocode} -\def\adjbox@innerenv#1#2\@nnil{% - \def\adjbox@collectbox##1{\collectbox@{\begin{#1}#2}{##1}{\end{#1}}}% -}% -% \end{macrocode} -% \end{macro} % % \begin{macro}{\adjbox@innercode} % \begin{macrocode} @@ -2785,7 +2869,7 @@ } % \end{macrocode} % \end{macro} -% + % \iffalse % % \fi diff --git a/Master/texmf-dist/tex/latex/adjustbox/adjustbox.sty b/Master/texmf-dist/tex/latex/adjustbox/adjustbox.sty index 97e2d82fca6..c3b14b2fc59 100644 --- a/Master/texmf-dist/tex/latex/adjustbox/adjustbox.sty +++ b/Master/texmf-dist/tex/latex/adjustbox/adjustbox.sty @@ -27,7 +27,7 @@ %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\ProvidesPackage{adjustbox}[2011/08/21 v0.5a Adjusting TeX boxes (trim, clip, ...)] +\ProvidesPackage{adjustbox}[2011/09/04 v0.6 Adjusting TeX boxes (trim, clip, ...)] \RequirePackage{xkeyval} \def\adjbox@defaultunit{bp} @@ -55,7 +55,7 @@ \input{adjcalc.sty} \disable@keys{adjbox}{patch,export,PGF,minimal} \RequirePackage{graphicx}[1999/02/16] -\RequirePackage{collectbox}[2011/08/11] +\RequirePackage{collectbox}[2011/08/22] %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \define@key{adjbox}{viewport}{% @@ -741,6 +741,39 @@ \remove@to@nnil }#1\@nnil } +\define@key{adjbox}{tabular}{% + \@ifnextchar[{% + \adjbox@tabular{tabular}% + }{% + \adjbox@tabular{tabular}{{#1}}\@nnil% + \remove@to@nnil + }#1\@nnil +} +\def\adjbox@tabular#1#2\@nnil{% + \ifcollectboxenv + \adjbox@innerenv{#1}{#2}\@nnil + \else + \def\adjbox@collectbox##1{\collectbox@tab{#1}{#2}{}{##1}{}}% + \fi +} +\define@key{adjbox}{tabular*}{% + \adjbox@tabular{tabular*}#1\@nnil +} +\define@key{adjbox}{array}{% + \@ifnextchar[{% + \adjbox@array% + }{% + \adjbox@array{{#1}}\@nnil% + \remove@to@nnil + }#1\@nnil +} +\def\adjbox@array#1\@nnil{% + \ifcollectboxenv + \adjbox@innercode{\(\begin{array}#1}{\end{array}\)}% + \else + \def\adjbox@collectbox##1{\collectbox@tab{array}{#1}{\(}{##1}{\)}}% + \fi +} \define@key{adjbox}{innerenv}{% \@ifnextchar\bgroup{% \adjbox@innerenv @@ -755,9 +788,6 @@ \define@key{adjbox}{innercode}{% \adjbox@innercode#1{}{}% } -\def\adjbox@innerenv#1#2\@nnil{% - \def\adjbox@collectbox##1{\collectbox@{\begin{#1}#2}{##1}{\end{#1}}}% -}% \def\adjbox@innercode#1#2{% \def\adjbox@collectbox##1{\collectbox@{#1}{##1}{#2}}% }% @@ -831,6 +861,7 @@ \def\adjbox@bgimage#1#2#3\@nnil{% \adjbox@Gin@add{\@collectbox{\@bgimagebox{#1}{#2}}}% } + \endinput %% %% End of file `adjustbox.sty'. diff --git a/Master/texmf-dist/tex/latex/adjustbox/collectbox.sty b/Master/texmf-dist/tex/latex/adjustbox/collectbox.sty new file mode 100644 index 00000000000..ba407935275 --- /dev/null +++ b/Master/texmf-dist/tex/latex/adjustbox/collectbox.sty @@ -0,0 +1,591 @@ +% \begin{macrocode} +\NeedsTeXFormat{LaTeX2e}[1999/12/01] +\ProvidesPackage{collectbox}[2011/08/23 v0.4 Collect macro arguments as boxes] +% \end{macrocode} +% +% \begin{macro}{\collectedbox} +% Box register used to store collected box. +% \begin{macrocode} +\newsavebox\collectedbox +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\collectbox} +% User level interface. Scans for potential star and optional arguments. +% \begin{macrocode} +\newcommand*\collectbox{% + \@ifstar + {\collectbox@a{{\BOXCONTENT}}}% + {\collectbox@a{}}% +} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\collectbox@a} +% \begin{macrocode} +\long\def\collectbox@a#1{% + \@ifnextchar[% + {\collectbox@b{#1}}% + {\collectbox@b{#1}[]}% +} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\collectbox@b} +% \begin{macrocode} +\long\def\collectbox@b#1[#2]#3{% + \@ifnextchar[% + {\collectbox@c{#2}{#3#1}}% + {\collectbox@c{#2}{#3#1}[]}% +} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\collectbox@c} +% \begin{macrocode} +\long\def\collectbox@c#1#2[#3]{% + \collectbox@{#1}{#2}{#3}% +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\collect@box} +% The box primitive used. Might be locally redefined to \Macro\vbox if required. +% \begin{macrocode} +\let\collect@box\hbox +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\collectbox@mode} +% +% \begin{macrocode} +\let\collectbox@mode\leavevmode +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\collectbox@} +% The box is saved using |\setbox|. Color is supported by using |\collectbox@setgroup|. +% A brace group is then opened using |\bgroup| which will replace the opening brace of the +% ``argument''. The end code is installed in this group using |\aftergroup|. +% The opening brace written by the user is then removed by assigning it as token to a dummy variable. +% If no |{| or |\bgroup| follows the next token is taken as sole content. +% \begin{macrocode} +\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@ +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\collectbox@env} +% \begin{macrocode} +\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% +} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\collectbox@currenenvir} +% \begin{macrocode} +\def\collectbox@currenvir{% + \edef\@currenvir{\@currenvir}% +} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\collectbox@bgroup} +% \begin{macrocode} +\def\collectbox@macro@bgroup{% + \@ifnextchar\bgroup + {\let\@let@token=}% + {\collectbox@arg}% +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\collectbox@env@bgroup} +% \begin{macrocode} +\def\collectbox@env@bgroup{% + \collectbox@reset + \ignorespaces +} +% \end{macrocode} +% \end{macro} +% +% \begin{macrocode} +\let\collectbox@bgroup\collectbox@macro@bgroup +% \end{macrocode} +% +% +% \begin{macro}{\collectbox@setgroup} +% Used at the very begin of the stored box. +% \begin{macrocode} +\def\collectbox@setgroup{% + \color@setgroup +} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\collectbox@endgroup} +% Used at the very end of the stored box. +% \begin{macrocode} +\def\collectbox@endgroup{% + \collectbox@endcode + \color@endgroup +} +\let\collectbox@endcode\relax +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\@collectbox} +% Simpler and quicker version of \Macro\collectbox. +% \begin{macrocode} +\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 +} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\collectbox@arg} +% Supports |\collectbox{}\somemacro| in addition to +% |\collectbox{}{\somemacro}|. The first following token is read and the inner brace group is closed +% to trigger the |\aftergroup| code. +% \begin{macrocode} +\def\collectbox@arg#1{% + #1\egroup +} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\collectbox@end} +% The color group is first closed, followed by the closing brace of the |\setbox| command. +% The user dimension macros are then defined. +% Direct after this code the users code is processed and concluded with a |\endgroup|. +% \begin{macrocode} +\def\collectbox@end{% + \collectbox@endgroup + \egroup + \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 + \ifcollectboxenv + \collectbox@reset + \collectbox@currenvir + \fi +} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\collectbox@reset} +% \begin{macrocode} +\def\collectbox@reset{% + \let\collectbox@endcode\relax + \let\collectbox@bgroup\collectbox@macro@bgroup + \let\collectbox@\collectbox@macro + \collectboxenvfalse +} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\collectbox@protecteddef} +% \begin{macrocode} +\begingroup +\expandafter\ifx\csname protected\endcsname\relax + \let\collectbox@protecteddef\def% +\else + \gdef\collectbox@protecteddef{\protected\def}% +\fi +\endgroup +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\collectbox@code} +% Global storage macro for user code. +% \begin{macrocode} +\let\collectbox@code\empty +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\collectboxto} +% User level interface. Reads box register and checks for optional argument. +% \begin{macrocode} +\newcommand\collectboxto[1]{% + \@ifnextchar[% + {\collectboxto@a{#1}}% + {\collectboxto@a{#1}[]}% +} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\collectboxto@a} +% Reads first optional and next mandatory arguments. +% \begin{macrocode} +\long\def\collectboxto@a#1[#2]#3{% + \@ifnextchar[% + {\collectboxto@b{#1}{#2}{#3}}% + {\collectboxto@b{#1}{#2}{#3}[]}% +} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\collectboxto@b} +% Reads second optional argument. +% \begin{macrocode} +\long\def\collectboxto@b#1#2#3[#4]{% + \collectboxto@{#1}{#2}{#3}{#4}% +} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\collectboxto@}[4]{box register}{code at begin}{code}{code at end} +% Installs code and starts to collect the box. +% \begin{macrocode} +\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 +} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\@collectboxto} +% Collects the next brace group as hbox into box register |#1| and executes token |#2| afterwards. +% \begin{macrocode} +\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 +} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\nocollectbox@}[3]{}{}{} +% Turns a brace group into \Macro\hbox{}. +% \begin{macrocode} +\newcommand\nocollectbox@[3]{% + \collectbox@mode + \collect@box\bgroup + \def\collectbox@code{#3\egroup#2}% + #1\bgroup + \aftergroup\collectbox@code + \collectbox@bgroup +} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\nocollectbox@to}[4]{}{}{}{} +% Turns a brace group into \Macro\hbox' to '{}. +% \begin{macrocode} +\newcommand\nocollectbox@to[4]{% + \collectbox@mode + \collect@box to #1\bgroup + \def\collectbox@code{#4\egroup#3}% + #2\bgroup + \aftergroup\collectbox@code + \collectbox@bgroup +} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\collectboxcheckenv} +% Checks if current macro is used as environment given by |#1|. +% If so the |bgroup| eating macro is redefined. +% A suitable end-macro is provided if non exists. All of this is done inside +% a group to keep thing local. +% The \Macro\@currenvir macro is redefined to contain \Macro\empty so that +% macros with the same name can be used inside the environment without collisions. +% This requires an extra internal group so that this change is reverted before the +% \Macro\end macro. +% \begin{macrocode} +\newcommand*\collectboxcheckenv[1]{% + \begingroup + \def\@tempa{#1}% + \expandafter\endgroup + \ifx\@currenvir\@tempa + \@collectboxisenv{#1}% + \fi +} +\def\@collectboxisenv#1{% + \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 +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\collectbox@env@endcode} +% \begin{macrocode} +\def\collectbox@env@endcode{\ifhmode\unskip\fi}% +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\collectbox@envend} +% \begin{macrocode} +\def\collectbox@envend{\collectboxenvend}% +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\collectboxenvend} +% \begin{macrocode} +\def\collectboxenvend{% + \egroup + \collectbox@currenvir +}% +% \end{macrocode} +% \end{macro} +% +% \subsection{Tabular collection} +% +% \begin{macro}{\collectboxtabular} +% \begin{macrocode} +\newcommand\collectboxtabular[3][c]{% + \collectbox@tab{tabular}{[#1]{#2}}{}{#3}{}% +} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\collectboxtabularstar} +% \begin{macrocode} +\newcommand\collectboxtabularstar[4][c]{% + \collectbox@tab{tabular*}{[#1]{#2}{#3}}{}{#4}{}% +} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\collectboxarray} +% \begin{macrocode} +\newcommand\collectboxarray[2]{% + \collectbox@tab{array}{{#1}}{\(}{#2}{\)}% +} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\collectbox@checkarray} +% \begin{macrocode} +\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}% + }% +}% +} +% \end{macrocode} +% \end{macro} +% +% \begin{macrocode} +\collectbox@checkarray +\AtBeginDocument{\collectbox@checkarray}% +% \end{macrocode} +% +% \begin{macro}{\collectbox@dorealarraycr} +% \begin{macrocode} +\def\collectbox@dorealarraycr{% + \expandafter\collectbox@realarraycr\collectbox@aftercrstuff +} +% \end{macrocode} +% \end{macro} +% +% \begin{macrocode} +\let\collectbox@aftercrstuff\empty +% \end{macrocode} +% +% \begin{macro}{\collectbox@tab} +% \begin{macrocode} +\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=% +} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\collebox@cr} +% \begin{macrocode} +\def\collebox@cr{% + \@ifstar\collebox@@cr\collebox@@cr% +} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\collebox@@cr} +% \begin{macrocode} +\def\collebox@@cr{% + \@ifnextchar[% + \collebox@@cr@opt + {\collebox@@@cr{}}% +} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\collebox@@cr@opt} +% \begin{macrocode} +\def\collebox@@cr@opt[#1]{% + \collebox@@@cr{[#1]}% +} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\collebox@@@cr} +% \begin{macrocode} +\def\collebox@@@cr#1{% + \def\collectbox@aftercrstuff{#1}% + \expandafter\collebox@@@@cr + \romannumeral-`0% +} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\collebox@@@@cr} +% \begin{macrocode} +\def\collebox@@@@cr{% + \@ifnextchar\egroup{\collectbox@dorealarraycr\collectbox@aftertab}{% + \ifx\@let@token\noalign + \expandafter\collectbox@handlenoalign + \else + \expandafter\collectbox@dorealarraycr + \fi + }% +} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\collectbox@handlenoalign} +% \begin{macrocode} +\def\collectbox@handlenoalign#1#2{% + \collectbox@dorealarraycr + \noalign{\bgroup\aftergroup\collectbox@afternoalign#2}% +} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\collectbox@handlenextnoalign} +% \begin{macrocode} +\def\collectbox@handlenextnoalign#1#2{% + \egroup + \noalign{\bgroup\aftergroup\collectbox@afternoalign#2}% +} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\collectbox@afternoalign} +% \begin{macrocode} +\def\collectbox@afternoalign{% + \expandafter\collectbox@@afternoalign + \romannumeral-`0% +} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\collectbox@@afternoalign} +% \begin{macrocode} +\def\collectbox@@afternoalign{% + \@ifnextchar\egroup{\egroup\collectbox@aftertab}{% + \ifx\@let@token\noalign + \expandafter\collectbox@handlenextnoalign + \else + \expandafter\egroup + \fi + }% +} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\collectbox@aftertab} +% \begin{macrocode} +\def\collectbox@aftertab{% + \collectbox@endtabenv + \afterassignment\collectbox@codeafter + \let\@let@token=% +} +% \end{macrocode} +% \end{macro} +% -- cgit v1.2.3