2006/10/7, Tobias Burnus <burnus@net-b.de>:Hello,
Using \combinepages[some-pdf][nx=3,ny=5], I get:
1 2 3
4 5 6
7 8 9
10 11 12
However, I'd like to get:
1 5 9
2 6 10
3 7 11
4 8 12
How can one achieve this? (I want to create again a poster out of talk.pdf.)
TobiasHi Tobias,I can provide a first draft of a solution to your problem.The frame around the combination should you show a small problem with my correction,it is up to you change this and maybe to wikify this.
\unprotect
% a new variable for horizontal (default) direction
\startvariables dutch english
german czech
italian romanian
french
horizontal: horizontal horizontal
horizontal horizontal
horizontal horizontal
horizontal
\stopvariables
% we extract the combine macros from the core
\def\docombinepages[#1][#2]% a=perpag b=free
{\bgroup
\dontcomplain
\getfiguredimensions[#1]%
\getparameters
[\??ip]
[\c!alternative=\v!a,
\c!n=\noffigurepages,\c!nx=2,\c!ny=2,\c!start=1,\c!stop=\!!maxcard,
\c!distance=\bodyfontsize,
\c!bottom=\vfill,\c!top=\vss,
\c!left=\hss,\c!right=\hss,
\c!before=\page,\c!after=\page,\c!inbetween=\blank,
\c!frame=,\c!background=,\c!backgroundcolor=,
\c!direction=\v!horizontal,
#2]%
\@@ipbefore
%\doglobal\newcounter\combinedpagescounter
\globallet\combinedpagescounter\@@ipstart
\doifelse\@@ipalternative\v!b\!!doneafalse\!!doneatrue
\doifelse\@@ipdirection\v!horizontal\docombinepageshorizontal\docombinepagesvertical#1 % watch the #1 ;-)
\@@ipafter
\egroup}
% we work from left to right and from top to bottom
\def\docombinepageshorizontal#1
{\if!!donea
\doloop
{\vbox to \textheight
{\hsize\textwidth % ? ?
\scratchdimen\@@ipdistance
\!!widtha \dimexpr(\hsize-\@@ipnx\scratchdimen+\scratchdimen)/\@@ipnx\relax
\!!heighta\dimexpr(\vsize-\@@ipny\scratchdimen+\scratchdimen)/\@@ipny\relax
\dorecurse\@@ipny
{\hbox to \hsize
{\dorecurse\@@ipnx
{\vbox to \!!heighta
{\hsize\!!widtha
\vsize\!!heighta
\@@iptop
\hbox to \hsize
{\@@ipleft
\ifnum\combinedpagescounter>\@@ipstop\relax
\globallet\@@ipn\!!zerocount
\else\ifnum\combinedpagescounter>\@@ipn \else
\externalfigure[#1]
[\c!object=\v!no,
\c!page=\combinedpagescounter,
\c!factor=\v!max,
\c!background=\@@ipbackground,
\c!backgroundcolor=\@@ipbackgroundcolor,
\c!frame=\@@ipframe]%
\fi\fi
\@@ipright}
\@@ipbottom}%
\doglobal\increment\combinedpagescounter
\hfil}%
\hfilneg}
\vfil}%
\vfilneg}%
\page
\ifnum\combinedpagescounter>\@@ipn \exitloop\fi}
\else
\doloop
{\startbaselinecorrection
\scratchdimen\@@ipdistance
\!!widtha\dimexpr(\hsize-\@@ipnx\scratchdimen+\scratchdimen)/\@@ipnx\relax
\hbox to \hsize
{\dorecurse\@@ipnx
{\doglobal\increment\combinedpagescounter
\ifnum\combinedpagescounter>\@@ipn \else
\expanded{\externalfigure[#1]
[\c!page=\combinedpagescounter,
\c!width=\the\!!widtha,% todo \freezedimenmacro
\c!background=\@@ipbackground,
\c!backgroundcolor=\@@ipbackgroundcolor,
\c!frame=\@@ipframe]}%
\hfill
\fi}\hfillneg}%
\stopbaselinecorrection
\ifnum\combinedpagescounter<\@@ipn\relax
\@@ipinbetween
\else
\exitloop
\fi}
\fi}
% we work from top to bottom and from left to right, no alternative=b
\def\docombinepagesvertical#1
{\doloop
{\vbox %to \textheight % neccesary?
{\hsize\textwidth
\vsize\textheight
\scratchdimen\@@ipdistance
\!!widtha \dimexpr(\hsize-\@@ipnx\scratchdimen+\scratchdimen)/\@@ipnx\relax
\!!heighta\dimexpr(\vsize-\@@ipny\scratchdimen+\scratchdimen)/\@@ipny\relax
\hbox to \hsize
{\dorecurse\@@ipnx
{\vbox to \vsize
{\hsize\!!widtha
\dorecurse\@@ipny
{\@@iptop
\hbox to \hsize
{\@@ipleft
\vbox to \!!heighta
{\hsize\!!widtha
\vsize\!!heighta
\ifnum\combinedpagescounter>\@@ipstop\relax
\globallet\@@ipn\!!zerocount
\else\ifnum\combinedpagescounter>\@@ipn \else
\externalfigure[#1]
[\c!object=\v!no,
\c!page=\combinedpagescounter,
\c!factor=\v!max,
\c!background=\@@ipbackground,
\c!backgroundcolor=\@@ipbackgroundcolor,
\c!frame=\@@ipframe]%
\fi\fi}%
\@@ipright}
\doglobal\increment\combinedpagescounter
\@@ipbottom}
\vfil}%
\hfil}
\hfilneg}
\vfilneg}
\page
\ifnum\combinedpagescounter>\@@ipn \exitloop\fi}}
\protect
\starttext
\framed{\combinepages[your-pdf][nx=4,ny=6,direction=vertical]}
\framed{\combinepages[your-pdf][nx=4,ny=6]}
\stoptext