diff options
author | Karl Berry <karl@freefriends.org> | 2011-09-05 23:28:46 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2011-09-05 23:28:46 +0000 |
commit | b75ddb92b4bc5135cdf583ff71bd1dc29ba48ba6 (patch) | |
tree | 949199f8550a7d762b667964b02b608d83b4fa8d /Master/texmf-dist/tex/latex/adjustbox | |
parent | be746844a55d323ecd877e3d621544c8ad8b32e4 (diff) |
adjustbox (5sep11)
git-svn-id: svn://tug.org/texlive/trunk@23831 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/adjustbox')
-rw-r--r-- | Master/texmf-dist/tex/latex/adjustbox/adjustbox.sty | 41 | ||||
-rw-r--r-- | Master/texmf-dist/tex/latex/adjustbox/collectbox.sty | 591 |
2 files changed, 627 insertions, 5 deletions
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{<code>}\somemacro| in addition to +% |\collectbox{<code>}{\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]{<code at begin>}{<code>}{<code at end>} +% Turns a brace group into \Macro\hbox{<code at begin><content><code at end>}<code>. +% \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]{<length>}{<code at begin>}{<code>}{<code at end>} +% Turns a brace group into \Macro\hbox' to '<length>{<code at begin><content><code at end>}<code>. +% \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} +% |