%D \module %D [ file=cont-new, %D version=1995.10.10, %D title=\CONTEXT\ Miscellaneous Macros, %D subtitle=New Macros, %D author=Hans Hagen, %D date=\currentdate, %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 mreadme.pdf for %C details. % manual : offsetbox alignbox % todo achtergronden in kolommen %D This file is loaded at runtime, thereby providing an %D excellent place for hacks and new features. \unprotect % we don't register the paragraph characteristics, only the % width \appendtoks \setinnerparpositions % see "techniek" for application \to \everytabulate \def\OTRSETnaturalflush {\bgroup \forgetall % new \setbox0\vbox to \columnfreecells\lineheight {\vskip-\topskip \vskip\lineheight \prevdepth\dp\strutbox \unvbox\normalpagebox \vfill}% \setbox2\hbox {\OTRSETplacebottomnotes}% \setbox\scratchbox\hbox {\wd0=\zeropoint\box0\box2}% \dp\scratchbox\dp\strutbox \OTRSEThandleflushedtext1 \egroup} \appendtoks \checkcurrentlayout \to \everystarttext \def\flushfootnotes {\flushnotes} \def\doflushfootnotes{\doflushnotes} \def\usesubpath[#1]% {\ifx\allinputpaths\empty \edef\allinputpaths{#1}% \else \def\docommando##1% {\def\dodocommando####1{\addtocommalist{##1/####1}\allinputpaths}% \processcommalist[#1]\dodocommando}% \processcommacommand[\allinputpaths]\docommando \fi} \newif\ifboxhasframe \def\startlocalframed[#1][#2]% {\bgroup \inframedtrue \edef\@@framed{#1}% % this piece of pre expansion is needed (sometimes used in frameoffset) % \doifvaluesomething{\@@framed\c!lijndikte} % obsolete % {\ruledlinewidth\getvalue{\@@framed\c!lijndikte}}% obsolete % this piece of pre expansion is needed (sometimes used circular) \scratchdimen\getvalue{\@@framed\c!kaderoffset}% \setevalue{\@@framed\c!kaderoffset}{\the\scratchdimen}% \doifnotvalue{\@@framed\c!achtergrondoffset}\v!kader {\scratchdimen\getvalue{\@@framed\c!achtergrondoffset}% \setevalue{\@@framed\c!achtergrondoffset}{\the\scratchdimen}}% % we need to register the (outer) color \startregistercolor[\getvalue{\@@framed\c!voorgrondkleur}]% % to prevent deadlock in case of self refering \ifsecondargument % faster \getparameters[\@@framed][#2]% here ! \fi % to get the right spacing \doifvaluesomething{\@@framed\c!voorgrondletter} {\@EA\doconvertfont\csname\@@framed\c!voorgrondletter\endcsname\empty}% % beware, both the frame and background offset can be overruled % % the next macros are visible \edef\localoffset{\getvalue{\@@framed\c!offset }}% \edef\localwidth {\getvalue{\@@framed\c!breedte }}% \edef\localheight{\getvalue{\@@framed\c!hoogte }}% \edef\localformat{\getvalue{\@@framed\c!uitlijnen}}% \edef\localstrut {\getvalue{\@@framed\c!strut }}% % these are not \edef\@@localframing {\getvalue{\@@framed\c!kader }}% \edef\@@locallocation{\getvalue{\@@framed\c!plaats}}% % \ifx\@@localframing\v!overlay % no frame, no offset, no framewidth \boxhasframefalse \let\localoffset\v!overlay \else\ifx\@@localframing\v!geen % no frame, no framewidth \boxhasframefalse \else \boxhasframetrue \fi\fi \ifboxhasframe \doifvaluesomething{\@@framed\c!lijndikte} {\ruledlinewidth\getvalue{\@@framed\c!lijndikte}\relax \ifinheritruledlinewidth\linewidth\ruledlinewidth\fi}% \else \ruledlinewidth\zeropoint \fi \ifx\localformat\empty \boxhasformatfalse \else \boxhasformattrue \dosetraggedcommand\localformat \edef\dobeforeframedbox{\raggedtopcommand\getvalue{\@@framed\c!boven}}% \edef\doafterframedbox {\getvalue{\@@framed\c!onder}\raggedbottomcommand}% \fi \ifx\localoffset\v!geen \boxhasoffsetfalse \boxhasstrutfalse \boxisoverlaidfalse \@@localoffset\ruledlinewidth \else\ifx\localoffset\v!overlay % \ifx\@@localframing\v!nee \boxhasframefalse \fi % test first \boxhasoffsetfalse \boxhasstrutfalse \boxisoverlaidtrue \@@localoffset\zeropoint \else \boxhasoffsettrue \boxhasstruttrue \boxisoverlaidfalse \ifx\localoffset\v!default % new per 2-6-2000 \let\localoffset\defaultframeoffset \letvalue{\@@framed\c!offset}\defaultframeoffset \else \let\defaultframeoffset\localoffset \fi \@@localoffset\localoffset \advance\@@localoffset \ruledlinewidth \fi\fi \ifx\localwidth\v!passend \ifboxhasformat \boxhaswidthtrue \!!widtha\hsize \else \boxhaswidthfalse \fi \else\ifx\localwidth\v!ruim \boxhaswidthtrue \!!widtha\hsize \else \boxhaswidthtrue \!!widtha\localwidth \fi\fi \ifx\localheight\v!passend \boxhasheightfalse % no longer: \boxhasstrutfalse \else\ifx\localheight\v!ruim \boxhasheightfalse \else \boxhasheighttrue \!!heighta\localheight \fi\fi % this should be an option ! ! ! ! \ifdim\!!widtha=\hsize \parindent\zeropoint \setlocalhsize \!!widtha\localhsize \fi % i.e. disable (colsetbackgroundproblemintechniek) \advance\!!widtha -2\@@localoffset \advance\!!heighta -2\@@localoffset \ifx\localstrut\v!nee \boxhasstrutfalse \fi \ifboxhasstrut \setstrut \let\localbegstrut\begstrut \let\localendstrut\endstrut \let\localstrut \strut \else \let\localbegstrut\pseudobegstrut % was: \relax \let\localendstrut\pseudoendstrut % was: \relax \let\localstrut \pseudostrut % was: \relax %\ifboxhasheight\ifdim\!!heighta<\ht\strutbox % saveguard % \let\localbegstrut\relax % but not that % \let\localstrut \relax % save afterall %\fi\fi \fi \ifboxhasheight \let\\\vboxednewline \ifboxhaswidth \let\hairline\vboxedhairline \ifboxhasformat \let\next\doformatboxSomeFormat \else \let\next\doformatboxNoFormat \fi \else \let\hairline\hboxedhairline \ifboxhasformat \let\next\doformatboxHeight \else \let\next\doformatboxVSize \fi \fi \else \ifboxhaswidth \ifboxhasformat \let\hairline\vboxedhairline \let\\\vboxednewline \let\next\doformatboxWidth \else \let\hairline\hboxedhairline \let\\\hboxednewline \let\next\doformatboxHSize \fi \else \let\hairline\hboxedhairline \let\\\hboxednewline \let\next\doformatboxNoSize \fi \fi \edef\framedwidth % a new feature, visible fo ruser {\ifdim\!!widtha >\zeropoint\the\!!widtha \else\zeropoint\fi}% \edef\framedheight% a new feature, visible fo ruser {\ifdim\!!heighta>\zeropoint\the\!!heighta\else\zeropoint\fi}% % first alternative %\def\dowithframedbox% % {\let\postprocessframebox\undefined %new % \aftergroup\stoplocalframed}% % \afterassignment\dowithframedbox % \setbox\framebox=\next} % second alternative %\dowithnextbox % {\setbox\framebox=\box\nextbox % \let\postprocessframebox\undefined %new % \stoplocalframed} % \next} % third alternative \afterassignment\dodowithframebox \setbox\framebox\next} \def\stoplocalframed% {\dontshowcomposition \ifboxhasformat \ifx\localwidth\v!passend \ifreshapeframebox\doreshapeframedbox\fi \boxhaswidthfalse \else \resetshapeframebox \fi \else \resetshapeframebox \fi \ifboxhaswidth \wd\framebox\!!widtha \fi \ifboxhasheight \ht\framebox\!!heighta \fi \doifvalue{\@@framed\c!leeg}\v!ja {\setbox\scratchbox\null \wd\scratchbox\wd\framebox \ht\scratchbox\ht\framebox \dp\scratchbox\dp\framebox \setbox\framebox\box\scratchbox}% \stopregistercolor \docolorframebox \ifboxhasoffset \dooffsetframebox \fi \ifboxisoverlaid \else \dolocateframebox \fi \ifx\postprocessframebox\undefined \else \postprocessframebox\framebox \fi \edef\overlaylinecolor{\getvalue{\@@framed\c!kaderkleur}}% \edef\overlaylinewidth{\the\ruledlinewidth}% \@@... \ifboxhasframe % real or invisible frame \doframedbox \fi \doifvaluesomething{\@@framed\c!achtergrond}\dobackedbox \ifx\@@locallocation\v!laag \doinlineframedbox \else\ifx\@@locallocation\v!diepte \doloweredframedbox \fi\fi \box\framebox \egroup \egroup} %D This alternative is slower, since it works on top of the %D color (stack) mechanism, but it does provide nesting. \def\dosetrastercolor#1% {\edef\@@cl@@s{#1}% \ifx\@@cl@@s\empty \let\@@rsraster \fi \setevalue{\??cr\??rs}{\colorSpattern}} \def\localstartraster[#1]% {\bgroup\dosetrastercolor{#1}\localstartcolor[\??rs]} \def\localstopraster {\localstopcolor\egroup} \def\startraster[#1]% {\bgroup\dosetrastercolor{#1}\startcolor[\??rs]} \def\stopraster {\stopcolor\egroup} \def\fontclassname#1#2% {\ifcsname\??ff#1#2\endcsname \fontclassname{#1}{\csname\??ff#1#2\endcsname}% \else\ifcsname\??ff#2\endcsname \fontclassname{#1}{\csname\??ff#2\endcsname}% \else #2% \fi\fi} \def\defineclassfontsynonym {\dotripleargument\dodefineclassfontsynonym} \def\dodefineclassfontsynonym[#1][#2][#3]% {\definefontsynonym[#1][\fontclassname{#2}{#3}]} %\definefontsynonym [KopFont] [\fontclassname{officina}{SerifBold}] % %\defineclassfontsynonym [KopFont] [officina] [SerifBold] \def\woordrechts % zie naw {\groupedcommand {\hfill\allowbreak\strut\hfill\hbox} {\parfillskip\zeropoint\par}} \def\startkolomopmaak % don't change {\bgroup \getrawnoflines\teksthoogte % teksthoogte kan topskip hebben, dus raw \scratchdimen\noflines\lineheight \advance\scratchdimen-\lineheight \advance\scratchdimen\topskip \setbox\scratchbox\vbox to \scratchdimen\bgroup} \def\stopkolomopmaak {\egroup \dp\scratchbox\zeropoint \wd\scratchbox\tekstbreedte \box\scratchbox \egroup} \writestatus{\m!systems}{beware: some patches loaded from cont-new.tex!} % todo : hoe komt box er uit \long\def\startexternalfigure {\dotripleempty\dostartexternalfigure} \long\def\dostartexternalfigure[#1][#2][#3]#4\stopexternalfigure {\gdef\figuredescription{#4}% \externalfigure[#1][#2][#3]% \global\let\figuredescription\empty} \let\figuredescription\empty % very experimental \def\redoanalyzefigurefiles#1% {\ifcase\figurestatus \def\@@efcurrenttype{#1}% \dododoanalyzefigurefiles\empty \fi} \def\analyzefigurefiles {\let\externalfigurelog\empty \let\@@efcurrenttype\empty \let\@@efcurrentpath\empty \let\@@efcurrentfile\empty \doanalyzefigurefiles\doanalyzefigurefilesA \doanalyzefigurefiles\doanalyzefigurefilesB \doanalyzefigurefiles\doanalyzefigurefilesC % new, permits rather raw names like e:/.... \let\dodoanalyzefigurefiles\redoanalyzefigurefiles \doanalyzefigurefiles\doanalyzefigurefilesA \doanalyzefigurefiles\doanalyzefigurefilesB \doanalyzefigurefiles\doanalyzefigurefilesC} \def\regelweergave {\@@rnlinks\convertnumber\@@rnconversie\linenumber\@@rnrechts} % extension to page-lin \def\dodoschrijfregelnummer% {% beware of em's, the font is already switched ! \setbox\scratchbox\hbox {\setbox0\hbox{\@@rncommando{\regelweergave}}\vsmashbox0% \ifcase\linenumberlocation \rlap{\hbox to \@@rnbreedte{\box0\hss}}% was \llap, nog testen !! \or %\llap{\hbox to \@@rnbreedte{\hss\box0\hskip\linkermargeafstand}}% \inleftmargin {\forgetall \doifelse\@@rnbreedte\v!marge {\hsize\linkermargebreedte}{\hsize\@@rnbreedte}% \alignedline\@@rnuitlijnen\v!rechts{\box0\hskip\@@rnafstand}}% \else \inrightmargin {\forgetall \doifelse\@@rnbreedte\v!marge {\hsize\rechtermargebreedte}{\hsize\@@rnbreedte}% \alignedline\@@rnuitlijnen\v!links{\hskip\@@rnafstand\box0}}% \fi}% \vsmashbox\scratchbox \box\scratchbox} \stelregelnummerenin [\c!breedte=\ifcase\linenumberlocation2em\else\v!marge\fi, \c!links=, \c!rechts=, \c!commando=, \c!afstand=\zeropoint, \c!uitlijnen=\ifcase\linenumberlocation\v!rechts\or\v!rechts\or\v!links\fi] % another one \newevery \everylinenumber \relax \let\normaldodoschrijfregelnummer\dodoschrijfregelnummer \def\dodoschrijfregelnummer {\normaldodoschrijfregelnummer \the\everylinenumber} % new \newcounter\linenotecounter \newtoks \collectedlinenotes \newif \iftracelinenotes \appendtoks \the\collectedlinenotes \to \everylinenumber \appendtoks \global\collectedlinenotes\emptytoks \to \beforeeverylinenumbering \def\handlelinenote#1#2% {\bgroup \expanded{\beforesplitstring#1}\at--\to\linenotelinenumber \ifnum\linenotelinenumber=\linenumber\relax % todo: \onlyfootnote{#1}{#2}% == configurable \setupfootnotes[\c!nummercommando=\gobbleoneargument]% \footnotetext{#1: #2}% \fi \egroup} \def\tracedlinenote#1% {\iftracelinenotes \hbox to \zeropoint {\forgetall \localcolortrue \hsize\zeropoint \hss \vbox to \strutheight{\llap{\red\infofont\setstrut\linenotecounter}\vss}% {\blue\vl}% \vbox to \strutheight{\rlap{\red\infofont\setstrut#1}\vss}% \hss}% \prewordbreak \fi} \def\linenote#1% {\doglobal\increment\linenotecounter \doifreferencefoundelse{\??rr:\linenotecounter}% {\doglobal\@EA\appendtoks\@EA\handlelinenote\@EA {\currenttextreference}{#1}\to\collectedlinenotes} {}% \tracedlinenote\empty \expanded{\eenregel[\??rr:\linenotecounter]}} \def\startlinenote[#1]#2% {\doifreferencefoundelse{\??rr:#1}% {\doglobal\@EA\appendtoks\@EA\handlelinenote\@EA {\currenttextreference}{#2}\to\collectedlinenotes} {}% \tracedlinenote{#1}% \startregel[\??rr:#1]} \def\stoplinenote[#1]% {\stopregel[\??rr:#1]} % \startbuffer[test] % \startlinenumbering[100] % test \linenote {oeps} test test test test test test % test \startlinenote [well] {oeps} test test test test test test % test \linenote {oeps} test test test test test test % test \linenote {oeps} test test test test test test % test \linenote {oeps} test test test test test test % test \linenote {oeps} test test test test test test % test \stoplinenote [well] test test test test test test % \stoplinenumbering % \stopbuffer % % {\typebuffer[test] \getbuffer[test]} \page % % \startbuffer[setup] % \setuplinenumbering % [align=left] % \stopbuffer % % {\typebuffer[setup] \getbuffer[setup,test]} \page % % \startbuffer[setup] % \setuplinenumbering % [width=1em, % align=left] % \stopbuffer % % {\typebuffer[setup] \getbuffer[setup,test]} \page % % \startbuffer[setup] % \setuplinenumbering % [width=2em, % distance=.5em, % align=left] % \stopbuffer % % {\typebuffer[setup] \getbuffer[setup,test]} \page % % \startbuffer[setup] % \setuplinenumbering % [width=2em, % align=middle] % \stopbuffer % % {\typebuffer[setup] \getbuffer[setup,test]} \page % % \startbuffer[setup] % \setuplinenumbering % [conversion=romannumerals, % start=1, % step=1, % location=text, % style=slanted, % color=blue, % width=1.5em] % \stopbuffer % % {\typebuffer[setup] \startnarrower\getbuffer[setup,test]\stopnarrower} \page % % \startbuffer[setup] % \setuplinenumbering % [width=4em, % left=--, % right=--, % align=middle] % \stopbuffer % % {\typebuffer[setup] \getbuffer[setup,test]} \page % % \startbuffer[setup-1] % \setuplinenumbering % [style=\bfxx, % command=\WatchThis] % \stopbuffer % % \startbuffer[setup-2] % \def\WatchThis#1% % {\ifodd\linenumber % \definecolor[linecolor][red]% % \else % \definecolor[linecolor][green]% % \fi % \inframed % [offset=1pt,frame=off,background=color,backgroundcolor=linecolor] % {#1}} % \stopbuffer % % {\typebuffer[setup-1,setup-2] \getbuffer[setup-1,setup-2,test]} \page % % \startbuffer[setup-1] % \setuplinenumbering % [location=inright, % style=\bfxx, % command=\WatchThis] % \stopbuffer % % {\typebuffer[setup-1] \getbuffer[setup-1,setup-2,test]} \page \def\OTRSETgotocell#1#2% not that robust {\endgraf \gdef\gotocellcounter{0}% \doloop {\ifnum\mofcolumns<#1\relax \doglobal\increment\gotocellcounter\relax \ifnum\gotocellcounter>#1\relax \line{\strut}\crlf \line{\strut}\crlf \kolom % \column \writestatus{columnset}{quitting goto cell}% \exitloop \else \kolom % \column \fi \else \exitloop \fi}% \ifnum\mofcolumns=#1\relax \ifnum#2>1 \scratchcounter=0 \currenthcell\mofcolumns \currentvcell#2\advance\currentvcell -1 \dorecurse\currentvcell {\OTRSETdoifcellelse\mofcolumns\recurselevel\donothing {\advance\scratchcounter1\relax}} \getnoflines\pagetotal \advance\scratchcounter-\noflines \ifnum\scratchcounter>0 \dorecurse\scratchcounter{\line{\strut}}% \fi \fi \fi \OTRSETsetvsize} \def\setlocalfloatdimensions#1#2% experimental ! ! ! ! {\doifvaluesomething{\??fl#1\c!maxbreedte} {\scratchdimen=\getvalue{\??fl#1\c!maxbreedte}\relax \ifdim\wd\nextbox>\scratchdimen \setbox\nextbox=\hbox to \scratchdimen {\doifcommonelse{\v!rechts,\v!inrechter,\v!links,\v!inlinker}{#2} {\doifnotcommon{\v!rechts,\v!inrechter}{#2}\hss \box\nextbox \doifnotcommon{\v!links ,\v!inlinker }{#2}\hss}% {\doifvalue{\??fl#1\c!plaats}\v!rechts\hss \box\nextbox \doifvalue{\??fl#1\c!plaats}\v!links \hss}}% \fi}} \def\phantombox[#1]% {\hbox\bgroup \getparameters [\??ol] [\c!breedte=\zeropoint,\c!hoogte=\zeropoint,\c!diepte=\zeropoint,#1]% \setbox\scratchbox\null \wd\scratchbox\@@olbreedte \ht\scratchbox\@@olhoogte \dp\scratchbox\@@oldiepte \box\scratchbox \egroup} \long\@EA\def\csname\e!start\e!instellingen\endcsname#1 % {\bgroup \catcode`\^^M=\@@ignore \xdostartsetups{#1}} \expanded {\long\noexpand\def\noexpand\xdostartsetups##1##2\csname\e!stop\e!instellingen\endcsname% {\egroup \long\noexpand\setvalue{\??su##1}{##2}}} \def\startsetups#1 % for international purposes {\bgroup \catcode`\^^M=\@@ignore \dostartsetups{#1}} \long\def\dostartsetups#1#2\stopsetups {\egroup \long\setvalue{\??su#1}{#2}} \def\definefont {\dotripleempty\dodefinefont} \def\dodefinefont[#1][#2][#3]% [name][spec][1.6 | line=10pt | setup_id] {\doifinstringelse{ }{#2} {\ifthirdargument \unexpanded\setvalue{#1}{\redodefinefont{#1}{#2}{#3}}% \else \unexpanded\setvalue{#1}{\dododefinefont{#1}{#2}}% \fi} {\definefont[#1][#2 sa 1][#3]}} \def\redodefinefont#1#2#3% {\dododefinefont{#1}{#2}% \doifnumberelse{#3} {\stelinterliniein[#3]\stelspatieringin} {\doifassignmentelse{#3} {\stelinterliniein[#3]\stelspatieringin} {\setups[#3]}}} % \def\defineclassfont % {\doquadrupleempty\dodefineclassfont} % % \def\dodefineclassfont[#1][#2][#3][#4]% #2 = class % {\iffourthargument % \definefont[#1][#2#3][#4]% % %\else\ifthirdargument % % \definefont[#1][#2#3]% % \else % \definefont[#1][#2]% % \fi} % todo, but now more easy to do:\definepage \def\docomplexpagina[#1]% {\flushnotes \bgroup \def\dodocomplexpagina##1% {\csname @@\v!pagina\ifundefined{@@\v!pagina##1}\s!unknown\else##1\fi \endcsname}% \processcommalist[#1]\dodocomplexpagina \egroup} \def\installpagehandler#1#2% {\setvalue{@@\v!pagina#1}{#2}} \installpagehandler \s!unknown {\let\@@pagespecification\commalistelement \doifinstringelse{+}\@@pagespecification {\ejectinsert\ejectpage \dorecurse\@@pagespecification\ejectdummypage} {\doifnumberelse\@@pagespecification {\ejectinsert\ejectpage \doloop {\ifnum\userpageno<\@@pagespecification\relax \ejectdummypage \else \exitloop \fi}} {}}} \installpagehandler \s!default {} % do nothing if empty \installpagehandler \v!reset {\global\paginageblokkeerdfalse} \installpagehandler \v!blokkeer {\global\paginageblokkeerdtrue} \installpagehandler \v!ja {\ifpaginageblokkeerd\else \ejectinsert \ejectpage \ifbinnenkolommen \ejectpage % anders soms geen overgang \fi \fi} \installpagehandler \v!opmaak {\ifpaginageblokkeerd\else \eject \fi} \installpagehandler \v!blanko {\pagebodyornamentsfalse} \installpagehandler \v!nee {\ifpaginageblokkeerd\else \dosomebreak\nobreak \fi} \installpagehandler \v!voorkeur {\ifpaginageblokkeerd\else \ifbinnenkolommen \dosomebreak\goodbreak \else \testpagina[3][\!!zeropoint]% \fi \fi} \installpagehandler \v!grotevoorkeur {\ifpaginageblokkeerd\else \ifbinnenkolommen \dosomebreak\goodbreak \else \testpagina[5][\!!zeropoint]% \fi \fi} \installpagehandler \v!leeg {\ejectinsert \ejectpage \doifnotvalue{\??tk\v!hoofd\c!status}{\v!stop} {\setupheader[\c!status=\v!leeg]}% \doifnotvalue{\??tk\v!voet\c!status}{\v!stop} {\setupfooter[\c!status=\v!leeg]}% \ejectdummypage} \installpagehandler \v!links {\ejectinsert \superejectpage \doifbothsidesoverruled \orsideone \resetcurrentsectionmarks \ejectdummypage \orsidetwo \od} \installpagehandler \v!rechts {\ejectinsert \superejectpage \doifbothsidesoverruled \orsideone \orsidetwo \resetcurrentsectionmarks \ejectdummypage \od} \installpagehandler \v!even {\pagina \doifonevenpaginaelse {\resetcurrentsectionmarks\ejectdummypage}{}} \installpagehandler \v!oneven {\pagina \doifonevenpaginaelse {}{\resetcurrentsectionmarks\ejectdummypage}} \installpagehandler \v!viertal {\ifdubbelzijdig \!!counta=\realpageno \!!countb=\realpageno \divide\!!counta 4 \divide\!!countb 2 \ifnum\!!counta=\!!countb \else \pagina \pagina[\v!leeg]% \pagina[\v!leeg]% \fi \fi} \installpagehandler \v!laatste {\ejectinsert \superejectpage\relax \doifbothsidesoverruled \naastpagina \orsideone \orsidetwo %\ifodd\realpageno \else % kan weer weg \noheaderandfooterlines \ejectdummypage %\fi \od \filluparrangedpages} \beginETEX \dimexpr \definepapersize [oversized] [\c!breedte=\dimexpr(\papierbreedte+1.5cm), \c!hoogte=\dimexpr(\papierhoogte+1.5cm)] \definepapersize [doublesized] [\c!breedte=\dimexpr(\papierbreedte), \c!hoogte=\dimexpr(2\papierhoogte)] \definepapersize [doubleoversized] [\c!breedte=\dimexpr(\papierhoogte+1.5cm), \c!hoogte=\dimexpr(2\papierbreedte+1.5cm)] \endETEX \newtoks\everyfirstparagraphintro \newtoks\everynextparagraphintro \chardef\everyparagraphintro=0 \def\setupparagraphintro {\dodoubleempty\dosetupparagraphintro} \def\dosetupparagraphintro[#1][#2]% {\processallactionsinset [#1] [ \v!reset=>\global\chardef\everyparagraphintro=0 \global\everyfirstparagraphintro\emptytoks \global\everynextparagraphintro \emptytoks, \v!eerste=>\global\chardef\everyparagraphintro=1 \doglobal\appendtoks#2\to\everyfirstparagraphintro, \v!volgende=>\ifcase\everyparagraphintro\global\chardef\everyparagraphintro=2\fi \doglobal\appendtoks#2\to\everynextparagraphintro, \v!elk=>\ifcase\everyparagraphintro\global\chardef\everyparagraphintro=2\fi \doglobal\appendtoks#2\to\everyfirstparagraphintro \doglobal\appendtoks#2\to\everynextparagraphintro]} \def\doinsertparagraphintro {\ifcase\everyparagraphintro\relax % no data \or % first data \global\chardef\everyparagraphintro=2 \scratchtoks\everyfirstparagraphintro \global\everyfirstparagraphintro\emptytoks \or % next data \scratchtoks\everynextparagraphintro \fi \the\scratchtoks} \def\insertparagraphintro {\ifcase\everyparagraphintro\else\@EA\doinsertparagraphintro\fi} \appendtoks\insertparagraphintro\to\everypar %D \starttypen %D \setupparagraphintro[first][\hbox to 3.5em{\tt FIRST \hss}] %D \setupparagraphintro[first][\hbox to 3.5em{\tt TSRIF \hss}] %D \setupparagraphintro[next] [\hbox to 3.5em{\tt NEXT \hss}] %D \setupparagraphintro[next] [\hbox to 3.5em{\tt TXEN \hss}] %D \setupparagraphintro[each] [\hbox to 3.0em{\tt EACH \hss}] %D \setupparagraphintro[each] [\hbox to 3.0em{\tt HCEA \hss}] %D %D some paragraph \par %D some paragraph \par %D some paragraph \par %D %D \definelabel[parnumber] %D %D \setupparagraphintro[reset,each][\inleft{\slxx\parnumber}] %D %D some paragraph \par %D some paragraph \par %D some paragraph \par %D \stoptypen \def\@@themaintextcolor{themaintextcolor} \def\starttextcolor[#1]% {\doifsomething{#1} {\bgroup \def\stoptextcolor % also goes ok with \page after {\let\maintextcolor\empty % this one because the top of \stopregistercolor % page sets the color right (side \egroup}% % effect) \def\starttextcolor[##1]% {\bgroup \definecolor[\@@themaintextcolor][##1]% \let\stoptextcolor\egroup}% \startregistercolor[\@@themaintextcolor]% \definecolor[\@@themaintextcolor][#1]% \let\maintextcolor\@@themaintextcolor}} \def\initializemaintextcolor {\doifelsenothing\@@cltekstkleur {\let\maintextcolor\empty} {\let\maintextcolor\@@themaintextcolor \definecolor[\@@themaintextcolor][\@@cltekstkleur]% \doinitializemaintextcolor}} \def\doinitializemaintextcolor {\appendtoks\starttextcolor[\@@themaintextcolor]\to\everystarttext \appendtoks\stoptextcolor \to\everystoptext \let\doinitializemaintextcolor\relax} % wrong names \newif\ifpagechanged \let\lastchangedpage\empty \def\checkpagechange#1% {\gettwopassdata\s!paragraph \pagechangedfalse \iftwopassdatafound \ifnum\twopassdata>0\getvalue{\s!paragraph:p:#1}\relax \pagechangedtrue \fi \fi \ifpagechanged \global\letvalue{\s!paragraph:p:#1}\twopassdata \global\let\lastchangedpage\twopassdata \else \global\let\lastchangedpage\realfolio \fi \doparagraphreference} \def\changedpage#1% {\getvalue{\s!paragraph:p:#1}} \def\startfixed{\dosingleempty\dostartfixed} \long\def\dostartfixed[#1]% {\expanded{\dowithnextbox{\noexpand\dodofixed{\ifhmode0\else1\fi}{#1}}}% \vbox\bgroup \setlocalhsize} \def\stopfixed% {\egroup} \def\dodofixed#1#2% {\ifcase#1\relax \processaction [#2] [ \v!hoog=>\bbox{\box\nextbox}, \v!laag=>\tbox{\box\nextbox}, \v!midden=>\vcenter{\box\nextbox}, \v!laho=>\vcenter{\box\nextbox}, \s!unknown=>\tbox{\box\nextbox}, \s!default=>\tbox{\box\nextbox}]% \else \startbaselinecorrection \noindent\box\nextbox \stopbaselinecorrection \fi} % \startitemize % % \item \externalfigure[koe][height=2cm] % \item \externalfigure[koe][height=2cm] % \item \externalfigure[koe][height=2cm] % \item \externalfigure[koe][height=2cm] % % \page % % \item \startfixed \externalfigure[koe][height=2cm]\stopfixed % \item \startfixed[high]\externalfigure[koe][height=2cm]\stopfixed % \item \startfixed[low] \externalfigure[koe][height=2cm]\stopfixed % \item \startfixed[lohi]\externalfigure[koe][height=2cm]\stopfixed % % \page % % \item test \startfixed \externalfigure[koe][height=2cm]\stopfixed % \item test \startfixed[high]\externalfigure[koe][height=2cm]\stopfixed % \item test \startfixed[low] \externalfigure[koe][height=2cm]\stopfixed % \item test \startfixed[lohi]\externalfigure[koe][height=2cm]\stopfixed % % \page % % \item test \par \startfixed \externalfigure[koe][height=2cm]\stopfixed % \item test \par \startfixed[high]\externalfigure[koe][height=2cm]\stopfixed % \item test \par \startfixed[low] \externalfigure[koe][height=2cm]\stopfixed % \item test \par \startfixed[lohi]\externalfigure[koe][height=2cm]\stopfixed % % \stopitemize % \def\docalculatefigurenorm#1#2% % {\dodocalculatefigurenorm{#1}[#2\empty\empty]} % % \def\dodocalculatefigurenorm#1[#2#3#4]#5#6#7% % {\ExpandFirstAfter\processaction % [#2#3#4] % [ \v!max=>\global#1=#6\relax, % \v!kolom=>\global#1=#6\relax, % \v!tekst=>\global#1=#6\relax, % \v!passend=>\global#1=#7\relax, % \v!ruim=>\global#1=#7\relax % \global\advance #1 -4\@@exkorps\relax, % #2*\v!kolom=>\global#1=#6\relax % \ifbinnenkolommen % \global\advance#1 \intercolumnwidth % \global\multiply#1 #2\relax % \global\advance#1 -\intercolumnwidth % \fi, % #2*\v!tekst=>\global#1=\zetbreedte % \global\advance#1 \papierbreedte, % \s!default=>\doifsomething{#5}{\global#1=#5\relax}, % \s!unknown=>\global#1=\@@exkorps\relax % \global\divide#1 \!!ten\relax % \global\multiply#1 #2#3#4\relax]} \def\complexTableTB[#1]{\TABLEnoalign{\blanko[#1]}} \def\simpleTableTB {\TABLEnoalign{\blanko}} \def\TabulateTB {\complexorsimpleTable{TB}} \def\doTableinterline% #1 {\ifnum\currentTABLEcolumn>\maxTABLEcolumn \chuckTABLEautorow \else\ifnum\currentTABLEcolumn=0 \TABLEnoalign {\global\let\checkTABLEautorow\empty \global\let\chuckTABLEautorow\empty}% \else \setTABLEerror\TABLEmissingcolumn \handleTABLEerror \fi\fi \complexorsimpleTable} % {#1} \def\TableHL{\doTableinterline{HL}} \def\TableTB{\doTableinterline{TB}} \appendtoks\let\TB\TableTB \to\everytable \appendtoks\let\TB\TabulateTB\to\everytabulate % \starttabulate % \NC text \NC text \NC \NR % \TB[small] % \NC text \NC text \NC \NR % \TB[4*big] % \NC text \NC text \NC \NR % \stoptabulate % % \starttable[|||] % \VL text \VL text \VL \AR % \TB[small] % \VL text \VL text \VL \AR % \TB[4*big] % \VL text \VL text \VL \AR % \stoptable % still needed for uguide \let\placefloatlabel \placefloatcaption \let\placefloatlabeltext \placefloatcaptiontext \let\placefloatlabelreference \placefloatcaptionreference \def\checkframedtext% {\ifinsidefloat \localhsize\hsize \else\ifdim\sidefloatvsize>\zeropoint % will be proper handle % \strut % rather clean way to invoke the sidefloat OTR % \setbox0=\lastbox % and get the widths set, so from now on we % \setlocalhsize % can have framed texts alongside sidefloats \checksidefloat \setlocalhsize \advance\localhsize-\hangindent \else \localhsize\hsize \fi \fi} \def\obeyfollowingtoken{{}} % end \cs scanning \def\gobbleparameters{\doquadrupleempty\dogobbleparameters} \def\dogobbleparameters[#1][#2][#3][#4]{} \def\setvariables% {\dodoubleargument\dosetvariables} \def\dosetvariables[#1][#2]% {\def\currentvariableclass{#1}% \getparameters[vars:#1:][#2]} % \def\getvariable#1#2% % {\ifundefined{vars:#1:#2}\else\getvalue{vars:#1:#2}\fi} \def\getvariable#1#2% to be sped up {\csname\ifundefined{vars:#1:#2}empty\else vars:#1:#2\fi\endcsname} \let\currentvariableclass\empty % Let's see how fast Mr Bigfoot aka GB tracks down this new % feature -) \def\defineTABLEdivisions {\global\TABLEdivisionfalse % in start \let\DL\TableDL \let\DC\TableDC \let\DV\TableDV \let\DR\TableDR} \def\defineTABLErules {\let\VL\TableVL \let\VC\TableVC \let\HL\TableHL \let\HC\TableHC \let\VS\TableVS \let\VD\TableVD \let\VT\TableVT} \def\TableVS{\gdef\@VLn{1}\VL} \def\TableVD{\gdef\@VLn{2}\VL} \def\TableVT{\gdef\@VLn{3}\VL} \def\@VLn{1} \def\@VLd{.125em} \def\do!ttInsertVrule % will be merged in 2005 {\vrule \!thWidth \ifnum\!tgCode=1 \ifx\!tgValue\empty \LineThicknessFactor \else \!tgValue \fi \LineThicknessUnit \else \!tgValue \fi \hskip\@VLd} \def\!ttInsertVrule% {\hfil \TABLEbeforebar % added \startglobalTABLEcolor % added % we could do without this speedup, some day merge 'm \ifcase\@VLn\or \do!ttInsertVrule \unskip \else \dorecurse\@VLn\do!ttInsertVrule \gdef\@VLn{1}% \unskip \fi \stopglobalTABLEcolor % added \TABLEafterbar % added \hfil &} % \starttable[|||] % \HL % \VL test \VS test \VL \FR % \VL test \VD test \VL \MR % \VL test \VT test \VL \LR % \HL % \stoptable %D To be documented, \type {\includemenu[menu]}. %D To be documented, \type {\emphbf} cum suis. %D A prelude to strategies. Note for myself: overloads %D previous stuff from local pragma test files. \def\s!strategy{strategy} \def\currentstrategypass {1} \def\currentstrategyvariable{0} \def\maximumstrategypass {8} \newconditional\strategypassneeded \newconditional\strategypassforced \definetwopasslist{\s!strategy} \def\registerstrategypass% {\ifnum\currentstrategypass>\maximumstrategypass \else \ifconditional\strategypassforced \doglobal\increment\currentstrategypass \else%\ifconditional\strategypassneeded %\doglobal\increment\currentstrategypass \fi%\fi \fi \savecurrentvalue\currentstrategypass{\currentstrategypass}} \appendtoks \registerstrategypass \to \everybye % \everylastshipout \def\setstrategyvariable#1#2% key value {%\doifnotstrategyvariable{#1}{\global\settrue\strategypassneeded}% \doglobal\increment\currentstrategyvariable \expanded{\immediatewriteutilitycommand{\noexpand \twopassentry{\s!strategy}{\currentstrategyvariable}{#1::#2}}}} \def\doifstrategyvariableelse#1#2#3% {\getstrategyvariable{#1}\iftwopassdatafound#2\else#3\fi} \def\getstrategyvariable#1% key {\findtwopassdata{\s!strategy}{#1::}% \setxvalue{\s!strategy:#1}{\twopassdata}} \def\retainstrategyvariable#1% key {\expanded{\setstrategyvariable{#1}{\strategyvariable{#1}}}} \def\strategyvariable#1% key {\csname\s!strategy:#1\endcsname} \let\stratvar\strategyvariable \def\forcestrategy{\global\settrue \strategypassforced} \def\abortstrategy{\global\setfalse\strategypassforced} \def\doifstrategyvariableelse#1#2#3% {\getstrategyvariable{#1}\iftwopassdatafound#2\else#3\fi} \def\doifstrategyvariable #1#2{\doifstrategyvariableelse{#1}{#2}{}} \def\doifnotstrategyvariable#1#2{\doifstrategyvariableelse{#1}{}{#2}} %D New: only at start of columns; may change ! Rather %D interwoven and therefore to be integrated when the multi %D column modules are merged. % already taken care of: \definesystemvariable{ks} % is buggy now and does not work any longer \def\setupcolumnspan[#1]% {\getparameters[\??ks][#1]} \presetlocalframed [\??ks] \setupcolumnspan [\c!n=2, \c!offset=\v!overlay, \c!kader=\v!uit] \newbox\columnspanbox \let\postprocesscolumnspanbox\gobbleoneargument \def\dostartcolumnspan[#1]% {\bgroup \setupcolumnspan[#1]% \forgetall \ifbinnenkolommen \advance\hsize by \intercolumnwidth \hsize=\@@ksn\hsize \advance\hsize by -\intercolumnwidth \fi \dowithnextbox {\setbox\columnspanbox=\box\nextbox \ifbinnenkolommen\wd\columnspanbox=\hsize\fi \postprocesscolumnspanbox\columnspanbox \scratchdimen=\ht\columnspanbox \setbox\columnspanbox=\hbox % depth to be checked, probably option! {\localframed[\??ks][\c!offset=\v!overlay]{\box\columnspanbox}}% \ht\columnspanbox=\scratchdimen \dp\columnspanbox=\dp\strutbox \wd\columnspanbox=\hsize \ifbinnenkolommen \ifnum\@@ksn>1 \setvsize \dohandleallcolumns {\ifnum\currentcolumn>\@@ksn\else \global\setbox\currenttopcolumnbox=\vbox {\ifnum\currentcolumn=1 \snaptogrid\vbox{\copy\columnspanbox} \else \snaptogrid\vbox{\vphantom{\copy\columnspanbox}} \fi}% \wd\currenttopcolumnbox=\hsize \global\advance\vsize by -\ht\currenttopcolumnbox \fi} \global\pagegoal=\vsize \else \snaptogrid\vbox{\box\columnspanbox} \fi \else \snaptogrid\vbox{\box\columnspanbox} \fi \endgraf \prevdepth\dp\strutbox \egroup} \vbox\bgroup %\topskipcorrection % becomes an option ! \EveryPar{\begstrut\EveryPar{}}} % also ! \def\startcolumnspan% {\dosingleempty\dostartcolumnspan} \def\stopcolumnspan% {\egroup} %D For Ton. To be documented. \def\plaatsexterndocument[#1]% {\def\doexternaldocument[##1][##2][##3]% {\readlocfile{##2}{}{}}% \getvalue{\v!file:::#1}} %D Far from complete. \def\startgeheel% {\startregelcorrectie \insidefloattrue} \def\stopgeheel {\stopregelcorrectie} %D No more news. \protect %D A few local optimizations and new features, if defined: \readfile {cont-loc} {} {} \endinput