From 1d53bc2f5dacbab72e8d152bb066911affff6b91 Mon Sep 17 00:00:00 2001
From: Karl Berry <karl@freefriends.org>
Date: Fri, 13 Jan 2006 00:02:28 +0000
Subject: pgf

git-svn-id: svn://tug.org/texlive/trunk@1191 c570f23f-e606-0410-a88d-b1316a301751
---
 .../tex/latex/pgf/utilities/pgfpages.sty           | 1043 ++++++++++++++++++++
 1 file changed, 1043 insertions(+)
 create mode 100644 Master/texmf-dist/tex/latex/pgf/utilities/pgfpages.sty

(limited to 'Master/texmf-dist/tex/latex/pgf/utilities/pgfpages.sty')

diff --git a/Master/texmf-dist/tex/latex/pgf/utilities/pgfpages.sty b/Master/texmf-dist/tex/latex/pgf/utilities/pgfpages.sty
new file mode 100644
index 00000000000..19023c2efd0
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/pgf/utilities/pgfpages.sty
@@ -0,0 +1,1043 @@
+\ProvidesPackage{pgfpages}[2004/11/05 ver 0.01]
+
+% Copyright 2003 by Till Tantau <tantau@users.sourceforge.net>.
+%
+% This program can be redistributed and/or modified under the terms
+% of the GNU Public License, version 2.
+
+\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{\@ifnextchar[{\pgf@pagelayout{#1}}{\pgf@pagelayout{#1}[]}}
+\def\pgf@pagelayout#1[#2]{
+  \csname pgfpages@layoutbefore@#1\endcsname
+  \setkeys{pgfpagesuselayoutoption}{#2}
+  \@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{\pgfpathorigin}%
+          \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{\pgfpathorigin}{\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{\pgfpathorigin}{\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\@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
+}
+
-- 
cgit v1.2.3

