% Copyright 2006 by Till Tantau % % This file may be distributed and/or modified % % 1. under the LaTeX Project Public License and/or % 2. under the GNU Public License. % % See the file doc/generic/pgf/licenses/LICENSE for more details. \ProvidesPackage{pgfpages}[2004/11/05 ver 0.01] \RequirePackage{pgfcore,calc} \newcount\pgf@logicalpages \newcount\pgf@firstshipout \newcount\pgf@lastshipout \newcount\pgf@currentshipout \newcount\pgf@cpn \newcount\pgf@shipoutnextto \newdimen\pgfphysicalheight \newdimen\pgfphysicalwidth \pgf@shipoutnextto=0\relax \pgf@logicalpages=0\relax \pgf@firstshipout=1\relax \pgf@lastshipout=1\relax \pgf@currentshipout=1\relax \pgfphysicalheight=\paperheight \pgfphysicalwidth=\paperwidth \newif\ifpgfphysicalpageempty \newif\ifpgf@holdingphysicalpage \pgfphysicalpageemptytrue \pgf@holdingphysicalpagefalse % Define a layout % % #1 = layout name % #2 = code before options have been set % #2 = code after options have been set % % Example: % % \pgfpagesdeclarelayout{resize to}{ % \pgfpagesphysicalpageoptions{logical pages=1,physical height=\pgfpageoptionheight,physical width=\pgfpageoptionwidth} % \pgfpageslogicalpageoptions{1}{resized width=\pgfphysicalwidth,% % resized height=\pgfphysicalheight,center=\pgfpoint{.5\pgfphysicalwidth}{.5\pgfphysicalheight}}} \newcommand\pgfpagesdeclarelayout[3]{ \expandafter\newcommand\csname pgfpages@layoutbefore@#1\endcsname{#2} \expandafter\newcommand\csname pgfpages@layout@#1\endcsname{#3}} % Use a layout % % #1 = layout name % #2 = options % % Example: % % \pgfpagesuselayout{resize to}[a4paper] \def\pgfpagesuselayout#1{\pgf@ifnextchar[{\pgf@pagelayout{#1}}{\pgf@pagelayout{#1}[]}} \def\pgf@pagelayout#1[#2]{ \csname pgfpages@layoutbefore@#1\endcsname \setkeys{pgfpagesuselayoutoption}{#2} \pgf@ifundefined{pgfpages@layout@#1}{ \PackageError{pgfpages}{Page layout `#1' undefined.}{} } { \csname pgfpages@layout@#1\endcsname } } % Predefined options \define@key{pgfpagesuselayoutoption}{physical paper width}% {\def\pgfpageoptionwidth{#1}} \define@key{pgfpagesuselayoutoption}{physical paper height}% {\def\pgfpageoptionheight{#1}} \define@key{pgfpagesuselayoutoption}{a0paper}[]% {\def\pgfpageoptionheight{1189mm} \def\pgfpageoptionwidth{841mm}} \define@key{pgfpagesuselayoutoption}{a1paper}[]% {\def\pgfpageoptionheight{841mm} \def\pgfpageoptionwidth{594mm}} \define@key{pgfpagesuselayoutoption}{a2paper}[]% {\def\pgfpageoptionheight{594mm} \def\pgfpageoptionwidth{420mm}} \define@key{pgfpagesuselayoutoption}{a3paper}[]% {\def\pgfpageoptionheight{420mm} \def\pgfpageoptionwidth{297mm}} \define@key{pgfpagesuselayoutoption}{a4paper}[]% {\def\pgfpageoptionheight{297mm} \def\pgfpageoptionwidth{210mm}} \define@key{pgfpagesuselayoutoption}{a5paper}[]% {\def\pgfpageoptionheight{210mm} \def\pgfpageoptionwidth{148mm}} \define@key{pgfpagesuselayoutoption}{a6paper}[]% {\def\pgfpageoptionheight{148mm} \def\pgfpageoptionwidth{105mm}} \define@key{pgfpagesuselayoutoption}{letterpaper}[]% {\def\pgfpageoptionheight{11in} \def\pgfpageoptionwidth{8.5in}} \define@key{pgfpagesuselayoutoption}{legalpaper}[]% {\def\pgfpageoptionheight{14in} \def\pgfpageoptionwidth{8.5in}} \define@key{pgfpagesuselayoutoption}{executivepaper}[]% {\def\pgfpageoptionheight{10.5in}\def\pgfpageoptionwidth{7.25in}} \define@key{pgfpagesuselayoutoption}{landscape}[]% { \let\pgf@temp=\pgfpageoptionwidth \let\pgfpageoptionwidth=\pgfpageoptionheight \let\pgfpageoptionheight=\pgf@temp } \define@key{pgfpagesuselayoutoption}{border shrink}% {\def\pgfpageoptionborder{#1}} \define@key{pgfpagesuselayoutoption}{corner width}% {\def\pgfpageoptioncornerwidth{#1}} \define@key{pgfpagesuselayoutoption}{odd numbered pages right}[]% {\def\pgfpageoptionfirstshipout{2}} \define@key{pgfpagesuselayoutoption}{second right}[]% {% \def\pgfpageoptionfirstcenter{\pgfpoint{.5\paperwidth}{.5\paperheight}}% \def\pgfpageoptionsecondcenter{\pgfpoint{1.5\paperwidth}{.5\paperheight}}% \def\pgfpageoptiontwoheight{\paperheight}% \def\pgfpageoptiontwowidth{2\paperwidth}% } \define@key{pgfpagesuselayoutoption}{second left}[]% {% \def\pgfpageoptionfirstcenter{\pgfpoint{1.5\paperwidth}{.5\paperheight}}% \def\pgfpageoptionsecondcenter{\pgfpoint{.5\paperwidth}{.5\paperheight}}% \def\pgfpageoptiontwoheight{\paperheight}% \def\pgfpageoptiontwowidth{2\paperwidth}% } \define@key{pgfpagesuselayoutoption}{second top}[]% {% \def\pgfpageoptionfirstcenter{\pgfpoint{.5\paperwidth}{.5\paperheight}}% \def\pgfpageoptionsecondcenter{\pgfpoint{.5\paperwidth}{1.5\paperheight}}% \def\pgfpageoptiontwoheight{2\paperheight}% \def\pgfpageoptiontwowidth{\paperwidth}% } \define@key{pgfpagesuselayoutoption}{second bottom}[]% {% \def\pgfpageoptionfirstcenter{\pgfpoint{.5\paperwidth}{1.5\paperheight}}% \def\pgfpageoptionsecondcenter{\pgfpoint{.5\paperwidth}{.5\paperheight}}% \def\pgfpageoptiontwoheight{2\paperheight}% \def\pgfpageoptiontwowidth{\paperwidth}% } % Predefined layouts \pgfpagesdeclarelayout{rounded corners} { \def\pgfpageoptioncornerwidth{10pt} } { \pgfpagesphysicalpageoptions {% logical pages=1 } \pgfpageslogicalpageoptions{1} {% center=\pgfpoint{.5\pgfphysicalwidth}{.5\pgfphysicalheight},% corner width=\pgfpageoptioncornerwidth% }% } \pgfpagesdeclarelayout{resize to} { \def\pgfpageoptionborder{0pt} } { \pgfpagesphysicalpageoptions {% logical pages=1,% physical height=\pgfpageoptionheight,% physical width=\pgfpageoptionwidth% } \pgfpageslogicalpageoptions{1} {% resized width=\pgfphysicalwidth,% resized height=\pgfphysicalheight,% border shrink=\pgfpageoptionborder,% center=\pgfpoint{.5\pgfphysicalwidth}{.5\pgfphysicalheight}% }% } \pgfpagesdeclarelayout{two screens with lagging second} {} { \pgfpagesphysicalpageoptions {% logical pages=2,% physical height=\pgfpageoptiontwoheight,% physical width=\pgfpageoptiontwowidth,% last logical shipout=1,% } \pgfpageslogicalpageoptions{1} {% center=\pgfpageoptionfirstcenter,% }% \pgfpageslogicalpageoptions{2} {% center=\pgfpageoptionsecondcenter,% copy from=1% }% } \pgfpagesdeclarelayout{two screens with optional second} {} { \pgfpagesphysicalpageoptions {% logical pages=2,% physical height=\pgfpageoptiontwoheight,% physical width=\pgfpageoptiontwowidth,% last logical shipout=1% } \pgfpageslogicalpageoptions{1} {% center=\pgfpageoptionfirstcenter,% }% \pgfpageslogicalpageoptions{2} {% center=\pgfpageoptionsecondcenter,% copy from=2% }% } \pgfpagesdeclarelayout{2 on 1} { \edef\pgfpageoptionheight{\the\paperwidth} % landscaped by default \edef\pgfpageoptionwidth{\the\paperheight} \def\pgfpageoptionborder{0pt} \def\pgfpageoptionfirstshipout{1} } { \pgfpagesphysicalpageoptions {% logical pages=2,% physical height=\pgfpageoptionheight,% physical width=\pgfpageoptionwidth,% current logical shipout=\pgfpageoptionfirstshipout% } \ifdim\paperheight>\paperwidth\relax % put side-by-side \pgfpageslogicalpageoptions{1} {% border shrink=\pgfpageoptionborder,% resized width=.5\pgfphysicalwidth,% resized height=\pgfphysicalheight,% center=\pgfpoint{.25\pgfphysicalwidth}{.5\pgfphysicalheight}% }% \pgfpageslogicalpageoptions{2} {% border shrink=\pgfpageoptionborder,% resized width=.5\pgfphysicalwidth,% resized height=\pgfphysicalheight,% center=\pgfpoint{.75\pgfphysicalwidth}{.5\pgfphysicalheight}% }% \else % stack on top of one another \pgfpageslogicalpageoptions{1} {% border shrink=\pgfpageoptionborder,% resized width=\pgfphysicalwidth,% resized height=.5\pgfphysicalheight,% center=\pgfpoint{.5\pgfphysicalwidth}{.75\pgfphysicalheight}% }% \pgfpageslogicalpageoptions{2} {% border shrink=\pgfpageoptionborder,% resized width=\pgfphysicalwidth,% resized height=.5\pgfphysicalheight,% center=\pgfpoint{.5\pgfphysicalwidth}{.25\pgfphysicalheight}% }% \fi } \pgfpagesdeclarelayout{4 on 1} { \edef\pgfpageoptionheight{\the\paperheight} \edef\pgfpageoptionwidth{\the\paperwidth} \edef\pgfpageoptionborder{0pt} } { \pgfpagesphysicalpageoptions {% logical pages=4,% physical height=\pgfpageoptionheight,% physical width=\pgfpageoptionwidth% } \pgfpageslogicalpageoptions{1} {% border shrink=\pgfpageoptionborder,% resized width=.5\pgfphysicalwidth,% resized height=.5\pgfphysicalheight,% center=\pgfpoint{.25\pgfphysicalwidth}{.75\pgfphysicalheight}% }% \pgfpageslogicalpageoptions{2} {% border shrink=\pgfpageoptionborder,% resized width=.5\pgfphysicalwidth,% resized height=.5\pgfphysicalheight,% center=\pgfpoint{.75\pgfphysicalwidth}{.75\pgfphysicalheight}% }% \pgfpageslogicalpageoptions{3} {% border shrink=\pgfpageoptionborder,% resized width=.5\pgfphysicalwidth,% resized height=.5\pgfphysicalheight,% center=\pgfpoint{.25\pgfphysicalwidth}{.25\pgfphysicalheight}% }% \pgfpageslogicalpageoptions{4} {% border shrink=\pgfpageoptionborder,% resized width=.5\pgfphysicalwidth,% resized height=.5\pgfphysicalheight,% center=\pgfpoint{.75\pgfphysicalwidth}{.25\pgfphysicalheight}% }% } \pgfpagesdeclarelayout{8 on 1} { \edef\pgfpageoptionheight{\the\paperwidth} % landscaped by default \edef\pgfpageoptionwidth{\the\paperheight} \def\pgfpageoptionborder{0pt} } { \pgfpagesphysicalpageoptions {% logical pages=8,% physical height=\pgfpageoptionheight,% physical width=\pgfpageoptionwidth% } \ifdim\paperheight>\paperwidth\relax % put side-by-side \pgfpageslogicalpageoptions{1} {% border shrink=\pgfpageoptionborder,% resized width=.25\pgfphysicalwidth,% resized height=.5\pgfphysicalheight,% center=\pgfpoint{.125\pgfphysicalwidth}{.75\pgfphysicalheight}% }% \pgfpageslogicalpageoptions{2} {% border shrink=\pgfpageoptionborder,% resized width=.25\pgfphysicalwidth,% resized height=.5\pgfphysicalheight,% center=\pgfpoint{.375\pgfphysicalwidth}{.75\pgfphysicalheight}% }% \pgfpageslogicalpageoptions{3} {% border shrink=\pgfpageoptionborder,% resized width=.25\pgfphysicalwidth,% resized height=.5\pgfphysicalheight,% center=\pgfpoint{.625\pgfphysicalwidth}{.75\pgfphysicalheight}% }% \pgfpageslogicalpageoptions{4} {% border shrink=\pgfpageoptionborder,% resized width=.25\pgfphysicalwidth,% resized height=.5\pgfphysicalheight,% center=\pgfpoint{.875\pgfphysicalwidth}{.75\pgfphysicalheight}% }% \pgfpageslogicalpageoptions{5} {% border shrink=\pgfpageoptionborder,% resized width=.25\pgfphysicalwidth,% resized height=.5\pgfphysicalheight,% center=\pgfpoint{.125\pgfphysicalwidth}{.25\pgfphysicalheight}% }% \pgfpageslogicalpageoptions{6} {% border shrink=\pgfpageoptionborder,% resized width=.25\pgfphysicalwidth,% resized height=.5\pgfphysicalheight,% center=\pgfpoint{.375\pgfphysicalwidth}{.25\pgfphysicalheight}% }% \pgfpageslogicalpageoptions{7} {% border shrink=\pgfpageoptionborder,% resized width=.25\pgfphysicalwidth,% resized height=.5\pgfphysicalheight,% center=\pgfpoint{.625\pgfphysicalwidth}{.25\pgfphysicalheight}% }% \pgfpageslogicalpageoptions{8} {% border shrink=\pgfpageoptionborder,% resized width=.25\pgfphysicalwidth,% resized height=.5\pgfphysicalheight,% center=\pgfpoint{.875\pgfphysicalwidth}{.25\pgfphysicalheight}% }% \else % stack on top of one another \pgfpageslogicalpageoptions{1} {% border shrink=\pgfpageoptionborder,% resized width=.5\pgfphysicalwidth,% resized height=.25\pgfphysicalheight,% center=\pgfpoint{.25\pgfphysicalwidth}{.875\pgfphysicalheight}% }% \pgfpageslogicalpageoptions{2} {% border shrink=\pgfpageoptionborder,% resized width=.5\pgfphysicalwidth,% resized height=.25\pgfphysicalheight,% center=\pgfpoint{.75\pgfphysicalwidth}{.875\pgfphysicalheight}% }% \pgfpageslogicalpageoptions{3} {% border shrink=\pgfpageoptionborder,% resized width=.5\pgfphysicalwidth,% resized height=.25\pgfphysicalheight,% center=\pgfpoint{.25\pgfphysicalwidth}{.625\pgfphysicalheight}% }% \pgfpageslogicalpageoptions{4} {% border shrink=\pgfpageoptionborder,% resized width=.5\pgfphysicalwidth,% resized height=.25\pgfphysicalheight,% center=\pgfpoint{.75\pgfphysicalwidth}{.625\pgfphysicalheight}% }% \pgfpageslogicalpageoptions{5} {% border shrink=\pgfpageoptionborder,% resized width=.5\pgfphysicalwidth,% resized height=.25\pgfphysicalheight,% center=\pgfpoint{.25\pgfphysicalwidth}{.375\pgfphysicalheight}% }% \pgfpageslogicalpageoptions{6} {% border shrink=\pgfpageoptionborder,% resized width=.5\pgfphysicalwidth,% resized height=.25\pgfphysicalheight,% center=\pgfpoint{.75\pgfphysicalwidth}{.375\pgfphysicalheight}% }% \pgfpageslogicalpageoptions{7} {% border shrink=\pgfpageoptionborder,% resized width=.5\pgfphysicalwidth,% resized height=.25\pgfphysicalheight,% center=\pgfpoint{.25\pgfphysicalwidth}{.125\pgfphysicalheight}% }% \pgfpageslogicalpageoptions{8} {% border shrink=\pgfpageoptionborder,% resized width=.5\pgfphysicalwidth,% resized height=.25\pgfphysicalheight,% center=\pgfpoint{.75\pgfphysicalwidth}{.125\pgfphysicalheight}% }% \fi } \pgfpagesdeclarelayout{16 on 1} { \edef\pgfpageoptionheight{\the\paperheight} \edef\pgfpageoptionwidth{\the\paperwidth} \edef\pgfpageoptionborder{0pt} } { \pgfpagesphysicalpageoptions {% logical pages=16,% physical height=\pgfpageoptionheight,% physical width=\pgfpageoptionwidth% } \pgfpageslogicalpageoptions{1} {% border shrink=\pgfpageoptionborder,% resized width=.25\pgfphysicalwidth,% resized height=.25\pgfphysicalheight,% center=\pgfpoint{.125\pgfphysicalwidth}{.875\pgfphysicalheight}% }% \pgfpageslogicalpageoptions{2} {% border shrink=\pgfpageoptionborder,% resized width=.25\pgfphysicalwidth,% resized height=.25\pgfphysicalheight,% center=\pgfpoint{.375\pgfphysicalwidth}{.875\pgfphysicalheight}% }% \pgfpageslogicalpageoptions{3} {% border shrink=\pgfpageoptionborder,% resized width=.25\pgfphysicalwidth,% resized height=.25\pgfphysicalheight,% center=\pgfpoint{.625\pgfphysicalwidth}{.875\pgfphysicalheight}% }% \pgfpageslogicalpageoptions{4} {% border shrink=\pgfpageoptionborder,% resized width=.25\pgfphysicalwidth,% resized height=.25\pgfphysicalheight,% center=\pgfpoint{.875\pgfphysicalwidth}{.875\pgfphysicalheight}% }% \pgfpageslogicalpageoptions{5} {% border shrink=\pgfpageoptionborder,% resized width=.25\pgfphysicalwidth,% resized height=.25\pgfphysicalheight,% center=\pgfpoint{.125\pgfphysicalwidth}{.625\pgfphysicalheight}% }% \pgfpageslogicalpageoptions{6} {% border shrink=\pgfpageoptionborder,% resized width=.25\pgfphysicalwidth,% resized height=.25\pgfphysicalheight,% center=\pgfpoint{.375\pgfphysicalwidth}{.625\pgfphysicalheight}% }% \pgfpageslogicalpageoptions{7} {% border shrink=\pgfpageoptionborder,% resized width=.25\pgfphysicalwidth,% resized height=.25\pgfphysicalheight,% center=\pgfpoint{.625\pgfphysicalwidth}{.625\pgfphysicalheight}% }% \pgfpageslogicalpageoptions{8} {% border shrink=\pgfpageoptionborder,% resized width=.25\pgfphysicalwidth,% resized height=.25\pgfphysicalheight,% center=\pgfpoint{.875\pgfphysicalwidth}{.625\pgfphysicalheight}% }% \pgfpageslogicalpageoptions{9} {% border shrink=\pgfpageoptionborder,% resized width=.25\pgfphysicalwidth,% resized height=.25\pgfphysicalheight,% center=\pgfpoint{.125\pgfphysicalwidth}{.375\pgfphysicalheight}% }% \pgfpageslogicalpageoptions{10} {% border shrink=\pgfpageoptionborder,% resized width=.25\pgfphysicalwidth,% resized height=.25\pgfphysicalheight,% center=\pgfpoint{.375\pgfphysicalwidth}{.375\pgfphysicalheight}% }% \pgfpageslogicalpageoptions{11} {% border shrink=\pgfpageoptionborder,% resized width=.25\pgfphysicalwidth,% resized height=.25\pgfphysicalheight,% center=\pgfpoint{.625\pgfphysicalwidth}{.375\pgfphysicalheight}% }% \pgfpageslogicalpageoptions{12} {% border shrink=\pgfpageoptionborder,% resized width=.25\pgfphysicalwidth,% resized height=.25\pgfphysicalheight,% center=\pgfpoint{.875\pgfphysicalwidth}{.375\pgfphysicalheight}% }% \pgfpageslogicalpageoptions{13} {% border shrink=\pgfpageoptionborder,% resized width=.25\pgfphysicalwidth,% resized height=.25\pgfphysicalheight,% center=\pgfpoint{.125\pgfphysicalwidth}{.125\pgfphysicalheight}% }% \pgfpageslogicalpageoptions{14} {% border shrink=\pgfpageoptionborder,% resized width=.25\pgfphysicalwidth,% resized height=.25\pgfphysicalheight,% center=\pgfpoint{.375\pgfphysicalwidth}{.125\pgfphysicalheight}% }% \pgfpageslogicalpageoptions{15} {% border shrink=\pgfpageoptionborder,% resized width=.25\pgfphysicalwidth,% resized height=.25\pgfphysicalheight,% center=\pgfpoint{.625\pgfphysicalwidth}{.125\pgfphysicalheight}% }% \pgfpageslogicalpageoptions{16} {% border shrink=\pgfpageoptionborder,% resized width=.25\pgfphysicalwidth,% resized height=.25\pgfphysicalheight,% center=\pgfpoint{.875\pgfphysicalwidth}{.125\pgfphysicalheight}% }% } % Change/set main option % % #1 = options % % Options: % % logical pages = number of logical pages per physical page % logical shipouts = number of shipouts needed to fill a physical page % (may be less than the number of logical pages, % if some logical pages are calculated % automatically) % current logical shipout = number of logical shipout that will come % next. % % Example: % % \pgfpagesphysicalpageoptions{logical pages=2,logical shipouts=1} \newcommand\pgfpagesphysicalpageoptions[1]{% \pgf@lastshipout=0\relax% \pgf@currentshipout=0\relax% \setkeys{pgfpages@main}{#1}% \ifnum\pgf@lastshipout=0\relax%not set \pgf@lastshipout=\pgf@logicalpages% \fi% \ifnum\pgf@currentshipout=0\relax%not set \pgf@currentshipout=\pgf@firstshipout% \fi% } \define@key{pgfpages@main}{logical pages}{\pgf@logicalpages=#1\relax} \define@key{pgfpages@main}{first logical shipout}{\pgf@firstshipout=#1\relax} \define@key{pgfpages@main}{last logical shipout}{\pgf@lastshipout=#1\relax} \define@key{pgfpages@main}{current logical shipout}{\pgf@currentshipout=#1\relax} \define@key{pgfpages@main}{physical height}{\pgfphysicalheight=#1\relax} \define@key{pgfpages@main}{physical width}{\pgfphysicalwidth=#1\relax} % Setup/change parameters of a logical page. You must call this % macro for each logical page. % % #1 = logical page number % #2 = options % % Options: % % original height = height of the logical page (\paperheight at point of % first invocation by default) % original width = width of the logical page (\paperwidth by default) % resized height = height of the logical page after resizing % resized width = width of the logical page after resizing % border shrink = length that is subtracted from resized height and % resized width % border code = pgf commands to be used for drawing a border (a % path with the border set will already have been % set) % rounded corners = clip the frame against a rectangle of the size of % the frame with corners of the given radius % scale = factor by which the page is enlarged/shrunk % center = center of the logical page in the physical page % rotation = degree by which the page is rotated around its center % xscale = scale only x-axis (use -1 to flip along y-axis) % yscale = scale only y-axis (use -1 to flip along x-axis) % copy from = copy the contents from this logical page of the % previous physical page, if no contents is specified % % If more than one of the three options ``resized height'', ``resized % width'' and ``scale'' are given, the smallest resulting scaling % wins. % % Example: % % \pgfpageslogicalpageoptions{1}{scale=0.5,center=\pgfpoint{0cm}{2cm}} \newcommand\pgfpageslogicalpageoptions[2]{% \pgf@cpn=#1\relax% \expandafter\ifx\csname pgfpages@box@#1\endcsname\relax% \expandafter\newbox\csname pgfpages@box@#1\endcsname% \edef\pgf@temp{% \noexpand\pgf@psetcurrent{height}{\the\paperheight}% \noexpand\pgf@psetcurrent{width}{\the\paperwidth}% }% \pgf@temp% \fi% \setkeys{pgfpages@page}{#2}% \pgf@calculateresizes{height}% \pgf@calculateresizes{width}% \pgfsetupphysicalpagesizes% } \def\pgf@epset#1#2#3{\expandafter\edef\csname pgfpages@p@#1@#2\endcsname{#3}} \def\pgf@epsetcurrent#1#2{\pgf@pset{\the\pgf@cpn}{#1}{#2}} \def\pgf@pset#1#2#3{\expandafter\def\csname pgfpages@p@#1@#2\endcsname{#3}} \def\pgf@pget#1#2{\csname pgfpages@p@#1@#2\endcsname} \def\pgf@psetcurrent#1#2{\pgf@pset{\the\pgf@cpn}{#1}{#2}} \def\pgf@pgetcurrent#1{\pgf@pget{\the\pgf@cpn}} \define@key{pgfpages@page}{scale}{\pgf@epsetcurrent{scale}{#1}} \define@key{pgfpages@page}{xscale}{\pgf@epsetcurrent{xscale}{#1}} \define@key{pgfpages@page}{yscale}{\pgf@epsetcurrent{yscale}{#1}} \define@key{pgfpages@page}{original height}{\pgf@epsetcurrent{height}{#1}} \define@key{pgfpages@page}{original width}{\pgf@epsetcurrent{width}{#1}} \define@key{pgfpages@page}{resized height}{\pgf@epsetcurrent{reheight}{#1}} \define@key{pgfpages@page}{resized width}{\pgf@epsetcurrent{rewidth}{#1}} \define@key{pgfpages@page}{center}{\pgf@psetcurrent{center}{#1}} \define@key{pgfpages@page}{rotation}{\pgf@epsetcurrent{rotation}{#1}} \define@key{pgfpages@page}{copy from}{\pgf@epsetcurrent{copy}{#1}} \define@key{pgfpages@page}{border shrink}{\pgf@epsetcurrent{border}{#1}} \define@key{pgfpages@page}{border code}{\pgf@psetcurrent{bordercode}{#1}} \define@key{pgfpages@page}{corner width}{\pgf@psetcurrent{cornerwidth}{#1}} \def\pgf@calculateresizes#1{% \expandafter\ifx\csname pgfpages@p@\the\pgf@cpn @re#1\endcsname\relax% \else% \expandafter\@tempdima\csname pgfpages@p@\the\pgf@cpn @re#1\endcsname\relax% \expandafter\ifx\csname pgfpages@p@\the\pgf@cpn @border\endcsname\relax% \else% \expandafter\@tempdimb\csname pgfpages@p@\the\pgf@cpn @border\endcsname\relax% \advance\@tempdima by-2\@tempdimb\relax% \fi% \expandafter\@tempdimb\csname pgfpages@p@\the\pgf@cpn @#1\endcsname\relax% \@tempcnta=\@tempdimb% \divide\@tempcnta by 65536\relax% \ifnum\@tempcnta=0\relax% \@tempcnta=1\relax% \fi% \divide\@tempdima by\@tempcnta\relax% \expandafter\ifx\csname pgfpages@p@\the\pgf@cpn @scale\endcsname\relax% \@tempdimb=10000pt% \else% \expandafter\@tempdimb\expandafter=\csname pgfpages@p@\the\pgf@cpn @scale\endcsname pt\relax% \fi% \ifdim\@tempdima<\@tempdimb% \edef\pgf@temp{{scale}{\expandafter\Pgf@geT\the\@tempdima}}% \expandafter\pgf@psetcurrent\pgf@temp% \fi% \fi% } % Shipout a physical page immediately % % Example: % % \pgfshipoutphysicalpage \newcommand\pgfshipoutphysicalpage{% \ifnum\pgf@logicalpages>0\relax% \pgfpages@buildshipoutbox% \pgfpages@shipoutshipoutbox% \pgfpages@performcopying% \global\pgfphysicalpageemptytrue% \global\pgf@holdingphysicalpagefalse% \fi% } \newbox\pgfpages@shipoutbox \def\pgfpages@buildshipoutbox{% \setbox\pgfpages@shipoutbox=\vbox{{% \set@typeset@protect% \offinterlineskip% \pgfsys@beginpicture% \pgf@cpn=1\relax% \loop% \setbox0=\hbox to \csname pgfpages@p@\the\pgf@cpn @width\endcsname{% \hskip1in% \vbox to \csname pgfpages@p@\the\pgf@cpn @height\endcsname% {\vskip1in\offinterlineskip\expandafter\copy\csname pgfpages@box@\the\pgf@cpn\endcsname\vss}\hss}% \pgfsys@beginscope% % Translate lower left corner \expandafter\ifx\csname pgfpages@p@\the\pgf@cpn @center\endcsname\relax% \else% \pgflowlevel{\pgftransformshift{\csname pgfpages@p@\the\pgf@cpn @center\endcsname}}% \fi% \expandafter\ifx\csname pgfpages@p@\the\pgf@cpn @scale\endcsname\relax% \else% \pgflowlevel{\pgftransformscale{\csname pgfpages@p@\the\pgf@cpn @scale\endcsname}}% \fi% \expandafter\ifx\csname pgfpages@p@\the\pgf@cpn @xscale\endcsname\relax% \else% \pgflowlevel{\pgftransformxscale{\csname pgfpages@p@\the\pgf@cpn @xscale\endcsname}{1}}% \fi% \expandafter\ifx\csname pgfpages@p@\the\pgf@cpn @yscale\endcsname\relax% \else% \pgflowlevel{\pgftransformyscale{\csname pgfpages@p@\the\pgf@cpn @yscale\endcsname}}% \fi% \expandafter\ifx\csname pgfpages@p@\the\pgf@cpn @rotation\endcsname\relax% \pgfscope% \else% \pgflowlevel{\pgftransformrotate{\csname pgfpages@p@\the\pgf@cpn @rotation\endcsname}}% \fi% \@tempdima=\csname pgfpages@p@\the\pgf@cpn @width\endcsname\relax% \@tempdimb=\csname pgfpages@p@\the\pgf@cpn @height\endcsname\relax% \pgflowlevel{\pgftransformshift{\pgfpoint{-.5\@tempdima}{-.5\@tempdimb}}}% \expandafter\ifx\csname pgfpages@p@\the\pgf@cpn @bordercode\endcsname\relax% \else% \pgfpathmoveto{\pgfpointorigin}% \pgfpathlineto{\pgfpoint{\wd0}{0pt}}% \pgfpathlineto{\pgfpoint{\wd0}{\ht0}}% \pgfpathlineto{\pgfpoint{0pt}{\ht0}}% \pgfpathclose% {\csname pgfpages@p@\the\pgf@cpn @bordercode\endcsname}% \fi% \expandafter\ifx\csname pgfpages@p@\the\pgf@cpn @cornerwidth\endcsname\relax% \else% { \expandafter\@tempdima\csname pgfpages@p@\the\pgf@cpn @cornerwidth\endcsname\relax% \color{black} \pgfpathrectangle{\pgfpointorigin}{\pgfpoint{\@tempdima}{\@tempdima}}% \pgfpathrectangle{\pgfpoint{0pt}{\ht0-\@tempdima}}{\pgfpoint{\@tempdima}{\@tempdima}}% \pgfpathrectangle{\pgfpoint{\wd0-\@tempdima}{0pt}}{\pgfpoint{\@tempdima}{\@tempdima}}% \pgfpathrectangle{\pgfpoint{\wd0-\@tempdima}{\ht0-\@tempdima}}{\pgfpoint{\@tempdima}{\@tempdima}}% \pgfusepath{fill}% \pgfpathmoveto{\pgfpoint{0pt}{\@tempdima}} \pgfpathcurveto{\pgfpoint{0pt}{0.555\@tempdima}}{\pgfpoint{.555\@tempdima}{0pt}}{\pgfpoint{\@tempdima}{0pt}} \pgfpathlineto{\pgfpoint{\wd0-\@tempdima}{0pt}} \pgfpathcurveto{\pgfpoint{\wd0-.555\@tempdima}{0pt}}{\pgfpoint{\wd0}{.555\@tempdima}}{\pgfpoint{\wd0}{\@tempdima}} \pgfpathlineto{\pgfpoint{\wd0}{\ht0-\@tempdima}} \pgfpathcurveto{\pgfpoint{\wd0}{\ht0-.555\@tempdima}}{\pgfpoint{\wd0-.555\@tempdima}{\ht0}}{\pgfpoint{\wd0-\@tempdima}{\ht0}} \pgfpathlineto{\pgfpoint{\@tempdima}{\ht0}} \pgfpathcurveto{\pgfpoint{.555\@tempdima}{\ht0}}{\pgfpoint{0pt}{\ht0-.555\@tempdima}}{\pgfpoint{0pt}{\ht0-\@tempdima}} \pgfpathclose \pgfusepath{clip} \color{white} \pgfpathrectangle{\pgfpointorigin}{\pgfpoint{\wd0}{\ht0}} \pgfusepath{fill} } \fi% \ht0=0pt% \wd0=0pt% \dp0=0pt% \pgfsys@hbox0% \endpgfscope% \pgfsys@endscope% \ifnum\pgf@cpn<\pgf@logicalpages% \advance \pgf@cpn by 1\relax% \repeat% \pgfsys@endpicture% }}% } \def\pgfpages@shipoutshipoutbox{% \begingroup \let \protect \noexpand \@resetactivechars \global\let\@@if@newlist\if@newlist \global\@newlistfalse \@parboxrestore \pgfpages@originalshipout% \hbox{% \hskip-1in% \vbox to \pgfphysicalheight{% \vss\box\pgfpages@shipoutbox% \vskip1in% }}% \endgroup% } \def\pgfpages@performcopying{ \pgf@cpn=1\relax% copy first \loop% \expandafter\ifx\csname pgfpages@p@\the\pgf@cpn @copy\endcsname\relax \else% \edef\pgf@temp{\noexpand\global\noexpand\setbox\csname pgfpages@box@% \the\pgf@cpn\endcsname=\noexpand\copy\csname pgfpages@box@\csname pgfpages@p@\the\pgf@cpn @copy\endcsname\endcsname}% \pgf@temp% \fi% \ifnum\pgf@cpn<\pgf@logicalpages% \advance \pgf@cpn by 1\relax% \repeat% \pgf@cpn=1\relax% then void \loop% \expandafter\ifx\csname pgfpages@p@\the\pgf@cpn @copy\endcsname\relax \expandafter\global\expandafter\setbox\csname pgfpages@box@\the\pgf@cpn\endcsname=\box\voidb@x% \else% \fi% \ifnum\pgf@cpn<\pgf@logicalpages% \advance \pgf@cpn by 1\relax% \repeat% } % Save original shipout commands % % Example: % % \pgfhookintoshipout \newcommand\pgfhookintoshipout{ \let\pgfpages@originalshipout=\shipout \let\shipout=\pgfpages@interceptshipout } \def\pgfpages@interceptshipout{% \ifnum\pgf@shipoutnextto>0\relax \def\pgf@next{% \expandafter\global\expandafter\setbox\csname pgfpages@box@\the\pgf@shipoutnextto\endcsname=\box\voidb@x% \afterassignment\pgfpages@shipouttestnext% \pgfpagesshipoutlogicalpage{\the\pgf@shipoutnextto}% }% \else% \ifpgf@holdingphysicalpage% shipout physical page now {\pgfshipoutphysicalpage}% \fi% \ifnum\pgf@logicalpages=0\relax \def\pgf@next{\pgfpages@originalshipout}% \else% \def\pgf@next{% \expandafter\global\expandafter\setbox\csname pgfpages@box@\the\pgf@currentshipout\endcsname=\box\voidb@x% \afterassignment\pgfpages@shipouttest% \pgfpagesshipoutlogicalpage{\the\pgf@currentshipout}% }% \fi% \fi% \pgf@next% } \def\pgfpages@shipouttest{% \ifvoid\csname pgfpages@box@\the\pgf@currentshipout\endcsname\relax% \aftergroup\pgfpages@preparenextshipout% \else% \pgfpages@preparenextshipout% \fi% } \def\pgfpages@shipouttestnext{% \ifvoid\csname pgfpages@box@\the\pgf@shipoutnextto\endcsname\relax% \aftergroup\pgfpages@preparenextshipout% \else% \pgfpages@preparenextshipout% \fi% } \def\pgfpages@preparenextshipout{% \ifnum\pgf@shipoutnextto=0\relax% \global\advance\pgf@currentshipout by 1\relax% \else% \global\pgf@shipoutnextto=0\relax% \fi% \ifnum\pgf@currentshipout>\pgf@lastshipout\relax% \global\pgf@currentshipout=\pgf@firstshipout\relax% \global\pgf@holdingphysicalpagetrue% \fi% } % Shipout a logical page % % #1 = logical page number % % The command should be followed by a box. This box will become the % contents of the logical page. % % Example: % % \pgfpagesshipoutlogicalpage{0}\vbox{Hi!} \newcommand\pgfpagesshipoutlogicalpage[1]{% \global\pgfphysicalpageemptyfalse% \expandafter\global\expandafter\setbox\csname pgfpages@box@#1\endcsname=} % Finish current page and shipout next page to a specific logical page. % % #1 = logical page number % % When the current page has been typset, it will be become the given % logical page. This command ``interrupts'' the normal order of % logical pages. % % Example: % % \pgfpagesuselayout{two screens with optional second} % % Text for main page.\clearpage % % \pgfpagescurrentpagewillbelogicalpage{2} % % Text that goes to second page % % \clearpage % % Text for main page. \newcommand\pgfpagescurrentpagewillbelogicalpage[1]{% \global\pgf@shipoutnextto=#1\relax% } % Setup the physical page sizes % % Example: % % \pgfsetupphysicalpagesizes \newcommand\pgfsetupphysicalpagesizes{% % The following code was send to me by Rolf Niepraschk \ifx\Gin@driver\pgf@empty\else% \filename@parse{\Gin@driver}\@tempswafalse% \def\reserved@a{dvips}% \ifx\filename@base\reserved@a\@tempswatrue\fi% \def\reserved@a{dvipdfm}% \ifx\filename@base\reserved@a\@tempswatrue\fi% \if@tempswa% \AtBeginDvi{% \special{papersize=\the\pgfphysicalwidth,\the\pgfphysicalheight}}% \fi% \def\reserved@a{pdftex}% \ifx\filename@base\reserved@a \pdfpagewidth\pgfphysicalwidth\pdfpageheight\pgfphysicalheight% \fi% \def\reserved@a{vtex}% \ifx\filename@base\reserved@a \mediawidth\pgfphysicalwidth\mediaheight\pgfphysicalheight% \fi% \fi } % % Start/End setup % \AtBeginDocument { \pgfhookintoshipout \pgfsetupphysicalpagesizes } \AtEndDocument { \clearpage \ifpgfphysicalpageempty \else \pgfshipoutphysicalpage \fi }