\expandafter\ifx\csname pdfxupfile\endcsname\relax
\PackageError{pdfxup}{This file should not be compiled alone}
{File pdfxup-template.pdf is not meant to be compiled alone.
\MessageBreak
It should only be used via the 'pdfxup' script.}
\fi
%% define functions for parsing comma-separated lists of ranges of pages
\newcounter{result}%
\newif\iffound
\def\@parserange#1-#2-#3\@end#4\@end{%
\setcounter{result}{#4}%
\ifnum\value{result}=1\relax
\foundtrue
\setcounter{result}{#1}%
\else
\addtocounter{result}{-1}%
\ifx\relax#3\relax%% means that range contains no -
\else
\addtocounter{result}{#1}%
\ifnum#2<\value{result}\relax
\addtocounter{result}{-#2}%
\else
\foundtrue
\fi
\fi
\fi}
\def\parserange#1#2{\expandafter\@parserange#2-SINGLE-\@end#1\@end}
\def\@parsecsl#1,#2\@end#3\@end{%
\parserange{#3}{#1}%
\iffound\else
\ifx\relax#2\relax\else\@parsecsl#2\@end\value{result}\@end\fi\fi}
%% \nthvalue#1#2 looks for #1-th value in list of intervals #2
\def\nthvalue#1#2{\foundfalse\expandafter\@parsecsl#2,\@end#1\@end}
%% perform various computations:
%% - width and height of image (\hresult and \vresult)
%% - width and height of frame containing image (\hboxsize and \vboxsize)
\newcounter{lastpage}
\newcounter{outpage}%%% nr of pages of output document
\setcounter{outpage}{\pdfxupnbpages}
\addtocounter{outpage}{-1}
\divide\c@outpage by \pdfxupnbhoriz
\divide\c@outpage by \pdfxupnbvert
\ifbooklet
\divide\c@outpage by 2
\fi
\stepcounter{outpage}
\ifbooklet
\multiply\c@outpage by 2
\fi
\setcounter{lastpage}{\value{outpage}}
\multiply\c@lastpage by \pdfxupnbhoriz
\multiply\c@lastpage by \pdfxupnbvert
\makeatother
%
\newlength\outputvmargin
\newlength\outputhmargin
\setlength\outputvmargin{\pdfxupvmargin}
\setlength\outputhmargin{\pdfxuphmargin}
\newlength\innervmargin
\newlength\innerhmargin
\setlength\innervmargin{\pdfxupinnervmargin}
\setlength\innerhmargin{\pdfxupinnerhmargin}
\newlength\outputindivvmargin
\newlength\outputindivhmargin
\setlength\outputindivvmargin{\pdfxupintermvspace}
\setlength\outputindivhmargin{\pdfxupintermhspace}
%
\setlength\fboxrule{\pdfxupframewidth}
\fboxsep=-\fboxrule
\newlength\hresult
\newlength\vresult
\newlength\vboxsize
\newlength\hboxsize
\hresult=\paperwidth
\advance\hresult by -\pdfxupnbhoriz\fboxrule
\advance\hresult by -\pdfxupnbhoriz\fboxrule
\advance\hresult by -\pdfxupnbhoriz\innerhmargin
\advance\hresult by -\pdfxupnbhoriz\innerhmargin
\vresult=\paperheight
\advance\vresult by -\pdfxupnbvert\fboxrule
\advance\vresult by -\pdfxupnbvert\fboxrule
\advance\vresult by -\pdfxupnbvert\innervmargin
\advance\vresult by -\pdfxupnbvert\innervmargin
%
\advance\hresult by -2\outputhmargin
\advance\vresult by -2\outputvmargin
%
\advance\hresult by -\pdfxupnbhoriz \outputindivhmargin
\advance\vresult by -\pdfxupnbvert \outputindivvmargin
\advance\hresult by \outputindivhmargin
\advance\vresult by \outputindivvmargin
%
\divide\hresult by \pdfxupnbhoriz
\divide\vresult by \pdfxupnbvert
\vboxsize=\vresult
\advance\vboxsize by 2\fboxrule
\advance\vboxsize by 2\innervmargin
\hboxsize=\hresult
\advance\hboxsize by 2\fboxrule
\advance\hboxsize by 2\innerhmargin
%% compute actual scale by which PDF is shrunk (or extended)
\ifnum\pdfxupemptybb=0\relax
\newcounter{origx}
\setcounter{origx}{\pdfxupw}
\addtocounter{origx}{-\pdfxupx}
\newcounter{origy}
\setcounter{origy}{\pdfxuph}
\addtocounter{origy}{-\pdfxupy}
\newlength\finalx
\newlength\finaly
\finalx=\hresult
\finaly=\vresult
\divide\finalx by \value{origx}
\divide\finaly by \value{origy}
\newwrite\scale
\immediate\openout\scale=\pdfxupfilename.scl
\ifdim\finalx>\finaly
\multiply\finaly by 100
\immediate\write\scale{\the\finaly}
\else
\multiply\finalx by 100
\immediate\write\scale{\the\finalx}
\fi
\immediate\closeout\scale
\fi
%% start document
\begin{document}
%\tracingoutput=1
%\tracingpages=1
%\tracingparagraphs=1
\makeatletter
\newcounter{curroutpage}%%%% counts pages nr of output document
\setcounter{curroutpage}{0}%
\newcounter{currpage}%%%%%%% page nr of input document
\newcounter{linecurrpage}%%% currpage at beginning of line
\newcounter{currcol}%
\newcounter{currline}%
\newcounter{realout}%
\newcounter{wmout}%
\newcounter{wmoutaux}%
\@whilenum \value{outpage}>\value{curroutpage} \do%
{\advance\c@curroutpage by 1%
%% check if we are on last page, and if so, possibly balance last page
\if0\balancelast\relax\else
\c@currpage=\c@curroutpage %
\multiply\c@currpage by \pdfxupnbhoriz\relax%
\multiply\c@currpage by \pdfxupnbvert\relax%
\ifnum\c@currpage>\pdfxupnbpages\relax
\c@currpage=-\c@curroutpage\relax%
\advance\c@currpage by 1 %
\multiply\c@currpage by \pdfxupnbhoriz\relax%
\multiply\c@currpage by \pdfxupnbvert\relax%
\advance\c@currpage by \pdfxupnbpages\relax
\ifnum\columnmode=0\relax
\advance\c@currpage by -1\relax
\divide\c@currpage by \pdfxupnbvert\relax%
\advance\c@currpage by 1\relax
\edef\horizincr{\thecurrpage}
\edef\pdfxupnbcols{\thecurrpage}
\else
\advance\c@currpage by -1\relax
\divide\c@currpage by \pdfxupnbhoriz\relax%
\advance\c@currpage by 1\relax
%\showthe\value{currpage}
\edef\vertincr{\thecurrpage}
\edef\pdfxupnblines{\thecurrpage}
%\show\vertincr
%\show\horizincr
\fi
\fi
\fi
%% start producing page
\c@currpage=\c@curroutpage%
\advance\c@currpage by -1%
\multiply\c@currpage by \pdfxupnbhoriz%
\multiply\c@currpage by \pdfxupnbvert%
\c@linecurrpage=\c@currpage%
\hrule \@height\z@%
\c@currline=0%
\vskip\outputvmargin%
\@whilenum\value{currline}<\pdfxupnblines \do%
{\hrule \@height\z@%
\ifnum\value{currline}>0%
\vskip \outputindivvmargin%
\advance\c@linecurrpage by \horizincr%
\else%
\advance\c@linecurrpage by 1%
\fi%
\stepcounter{currline}%
\c@currpage=\c@linecurrpage%
\c@currcol=0%
\hskip \outputhmargin%
\@whilenum\value{currcol}<\pdfxupnbcols \do%
{\ifnum\value{currcol}>0%
\hskip\outputindivhmargin%
\advance\c@currpage by \vertincr%
\fi%
\stepcounter{currcol}%
\ifnum\value{currpage}>\value{lastpage}\else
%% computing page number corresponding to \currline and \currcol
\c@realout=\value{currpage}%
\def\ang{0}%
\ifbooklet
\iflongedge
%% long edge:
%% 1->n, 2->1, 3->n-1 (rotated), 4->2(rotated)...
\ifodd\value{realout}% -> 1 or 3
\addtocounter{realout}{-1}%
\divide\c@realout by 2\relax
\ifodd\value{realout}% -> 3
\def\ang{180}%
\else% -> 1
\fi
\setcounter{realout}{-\value{realout}}%
\addtocounter{realout}{\value{outpage}}%
\addtocounter{realout}{\value{outpage}}%
\else% -> 2 or 4
\divide\c@realout by 2\relax
\ifodd\value{realout}% -> 2
\else% -> 4
\def\ang{180}%
\fi
\fi
\else
%% short edge:
%% 1->n, 2->1, 3->2, 4->n-1, 5->n-2, 6->3, 7->4, 8->n-3
\ifodd\value{realout}% -> 1 or 3
\addtocounter{realout}{-1}%
\divide\c@realout by 2\relax
\ifodd\value{realout}% -> 3
\stepcounter{realout}
\else% -> 1
\setcounter{realout}{-\value{realout}}%
\addtocounter{realout}{\value{outpage}}%
\addtocounter{realout}{\value{outpage}}%
\fi
\else% -> 2 or 4
\divide\c@realout by 2\relax
\ifodd\value{realout}% -> 2
\else% -> 4
\setcounter{realout}{-\value{realout}}%
\stepcounter{realout}
\addtocounter{realout}{\value{outpage}}%
\addtocounter{realout}{\value{outpage}}%
\fi
\fi
\fi %% \iflongedge...\else
\fi %% \ifbooklet
\ifnum\value{realout}>\pdfxupnbpages\relax
%% if page above nb of pages, output blank page
%\hskip\hresult\hskip2\fboxrule
\hskip\hboxsize
\else
%% otherwise compute corresponding page to display
%% first keep realout for watermarking...
\setcounter{wmoutaux}{\value{realout}}%
\setcounter{wmout}{\value{realout}}%
\nthvalue{\value{realout}}{\pdfxuppagelist}%
\iffound\setcounter{realout}{\value{result}}%
\else %% hmmm... problem
\message{I'm messed up counting pages...}%
\fi
%% compute watermarking page and display
\ifx\pdfxupwatermark\@empty\else
\ifnum\pdfxupnbwp<\value{wmoutaux}\relax
\addtocounter{wmoutaux}{-\pdfxupnbwp}%
\addtocounter{wmoutaux}{-1}%
\divide\c@wmoutaux by \pdfxupwperiod\relax
\stepcounter{wmoutaux}%
\multiply\c@wmoutaux by \pdfxupwperiod\relax
\addtocounter{wmout}{-\value{wmoutaux}}%
\fi
\vbox to \vboxsize{\vfill
\hbox to \hboxsize{\hfill
\includegraphics[keepaspectratio,%
height=\vresult,width=\hresult,angle=\ang,%
page=\value{wmout}\pdfxupclipopt]{\pdfxupwatermark}\hfill}\vfill}%
\hskip-\hboxsize\relax
\fi
%% display current page at correct size
\edef\pdfxupinclgr{\includegraphics[\pdfxupbbox,%
keepaspectratio,height=\vresult,width=\hresult,angle=\ang,%
page=\value{realout}\pdfxupclipopt]{\pdfxupfile}}%
\pdfxupwidefbox{\vbox to \vboxsize{\vfill
\hbox to \hboxsize{\hfill
\pdfxuptightfbox{\hskip\innerhmargin\relax
\sbox{0}{\pdfxupinclgr}%
\ht0=\dimexpr\ht0 + \innervmargin\relax
\dp0=\dimexpr\dp0 + \innervmargin\relax
\usebox{0}\hskip\innerhmargin\relax}%
\hfill}\vfill}}%
\fi
\fi}}%
\clearpage%
}%
\makeatother%
\end{document}