%D \module %D [ file=page-mis, %D version=2008.11.17, % was part of page-flt.tex / 2000.10.20 %D title=\CONTEXT\ Page Macros, %D subtitle=Misc Float Things, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \writestatus{loading}{ConTeXt Page Macros / Misc Float Things} \unprotect \newif\ifmargeblokken \def\dosetupmarginblocks[#1]% {\getparameters[\??mb][#1]% \doifelse\@@mbstate\v!start {\showmessage\m!layouts4\empty \margeblokkentrue \let\somenextfloat\dosomenextfloat \let\startmarginblock\dostartmarginblock \let\stopmarginblock\dostopmarginblock}% {\showmessage\m!layouts5\empty \margeblokkenfalse \def\somenextfloat[##1]% {\someelsefloat[##1,\v!here]}% \let\startmarginblock\dontstartmargeblok \let\stopmarginblock\dontstopmargeblok}} \def\setupmarginblocks {\dosingleargument\dosetupmarginblocks} \newbox\marginbox \def\dosomenextfloat[#1]% {\global\setbox\marginbox\vbox {\hsize\@@mbwidth \unvcopy\marginbox \ifvoid\marginbox\else\expandafter\@@mbinbetween\fi \box\floatbox\filbreak}% \ifdim\ht\marginbox>\textheight \dosavefloatinfo \else \doinsertfloatinfo \fi} \newbox\preparedmarginbox \def\reshapemargin {\ifdim\ht\preparedmarginbox>\zeropoint \beginofshapebox \unvbox\preparedmarginbox \endofshapebox \reshapebox {\box\shapebox}% \setbox\preparedmarginbox\vbox to \textheight {\@@mbtop \flushshapebox \@@mbbottom}% \fi} \def\plaatsrechtermargeblok {\hskip\rightmarginwidth} \def\plaatslinkermargeblok {\hskip\leftmarginwidth} \def\checkmargeblokken {\ifvoid\marginbox\else\docheckmargeblokken\fi} \def\docheckmargeblokken % erg inefficient {\setbox\preparedmarginbox\vbox {\forgetall \splittopskip\topskip \ifvoid\marginbox\else \ifdim\ht\marginbox>\textheight \vsplit\marginbox to \textheight \else \unvbox\marginbox \fi \fi}% \reshapemargin \setbox\preparedmarginbox\vbox {\@@mbbefore\box\preparedmarginbox\@@mbafter}% \def\rightmarginbox {\def\plaatsrechtermargeblok {\setbox\preparedmarginbox\hbox to \rightmarginwidth {\@@mbleft\box\preparedmarginbox\@@mbright}% \vsmashbox\preparedmarginbox \box\preparedmarginbox}}% \def\leftmarginbox {\def\plaatslinkermargeblok {\setbox\preparedmarginbox\hbox to \leftmarginwidth {\@@mbright\box\preparedmarginbox\@@mbleft}% \vsmashbox\preparedmarginbox \box\preparedmarginbox}}% \processaction % traag [\@@mblocation] [ \v!inmargin=>\doifbothsidesoverruled\rightmarginbox\rightmarginbox\leftmarginbox, \v!middle=>\doifbothsidesoverruled\rightmarginbox\leftmarginbox\rightmarginbox, \v!left=>\leftmarginbox, \v!right=>\rightmarginbox, \s!unknown=>\setbox\preparedmarginbox\hbox{}]} \def\dostartmarginblock % 2 maal \vbox ivm \unvbox elders {\global\setbox\marginbox\vtop\bgroup\vbox\bgroup \hsize\@@mbwidth \ifvoid\marginbox\else \unvbox\marginbox \@@mbinbetween \fi \setupalign[\@@mbalign]% \dostartattributes\??mb\c!style\c!color{}% \begstrut\ignorespaces} \def\dostopmarginblock {\unskip\endstrut \dostopattributes \egroup \egroup} \def\dontstartmargeblok {\@@mbbefore \bgroup \dostartattributes\??mb\c!style\c!color\empty} \def\dontstopmargeblok {\dostopattributes \egroup \@@mbafter} \newcounter\nofpostponedblocks \newif\ifinpostponing \newevery\everytopofpage\relax \appendtoks \the\everytopofpage \to\everystarttext \appendtoks\global\everytopofpage\emptytoks\to\everystoptext % \startpostponing [pagenumber] [+pageoffset] % % \startpostponing[2] % PAGE 2 \blank % \stoppostponing % % \startpostponing[+1] % PAGE +1 \blank % \stoppostponing % % \startpostponing[+2] % PAGE +2 \blank % \stoppostponing % % \starttext \dorecurse{4}{\input tufte \page} \stoptext \newtoks \postponedpageblocks \newcounter\nofpostponedpageblocks % \ifinpostponing: handhaven, want gebruikt in stijlen ! ! ! ! ! \def\flushpagefloats {\doifoddpageelse {\ifvoid\collectedleftpagefloats \ifvoid\collectedrightpagefloats\else \unvbox\collectedrightpagefloats \page %\the\everytopofpage \fi \fi} {\ifvoid\collectedleftpagefloats\else \unvbox\collectedleftpagefloats \page %\the\everytopofpage \fi \ifvoid\collectedrightpagefloats\else \unvbox\collectedrightpagefloats \page %\the\everytopofpage \fi}% \ifvoid\collectedpagefloats\else % message \unvbox\collectedpagefloats \fi} % \def\flushrestfloats % {\doif{\floatsharedparameter\c!cache}\v!no\doflushfloats} % \let\flushrestfloats\relax \def\dopostponeblock {\bgroup % new may 2004 \setsystemmode\v!postponing % new may 2004 \the\everytopofpage %\flushrestfloats \flushpagefloats \donefalse \ifinpostponing \else \ifcase\nofpostponedblocks \else \donetrue \fi \ifcase\nofpostponedpageblocks \else \donetrue \fi \fi \ifdone \bgroup % we need the color/font switch, else problems inside split verbatim \setnormalcatcodes % postponing in verbatim \pushpostponedpagecolor \restoreglobalbodyfont % The \nof-test is \global\pagetotal\zeropoint % recently added and \global\inpostponingtrue % definitely needed else \the\postponedpageblocks % we can loose or disorder \dorecurse\nofpostponedblocks % floats; anyhow, this {\getbuffer[pbuf-\recurselevel]}% % mechanism is still \doflushfloats % new but potential dangerous % suboptimal and needs a \doglobal\newcounter\nofpostponedblocks % proper analysis \global\inpostponingfalse \poppostponedpagecolor \egroup \fi \egroup} % new may 2004 \def\getpostponedblock#1#2% {\doif{#1}\realfolio{\getbuffer[rbuf-#2]}} % no \ifnum, avoid \fi % beware, \dosingleempty conflicts with buffers (feeds back the \par) \setvalue{\e!start\v!postponing}% {\bgroup \obeylines \doifnextoptionalelse{\egroup\nodostartpostponing}{\egroup\dodostartpostponing}} \def\nodostartpostponing[#1]% {\doglobal\increment\nofpostponedpageblocks \bgroup % a little bit of misusing grouping \doifinstring{+}{#1}\advance \realpageno#1\relax % ugly but efficient \doglobal\appendetoks\noexpand\getpostponedblock {\realfolio}{\nofpostponedpageblocks}\to\postponedpageblocks \egroup \showmessage\m!layouts3\nofpostponedpageblocks \dostartbuffer[rbuf-\nofpostponedpageblocks]% [\e!start\v!postponing][\e!stop\v!postponing]} \def\dodostartpostponing {\doglobal\increment\nofpostponedblocks \showmessage\m!layouts3\nofpostponedblocks \expanded{\dostartbuffer[pbuf-\nofpostponedblocks][\e!start\v!postponing][\e!stop\v!postponing]}} % Setups: \setupmarginblocks [\c!state=\v!start, \c!location=\v!inmargin, \c!width=\rightmarginwidth, \c!style=, \c!color=, \c!align=, \c!left=, \c!right=, \c!top=, \c!inbetween=\blank, \c!bottom=\vfill, \c!before=, \c!after=] \protect \endinput