diff options
author | Hans Hagen <pragma@wxs.nl> | 1999-12-30 00:00:00 +0100 |
---|---|---|
committer | Hans Hagen <pragma@wxs.nl> | 1999-12-30 00:00:00 +0100 |
commit | dd50c74f0702bff05e96d5d3994316405414663e (patch) | |
tree | 1afbfa61cdd0721fa4eea8892972a6a183b05610 /tex/context/base/core-pag.tex | |
parent | b386eada290e225dc25484133c2bc5697024a822 (diff) | |
download | context-dd50c74f0702bff05e96d5d3994316405414663e.tar.gz |
stable 1999.12.30
Diffstat (limited to 'tex/context/base/core-pag.tex')
-rw-r--r-- | tex/context/base/core-pag.tex | 595 |
1 files changed, 507 insertions, 88 deletions
diff --git a/tex/context/base/core-pag.tex b/tex/context/base/core-pag.tex index 9e6ba430d..68d94c50d 100644 --- a/tex/context/base/core-pag.tex +++ b/tex/context/base/core-pag.tex @@ -8,7 +8,7 @@ %D copyright={PRAGMA / Hans Hagen \& Ton Otten}] %C %C This module is part of the \CONTEXT\ macro||package and is -%C therefore copyrighted by \PRAGMA. See licen-en.pdf for +%C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \writestatus{loading}{Context Core Macros / Pagebody Building} @@ -23,74 +23,182 @@ \newif\ifmirrorarranged \newif\ifdoublearranged +\newif\ifarrangingdisabled + \def\arrangedrotationO{0} \def\arrangedrotationE{0} \newcounter\arrangedpageN + \chardef\arrangedpageT=1 +\chardef\arrangedpageX=1 +\chardef\arrangedpageY=1 + +\def\calculatepaperoffsets#1% + {\scratchdimen=\getvalue{\??pp#1\c!offset}% + \divide\scratchdimen by \arrangedpageX + \global\advance\papierbreedte by -2\scratchdimen + \scratchdimen=\getvalue{\??pp#1\c!offset}% + \divide\scratchdimen by \arrangedpageY + \global\advance\papierhoogte by -2\scratchdimen} \def\stelarrangerenin[#1]% - {\global\negatearrangedfalse - \global\mirrorarrangedfalse - \global\doublearrangedfalse - \gdef\arrangedrotationO{0}% - \gdef\arrangedrotationE{180}% - \global\arrangingpagestrue - \processallactionsinset - [#1] - [ \v!gespiegeld=>\global\mirrorarrangedtrue, - \v!dubbelzijdig=>\global\doublearrangedtrue, - \v!negatief=>\global\negatearrangedtrue, - \v!geroteerd=>\gdef\arrangedrotationO{90}\gdef\arrangedrotationE{270}, - 90=>\gdef\arrangedrotationO{90}\gdef\arrangedrotationE{270}, - 180=>\gdef\arrangedrotationO{180}\gdef\arrangedrotationE{0}, - 270=>\gdef\arrangedrotationO{270}\gdef\arrangedrotationE{90}, - 2*8=>\global\chardef\arrangedpageX=4 - \global\chardef\arrangedpageY=2 - \global\chardef\arrangedpageT=8 - \global\chardef\horizontalcutmarks=5 - \global\chardef\verticalcutmarks=3 - \global\let\pusharrangedpage=\pusharrangedpageSIXTEEN - \global\let\poparrangedpages=\poparrangedpagesAB, - 2*4=>\global\chardef\arrangedpageX=2 - \global\chardef\arrangedpageY=2 - \global\chardef\arrangedpageT=4 - \global\chardef\horizontalcutmarks=3 - \global\chardef\verticalcutmarks=3 - \global\let\pusharrangedpage=\pusharrangedpageEIGHT - \global\let\poparrangedpages=\poparrangedpagesAB, - 2*2=>\global\chardef\arrangedpageX=2 - \global\chardef\arrangedpageY=1 - \global\chardef\arrangedpageT=2 - \global\chardef\horizontalcutmarks=3 - \global\chardef\verticalcutmarks=2 - \global\let\pusharrangedpage=\pusharrangedpageFOUR - \global\let\poparrangedpages=\poparrangedpagesAB, - 2UP=>\global\chardef\arrangedpageX=2 - \global\chardef\arrangedpageY=1 - \global\chardef\arrangedpageT=4 - \global\chardef\horizontalcutmarks=3 - \global\chardef\verticalcutmarks=2 - \global\let\handlearrangedpage=\handlearrangedpageTWOUP - \global\let\pusharrangedpage=\pusharrangedpageTWO - \global\let\poparrangedpages=\poparrangedpagesTWO, - 2DOWN=>\global\chardef\arrangedpageX=1 - \global\chardef\arrangedpageY=2 - \global\chardef\arrangedpageT=4 - \global\chardef\horizontalcutmarks=2 - \global\chardef\verticalcutmarks=3 - \global\let\handlearrangedpage=\handlearrangedpageTWODOWN - \global\let\pusharrangedpage=\pusharrangedpageTWO - \global\let\poparrangedpages=\poparrangedpagesTWO, - \s!reset=>\global\arrangingpagesfalse, - \s!unknown=>\global\arrangingpagesfalse, - \s!default=>\global\arrangingpagesfalse]% - \doifcommonelse{#1}{90,270,\v!geroteerd} - {\swapmacros\horizontalcutmarks\verticalcutmarks}{}% ugly solution - \ifarrangingpages - \abortutilitygeneration + {\ifarrangingdisabled \else + \doifelse{#1}{\v!blokkeer} + {\global\arrangingdisabledtrue} + {\global\arrangingdisabledfalse}% + \global\arrangingpagestrue + \global\negatearrangedfalse + \global\mirrorarrangedfalse + \global\doublearrangedfalse + \gdef\arrangedrotationO{0}% + \gdef\arrangedrotationE{180}% + \processallactionsinset + [#1] + [ \v!gespiegeld=>\global\mirrorarrangedtrue, + \v!dubbelzijdig=>\global\doublearrangedtrue, + \v!negatief=>\global\negatearrangedtrue, + \v!geroteerd=>\gdef\arrangedrotationO {90}\gdef\arrangedrotationE{270}, + 90=>\gdef\arrangedrotationO {90}\gdef\arrangedrotationE{270}, + 180=>\gdef\arrangedrotationO{180}\gdef\arrangedrotationE{0}, + 270=>\gdef\arrangedrotationO{270}\gdef\arrangedrotationE{90}, + 2*16=>\global\chardef\arrangedpageX=8 + \global\chardef\arrangedpageY=4 + \global\chardef\arrangedpageT=16 + \global\chardef\horizontalcutmarks=5 + \global\chardef\verticalcutmarks=5 + \global\let\pusharrangedpage=\pusharrangedpageTHIRTYTWO + \global\let\poparrangedpages=\poparrangedpagesAB, + 2*8=>\global\chardef\arrangedpageX=4 + \global\chardef\arrangedpageY=2 + \global\chardef\arrangedpageT=8 + \global\chardef\horizontalcutmarks=5 + \global\chardef\verticalcutmarks=3 + \global\let\pusharrangedpage=\pusharrangedpageSIXTEEN + \global\let\poparrangedpages=\poparrangedpagesAB, + 2*4=>\global\chardef\arrangedpageX=2 + \global\chardef\arrangedpageY=2 + \global\chardef\arrangedpageT=4 + \global\chardef\horizontalcutmarks=3 + \global\chardef\verticalcutmarks=3 + \global\let\pusharrangedpage=\pusharrangedpageEIGHT + \global\let\poparrangedpages=\poparrangedpagesAB, + 2*2=>\global\chardef\arrangedpageX=2 + \global\chardef\arrangedpageY=1 + \global\chardef\arrangedpageT=2 + \global\chardef\horizontalcutmarks=3 + \global\chardef\verticalcutmarks=2 + \global\let\pusharrangedpage=\pusharrangedpageFOUR + \global\let\poparrangedpages=\poparrangedpagesAB, + 2SIDE=>\global\chardef\arrangedpageX=2 + \global\chardef\arrangedpageY=1 + \global\chardef\arrangedpageT=2 + \global\chardef\horizontalcutmarks=3 + \global\chardef\verticalcutmarks=2 + \global\let\pusharrangedpage=\pusharrangedpageSIDE + \global\let\poparrangedpages=\poparrangedpagesAB, + 2UP=>\global\chardef\arrangedpageX=2 + \global\chardef\arrangedpageY=1 + \global\chardef\arrangedpageT=4 + \global\chardef\horizontalcutmarks=3 + \global\chardef\verticalcutmarks=2 + \global\let\handlearrangedpage=\handlearrangedpageTWOUP + \global\let\pusharrangedpage=\pusharrangedpageTWO + \global\let\poparrangedpages=\poparrangedpagesTWO, + 2DOWN=>\global\chardef\arrangedpageX=1 + \global\chardef\arrangedpageY=2 + \global\chardef\arrangedpageT=4 + \global\chardef\horizontalcutmarks=2 + \global\chardef\verticalcutmarks=3 + \global\let\handlearrangedpage=\handlearrangedpageTWODOWN + \global\let\pusharrangedpage=\pusharrangedpageTWO + \global\let\poparrangedpages=\poparrangedpagesTWO, + \s!reset=>\global\arrangingpagesfalse, + \s!unknown=>\global\arrangingpagesfalse, + \s!default=>\global\arrangingpagesfalse]% + \doifcommonelse{#1}{90,270,\v!geroteerd} + {\swapmacros\horizontalcutmarks\verticalcutmarks}{}% ugly solution + \stelpapierformaatin + \ifarrangingpages + \abortutilitygeneration + \fi \fi} - + +% cleaner, but unchecked +% +% \def\dostelarrangereninXY#1#2#3#4#5#6#7#8% +% {\global\chardef\arrangedpageX =#1% +% \global\chardef\arrangedpageY =#2% +% \global\chardef\arrangedpageT =#3% +% \global\chardef\horizontalcutmarks=#4% +% \global\chardef\verticalcutmarks =#5% +% \global\let \pusharrangedpage =#6% +% \global\let \poparrangedpages =#7% +% \global\let \handlearrangedpage=#8} +% +% \def\dostelarrangereninOE#1#2% +% {\gdef\arrangedrotationO{#1}% +% \gdef\arrangedrotationE{#2}} +% +% \def\stelarrangerenin[#1]% +% {\ifarrangingdisabled \else +% \doifelse{#1}{\v!blokkeer} +% {\global\arrangingdisabledtrue} +% {\global\arrangingdisabledfalse}% +% \global\arrangingpagestrue +% \global\negatearrangedfalse +% \global\mirrorarrangedfalse +% \global\doublearrangedfalse +% \gdef\arrangedrotationO{0}% +% \gdef\arrangedrotationE{180}% +% \processallactionsinset +% [#1] +% [ \v!gespiegeld=>\global\mirrorarrangedtrue, +% \v!dubbelzijdig=>\global\doublearrangedtrue, +% \v!negatief=>\global\negatearrangedtrue, +% \v!geroteerd=>\dostelarrangereninOE{90}{270}, +% 90=>\dostelarrangereninOE{90}{270}, +% 180=>\dostelarrangereninOE{180}{0}, +% 270=>\dostelarrangereninOE{270}{90}, +% 2*16=>\dostelarrangereninXY{8}{4}{16}{5}{5} +% \pusharrangedpageTHIRTYTWO +% \poparrangedpagesAB +% \relax, +% 2*8=>\dostelarrangereninXY{4}{2}{8}{5}{3} +% \pusharrangedpageSIXTEEN +% \poparrangedpagesAB +% \relax, +% 2*4=>\dostelarrangereninXY{2}{2}{4}{3}{3} +% \pusharrangedpageEIGHT +% \poparrangedpagesAB +% \relax, +% 2*2=>\dostelarrangereninXY{2}{1}{2}{3}{2} +% \pusharrangedpageFOUR +% \poparrangedpagesAB +% \relax, +% 2SIDE=>\dostelarrangereninXY{2}{1}{2}{3}{2} +% \pusharrangedpageSIDE +% \poparrangedpagesAB +% \relax, +% 2UP=>\dostelarrangereninXY{2}{1}{4}{3}{2} +% \pusharrangedpageTWO +% \poparrangedpagesTWO, +% \handlearrangedpageTWOUP, +% 2DOWN=>\dostelarrangereninXY{1}{2}{4}{2}{3} +% \pusharrangedpageTWO +% \poparrangedpagesTWO +% \handlearrangedpageTWODOWN, +% \s!reset=>\global\arrangingpagesfalse, +% \s!unknown=>\global\arrangingpagesfalse, +% \s!default=>\global\arrangingpagesfalse]% +% \doifcommonelse{#1}{90,270,\v!geroteerd} +% {\swapmacros\horizontalcutmarks\verticalcutmarks}{}% ugly solution +% \stelpapierformaatin +% \ifarrangingpages +% \abortutilitygeneration +% \fi +% \fi} + \def\filluparrangedpages% beware: \realpageno is 1 ahead {\ifarrangingpages \scratchcounter=-\realpageno @@ -145,7 +253,7 @@ \actualshipout{\box#1}% \egroup} -% 16/8/4 +% 32/16/8/4/SIDE \def\poparrangedpagesAB% {\ifnum\arrangedpageN>0 @@ -157,41 +265,80 @@ \doglobal\newcounter\arrangedpageN \fi} -\def\pusharrangedpageSIXTEEN#1% +\def\pusharrangedpageTHIRTYTWO#1% taco's challenge {\doglobal\increment\arrangedpageN \reportarrangedpage\arrangedpageN \ifcase\arrangedpageN - \or \handlearrangedpageXY{#1}{180}{0}{1}\arrangedpageA % 1 - \or \handlearrangedpageXY{#1}{180}{3}{1}\arrangedpageB % 2 - \or \handlearrangedpageXY{#1}{180}{0}{1}\arrangedpageB % 3 - \or \handlearrangedpageXY{#1}{180}{3}{1}\arrangedpageA % 4 - \or \handlearrangedpageXY{#1} {0}{3}{0}\arrangedpageA % 5 - \or \handlearrangedpageXY{#1} {0}{0}{0}\arrangedpageB % 6 - \or \handlearrangedpageXY{#1} {0}{3}{0}\arrangedpageB % 7 - \or \handlearrangedpageXY{#1} {0}{0}{0}\arrangedpageA % 8 - \or \handlearrangedpageXY{#1} {0}{1}{0}\arrangedpageA % 9 - \or \handlearrangedpageXY{#1} {0}{2}{0}\arrangedpageB % 10 - \or \handlearrangedpageXY{#1} {0}{1}{0}\arrangedpageB % 11 - \or \handlearrangedpageXY{#1} {0}{2}{0}\arrangedpageA % 12 - \or \handlearrangedpageXY{#1}{180}{2}{1}\arrangedpageA % 13 - \or \handlearrangedpageXY{#1}{180}{1}{1}\arrangedpageB % 14 - \or \handlearrangedpageXY{#1}{180}{2}{1}\arrangedpageB % 15 - \or \handlearrangedpageXY{#1}{180}{1}{1}\arrangedpageA % 16 + \or \handlearrangedpageXY{#1} {0}{3}{3}\arrangedpageA % 1 + \or \handlearrangedpageXY{#1} {0}{0}{3}\arrangedpageB % 2 + \or \handlearrangedpageXY{#1}{180}{0}{0}\arrangedpageB % 3 + \or \handlearrangedpageXY{#1}{180}{3}{0}\arrangedpageA % 4 + \or \handlearrangedpageXY{#1}{180}{0}{0}\arrangedpageA % 5 + \or \handlearrangedpageXY{#1}{180}{3}{0}\arrangedpageB % 6 + \or \handlearrangedpageXY{#1} {0}{3}{3}\arrangedpageB % 7 + \or \handlearrangedpageXY{#1} {0}{0}{3}\arrangedpageA % 8 + \or \handlearrangedpageXY{#1}{180}{0}{2}\arrangedpageA % 9 + \or \handlearrangedpageXY{#1}{180}{3}{2}\arrangedpageB % 10 + \or \handlearrangedpageXY{#1} {0}{3}{1}\arrangedpageB % 11 + \or \handlearrangedpageXY{#1} {0}{0}{1}\arrangedpageA % 12 + \or \handlearrangedpageXY{#1} {0}{3}{1}\arrangedpageA % 13 + \or \handlearrangedpageXY{#1} {0}{0}{1}\arrangedpageB % 14 + \or \handlearrangedpageXY{#1}{180}{0}{2}\arrangedpageB % 15 + \or \handlearrangedpageXY{#1}{180}{3}{2}\arrangedpageA % 16 + \or \handlearrangedpageXY{#1}{180}{2}{2}\arrangedpageA % 17 + \or \handlearrangedpageXY{#1}{180}{1}{2}\arrangedpageB % 18 + \or \handlearrangedpageXY{#1} {0}{1}{1}\arrangedpageB % 19 + \or \handlearrangedpageXY{#1} {0}{2}{1}\arrangedpageA % 20 + \or \handlearrangedpageXY{#1} {0}{1}{1}\arrangedpageA % 21 + \or \handlearrangedpageXY{#1} {0}{2}{1}\arrangedpageB % 22 + \or \handlearrangedpageXY{#1}{180}{2}{2}\arrangedpageB % 23 + \or \handlearrangedpageXY{#1}{180}{1}{2}\arrangedpageA % 24 + \or \handlearrangedpageXY{#1} {0}{1}{3}\arrangedpageA % 25 + \or \handlearrangedpageXY{#1} {0}{2}{3}\arrangedpageB % 26 + \or \handlearrangedpageXY{#1}{180}{2}{0}\arrangedpageB % 27 + \or \handlearrangedpageXY{#1}{180}{1}{0}\arrangedpageA % 28 + \or \handlearrangedpageXY{#1}{180}{2}{0}\arrangedpageA % 29 + \or \handlearrangedpageXY{#1}{180}{1}{0}\arrangedpageB % 30 + \or \handlearrangedpageXY{#1} {0}{1}{3}\arrangedpageB % 31 + \or \handlearrangedpageXY{#1} {0}{2}{3}\arrangedpageA % 32 \poparrangedpages \fi} -\def\pusharrangedpageEIGHT#1% +\def\pusharrangedpageSIXTEEN#1% changed to match the official way of doing {\doglobal\increment\arrangedpageN \reportarrangedpage\arrangedpageN \ifcase\arrangedpageN - \or \handlearrangedpageXY{#1}{180}{0}{1}\arrangedpageA % 1 - \or \handlearrangedpageXY{#1}{180}{1}{1}\arrangedpageB % 2 - \or \handlearrangedpageXY{#1} {0}{0}{0}\arrangedpageB % 3 - \or \handlearrangedpageXY{#1} {0}{0}{0}\arrangedpageA % 4 - \or \handlearrangedpageXY{#1} {0}{1}{0}\arrangedpageA % 5 - \or \handlearrangedpageXY{#1} {0}{1}{0}\arrangedpageB % 6 - \or \handlearrangedpageXY{#1}{180}{0}{1}\arrangedpageB % 7 - \or \handlearrangedpageXY{#1}{180}{1}{1}\arrangedpageA % 8 + \or \handlearrangedpageXY{#1} {0}{3}{1}\arrangedpageA % 1 + \or \handlearrangedpageXY{#1} {0}{0}{1}\arrangedpageB % 2 + \or \handlearrangedpageXY{#1} {0}{3}{1}\arrangedpageB % 3 + \or \handlearrangedpageXY{#1} {0}{0}{1}\arrangedpageA % 4 + \or \handlearrangedpageXY{#1}{180}{0}{0}\arrangedpageA % 5 + \or \handlearrangedpageXY{#1}{180}{3}{0}\arrangedpageB % 6 + \or \handlearrangedpageXY{#1}{180}{0}{0}\arrangedpageB % 7 + \or \handlearrangedpageXY{#1}{180}{3}{0}\arrangedpageA % 8 + \or \handlearrangedpageXY{#1}{180}{2}{0}\arrangedpageA % 9 + \or \handlearrangedpageXY{#1}{180}{1}{0}\arrangedpageB % 10 + \or \handlearrangedpageXY{#1}{180}{2}{0}\arrangedpageB % 11 + \or \handlearrangedpageXY{#1}{180}{1}{0}\arrangedpageA % 12 + \or \handlearrangedpageXY{#1} {0}{1}{1}\arrangedpageA % 13 + \or \handlearrangedpageXY{#1} {0}{2}{1}\arrangedpageB % 14 + \or \handlearrangedpageXY{#1} {0}{1}{1}\arrangedpageB % 15 + \or \handlearrangedpageXY{#1} {0}{2}{1}\arrangedpageA % 16 + \poparrangedpages + \fi} + +\def\pusharrangedpageEIGHT#1% changed to match the official way of doing + {\doglobal\increment\arrangedpageN + \reportarrangedpage\arrangedpageN + \ifcase\arrangedpageN + \or \handlearrangedpageXY{#1} {0}{1}{1}\arrangedpageA % 1 + \or \handlearrangedpageXY{#1} {0}{0}{1}\arrangedpageB % 2 + \or \handlearrangedpageXY{#1}{180}{0}{0}\arrangedpageB % 3 + \or \handlearrangedpageXY{#1}{180}{1}{0}\arrangedpageA % 4 + \or \handlearrangedpageXY{#1}{180}{0}{0}\arrangedpageA % 5 + \or \handlearrangedpageXY{#1}{180}{1}{0}\arrangedpageB % 6 + \or \handlearrangedpageXY{#1} {0}{1}{1}\arrangedpageB % 7 + \or \handlearrangedpageXY{#1} {0}{0}{1}\arrangedpageA % 8 \poparrangedpages \fi} @@ -206,6 +353,17 @@ \poparrangedpages \fi} +\def\pusharrangedpageSIDE#1% not ok yet + {\doglobal\increment\arrangedpageN + \reportarrangedpage\arrangedpageN + \ifcase\arrangedpageN + \or \handlearrangedpageXY{#1}{0}{0}{0}\arrangedpageA % 1 + \or \handlearrangedpageXY{#1}{0}{1}{0}\arrangedpageA % 2 + \or \handlearrangedpageXY{#1}{0}{0}{0}\arrangedpageB % 3 + \or \handlearrangedpageXY{#1}{0}{1}{0}\arrangedpageB % 4 + \poparrangedpages + \fi} + % 2UP/2DOWN / 1pt prevents overflow \def\splitoffarrangedpagesTWO% @@ -279,6 +437,267 @@ \dp#1=\!!zeropoint \vbox{\box#1}}} +%D One can (mis)use this mechanism, in close cooperation +%D with \PDFTEX\ to arrange pages of already produced files. +%D +%D \starttypen +%D \insertpages[file.pdf][1,3][n=30,width=18cm] +%D \stoptypen +%D +%D The pages are inserted in the text area, and even pages +%D are repositioned according to the width. In this example +%D empty pages are added after page 1 and 3. +%D +%D Selecting pages can be accomplished by: +%D +%D \starttypen +%D \filterpages[file.pdf][1,3,5][n=30,width=18cm] +%D \stoptypen +%D +%D One may pass \type {odd} or \type {even} instead of a +%D comma separated list. A third alternative is: +%D +%D \starttypen +%D \copypages[file.pdf][n=30,scale=950] +%D \stoptypen +%D +%D This macros inserts the page, according to the settings +%D provided. + +\def\insertpages% + {\dotripleempty\doinsertpages} + +\def\doinsertpages[#1][#2][#3]% + {\doifassignmentelse{#2} + {\dodoinsertpages[#1][][#2]} + {\dodoinsertpages[#1][#2][#3]}} + +\def\dodoinsertpages[#1][#2][#3]% + {\bgroup + \mindermeldingen + \getparameters[\??ip][\c!n=\noffigurepages,\c!breedte=\!!zeropoint,#3]% + \dorecurse{\@@ipn} + {\dofilterpage{#1}{\recurselevel}% + \doifinsetelse{\recurselevel}{#2}{\null\pagina}{}}% + \egroup} + +\def\filterpages% + {\dotripleempty\dofilterpages} + +\def\dofilterpages[#1][#2][#3]% + {\bgroup + \mindermeldingen + \getparameters[\??ip][\c!n=\noffigurepages,\c!breedte=\!!zeropoint,#3]% + \doifelse{#2}{\v!even} + {\dorecurse{\@@ipn} + {\ifodd\recurselevel\relax\else\dofilterpage{#1}{\recurselevel}\fi}} + {\doifelse{#2}{\v!oneven} + {\dorecurse{\@@ipn} + {\ifodd\recurselevel\relax\dofilterpage{#1}{\recurselevel}\fi}} + {\def\docommando##1{\ifnum##1>\@@ipn\else\dofilterpage{#1}{##1}\fi}% + \processcommalist[#2]\docommando}}% + \egroup} + +\def\dofilterpage#1#2% + {\hbox to \tekstbreedte + {\ifdubbelzijdig\ifdim\@@ipbreedte>\!!zeropoint\relax\ifodd\realpageno\else + \hfill + \def\dowithfigure{\hskip-\@@ipbreedte}% + \fi\fi\fi + \setbox0=\hbox + {\externalfigure[#1][\c!pagina=#2,\c!hoogte=\teksthoogte]}% + \wd0=\!!zeropoint + \box0} + \pagina} + +\def\copypages% + {\dodoubleempty\docopypages} + +\def\docopypages[#1][#2]% + {\getparameters[\??ip][\c!n=\noffigurepages,#2]% + \dorecurse{\@@ipn} + {\vbox to \teksthoogte + {\hsize=\tekstbreedte + \centeredbox{\externalfigure[#1][\c!pagina=\recurselevel,#2]}} + \pagina}} + +%D \macros +%D {combinepages} +%D +%D Yet another way of postprocessing is handles by \type +%D {\combinepages}. This macro builds a matrix of pages from a +%D file, for example: +%D +%D \starttypen +%D \setuppapersize +%D [A4][A4] % or [A4,landscape][A4,landscape] +%D +%D \setuplayout +%D [header=0pt,footer=1cm, +%D backspace=1cm,topspace=1cm, +%D width=middle,height=middle] +%D +%D \setupfootertexts +%D [presentation---\currentdate\space---\space\pagenumber] +%D +%D \starttext +%D \combinepages[slides][nx=2,ny=3,frame=on] +%D \stoptext +%D \starttypen +%D +%D One can influence the way the pages are combined. (This +%D will be explained some time.) + +\def\combinepages% + {\dodoubleempty\docombinepages} + +\def\docombinepages[#1][#2]% + {\bgroup + \def\noffigurepages{1}% + \getparameters + [\??ip] + [\c!n=\noffigurepages,\c!nx=2,\c!ny=2, + \c!afstand=\bodyfontsize, + \c!onder=\vfill,\c!boven=\vss, + \c!links=\hss,\c!rechts=\hss, + \c!voor=\pagina,\c!na=\pagina,\c!kader=, + #2]% + \@@ipvoor + \doglobal\newcounter\combinedpagescounter + \doloop + {\vbox to \teksthoogte + {\mindermeldingen + \hsize=\tekstbreedte + \scratchdimen=\@@ipafstand + \!!widtha=\hsize + \advance\!!widtha by -\@@ipnx\scratchdimen + \advance\!!widtha by \scratchdimen + \divide \!!widtha by \@@ipnx + \!!heighta=\vsize + \advance\!!heighta by -\@@ipny\scratchdimen + \advance\!!heighta by \scratchdimen + \divide \!!heighta by \@@ipny + \dorecurse{\@@ipny} + {\hbox to \hsize + {\dorecurse{\@@ipnx} + {\doglobal\increment\combinedpagescounter + \vbox to \!!heighta + {\hsize=\!!widtha + \vsize=\!!heighta + \@@ipboven + \hbox to \hsize + {\@@iplinks + \ifnum\combinedpagescounter>\@@ipn \else + \externalfigure[#1][\c!pagina=\combinedpagescounter,\c!factor=\v!max,\c!kader=\@@ipkader]% + \getnumberoffigurepages\noffigurepages + \fi + \@@iprechts} + \@@iponder}% + \hfil}% + \hfilneg} + \vfil} + \vfilneg} + \pagina + \ifnum\combinedpagescounter<\@@ipn \else\exitloop\fi} + \@@ipna + \egroup} + +%D \macros +%D {setuppagecomment,startpagecomment} +%D +%D This command is not yet documented. Usage: +%D +%D \starttypen +%D \setuppagecomment[state=start,location=right] +%D +%D \startpagecomment +%D \input knuth +%D \stoppagecomment +%D \stoptypen + +\def\setuppagecomment% + {\dosingleempty\dosetuppagecomment} + +\def\dosetuppagecomment[#1]% + {\getparameters[\??pc][#1]% + \doifelse{\@@pcstatus}{\v!start} + {\doifinsetelse{\@@pcplaats}{\v!onder,\v!boven} + {\stelpapierformaatin[\c!links=\hskip\@@pcoffset]% + \adddimenmacro\papierhoogte\@@pcoffset\@@pcoffset\@@pcafstand\@@pchoogte\to\@@pcpaperheight + \adddimenmacro\papierbreedte\@@pcoffset\@@pcoffset\to\@@pcpaperwidth + \definieeroverlay[pagecomment][\placepagecommentTB]} + {\stelpapierformaatin[\c!boven=\vskip\@@pcoffset]% + \adddimenmacro\papierhoogte\@@pcoffset\@@pcoffset\to\@@pcpaperheight + \adddimenmacro\papierbreedte\@@pcoffset\@@pcoffset\@@pcafstand\@@pcbreedte\to\@@pcpaperwidth + \definieeroverlay[pagecomment][\placepagecommentLR]}% + \processaction + [\@@pcplaats] + [ \v!onder=>{\stelpapierformaatin[\c!onder =\vss,\c!boven =\vskip\@@pcoffset]}, + \v!boven=>{\stelpapierformaatin[\c!boven =\vss,\c!onder =\vskip\@@pcoffset]}, + \v!links=>{\stelpapierformaatin[\c!links =\hss,\c!rechts=\hskip\@@pcoffset]}, + \v!rechts=>{\stelpapierformaatin[\c!rechts=\hss,\c!links =\hskip\@@pcoffset]}]% + \definieerpapierformaat + [commentedpage] + [\c!hoogte=\@@pcpaperheight, + \c!breedte=\@@pcpaperwidth]% + \let\@@pcprintpaperformat\printpapierformaat + \stelpapierformaatin[\papierformaat][commentedpage]% + \stelachtergrondenin[\v!papier][\c!achtergrond=pagecomment]} + {\doif{\@@pcstatus}{\v!stop} % else initialization invokes backgrounds + {% this should be tested first + % \expanded{\stelpapierformaatin[\papierformaat][\@@pcprintpaperformat]}% + \stelachtergrondenin[\v!papier][\c!achtergrond=]}}} + +\def\@@pcprintpaperformat{\printpapierformaat} + +\def\placepagecommentTB% + {\vbox to \printpapierhoogte + {\forgetall + \hsize\printpapierbreedte + \vskip\@@pcoffset + \doifelse{\@@pcplaats}{\v!onder}{\vskip\papierhoogte\vskip\@@pcafstand}{\vss} + \hskip\@@pcoffset + \vbox to \@@pchoogte + {\forgetall + \hsize\papierbreedte + \ifpagecomment + \haalbuffer[pagecomm] + \global\pagecommentfalse + \fi}% + \hfill + \doifelse{\@@pcplaats}{\v!onder}{\vss}{\vskip\papierhoogte\vskip\@@pcafstand} + \vskip\@@pcoffset}} + +\def\placepagecommentLR% + {\hbox to \printpapierbreedte + {\hskip\@@pcoffset + \doifelse{\@@pcplaats}{\v!rechts}{\hskip\papierbreedte\hskip\@@pcafstand}{\hss}% + \vbox to \printpapierhoogte + {\forgetall + \vskip\@@pcoffset + \hsize\@@pcbreedte + \ifpagecomment + \haalbuffer[pagecomm] + \global\pagecommentfalse + \fi + \vss}% + \doifelse{\@@pcplaats}{\v!rechts}{\hss}{\hskip\papierbreedte\hskip\@@pcafstand}% + \hskip\@@pcoffset}} + +\newif\ifpagecomment + +\setvalue{\e!start\e!pagecomment}% + {\global\pagecommenttrue + \dostartbuffer[pagecomm][\e!start\e!pagecomment][\e!stop\e!pagecomment]} + +\setuppagecomment + [\c!status=, % \v!stop would invoke background calculation + \c!plaats=\v!onder, + \c!offset=.5cm, + \c!afstand=.5cm, + \c!hoogte=5cm, + \c!breedte=10cm] + \protect \endinput |