% \iffalse meta-comment %<=*COPYRIGHT> %% Copyright (C) 2011 by Martin Scharrer %% --------------------------------------------------------------------------- %% 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 storebox.dtx and storebox.ins %% and the derived filebase storebox.sty and storebox-pgf.sty. %% %<=/COPYRIGHT> % \fi % % \iffalse %<*driver> \ProvidesFile{storebox.dtx}[% %<=*DATE> 2011/12/21 %<=/DATE> %<=*VERSION> v1.3a %<=/VERSION> DTX file for storebox] \documentclass{ydoc} \GetFileInfo{storebox.dtx} \usepackage{storebox}[\filedate] \EnableCrossrefs \CodelineIndex \RecordChanges \begin{document} \DocInput{\jobname.dtx} \PrintChanges \PrintIndex \end{document} % % \fi % % \CheckSum{680} % % \CharacterTable % {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z % Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z % Digits \0\1\2\3\4\5\6\7\8\9 % Exclamation \! Double quote \" Hash (number) \# % Dollar \$ Percent \% Ampersand \& % Acute accent \' Left paren \( Right paren \) % Asterisk \* Plus \+ Comma \, % Minus \- Point \. Solidus \/ % Colon \: Semicolon \; Less than \< % Equals \= Greater than \> Question mark \? % Commercial at \@ Left bracket \[ Backslash \\ % Right bracket \] Circumflex \^ Underscore \_ % Grave accent \` Left brace \{ Vertical bar \| % Right brace \} Tilde \~} % % % \changes{v0.99}{2011/08/05}{Converted to DTX file.} % \changes{v1.0}{2011/09/22}{First release.} % \changes{v1.1}{2011/10/21}{Fixed issue with \env{storebox} environment with new \pkg{collectbox} version.} % \changes{v1.2}{2011/12/19}{Added PDF resources argument to support transparent material.} % \changes{v1.3}{2011/12/20}{Added patch for PDF pdftex driver to fully support transparent material and shadings.} % \changes{v1.3a}{2011/12/21}{Made the use of \cs{immediate} optional so that unused storeboxes are not written to the PDF.} % % \DoNotIndex{\newcommand,\newenvironment} % % \GetFileInfo{storebox.dtx} % \author{Martin Scharrer} % \email{martin@scharrer.me} % \ifdefined\repository % \repository{https://bitbucket.org/martin_scharrer/storebox} % \fi % % \maketitle % % \begin{abstract}\noindent % This package allows the placement of identical content multiple times in a document while only storing it once in the output file. % At the moment only \LaTeX\ compilers with native PDF output are supported (|pdflatex| or |lualatex|). % For other \LaTeX\ compilers a fallback to |\savebox| is implemented. % \end{abstract} % % \section{Introduction} % \LaTeX{} provides box registers to save content and use it later in the document once or multiple times (or none at all). % However, the box content is then written every time to the output file. % The PDF file format provides a way to store material as object and reference it later. A similar technique is theoretically % possible for PostScript output (but not yet implemented). This has the benefit that the content is really only stored once % in the output file. However, if file compression is used for the final output file the size benefit might be very small % if the content is only reused a low number of times. % % This package provides ``store boxes'' which have the same user interface like normal \LaTeX{} ``save boxes'', but only % store the content once in the output file even if it is used several times. % At the moment only PDF output is supported (i.e.\ \texttt{pdflatex} and \texttt{lualatex}). % If the stored content is not used in the document after all it is not written to the PDF except if the \opt{immediate} option was used. % For any other \TeX{} and output format the package simply falls back to use the normal savebox equivalents. % % \section{Known issues} % There are some known side effects with advanced graphic elements, namely transparencies and shadings. % These elements require special driver code which adds the required PDF instructions. For TikZ/PGF drawings this is done % by the |pdftex| driver of TikZ/PGF. However, due to a % \href{https://sourceforge.net/tracker/?func=detail&atid=752792&aid=3462542&group_id=142562}{bug in this driver} % transparent material is not supported, but shown fully opaque if the storebox also holds PDF shadings. % This affects \file{pgfsys-pdftex.def} in v1.26 from 2009/05/22 and earlier versions. % Since \pkg{storebox} v1.3 from 2011/12/20 a set of patches for the PGF |pdftex| driver is loaded (as support package \pkg{storebox-pgf}), % so that both transparencies and shadings are supported together. The patches are not loaded if a new version of the driver is detected. % Please report all issues with this patches to the \pkg{storebox} author, not to the TikZ/PGF authors. % % \section{Options} % The package allows to enable and disable the storebox feature. Normally this is selected automatically dependent if PDF output is used (using \pkg{ifpdf}). % It also provides two options \opt{enable} and \opt{disable} to explicitly switch the storebox feature on or off. % The \opt{disable} option is useful to see the resulting file size difference. % The usage of the \opt{enable} option should not be required and will lead to errors if used with unsupported \TeX{} formats. % % Two further complementary options \opt{delayed} (default) and \opt{immediate} are provided. % They control if a storebox (i.e.\ the underlying \Macro\pdfxform) is written to the PDF immediately or only after it gets referenced, i.e.\ is inserted into the document using % \Macro\usestorebox. With \opt{immediate} the storebox is always written into the PDF, even if it is not used. By default \opt{delayed} is used, but % it is possible that \opt{immediate} is required if \Macro\storebox is used inside other \Macro\pdfxform\relax's, e.g.\ inside certain TikZ/PGF nodes. % If any graphic issues occur in a document the \opt{immediate} option should first be tested before sending any bug reports. % % \Needspace*{3cm} % \section{Macros} % % \DescribeMacro{\newstorebox}{<\textbackslash boxname>} % Because storeboxes are stored as PDF objects and not as \TeX\ box registers % it is not required to allocate a register for them. However, in fall-back mode % the used control sequence \meta{\textbackslash boxname} must be defined as savebox. % This macro defines \meta{\textbackslash boxname} simply as \Macro\relax\relax (just as precaution) and is equal to % \Macro\newsavebox in fall-back mode. % % % \DescribeMacro{\storebox}{<\textbackslash boxname>}{} % This stores the \meta{content} as \meta{\textbackslash boxname} (which is actually just a numeric reference) for later use. % The \pkg{collectbox} package is used to collect the \meta{content} as box and not as macro argument and therefore it can % contain verbatim and other special material. The braces can also be written in their explicit form \Macro\bgroup and \Macro\egroup % and then split in two different macros or across the begin and end of an environment. % It is possible to use \Macro\storebox multiple times with the same \meta{\textbackslash boxname}. This will create % a new PDF object without affected the old one. % In fall-back mode this macro is functional equal to \Macro\savebox\relax (but then still uses \pkg{collectbox}). % % % \DescribeEnv[]{storebox}{<\textbackslash boxname>} % This is the environment version of \Macro\storebox. Special care is taken to allow for an identical name. % In fall-back mode this macro is equal to the \env{lrbox} environment. % % % \DescribeMacro{\usestorebox}{<\textbackslash boxname>} % This macro typesets the stored content at the current position (as horizontal box in horizontal mode). % This is realized by adding a PDF reference to the stored content. % In fall-back mode this macro is equal to \Macro\usebox. % % % \DescribeMacro{\ifstorebox} % This if-switch is set to \emph{true} if \Macro\storebox was successfully defined as intended % but to \emph{false} if the \Macro\savebox fall-back was used. % % \clearpage % \section{Example} % \begin{lstlisting}[gobble=2,language={[latex]tex},numbers=none] % \documentclass{article} % % \usepackage{storebox} % % \newstorebox{\mybox} % Not really required for PDF output % \begin{document} % % \storebox{\mybox}{\verb+Supports verbatim #$\empty+} % % \usestorebox{\mybox} % \usestorebox{\mybox} % % \storebox\mybox\bgroup % Can also be split % \verb+\empty+ % \egroup % % \usestorebox{\mybox} % \usestorebox{\mybox} % % \begin{storebox}{\mybox} % Or used as environment % (then will ignore leading and trailing spaces) % \end{storebox} % % \usestorebox{\mybox} % \usestorebox{\mybox} % % \end{document} % \end{lstlisting} % % \setcounter{lstnumber}{1} % \StopEventually{} % % \clearpage % \section{Implementation} % % \iffalse %<*storebox.sty> % \fi % \begin{macrocode} % \ProvidesPackage{storebox}[% % % %<*DRIVER> 2099/01/01 develop % Store and reuse boxes in a file size efficient way] % \end{macrocode} % % \begin{macrocode} \DeclareOption{disable}{\let\ifstorebox\iffalse} \DeclareOption{enable}{\let\ifstorebox\iftrue} \DeclareOption{immediate}{\let\storebox@immediate\immediate} \DeclareOption{delayed}{\let\storebox@immediate\relax} \ExecuteOptions{delayed} \ProcessOptions* \expandafter\ifx\csname ifstorebox\endcsname\relax \RequirePackage{ifpdf} \expandafter\let\csname ifstorebox\expandafter\endcsname\csname ifpdf\endcsname \fi % \end{macrocode} % % \begin{macrocode} \RequirePackage{collectbox}[2011/08/04] % \end{macrocode} % % \begin{macro}{\storebox} % \begin{macrocode} \newcommand*\storebox{% \begingroup \def\@tempa{storebox}% \ifx\@currenvir\@tempa \endgroup \expandafter\@storebox@env \else \endgroup \expandafter\@storebox \fi } % \end{macrocode} % \end{macro} % % % \begin{macrocode} \ifstorebox % \end{macrocode} % % \begin{macro}{\@storebox} % Macro version: % \begin{macrocode} \def\@storebox#1{% \begingroup \@collectboxto\collectedbox{% \storebox@immediate\pdfxform resources {\the\pdfpageresources}\collectedbox \endgroup\mathchardef#1=\pdflastxform }% } % \end{macrocode} % \end{macro} % % % \begin{macro}{\@storebox@env} % Environment version. Code adapted from \env{lrbox} environment. The group added by \Macro\begin and \Macro\end must % be specially handled to allow for a local assignment. % \begin{macrocode} \def\@storebox@env#1{% \edef\@tempa{% \setbox\collectedbox\hbox\bgroup% \def\noexpand\the@storebox{\noexpand#1}% }% \@tempa \begingroup \aftergroup\@storebox@env@end \@endpefalse \color@setgroup \begingroup \def\@currenvir{storebox\empty}% \ignorespaces } % \end{macrocode} % \end{macro} % % \begin{macro}{\endstorebox} % \begin{macrocode} \def\endstorebox{% \unskip \endgroup \color@endgroup } % \end{macrocode} % \end{macro} % % % % \begin{macro}{\@storebox@env@end} % This ends the box assignment and stores the box as PDF xform. % Then the given control sequence is set to the xform number. % \begin{macrocode} \def\@storebox@env@end{% \edef\@tempa{% \egroup \immediate\pdfxform resources {\the\pdfpageresources}\collectedbox \endgroup \mathchardef\expandafter\noexpand\the@storebox=\pdflastxform }% \@tempa } % \end{macrocode} % \end{macro} % % % \begin{macro}{\newstorebox} % \begin{macrocode} \newcommand*\newstorebox[1]{% \@ifdefinable{#1}{\let#1\relax}% } % \end{macrocode} % \end{macro} % % \begin{macro}{\usestorebox} % \begin{macrocode} \newcommand*\usestorebox[1]{% \mbox{\pdfrefxform#1}% } % \end{macrocode} % \end{macro} % % Load PGF driver patches if required: % \begin{macrocode} \AtBeginDocument{% \@ifpackageloaded{pgf}{\RequirePackage{storebox-pgf}{}}% } % \end{macrocode} % % \begin{macrocode} \else % \end{macrocode} % % % \begin{macro}{\@storebox} % Macro version: % \begin{macrocode} \def\@storebox#1{\@collectboxto{#1}{}} % \end{macrocode} % \end{macro} % % % \begin{macro}{\@storebox@env} % \begin{macrocode} \def\@storebox@env{% \edef\@currenvir{\@currenvir\noexpand\noexpand\noexpand\empty}% \lrbox } % \end{macrocode} % \end{macro} % % % \begin{macro}{\endstorebox} % \begin{macrocode} \def\endstorebox{% \endlrbox \edef\@currenvir{\@currenvir}% } % \end{macrocode} % \end{macro} % % \begin{macro}{\newsavebox} % \begin{macrocode} \@ifdefinable\newstorebox{% \let\newstorebox\newsavebox } % \end{macrocode} % \end{macro} % % \begin{macro}{\usestorebox} % \begin{macrocode} \@ifdefinable\usestorebox{% \let\usestorebox\usebox } % \end{macrocode} % \end{macro} % % \begin{macrocode} \fi % \end{macrocode} % % \iffalse % % \fi % % % \subsection{PGF patches} % % \iffalse %<*storebox-pgf.sty> % \fi % \begin{macrocode} %% This support package contains patches for the file 'pgfsys-pdftex.def' file from %% the TikZ/PGF bundle. All patches code is copyright by the TikZ/PGF authors %% and is used in this file according to the LPPL license. %% Please see the copyright and license notices in the 'pgfsys-pdftex.def' file. %% %% The rest of the code of this file is under the following copyright and licence: %% % \ProvidesPackage{storebox-pgf}[% % % %<*DRIVER> 2099/01/01 develop % Patches for PGF to support transparency and shadings inside storeboxes] % \end{macrocode} % % \begin{macrocode} \begingroup \let\on@line\@gobble % % \end{macrocode} % % \begin{macrocode} \@ifl@ter{def}{pgfsys-pdftex}{2009/05/23}{% \PackageInfo{storebox-pgf}{Newer version of 'pgfsys-pdftex.def' found.\MessageBreak No patches applied.}% \endgroup \endinput }{}% % \end{macrocode} % % \begin{macro}{\storebox@patch} % \begin{macrocode} \def\storebox@patch#1#2#3#4{% \ifx#1\@undefined \PackageInfo{storebox-pgf}{Macro \string#1\space not defined.\MessageBreak No patch applied.}% \else \def\@tempa#2{#3}% \ifx#1\@tempa \PackageInfo{storebox-pgf}{Patching macro \string#1.}% \gdef#1#2{#4}% \else \PackageInfo{storebox-pgf}{Macro \string#1\space with unknown definition.\MessageBreak No patch applied.}% \fi \fi } % \end{macrocode} % \end{macro} % % \begin{macrocode} \storebox@patch\pgfsys@horishading{#1#2#3}{% {% \pgf@parsefunc{#3}% \pgfmathparse{#2}% \setbox\pgfutil@tempboxa=\hbox to\pgf@max{\vbox to\pgfmathresult pt{\vfil\pgfsys@invoke{/Sh sh}}\hfil}% \pgf@process{\pgfpoint{\pgf@max}{#2}}% \pdfxform resources {% /Shading << /Sh << /ShadingType 2 /ColorSpace /DeviceRGB /Domain [\pgf@pdfparseddomain] /Coords [\pgf@doma\space0 \pgf@domb\space0] /Function \pgf@pdfparsedfunction /Extend [false false] >> >>}\pgfutil@tempboxa% << \expandafter\xdef\csname @pgfshading#1!\endcsname{\leavevmode\noexpand\pdfrefxform\the\pdflastxform}% }% }{% {% \pgf@parsefunc{#3}% \pgfmathparse{#2}% \setbox\pgfutil@tempboxa=\hbox to\pgf@max{\vbox to\pgfmathresult pt{\vfil\pgfsys@invoke{/Sh sh}}\hfil}% \pgf@process{\pgfpoint{\pgf@max}{#2}}% \immediate\pdfxform resources {% /Shading << /Sh << /ShadingType 2 /ColorSpace /DeviceRGB /Domain [\pgf@pdfparseddomain] /Coords [\pgf@doma\space0 \pgf@domb\space0] /Function \pgf@pdfparsedfunction /Extend [false false] >> >>}\pgfutil@tempboxa% << \expandafter\xdef\csname @pgfshading#1!\endcsname{\leavevmode\noexpand\pdfrefxform\the\pdflastxform}% }% } % \end{macrocode} % % \begin{macrocode} \storebox@patch\pgfsys@vertshading{#1#2#3}{% {% \pgf@parsefunc{#3}% \pgfmathparse{#2}% \setbox\pgfutil@tempboxa=\hbox to\pgfmathresult pt{\vbox to\pgf@max{\vfil\pgfsys@invoke{/Sh sh}}\hfil}% \pgf@process{\pgfpoint{#2}{\pgf@max}}% \pdfxform resources {% /Shading << /Sh << /ShadingType 2 /ColorSpace /DeviceRGB /Domain [\pgf@pdfparseddomain] /Coords [0 \pgf@doma\space0 \pgf@domb] /Function \pgf@pdfparsedfunction /Extend [false false] >> >>}\pgfutil@tempboxa% << \expandafter\xdef\csname @pgfshading#1!\endcsname{\leavevmode\noexpand\pdfrefxform\the\pdflastxform}% }% }{% {% \pgf@parsefunc{#3}% \pgfmathparse{#2}% \setbox\pgfutil@tempboxa=\hbox to\pgfmathresult pt{\vbox to\pgf@max{\vfil\pgfsys@invoke{/Sh sh}}\hfil}% \pgf@process{\pgfpoint{#2}{\pgf@max}}% \immediate\pdfxform resources {% /Shading << /Sh << /ShadingType 2 /ColorSpace /DeviceRGB /Domain [\pgf@pdfparseddomain] /Coords [0 \pgf@doma\space0 \pgf@domb] /Function \pgf@pdfparsedfunction /Extend [false false] >> >>}\pgfutil@tempboxa% << \expandafter\xdef\csname @pgfshading#1!\endcsname{\leavevmode\noexpand\pdfrefxform\the\pdflastxform}% }% } % \end{macrocode} % % \begin{macrocode} \storebox@patch\pgfsys@radialshading{#1#2#3}{% {% \pgf@parsefunc{#3}% \setbox\pgfutil@tempboxa=\hbox to2\pgf@max{\vbox to2\pgf@max{\vfil\pgfsys@invoke{/Sh sh}}\hfil}% \pgf@process{#2}% \pgf@xa=\pgf@x% \pgf@ya=\pgf@y% \pgf@process{\pgfpoint{\pgf@max}{\pgf@max}}% \advance\pgf@xa by \pgf@x% \advance\pgf@ya by \pgf@y% \pgf@sys@bp@correct{\pgf@x}% \pgf@sys@bp@correct{\pgf@y}% \pgf@sys@bp@correct{\pgf@xa}% \pgf@sys@bp@correct{\pgf@ya}% \pdfxform resources {% /Shading << /Sh << /ShadingType 3 /ColorSpace /DeviceRGB /Domain [\pgf@pdfparseddomain] /Coords [\pgf@sys@tonumber{\pgf@xa} \pgf@sys@tonumber{\pgf@ya} \pgf@doma\space \pgf@sys@tonumber{\pgf@x} \pgf@sys@tonumber{\pgf@y} \pgf@domb] /Function \pgf@pdfparsedfunction /Extend [true false] >> >>}\pgfutil@tempboxa% << \expandafter\xdef\csname @pgfshading#1!\endcsname{\leavevmode\noexpand\pdfrefxform\the\pdflastxform}% }% }{% {% \pgf@parsefunc{#3}% \setbox\pgfutil@tempboxa=\hbox to2\pgf@max{\vbox to2\pgf@max{\vfil\pgfsys@invoke{/Sh sh}}\hfil}% \pgf@process{#2}% \pgf@xa=\pgf@x% \pgf@ya=\pgf@y% \pgf@process{\pgfpoint{\pgf@max}{\pgf@max}}% \advance\pgf@xa by \pgf@x% \advance\pgf@ya by \pgf@y% \pgf@sys@bp@correct{\pgf@x}% \pgf@sys@bp@correct{\pgf@y}% \pgf@sys@bp@correct{\pgf@xa}% \pgf@sys@bp@correct{\pgf@ya}% \immediate\pdfxform resources {% /Shading << /Sh << /ShadingType 3 /ColorSpace /DeviceRGB /Domain [\pgf@pdfparseddomain] /Coords [\pgf@sys@tonumber{\pgf@xa} \pgf@sys@tonumber{\pgf@ya} \pgf@doma\space \pgf@sys@tonumber{\pgf@x} \pgf@sys@tonumber{\pgf@y} \pgf@domb] /Function \pgf@pdfparsedfunction /Extend [true false] >> >>}\pgfutil@tempboxa% << \expandafter\xdef\csname @pgfshading#1!\endcsname{\leavevmode\noexpand\pdfrefxform\the\pdflastxform}% }% }% % \end{macrocode} % % \begin{macrocode} \storebox@patch\pgfsys@functionalshading{#1#2#3#4}{% {% \pgf@process{#2}% \pgf@xa=\pgf@x% \pgf@ya=\pgf@y% \pgf@process{#3}% \pgf@xb=\pgf@x% \pgf@yb=\pgf@y% \advance\pgf@x by-\pgf@xa% \advance\pgf@y by-\pgf@ya% \setbox\pgfutil@tempboxa=\hbox to\pgf@x{\vbox to\pgf@y{\vfil\pgfsys@invoke{/Sh sh}}\hfil}% \pgf@sys@bp@correct{\pgf@xa}% \pgf@sys@bp@correct{\pgf@ya}% \pgf@sys@bp@correct{\pgf@xb}% \pgf@sys@bp@correct{\pgf@yb}% \pgf@xc=-\pgf@xa% \pgf@yc=-\pgf@ya% % Now build the function \pdfobj stream attr { /FunctionType 4 /Domain [\pgf@sys@tonumber{\pgf@xa}\space\pgf@sys@tonumber{\pgf@xb}\space\pgf@sys@tonumber{\pgf@ya}\space\pgf@sys@tonumber{\pgf@yb}] /Range [0 1 0 1 0 1] } {{#4}}% \edef\pgf@temp@num{\the\pdflastobj}% \pdfxform resources {% /Shading << /Sh << /ShadingType 1 /ColorSpace /DeviceRGB /Matrix [1 0 0 1 \pgf@sys@tonumber{\pgf@xc}\space\pgf@sys@tonumber{\pgf@yc}] /Domain [\pgf@sys@tonumber{\pgf@xa}\space\pgf@sys@tonumber{\pgf@xb}\space\pgf@sys@tonumber{\pgf@ya}\space\pgf@sys@tonumber{\pgf@yb}] /Function \pgf@temp@num\space 0 R >> >>}\pgfutil@tempboxa% << \expandafter\xdef\csname @pgfshading#1!\endcsname{% \leavevmode% \noexpand\pdfrefxform\the\pdflastxform% \noexpand\pdfrefobj\pgf@temp@num% }% }% }{% {% \pgf@process{#2}% \pgf@xa=\pgf@x% \pgf@ya=\pgf@y% \pgf@process{#3}% \pgf@xb=\pgf@x% \pgf@yb=\pgf@y% \advance\pgf@x by-\pgf@xa% \advance\pgf@y by-\pgf@ya% \setbox\pgfutil@tempboxa=\hbox to\pgf@x{\vbox to\pgf@y{\vfil\pgfsys@invoke{/Sh sh}}\hfil}% \pgf@sys@bp@correct{\pgf@xa}% \pgf@sys@bp@correct{\pgf@ya}% \pgf@sys@bp@correct{\pgf@xb}% \pgf@sys@bp@correct{\pgf@yb}% \pgf@xc=-\pgf@xa% \pgf@yc=-\pgf@ya% % Now build the function \pdfobj stream attr { /FunctionType 4 /Domain [\pgf@sys@tonumber{\pgf@xa}\space\pgf@sys@tonumber{\pgf@xb}\space\pgf@sys@tonumber{\pgf@ya}\space\pgf@sys@tonumber{\pgf@yb}] /Range [0 1 0 1 0 1] } {{#4}}% \edef\pgf@temp@num{\the\pdflastobj}% \immediate\pdfxform resources {% /Shading << /Sh << /ShadingType 1 /ColorSpace /DeviceRGB /Matrix [1 0 0 1 \pgf@sys@tonumber{\pgf@xc}\space\pgf@sys@tonumber{\pgf@yc}] /Domain [\pgf@sys@tonumber{\pgf@xa}\space\pgf@sys@tonumber{\pgf@xb}\space\pgf@sys@tonumber{\pgf@ya}\space\pgf@sys@tonumber{\pgf@yb}] /Function \pgf@temp@num\space 0 R >> >>}\pgfutil@tempboxa% << \expandafter\xdef\csname @pgfshading#1!\endcsname{% \leavevmode% \noexpand\pdfrefxform\the\pdflastxform% \noexpand\pdfrefobj\pgf@temp@num% }% }% } % \end{macrocode} % % \begin{macrocode} \storebox@patch\pgfsys@fadingfrombox{#1#2}{% {% \pgf@sys@pdf@check@resources% \pgf@x=-.5\wd#2% \pgf@y=-.5\ht#2% \advance\pgf@y by.5\dp#2% \expandafter\xdef\csname pgfsmasktrans@#1\endcsname{% \noexpand\pgftransformcm{1}{0}{0}{1}{\noexpand\pgfqpoint{\the\pgf@x}{\the\pgf@y}}}% \pdfxform resources { \pgf@sys@pdf@possible@resources } #2% \expandafter\xdef\csname pgfsmaskxform@#1\endcsname{\the\pdflastxform}% }% }{% {% \pgf@sys@pdf@check@resources% \pgf@x=-.5\wd#2% \pgf@y=-.5\ht#2% \advance\pgf@y by.5\dp#2% \expandafter\xdef\csname pgfsmasktrans@#1\endcsname{% \noexpand\pgftransformcm{1}{0}{0}{1}{\noexpand\pgfqpoint{\the\pgf@x}{\the\pgf@y}}}% \immediate\pdfxform resources { \pgf@sys@pdf@possible@resources } #2% \expandafter\xdef\csname pgfsmaskxform@#1\endcsname{\the\pdflastxform}% }% } \storebox@patch\pgfsys@transparencygroupfrombox{#1}{% \pgf@sys@pdf@check@resources% \pdfxform attr { /Group << /S /Transparency >> } %<< resources { \pgf@sys@pdf@possible@resources } #1% \setbox#1=\hbox{\pdfrefxform\pdflastxform}% }{% \pgf@sys@pdf@check@resources% \immediate\pdfxform attr { /Group << /S /Transparency >> } %<< resources { \pgf@sys@pdf@possible@resources } #1% \setbox#1=\hbox{\pdfrefxform\pdflastxform}% } \endgroup % \end{macrocode} % % \iffalse % % \fi % % \Finale \endinput