%D \module
%D   [       file=main-001,
%D        version=1997.03.31,
%D          title=\CONTEXT\ Core Macros,
%D       subtitle=1A (to be split),
%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.

%D This module is still to be split and documented. 

% nog oplossen: voetnoot setten ivm later veranderde
% witruimte; probleem: als lijn graphic

% The %I etc thing will be replaced by documentation. Some
% years ago they served as helpinfo blocks for our editor.

\writestatus{loading}{Context Core Macros (1)}

\newevery \everybodyfont \Everybodyfont % just to be sure

\appendtoks \presetnormallineheight \to \everybodyfont
\appendtoks \setnormalbaselines     \to \everybodyfont
\appendtoks \setstrut               \to \everybodyfont
\appendtoks \settopskip             \to \everybodyfont
\appendtoks \setmaxdepth            \to \everybodyfont
\appendtoks \stelinspringenin       \to \everybodyfont
\appendtoks \stelblankoin           \to \everybodyfont
\appendtoks \stelwitruimtein        \to \everybodyfont
%\appendtoks\setupfootnotes         \to \everybodyfont
\appendtoks \stelspatieringin       \to \everybodyfont % nieuw
\appendtoks \setdisplayskips        \to \everybodyfont % nieuw

% \appendtoks .. \to \everypar
% \appendtoks .. \to \everypar
% \appendtoks .. \to \everypar

% kan elders ook worden gebruikt i.i.g ongeveer
% \v!tekst EN \c!tekst etc checken

\unprotect

\def\gobbleassigndimen#1\\{}

\def\assigndimen#1#2%
  {\afterassignment\gobbleassigndimen#1=#2\!!zeropoint\\}

\protect


\unprotect

\startmessages  dutch  library: systems
  title: systeem
      1: laden hulpfile uitgesteld (typemode)
      2: -- geladen
      3: probeer LaTeX eens
      4: commando -- is al gedefinieerd
      5: macro's uit module -- geladen
      6: geen macro's in module -- gevonden
      7: macro's uit module -- reeds geladen
      8: nieuwe versie hulpfile, tweede run nodig
      9: -- niet gevonden/geplaatst
     10: gebruik geen em in --
     11: aanmaken basale hulpfile
     12: de hulpfile is niet gesorteerd, gebruik texutil
     13: markering -- gedefinieerd --
     14: geforceerde paginaovergang in lijst voor --
     15: wegschrijven buffer --
     16: inlezen buffer --
     17: verbatim inlezen buffer --
     18: synoniem -- -- bestaat niet
     19: betekenissen (synoniemen) van -- geladen
     20: betekenissen (sorteren) van -- geladen
     21: de hulpfile is niet geladen
     22: gebruik een goede hulpfile
     23: -- gearrangeerd op --
     24: Plaatsblokken
     25: Verwijzingen
     26: Registers
     27: Versie
\stopmessages

\startmessages  english  library: systems
  title: system
      1: loading utility-file postponed (typemode)
      2: -- loaded
      3: try LaTeX
      4: command -- is already defined
      5: macros of module -- loaded
      6: no macros found in module --
      7: macros of module -- already loaded
      8: new version of utility file, second pass needed
      9: -- not found/processed
     10: don't use em in --
     11: building simple util
     12: the utility-file is not sorted, use texutil
     13: mark -- defined --
     14: forced newpage in list at --
     15: saving buffer --
     16: typesetting buffer --
     17: typesetting verbatim buffer --
     18: synonym -- -- does not exist
     19: meaning (synonyms) of -- loaded
     20: meaning (sorts) of -- loaded
     21: no utility data is loaded
     22: use a valid utilityfile
     23: -- arranged at --
     24: Floatblocks
     25: References
     26: Registers
     27: Version
\stopmessages

\startmessages  german  library: systems
  title: system
      1: Laden der Hilfsdatei verschoben (tippenmodus)
      2: -- geladen
      3: Versuche LaTeX
      4: Befehl -- ist bereits definiert
      5: Makros aus Modul -- geladen
      6: Keine Makros in Modul -- gefunden
      7: Makros aus Modul -- bereits geladen
      8: Neue Version der Hilfsdatei, zweiter Durchlauf benoetigt
      9: -- nicht gefunden/verarbeitet
     10: Benutzte kein em in --
     11: Erstelle einfache Hilfdatei
     12: Die Hilfdatei ist nicht sortiert, verwende texutil
     13: Beschriftung -- definiert --
     14: Erzwungendes Seitenumbruch in Liste bei --
     15: Speichere Buffer --
     16: Setzte Buffer --
     17: Setzte tippen-Buffer --
     18: Synonym -- -- existiert nicht
     19: Bedeutung (synonyme) von -- geladen
     20: Bedeutung (sortieren) von -- geladen
     21: Die Hilfsdatei ist nicht geladen
     22: Benoetige gueltige Hilfsdateie
     23: -- angeordnet auf --
     24: Fliessbloecke
     25: Referenzen
     26: Register
     27: Version
\stopmessages

\startmessages  czech  library: systems
  title: system
      1: nacteni pomocneho souboru odlozeno (typemode)
      2: -- nacteno
      3: zkuste LaTeX
      4: prikaz -- je jiz definovan
      5: makra z -- nactena
      6: zadna makra v -- nenalezena
      7: makra z -- jsou jiz nactena
      8: nova verze pomocneho souboru, je treba druheho behu
      9: -- nenalezeno/nezpracovano
     10: nepouzivejte em v --
     11: vytvarim jednoduchy pomocny soubor
     12: pomosny soubor neni setriden, pouzijte texutil
     13: znacka -- definovana --
     14: vynucena nova stranka v seznamu na --
     15: uklada se buffer --
     16: sazi se buffer --
     17: sazi se doslovny (verbatim) buffer --
     18: synonymum -- -- neexistuje
     19: vyznam (synonyma) -- nacten
     20: vyznam (trideni) -- nacten
     21: pomocny soubor necten
     22: pouzijte platny pomocny soubor
     23: -- upraveno na --
     24: plovouci bloky
     25: reference
     26: registry
     27: verze
\stopmessages

\startmessages  dutch  library: floatblocks
  title: plaatsblokken
      1: -- hernummerd / -- => --
      2: -- bewaard
      3: -- verplaatst
      4: -- geplaatst
      5: volgorde aangepast
      6: maximaal -- boven
      7: maximaal -- onder
      8: minder dan -- regels
      9: volgorde verstoord
     10: -- begrensd
     11: geen blok opgegeven
     12: niet gedefinieerd
\stopmessages

\startmessages  english  library: floatblocks
 title: floatblocks
      1: -- renumbered / -- => --
      2: -- saved
      3: -- moved
      4: -- placed
      5: order adapted
      6: n of top floats limited to --
      7: n of bottom floats limited to --
      8: less than -- lines
      9: order disturbed
     10: -- limited
     11: no block given
     12: undefined
\stopmessages

\startmessages  german  library: floatblocks
 title: Gleitobjektbloecke
      1: -- neu nummeriert / -- => --
      2: -- gespeichert
      3: -- verschoben
      4: -- plaziert
      5: Reihenfolge angepasst
      6: Anz. der oberen Gleitobjekte beschraengt auf --
      7: Anz. der unteren Gleitobjekte beschraengt auf  --
      8: weniger als -- zeilen
      9: Reigenfolge gestoert
     10: -- begrenzt
     11: kein Block gegeben
     12: undefiniert
\stopmessages

\startmessages  czech  library: floatblocks
 title: plovouciobjekty
      1: -- precislovano / -- => --
      2: -- ulozeno
      3: -- presunuto
      4: -- umisteno
      5: poradi prizpusobeno
      6: pocet hornich plovoucich objektu je omezen na --
      7: pocet spodnich plovoucich objektu je omezen na --
      8: radku je mene nez --
      9: poradi naruseno
     10: -- omezeno
     11: nedan zadny blok
     12: nedefinovano
\stopmessages

\startmessages  dutch  library: layouts
  title: layout
      1: teksthoogte aangepast met -- op pagina --
      2: -- maal uitgestelde tekst tussengevoegd
      3: -- maal tekst plaatsen uitstellen
      4: margeblokken actief
      5: margeblokken inactief
      6: subpagina reeks -- verwerkt (aantal --)
      7: beeldmerken berekenen
      8: achtergronden berekenen
     10: -- en -- tellen niet op tot 1.0
     11: interlinie -- niet toegestaan in gridmode
\stopmessages

\startmessages  english  library: layouts
  title: layout
      1: textheight adapted with -- at page --
      2: -- times postponed text placed
      3: -- times text postponed
      4: marginblocks active
      5: marginblocks inactive
      6: subpage set -- processed (size --)
      7: calculating logospace
      8: calculating backgrounds
     10: -- and -- don't add up to 1.0
     11: spacing -- not permitted in gridmode
\stopmessages

\startmessages  german  library: layouts
  title: Layout
      1: Texthoehe angepasst mit -- auf Seite --
      2: -- mal verschobener Text plaziert
      3: -- mal Text verschoben
      4: marginalbloecke aktiv
      5: marginalbloecke inaktiv
      6: Unterseitenfolge -- verarbeitet (Groesse --)
      7: berechne Platz des Logo
      8: berechne Hintergrund
     10: -- und -- ergeben zusammen nicht 1.0
     11: Zwischenraum -- nicht im Grittermoduserlau
\stopmessages

\startmessages  czech  library: layouts
  title: layout
      1: vyska textu prizpusobena s -- na strane --
      2: -- krat odlozeny text umisten
      3: -- krat text odlozen
      4: okrajove bloky aktivni
      5: okrajove bloky neaktivni
      6: sada stran -- zpracovana (velikost --)
      7: pocita se misto pro logo
      8: pocita se pozadi
     10: -- a -- nedava dohromady 1.0
     11: svisla mezera -- neni povolena v pevnem radkovem rejstriku
\stopmessages

% \CONTEXTtrue % Now we know that we can use ConTeXt commands.

% \def\teststatus{stop}
%
% \def\doiftrue  {\iftrue}
% \def\doiffalse {\iffalse}
%
% \def\setstatus#1#2%
%   {\doifelse{\getvalue{#1\c!status}}{\v!start}
%      {\let#2=\doiftrue}
%      {\let#2=\doiffalse}}
%
% \setstatus{test}\iftest
%
% \iftest
%   \message{JA}
% \else
%   \message{NEE}
% \fi

\def\convertexpanded#1#2#3% watch the double \v!ja expansion ! 
  {\ExpandFirstAfter\processaction
     [\getvalue{#1\c!expansie}]
     [       \v!ja=>{{\honorunexpanded\xdef\@@globalexpanded{#2}%
                      \xdef\@@globalexpanded{\@@globalexpanded}}%
                     \dodoglobal\convertcommand\@@globalexpanded\to#3},
       \v!commando=>{\dodoglobal\convertcommand #2\to#3},
        \s!default=>{\dodoglobal\convertargument#2\to#3},
        \s!unknown=>{\dodoglobal\convertargument#2\to#3}]}

% om problemen te voorkomen:
%
% \ascii   => \@@ascii@@
% \asciiA  => \@@ascii@@A
% \asciiB  => \@@ascii@@B

% Nodig i.v.m. inspringen eerste alineas

\def\explicithmode%
  {\unhbox\voidb@x}

% Nodig voor gebruikers

\def\geentest{\donottest}

% Dit moet nog ergens een plaats krijgen:

\def\stelfactorenin%
  {\stelwitruimtein
   \stelblankoin
   \settopskip
   \setmaxdepth}

% Nog doen:
%
%  \goodbreak -> \allowbreak en \dosomebreak{..} in koppen
%
% bij koppen zowieso: \blanko[reset]

% Nog in commando verwerken:
%
% \voorkeur … la \blanko
%
% Om ongewenste witruimte te voorkomen kan met \dosomebreak{\break}
% een \penalty v¢¢r witruimte worden geplaatst.

\def\dosomebreak#1%
  {\skip0=\lastskip
   \removelastskip
   %\type{#1}%
   #1\relax
   \ifdim\skip0=\!!zeropoint
   \else
     \vskip\skip0
   \fi}

% beter, vooral in \vbox; nog in \pagina toepassen s!

\def\doifoutervmode#1%
  {\ifvmode\ifinner\else#1\fi\fi}

\def\dosomebreak#1%
  {\doifoutervmode
     {\skip0=\lastskip
      \removelastskip
      %\leavevmode\type{#1}%
      #1\relax
      \ifdim\skip0=\!!zeropoint % else interference with footnotes
      \else
        \vskip\skip0
      \fi}}

% Idem:
%
% \springin

%\def\noindentation% vervallen
%   {\EveryPar
%     {\ifdim\parindent=\!!zeropoint
%      \else
%        \bgroup
%        \setbox0=\lastbox
%        \egroup
%      \fi
%      \EveryPar{}}}

\newif\ifindentation \indentationtrue  % documenteren, naar buiten

\let\checkindentation=\relax

\def\donoindentation%
  {\ifdim\parindent=\!!zeropoint
   \else
     \bgroup
     \setbox0=\lastbox
     \egroup
   \fi}

\def\noindentation% made global
  {\ifinpagebody \else
     \global\indentationfalse
     \gdef\checkindentation%
       {\donoindentation
        \gdef\checkindentation{\global\indentationtrue}}%
   \fi}

\def\nonoindentation% bv bij floats
  {\ifinpagebody \else
     \global\indentationtrue
     \gdef\checkindentation{\global\indentationtrue}%
   \fi}

\def\indentation%
  {\ifvmode
     \ifdim\parindent=\!!zeropoint
     \else
       \hskip\parindent
     \fi
   \fi}

% vergeten

% \def\forgetall%
%   {\everypar{}%    % i.v.m. sidefloats
%    \let\par=\endgraf  % i.v.m. getpar etc
%    \stelwitruimtein[\v!geen]%
%    \stelinspringenin[\v!geen]%
%    \leftskip\!!zeropoint
%    \rightskip\!!zeropoint
%    \relax}
%
% \def\forgetparindent%
%   {\everypar{}%
%    \voorwit\!!zeropoint     % toegevoegd
%    \parindent\!!zeropoint}

\def\forgeteverypar%
  {\everypar{}}

\def\forgeteverypar%
  {\everypar{\the\neverypar}}

\def\forgetparindent%
  {\forgeteverypar
   \indentfirstparagraphtrue % recently added
   \stelinspringenin[\v!geen]}

\def\forgetparskip%
  {\stelwitruimtein[\v!geen]}

\def\forgetbothskips%
  {\tolerance=1500
   \leftskip\!!zeropoint
   \rightskip\!!zeropoint\relax}

\def\forgetspacing%
  {\emergencystretch\!!zeropoint\relax}

\def\forgetall%
  {\let\par=\endgraf  % i.v.m. getpar etc
   \notragged
   \forgetparskip
   \forgetparindent
   \forgetbothskips
   \forgetspacing     % i.v.m. funny spacing in pagebody
   \everypar{}}       % indeed!

\def\localvbox#1#%
  {\vbox#1\bgroup
     \forgetparskip
     \setlocalhsize
     \hsize=\localhsize
     \forgetparindent
     \forgetbothskips
     \forgeteverypar
     \let\next=}

% ach ja

\unexpanded\def\dostartattributes#1#2#3%
  {\begingroup  % geen \bgroup, anders in mathmode lege \hbox
   \doifdefinedelse{#1#2}
     {\def\fontattribute{\getvalue{#1#2}}}
     {\let\fontattribute=\empty}%
   \doifdefinedelse{#1#3}
     {\def\colorattribute{\getvalue{#1#3}}}
     {\let\colorattribute=\empty}%
   \startcolor[\colorattribute]%
   \@EA\doconvertfont\@EA{\fontattribute}}

\unexpanded\def\dostopattributes%
  {\stopcolor
   \endgroup}

\unexpanded\def\doattributes#1#2#3#4%
  {\dostartattributes{#1}{#2}{#3}{#4}\dostopattributes}

% kan vaker worden toegepast:

\newskip\leftskipadaption

\def\doadaptleftskip#1%
  {\leftskipadaption\!!zeropoint
   \processaction[#1] % \ExpandFirstAfter
     [\v!standaard=>\leftskipadaption=
                    \ifdim\voorwit=\!!zeropoint\@@sllinks\else\voorwit\fi,
             \v!ja=>\leftskipadaption=
                    \ifdim\voorwit=\!!zeropoint\@@sllinks\else\voorwit\fi,
            \v!nee=>,
        \s!unknown=>\leftskipadaption=#1]%
   \advance\leftskip by \leftskipadaption}

\def\herhaal            {\dorepeat}
\def\herhaler           {\repeater}
\def\herhaalmetcommando {\dorepeatwithcommand}

% This permits things like ^\index{hans}^, where hans is
% duplicated in the text.

\newif\ifduplicate

\bgroup
\gdef\checkduplication%   in line with Knuth
  {\ifmmode
     \def\next{^}%
   \else
     \let\next=\startduplication
   \fi
   \next}
\gdef\insideduplication%
  {\ifmmode
     \def\next{^}%
   \else
     \let\next=\egroup
   \fi
   \next}
\catcode`\^=\@@active
\gdef\enableduplication%
  {\catcode`\^=\@@active
   \let^=\checkduplication}
\gdef\disableduplication%
  {\catcode`\^=\@@superscript}
\gdef\startduplication%
  {\bgroup
   \duplicatetrue
   \let^=\insideduplication}
\egroup

\def\verbatim#1%
  {\convertargument#1\to\ascii\ascii}

% mogelijke optimalisaties:
%
% \ifx ...\else ...\fi
% \ifvisible ... \fi

% De opbouw van deze file
%
% Deze file bevat naast de verschillende Pragma-Macro's ook
% helpinformatie bij deze macro's en templates. Een blok
% helpinformatie wordt gekenmerkt door een %I.
%
% Een blok kan zijn opgedeeld in pagina's. In dat geval is
% %I vervangen door %P. De eerste regel van een blok bevat
% de titel van de informatie.
%
% Een template (voorgedefinieerde structuur) wordt gekenmerkt
% door %T. Ook hier bevat de eerste regel een titel,
% eventueel gevolgd door een mnemonic.
%
% Zowel de helpinformatie als de templates zijn in het
% programma TeXEdit oproepbaar.
%
% Het programma TeXEdit kan t.z.t. worden ingesteld met
% behulp van de onderstaande, door %S voorafgegane,
% setupcommando's. Vooralsnog is een en ander 'hard' in het
% programma geprogrammeerd.

%S InputFile     \input
%S InputFile     \omgeving    \environment
%S InputFile     \projekt     \project
%S InputFile     \produkt     \product
%S InputFile     \onderdeel   \component
%S
%S CheckStrings  \start  \stop
%S CheckStrings  \begin  \end
%S CheckStrings  \begin  \eind
%S
%S CheckChars    { }
%S CheckChars    [ ]
%S CheckChars    ( )
%S
%S CheckChar     $

% Het <pagina>-karakter (FormFeed), wordt omgezet in \par

\edef\oldlinefeed{\the\catcode`\^^L}

\catcode`\^^L=\oldlinefeed

\catcode`\^^L=\@@endofline

%I n=Struts
%I c=\strut,\setnostrut,\setstrut,\toonstruts,\pseudostrut
%I
%I Struts zijn onzichtbare 'karakters' met alleen een hoogte
%I en diepte. De volgende commando's hebben betrekking op
%I struts
%I
%I   \strut
%I   \setstrut
%I   \setnostrut
%I   \toonstruts

\def\toonstruts%
  {\setteststrut}

% Hieronder volgen enkele instellingen en macro's ten behoeve
% van de interlinie en \strut. De waarden 2.8, 0.07, 0.72 en
% 0.28 zijn ooit eens ontleend aan INRS-TEX en moeten wellicht
% nog eens instelbaar worden.
%
%   \lineheight        : de hoogte van een regel
%   \spacing{getal}    : instellen interlinie
%   \normalbaselines   : instellen regelafstend
%
%   \setstrut          : instellen \strut
%   \setnostrut        : resetten \strut, \endstrut, \begstrut
%
%   \setteststrut      : instellen zichtbare struts
%   \resetteststrut    : instellen onzichtbare struts
%
%   \setfontparameters : instellen na fontset
%
% De hoogte van een regel (\lineheight) is gelijk aan de
% som van de hoogte (\ht) en diepte (\dp) van \strutbox.
%
%   \strut            : denkbeeldig blokje met hoogte en diepte
%
% Een \hbox kan als deze aan het begin van een regel staat
% een breedte \hsize krijgen. Dit is soms te voorkomen met het
% commando \leavevmode. Binnen een \vbox geeft dit echter
% niet altijd het gewenste resultaat, vandaar het commando
%
%   \leaveoutervmode

% Pas op: niet zomaar \topskip en \baselineskip aanpassen
% en zeker niet \widowpenalty. Dit kan ernstige gevolgen
% hebben voor kolommen.
%
% Enige glue kan op zich geen kwaad, echter als blanko=vast,
% dan moet ook de rek 0 zijn. Binnen kolommen is rek ook
% niet bepaald mooi. Een hele kleine waarde (0.025) voldoet,
% omdat een positieve glue eindeloos rekbaar is.

\newdimen\strutdimen
\newdimen\lineheight
\newdimen\openlineheight
\newdimen\openstrutheight
\newdimen\openstrutdepth

\def\strutheightfactor      {.72}
\def\strutdepthfactor       {.28}

\def\baselinefactor         {2.8}
\def\baselinegluefactor     {0}

\def\normallineheight       {\baselinefactor ex}

\def\strutheight            {0pt}
\def\strutdepth             {0pt}
\def\strutwidth             {0pt}

\def\spacingfactor          {1}

\def\topskipfactor          {1.0}
\def\maxdepthfactor         {0.5}

\def\systemtopskipfactor    {\topskipfactor}
\def\systemmaxdepthfactor   {\maxdepthfactor}

% De onderstaande definitie wordt in de font-module overruled

\ifx\globalbodyfontsize\undefined
  \newdimen\globalbodyfontsize
  \globalbodyfontsize=12pt
\fi
\ifx\normalizedbodyfontsize\undefined
  \def\normalizedbodyfontsize{12pt}
\fi

% door een \dimen. Dit is geen probleem omdat (1) de default
% korpsgrootte 12pt is en (2) de fonts nog niet geladen zijn
% en de instellingen bij het laden nogmaals plaatsvinden.

\def\topskipcorrection%
  {\ifdim\topskip>\openstrutheight
     \vskip\topskip
     \vskip-\openstrutheight
   \fi
   \vbox{\strut}
   \vskip-\openlineheight}

\def\settopskip% the extra test is needed for the lbr family
  {\topskip=\systemtopskipfactor\globalbodyfontsize
   \ifgridsnapping \else
     \ifr@ggedbottom\!!plus5\globalbodyfontsize\fi
   \fi
   \relax % the skip
   \ifdim\topskip<\strutheightfactor\openlineheight
     \topskip=\strutheightfactor\openlineheight\relax
   \fi}

\def\setmaxdepth%
  {\maxdepth=\systemmaxdepthfactor\globalbodyfontsize}

\def\normalbaselines%
  {\baselineskip\normalbaselineskip
   \lineskip\normallineskip
   \lineskiplimit\normallineskiplimit}

\def\setnormalbaselines%
  {\lineheight=\normallineheight
   \openlineheight=\spacingfactor\lineheight
\openstrutheight=\strutheightfactor\openlineheight
\openstrutdepth =\strutdepthfactor \openlineheight
   \normalbaselineskip=
     \openlineheight
     \!!plus\baselinegluefactor\openlineheight
     \!!minus\baselinegluefactor\openlineheight
   \normallineskip\!!onepoint\relax
   \normallineskiplimit\!!zeropoint\relax
   \normalbaselines}

\def\setspacingfactor#1\to#2\by#3\\%
  {\strutdimen=#2pt\relax
   \strutdimen=#3\strutdimen
   \edef#1{\withoutpt{\the\strutdimen}}}

\def\spacing#1%
  {\ifgridsnapping
     \edef\spacingfactor{1}%
     \showmessage{\m!layouts}{11}{#1}%
   \else
     \edef\spacingfactor{#1}%
   \fi
   \setspacingfactor\systemtopskipfactor\to\topskipfactor\by#1\\%
   \setspacingfactor\systemmaxdepthfactor\to\maxdepthfactor\by#1\\%
   \setnormalbaselines
   \setstrut}

\def\setstrutdimen#1#2#3%              % een strut is n.m maal ex
  {\strutdimen=\normallineheight       % wat niet per se \lineheight
   \strutdimen=#2\strutdimen           % is omdat een strut lokaal
   \strutdimen=#3\strutdimen           % kan afwijken van de globale
   \edef#1{\the\strutdimen}}           % strut

\let\normalstrut=\strut

% The double \hbox construction enables us to \backtrack
% boxes.

\def\setstrut%
  {\setstrutdimen\strutheight\strutheightfactor\spacingfactor
   \setstrutdimen\strutdepth \strutdepthfactor \spacingfactor
   \let\strut=\normalstrut
   \setbox\strutbox=\normalhbox
     {\normalhbox
        {\vrule
           \!!width  \strutwidth
           \!!height \strutheight
           \!!depth  \strutdepth
           \normalkern-\strutwidth}}}

\def\setteststrut%
  {\def\strutwidth{.8pt}%
   \setstrut}

\def\begstrut%
  {\relax\ifdim\ht\strutbox=\!!zeropoint\else
     \strut
     \normalpenalty\!!tenthousand
     \normalhskip\!!zeropoint
     \ignorespaces
   \fi}

\def\endstrut%
  {\relax\ifhmode\ifdim\ht\strutbox=\!!zeropoint\else
     \unskip\unskip\unskip
     \normalpenalty\!!tenthousand
     \normalhskip\!!zeropoint
     \strut
   \fi\fi}

\def\setnostrut%
  {\setbox\strutbox=\normalhbox{\normalhbox{}}%
   \let\strut=\empty
   \let\endstrut=\empty
   \let\begstrut=\empty}

% unsave:
%
% \def\pseudostrut%
%   {\bgroup
%    \setnostrut
%    \normalstrut
%    \egroup}
%
% try:
%
% \startchemie
%   \chemie[ONE,Z0,SB15,MOV1,SB15,Z0][C,C]
% \stopchemie
%
% so:

\def\pseudostrut%
  {\noindent} % better: \dontleavehmode

\let\pseudobegstrut\pseudostrut

\def\pseudoendstrut% removes all kind of signals 
  {\ifhmode\unskip\unskip\unskip\unskip\fi}

\def\resetteststrut%
  {\let\strutwidth=\!!zeropoint
   \setstrut}

\def\setfontparameters%
  {\the\everybodyfont}

% \setnormalbaselines
% \setstrut
% \settopskip
% \setmaxdepth
% \the\EveryFontSwitch

%D We need \type{\normaloffinterlineskip} because the new
%D definition contains an assignment, and |<|don't ask me
%D why|>| this assignment gives troubles in for instance the
%D visual debugger.

\ifx\undefined\normaloffinterlineskip
  \let\normaloffinterlineskip=\offinterlineskip % knuth's original
\fi

% \def\offinterlineskip%
%   {\edef\oninterlineskip%
%      {\baselineskip=\the\baselineskip
%       \lineskip=\the\lineskip
%       \lineskiplimit=\the\lineskiplimit
%       \noexpand\let\noexpand\offinterlineskip=\noexpand\normaloffinterlineskip}%
%    \normaloffinterlineskip}

\def\offinterlineskip%
  {\ifdim\baselineskip>\!!zeropoint
     \edef\oninterlineskip%
       {\baselineskip=\the\baselineskip
        \lineskip=\the\lineskip
        \lineskiplimit=\the\lineskiplimit
        \noexpand\let\noexpand\offinterlineskip=\noexpand\normaloffinterlineskip}%
   \else
     \let\oninterlineskip=\setnormalbaselines
   \fi
   \normaloffinterlineskip}

\let\oninterlineskip=\relax

\def\leaveoutervmode%
  {\ifvmode\ifinner\else
     \leavevmode
   \fi\fi}

% We passen ook de \displayskip's wat aan (nog eens uitzoeken):

\def\displayskipsize#1#2%
  {\ifdim\tussenwit>\!!zeropoint
     #1\tussenwit\!!plus#2\tussenwit\!!minus#2\tussenwit\relax
   \else
     #1\lineheight\!!plus#2\lineheight\!!minus#2\lineheight\relax
   \fi}

\def\displayskipfactor          {1.0}
\def\displayshortskipfactor     {0.8}

\def\displayskipgluefactor      {0.3}
\def\displayshortskipgluefactor {0.2}

\def\abovedisplayskipsize% doet niets ?
  {\displayskipsize\displayskipfactor\displayskipgluefactor}

\def\belowdisplayskipsize% doet niets ?
  {\displayskipsize\displayskipfactor\displayskipgluefactor}

\def\abovedisplayshortskipsize%
  {\displayskipsize\displayshortskipfactor\displayshortskipgluefactor}

\def\belowdisplayshortskipsize%
  {\displayskipsize\displayshortskipfactor\displayshortskipgluefactor}

\def\setdisplayskip#1#2#3%
  {#1=#2\relax
   \advance#1 by -\parskip
   \advance#1 by -#3\relax}

\def\setdisplayskips%
  {\setdisplayskip\abovedisplayskip\abovedisplayskipsize\baselineskip
   \setdisplayskip\belowdisplayskip\belowdisplayskipsize\!!zeropoint
   \setdisplayskip\abovedisplayshortskip\abovedisplayshortskipsize\baselineskip
   \setdisplayskip\belowdisplayshortskip\belowdisplayshortskipsize\!!zeropoint}

% We stellen enkele penalties anders in dan Plain TEX:

\def\defaultwidowpenalty{2000} % was: 1000
\def\defaultclubpenalty {2000} % was:  800

\widowpenalty=\defaultwidowpenalty\relax
\clubpenalty =\defaultclubpenalty \relax

% Bovendien definieren we enkele extra \fill's:

\def\hfilll%
  {\hskip\!!zeropoint\!!plus1filll\relax}

\def\vfilll%
  {\vskip\!!zeropoint\!!plus1filll\relax}

% De onderstaande hulpmacro's moeten nog eens instelbaar worden
% gemaakt.

\def\tfskipsize{1em\relax}

\def\tfkernsize{1ex\relax}

\def\tfskip%
  {{\tf\hskip\tfskipsize}}

\def\tfkern%
  {{\tf\kern\tfkernsize}}

% Dit hoort eigenlijk thuis onder het kopje boodschappen cq,
% meldingen.

\let\mindermeldingen\dontcomplain

% Maten
%
% De onderstaande instellingen worden gebruikt voor het
% vastleggen van de zetspiegel en marges.

\voffset=0pt % setting this to -1in let's go metapost crazy
\hoffset=0pt % setting this to -1in let's go metapost crazy

\newdimen\papierhoogte
\newdimen\papierbreedte

\newdimen\printpapierhoogte
\newdimen\printpapierbreedte

\newdimen\zethoogte
\newdimen\zetbreedte

\newdimen\teksthoogte
\newdimen\tekstbreedte

\newdimen\kopwit              \kopwit=2cm
\newdimen\rugwit              \rugwit=2cm

\newdimen\hoofdhoogte         \hoofdhoogte=2cm
\newdimen\voethoogte          \voethoogte=2cm

%\newdimen\kopkopwit           \kopkopwit=0cm

\newdimen\kopoffset           \kopoffset=\!!zeropoint
\newdimen\rugoffset           \rugoffset=\!!zeropoint

\newdimen\linkermargebreedte  \linkermargebreedte=3cm
\newdimen\rechtermargebreedte \rechtermargebreedte=\linkermargebreedte

\newdimen\linkerrandbreedte   \linkerrandbreedte=3cm
\newdimen\rechterrandbreedte  \rechterrandbreedte=\linkerrandbreedte

\newdimen\bovenhoogte         \bovenhoogte=1cm
\newdimen\onderhoogte         \onderhoogte=\bovenhoogte

\def\margeafstand%
  {\@@lymargeafstand}

\def\randafstand%
  {\@@lyrandafstand}

\def\margebreedte%
  {\@@lymarge}

\def\randbreedte%
  {\@@lyrand}

\def\linkerrandafstand%
  {\ifdim\!!zeropoint<\linkerrandbreedte
     \@@lylinkerrandafstand
   \else
     \!!zeropoint
   \fi}

\def\rechterrandafstand%
  {\ifdim\!!zeropoint<\rechterrandbreedte
     \@@lyrechterrandafstand
   \else
     \!!zeropoint
   \fi}

\def\linkermargeafstand%
  {\ifdim\!!zeropoint<\linkermargebreedte
     \@@lylinkermargeafstand
   \else
     \!!zeropoint
   \fi}

\def\rechtermargeafstand%
  {\ifdim\!!zeropoint<\rechtermargebreedte
     \@@lyrechtermargeafstand
   \else
     \!!zeropoint
   \fi}

\def\bovenafstand%
  {\ifdim\!!zeropoint<\bovenhoogte
     \@@lybovenafstand
   \else
     \!!zeropoint
   \fi}

\def\hoofdafstand%
  {\ifdim\!!zeropoint<\hoofdhoogte
     \@@lyhoofdafstand
   \else
     \!!zeropoint
   \fi}

\def\voetafstand%
  {\ifdim\!!zeropoint<\voethoogte
     \@@lyvoetafstand
   \else
     \!!zeropoint
   \fi}

\def\onderafstand%
  {\ifdim\!!zeropoint<\onderhoogte
     \@@lyonderafstand
   \else
     \!!zeropoint
   \fi}

\newif\ifdubbelzijdig
\dubbelzijdigfalse

\newif\ifenkelzijdig
\enkelzijdigtrue

\def\doifsometextlineelse#1#2#3% ! omgekeerd !
  {\doifinsetelse{\getvalue{\??tk#1\v!tekst\c!status}}{\v!geen,\v!hoog}
     {#3}{#2}}

% NOG EENS NAGAAN WANNEER NU GLOBAL EN WANNEER NIET

\def\calculatevsizes% global needed in \resetlayoutregel
  {\redoglobal\teksthoogte=\zethoogte
   %\redoglobal\kopkopwit=\kopwit
   %\redoglobal\advance\kopkopwit by \hoofdhoogte
   %\redoglobal\advance\kopkopwit by \hoofdafstand
   \doifsometextlineelse{\v!hoofd}
     {\redoglobal\advance\teksthoogte by -\hoofdhoogte
      \redoglobal\advance\teksthoogte by -\hoofdafstand}
     {}%
   \doifsometextlineelse{\v!voet}
     {\redoglobal\advance\teksthoogte by -\voethoogte
      \redoglobal\advance\teksthoogte by -\voetafstand}
     {}%
   \resetglobal
   \setvsize}

\def\calculatereducedvsizes%
  {\teksthoogte=\zethoogte
   \doifsometextlineelse{\v!hoofd}
     {\advance\teksthoogte by -\hoofdhoogte
      \advance\teksthoogte by -\hoofdafstand}
     {\hoofdhoogte=\!!zeropoint}%
   \doifsometextlineelse{\v!voet}
     {\advance\teksthoogte by -\voethoogte
      \advance\teksthoogte by -\voetafstand}
     {\voethoogte=\!!zeropoint}}

\def\calculatehsizes%
  {\tekstbreedte=\zetbreedte
   \sethsize}

\def\sethsize%
  {\global\hsize=\tekstbreedte}

\def\setvsize%
  {\ifdim\vsize=\teksthoogte
   \else
     \bgroup
     \dimen0=-\vsize
     \advance\dimen0 by \teksthoogte
     \global\advance\vsize by \dimen0
%\ifgridsnapping % evt altijd, nog testen
%  \getnoflines\vsize
%  \vsize=\noflines\openlineheight % local is better and ok
%  \advance\vsize by .5\openlineheight % collect enough data
%\fi
     \ifdim\pagegoal<\maxdimen
       \advance\dimen0 by \pagegoal
       \global\pagegoal=\dimen0
     \fi
     \egroup
   \fi}

% Algemeen
%
% De Pragma-macros zijn samengesteld met behulp van de
% commandos van PlainTeX- en enkele TugBoat routines.
%
% Voor de volledigheid zijn in de definitie steeds de
% {}-haakjes vermeld. Deze haakjes zijn niet altijd
% nodig, Als bijvoorbeeld een paragraaf bewerkt wordt,
% kunnen ze achterwege blijven.
%
% Instellingen worden opgegeven tussen []-haakjes,
% meestal direct na het commando. Instellingen mogen
% soms achterwege blijven.
%
% Een aantal veelgebruikte macro's zijn in TeXEdit op
% naam en/of door middel van een mnemonic oproepbaar.

% De onderstaande macro voert commando's uit, afhankelijk van
% het karakter van het paginanummer.
%
% \doifonevenpaginaelse{then-commando}{else-commando}

% NB \userpageno vervangen door \realpageno

\def\doifonevenpaginaelse#1#2%
  {\ifodd\realpageno#1\else#2\fi}

\def\doifbothsidesoverruled#1\orsideone#2\orsidetwo#3\od%
  {\ifdubbelzijdig
     \ifodd\realpageno#2\relax\else#3\relax\fi
   \else
     #1\relax
   \fi}

\def\doifbothsides#1\orsideone#2\orsidetwo#3\od%
  {\ifdubbelzijdig
     \ifenkelzijdig
       #1\relax
     \else
       \ifodd\realpageno#2\relax\else#3\relax\fi
     \fi
   \else
     #1\relax
   \fi}

\def\dostartglobaldefs#1#2%
  {\edef\!!stringa{\the\globaldefs}%
   \ifnum\globaldefs#10
     \globaldefs=-\globaldefs
   \fi
   \advance\globaldefs by #21
   \setevalue{@gd@\the\globaldefs}{\!!stringa}}

\def\dostopglobaldefs%
  {\doifdefinedelse{@gd@\the\globaldefs}
     {\globaldefs=\getvalue{@gd@\the\globaldefs}\relax}
     {\globaldefs=0\relax}}

\def\startlocal  {\dostartglobaldefs>-}
\def\stoplocal   {\dostopglobaldefs}
\def\startglobal {\dostartglobaldefs<+}
\def\stopglobal  {\dostopglobaldefs}

%I n=Zetspiegel
%I c=\stellayoutin,\definieerpapierformaat,\stelpapierformaatin
%I c=\paslayoutaan
%I
%I De zetspiegel is het door de tekst gevormde vlak.
%I Hiertoe behoren ¢¢k de hoofd- en voetmarge. De zetspiegel
%I wordt ingesteld met:
%I
%I   \stellayoutin[breedte=,hoogte=,rugwit=,kopwit=]
%I
%I Er dienen maten te worden ingevuld, waarbij de eenheid
%I direkt achter het getal staat: 10pt, 100mm, 5cm, 3.5in.
%I
%I De parameters hebben de volgende betekenis:
%I
%I   breedte    breedte van het tekstvlak, inclusief marges
%I   hoogte     hoogte van het tekstvlak, inclusief marges
%I   rugwit     witruimte aan de binnenzijde, zonder marge
%I   kopwit     witruimte aan de bovenzijde, zonder marge
%P
%I Rond de zetspiegel vinden we marges, randen, het hoofd en
%I de voet. Ook deze worden ingesteld met:
%I
%I   \stellayoutin[breedte=,hoogte=,rugwit=,kopwit=]
%I
%I   hoofd      hoogte van de bovenmarge binnen de zetspiegel
%I   voet       hoogte van de ondermarge binnen de zetspiegel
%I   marge      breedte van de marge naast de zetspiegel
%I
%I en
%I
%I   rand       breedte van de rand naast de marge
%I   boven      hoogte van de rand boven het hoofd
%I   onder      hoogte van de rand onder de voet
%I
%I Alleen het hoofd en de voet hangen dus samen met de
%I zetspiegel.
%P
%I Eventueel kunnen de linker- en rechtermarge en apart
%I worden ingesteld:
%I
%I   \stellayoutin[linkermarge=,rechtermarge=]
%I
%I Het zelfde geldt voor de randen. In dat geval wordt bij
%I dubbelzijdig zetten gespiegeld. Oppassen dus!
%I
%I De afstanden tussen marges, randen enz. kunnen worden
%I ingesteld met:
%I
%I   bovenafstand, onderafstand
%I   hoofdafstand,voetafstand
%I   linkermargeafstand,rechtermargeafstand,
%I   linkerrandafstand,rechterrandafstand
%P
%I De zetspiegel kan (tijdelijk) worden aangepast met het
%I commando:
%I
%I   \paslayoutaan[hoogte=]
%I
%I Men dient een positieve (+) of negatieve (-) maat op te
%I geven. De zethoogte blijft gelijk, maar de teksthoogte
%I wordt aangepast ten koste van de voethoogte. Eventueel
%I kan 'max' worden opgegeven.
%I
%I Er kan een reeks aanpassingen worden opgegeven:
%I
%I   \paslayoutaan[nr,nr,nr,...][hoogte=]
%I
%I Hierbij is staat nr voor het paginanummer, dat wil
%I zeggen: het volgnummer in de tekst.
%I
%I Bij voorlopige versies wordt onderaan de pagina de
%I aanpassing weergegeven.
%P
%I Beeldmerken en achtergronden worden uit oogpunt van
%I verwerkingssnelheid niet vaker berekend dan nodig. Mocht
%I om een of andere reden een beeldmerk of achtergrond niet
%I overeenkomen komen met de wensen, dan kan herberekenen
%I worden geforceerd met:
%I
%I   \stellayoutin[reset]
%P
%I Het papierformaat is in te stellen met het commando
%I
%I   \stelpapierformaatin[DIN-formaat]
%I
%I Mogelijke DIN-formaten zijn A4 tot en met A9. De
%I afmetingen van een A4 zijn:
%I
%I   breedte : 21.0cm =  8.18in = 589pt
%I   hoogte  : 29.7cm = 11.58in = 834pt
%I
%I Optioneel kan men het printer papierformaat instellen door
%I een tweede argument mee te geven. Standaard wordt
%I uitgegaan van A4.
%I
%I   \stelpapierformaatin[A5][A4]
%I
%P Men kan zelf een papierformaat definieren met
%I
%I   \definieerpapierformaat [naam] [hoogte=,breedte=]
%I
%I waarbij de offset betrekking heeft op dubbelzijdig zetten.

\ifx\stelpapierformaatin\undefined
  \let\stelpapierformaatin\relax
\fi

%\def\dodefinieerpapierformaat[#1][#2]%
%  {\ifsecondargument
%     \getparameters
%       [\??pp#1] % geen \c!schaal, scheelt hash ruimte
%       [\c!breedte=\@@ppbreedte,\c!hoogte=\@@pphoogte,
%        \c!offset=\@@ppoffset,#2]%
%   \else
%     \definieerpapierformaat[][#1]%
%     \stelpapierformaatin
%   \fi}

\def\dodefinieerpapierformaat[#1][#2]%
  {\ifsecondargument
     \getparameters
       [\??pp#1] % geen \c!schaal, scheelt hash ruimte
       [\c!breedte=\@@ppbreedte,\c!hoogte=\@@pphoogte,
        \c!offset=\@@ppoffset,#2]%
   \else
     \getparameters[\??pp][#1]%
     \stelpapierformaatin
   \fi}

\def\definieerpapierformaat%
  {\dodoubleempty\dodefinieerpapierformaat}

\definieerpapierformaat
  [\c!breedte=210mm,\c!hoogte=297mm,\c!offset=0pt]

\chardef\papermirror   =0
\chardef\printmirror   =0
\chardef\paperrotation =0
\chardef\paperreverse  =0
\chardef\printrotation =0
\chardef\printreverse  =0
\chardef\paperlandscape=0
\chardef\printlandscape=0

\def\papierschaal{1}

\newif\ifnegateprintbox

\def\dostelpapierrichtingin#1#2#3#4#5%
  {\global\chardef#2=0
   \global\chardef#5=0
   \gdef#3{0}%
   \gdef#4{0}%
   \global\negateprintboxfalse
   \processallactionsinset
     [#1]
     [   \v!liggend=>\global\chardef#2=1,
      \v!gespiegeld=>\global\chardef#5=1,
       \v!geroteerd=>\gdef#3{90}\gdef#4{270},
        \v!negatief=>\global\negateprintboxtrue,
                 90=>\gdef#3{90}\gdef#4{270},
                180=>\gdef#3{180}\gdef#4{0},
                270=>\gdef#3{270}\gdef#4{90}]}

\ifx\calculatepaperoffsets\undefined

  \def\calculatepaperoffsets#1%
    {\scratchdimen=\getvalue{\??pp#1\c!offset}%
     \global\advance\papierbreedte by -2\scratchdimen
     \global\advance\papierhoogte by -2\scratchdimen}

\fi

% \def\dostelpapierformaatin[#1][#2]%
%   {\ifsecondargument
%      \dostelpapierrichtingin{#1}\paperlandscape\paperrotation\paperreverse\papermirror
%      \dostelpapierrichtingin{#2}\printlandscape\printrotation\printreverse\printmirror
%      \def\docommando##1%
%        {\doifsomething{##1}{\doifdefined{\??pp##1\c!breedte}
%           {\global\papierbreedte=\getvalue{\??pp##1\c!breedte}%
%            \global\papierhoogte=\getvalue{\??pp##1\c!hoogte}%
%            \calculatepaperoffsets{##1}%
%            \xdef\papierformaat{##1}}}}%
%      \processcommalist[#1]\docommando
%      \doifdefinedelse{\??pp#1\c!schaal}
%        {\edef\papierschaal{\getvalue{\??pp#1\c!schaal}}}
%        {\edef\papierschaal{1}}%
%      \def\docommando##1%
%        {\doifsomething{##1}{\doifdefined{\??pp##1\c!breedte}
%           {\global\printpapierbreedte=\getvalue{\??pp##1\c!breedte}%
%            \global\printpapierhoogte=\getvalue{\??pp##1\c!hoogte}%
%            \xdef\printpapierformaat{##1}}}}%
%      \processcommalist[#2]\docommando
%      \ifnum\paperlandscape>0
%        \doglobal\swapdimens\papierbreedte\papierhoogte
%      \fi
%      \ifnum\printlandscape>0
%        \doglobal\swapdimens\printpapierbreedte\printpapierhoogte
%      \fi
%      \ifdim\papierhoogte>\printpapierhoogte
%        \global\printpapierhoogte=\papierhoogte
%      \fi
%      \ifdim\papierbreedte>\printpapierbreedte
%        \global\printpapierbreedte=\papierbreedte
%      \fi
%      \calculatehsizes
%      \calculatevsizes
%      \global\newlogostrue
%      \global\newbackgroundtrue
%      \resetlayout
%    \else\iffirstargument
%      \stelpapierformaatin[#1][#2]%
%    \else\ifx\papierformaat\undefined\else
%      \stelpapierformaatin[\papierformaat][\printpapierformaat]%
%    \fi\fi\fi}

\def\dostelpapierformaatin[#1][#2]%
  {\doifinstringelse{=}{#1}
     {\getparameters[\??pp][#1]}
     {\doifinstringelse{=}{#2}
        {\getparameters[\??pp#1][#2]}
        {\dodostelpapierformaatin[#1][#2]}}}

\def\dodostelpapierformaatin[#1][#2]%
  {\ifsecondargument
     \dostelpapierrichtingin{#1}\paperlandscape\paperrotation\paperreverse\papermirror
     \dostelpapierrichtingin{#2}\printlandscape\printrotation\printreverse\printmirror
     \def\docommando##1%
       {\doifsomething{##1}{\doifdefined{\??pp##1\c!breedte}
          {\global\papierbreedte=\getvalue{\??pp##1\c!breedte}%
           \global\papierhoogte=\getvalue{\??pp##1\c!hoogte}%
           \calculatepaperoffsets{##1}%
           \xdef\papierformaat{##1}}}}%
     \processcommalist[#1]\docommando
     \doifdefinedelse{\??pp#1\c!schaal}
       {\edef\papierschaal{\getvalue{\??pp#1\c!schaal}}}
       {\edef\papierschaal{1}}%
     \def\docommando##1%
       {\doifsomething{##1}{\doifdefined{\??pp##1\c!breedte}
          {\global\printpapierbreedte=\getvalue{\??pp##1\c!breedte}%
           \global\printpapierhoogte=\getvalue{\??pp##1\c!hoogte}%
           \xdef\printpapierformaat{##1}}}}%
     \processcommalist[#2]\docommando
     \ifnum\paperlandscape>0
       \doglobal\swapdimens\papierbreedte\papierhoogte
     \fi
     \ifnum\printlandscape>0
       \doglobal\swapdimens\printpapierbreedte\printpapierhoogte
     \fi
     \ifdim\papierhoogte>\printpapierhoogte
       \global\printpapierhoogte=\papierhoogte
     \fi
     \ifdim\papierbreedte>\printpapierbreedte
       \global\printpapierbreedte=\papierbreedte
     \fi
     \calculatehsizes
     \calculatevsizes
     \global\newlogostrue
     \global\newbackgroundtrue
     \resetlayout
   \else\iffirstargument
     \stelpapierformaatin[#1][#2]%
   \else\ifx\papierformaat\undefined\else
     \stelpapierformaatin[\papierformaat][\printpapierformaat]%
   \fi\fi\fi}

\def\stelpapierformaatin%
  {\dodoubleempty\dostelpapierformaatin}

\def\checkforems[#1]%
  {\def\docommando##1%
     {\beforesplitstring##1\at em\to\asciia
      \doifnot{\asciia}{##1}
        {\aftersplitstring\asciia\at=\to\asciia
         \doifsomething{\asciia}
           {\showmessage{\m!systems}{10}{##1}}}}%
   \processcommalist[#1]\docommando}

\def\resetlayout%
  {\global\linkermargebreedte=\@@lylinkermarge
   \global\rechtermargebreedte=\@@lyrechtermarge
   \global\linkerrandbreedte=\@@lylinkerrand
   \global\rechterrandbreedte=\@@lyrechterrand
   \global\hoofdhoogte=\@@lyhoofd
   \global\voethoogte=\@@lyvoet
   \global\onderhoogte=\@@lyonder
   \global\bovenhoogte=\@@lyboven
   \global\rugwit=\@@lyrugwit
   \global\kopwit=\@@lykopwit
   \doifelse{\@@lygrid}{\v!ja}
     {\gridsnappingtrue}
     {\gridsnappingfalse}%
   \ifgridsnapping
     \widowpenalty=0 % is gewoon beter
     \clubpenalty =0 % zeker bij grids
   \else
     \widowpenalty=\defaultwidowpenalty
     \clubpenalty=\defaultclubpenalty
   \fi
   \stelwitruimtein
   \stelblankoin
   \doifelse{\@@lybreedte}{\v!midden}
     {\global\zetbreedte=\papierbreedte
      \global\advance\zetbreedte by -2\rugwit}
     {\doifelse{\@@lybreedte}{\v!passend}
        {\global\zetbreedte=\papierbreedte
         \global\advance\zetbreedte by -\rugwit
         \scratchdimen=\rugwit
         \advance\scratchdimen by -\linkerrandbreedte
         \advance\scratchdimen by -\linkerrandafstand
         \advance\scratchdimen by -\paginascheiding
         \advance\scratchdimen by -\linkermargebreedte
         \advance\scratchdimen by -\linkermargeafstand
         \ifdim\scratchdimen<\!!zeropoint
           \scratchdimen=\!!zeropoint
         \fi
         \global\advance\zetbreedte by -\rechtermargeafstand
         \global\advance\zetbreedte by -\rechtermargebreedte
         \global\advance\zetbreedte by -\paginascheiding
         \global\advance\zetbreedte by -\rechterrandafstand
         \global\advance\zetbreedte by -\rechterrandbreedte
         \global\advance\zetbreedte by -\scratchdimen}
        {\global\zetbreedte=\@@lybreedte}}%
   \doifelse{\@@lyregels}{}
     {\doifelse{\@@lyhoogte}{\v!midden}
        {\global\zethoogte=\papierhoogte
         \global\advance\zethoogte by -2\kopwit}
        {\doifelse{\@@lyhoogte}{\v!passend}
           {\global\zethoogte=\papierhoogte
            \global\advance\zethoogte by -\kopwit
            \scratchdimen=\kopwit
            \advance\scratchdimen by -\bovenhoogte
            \advance\scratchdimen by -\bovenafstand
              \ifdim\scratchdimen<\!!zeropoint
              \scratchdimen=\!!zeropoint
            \fi
            \global\advance\zethoogte by -\onderafstand
            \global\advance\zethoogte by -\onderhoogte
            \global\advance\zethoogte by -\scratchdimen}
           {\global\zethoogte=\@@lyhoogte}}}
     {\global\zethoogte=\@@lyregels\lineheight
      \global\advance\zethoogte by \hoofdhoogte
      \global\advance\zethoogte by \voethoogte}%
   \rugoffset=\@@lyrugoffset
   \kopoffset=\@@lykopoffset
   \calculatehsizes
   \calculatevsizes
   \global\newlogostrue
   \global\newbackgroundtrue
   \setMPpagedata}

\ifx\setMPpagedata\undefined \let\setMPpagedata\relax \fi

\def\checklayout%
  {\doifsomething{\@@lyregels}
     {\ifdim\zethoogte=\@@lyregels\lineheight \else \resetlayout \fi}}

\appendtoks \checklayout \to \everystarttext

\newif\ifdoublesidedprint

%\def\setcenterpagebox#1#2#3#4%
%  {\let\leftpagebox  =#1%
%   \let\rightpagebox =#2%
%   \let\toppagebox   =#3%
%   \let\bottompagebox=#4}

\def\presetcenterpagebox% in \stellayoutin !!!!!!!!!!!!!!!!
  {%\setcenterpagebox\relax\hss\relax\vss
   \doublesidedprintfalse
   \ExpandFirstAfter\processallactionsinset
     [\@@lyplaats]
%     [      \v!midden=>\setcenterpagebox\hss\hss\vss\vss,
%             \v!links=>\setcenterpagebox\relax\hss\toppagebox\bottompagebox,
%            \v!rechts=>\setcenterpagebox\hss\relax\toppagebox\bottompagebox,
%             \v!onder=>\setcenterpagebox\leftpagebox\rightpagebox\vss\relax,
%             \v!boven=>\setcenterpagebox\leftpagebox\rightpagebox\relax\vss,
     [      \v!midden=>{\stelpapierformaatin[\c!links=\hss,\c!rechts=\hss,\c!boven=\vss,\c!onder=\vss]},
             \v!links=>{\stelpapierformaatin[\c!links=,\c!rechts=\hss]},
            \v!rechts=>{\stelpapierformaatin[\c!links=\hss,\c!rechts=]},
             \v!onder=>{\stelpapierformaatin[\c!boven=\vss,\c!onder=]},
             \v!boven=>{\stelpapierformaatin[\c!boven=,\c!onder=\vss]},%
      \v!dubbelzijdig=>\doublesidedprinttrue,
       \v!enkelzijdig=>\doublesidedprintfalse]}

\def\complexstellayoutin[#1]%
  {\ConvertToConstant\doifnot{#1}{\v!reset}
     {\getparameters[\??ly][#1]%
      \checkforems[#1]}%
   \resetlayout
   \presetcenterpagebox}

\definecomplexorsimpleempty\stellayoutin

\let\@@zahoogte=\!!zeropoint

\def\dopushpagedimensions%
  {\xdef\oldteksthoogte{\the\teksthoogte}%
   \xdef\oldvoethoogte{\the\voethoogte}%
   \global\let\@@zahoogte=\@@zahoogte}

\def\dopoppagedimensions%
  {\global\teksthoogte=\oldteksthoogte
   \global\voethoogte=\oldvoethoogte
   \resetlayout
   \global\let\pushpagedimensions=\dopushpagedimensions
   \global\let\poppagedimensions=\relax}

\let\poppagedimensions=\relax
\let\pushpagedimensions=\dopushpagedimensions

% Elke \csname ... \endcsname wordt ook aangemaakt, dus ook
% in een test met \doifdefined. Bij veel bladzijden kan dit
% te veel macro's kosten. Vandaar de set \adaptedpages. Het
% kost tijd, maar scheelt macro's.

\def\adaptedpages{}

% \def\adaptpagedimensions%
%   {\rawdoifinsetelse{\realfolio}{\adaptedpages}
%      {\getvalue{\??za\realfolio}%
%       \letvalue{\??za\realfolio}=\relax}
%      {}}

\def\adaptpagedimensions%
  {\rawdoifinsetelse{\realfolio}{\adaptedpages}
     {\getvalue{\??za\realfolio}%
      \letbeundefined{\??za\realfolio}}
     {}}

\def\checkpagedimensions%
  {\poppagedimensions
   \adaptpagedimensions}

\def\reportpagedimensions%
  {\ifx\poppagedimensions\relax
   \else
     \spatie\@@zahoogte\spatie-
   \fi
   \realfolio}

\def\dodopaslayoutaan[#1]%
  {\getparameters[\??za][\c!hoogte=,\c!regels=,#1]%
   \pushpagedimensions
   \doifelsenothing{\@@zaregels}
     {\showmessage{\m!layouts}{1}{\@@zahoogte,\realfolio}}
     {\showmessage{\m!layouts}{1}{\@@zaregels\space\v!regels,\realfolio}%
      \def\@@zahoogte{\@@zaregels\openlineheight}}%
   \doifelse{\@@zahoogte}{\v!max}
     {\balancedimensions{\teksthoogte}{\voethoogte}{\voethoogte}}
     {\balancedimensions{\teksthoogte}{\voethoogte}{\@@zahoogte}}%
   \ifdim\voethoogte<\!!zeropoint
     \global\advance\teksthoogte by \voethoogte
     \global\voethoogte=\!!zeropoint
     \global\xdef\@@zahoogte{\@@lyvoet\spatie(\v!max)}%
   \fi
   \setvsize
   \global\pagegoal=\vsize  % nog corrigeren voor insertions ?
   \global\newlogostrue
   \global\newbackgroundtrue
   \global\let\pushpagedimensions=\relax
   \global\let\poppagedimensions=\dopoppagedimensions}

\def\dopaslayoutaan[#1][#2]%
  {\doifelsenothing{#2}
     {\dodopaslayoutaan[#1]}
     {\def\docommando##1%
        {\addtocommalist{##1}\adaptedpages
         \setgvalue{\??za##1}{\dodopaslayoutaan[#2]}}%
      \processcommalist[#1]\docommando
      \adaptpagedimensions}}

\def\paslayoutaan%
  {\dodoubleempty\dopaslayoutaan}

%I n=Margeblokken
%I c=\startmargeblok,\stelmargeblokkenin
%I
%I voorlopig:
%I
%I   \stelmargeblokkenin
%I     [plaats=,breedte,letter=,uitlijnen=,
%I      voor=,na=,links=,rechts=,boven=,onder=,tussen=]
%I
%I plaats = inmarge, links, rechts, midden
%I links, rechts, voor, na = rule
%I boven, onder, tussen = skip
%I status=
%I
%I \startmargeblok
%I \stopmargeblok

\newif\ifmargeblokken

\def\dostelmargeblokkenin[#1]%
  {\getparameters[\??mb][#1]%
   \doifelse{\@@mbstatus}{\v!start}%
     {\showmessage{\m!layouts}{4}{}%
      \margeblokkentrue
      \let\somenextfloat=\dosomenextfloat
      \let\startmargeblok=\dostartmargeblok
      \let\stopmargeblok=\dostopmargeblok}%
     {\showmessage{\m!layouts}{5}{}%
      \margeblokkenfalse
      \def\somenextfloat[##1]%
        {\someelsefloat[##1,\v!hier]}%
      \let\startmargeblok=\dontstartmargeblok
      \let\stopmargeblok=\dontstopmargeblok}}

\def\stelmargeblokkenin%
  {\dosingleargument\dostelmargeblokkenin}

\newbox\marginbox

\def\dosomenextfloat[#1]%
  {\global\setbox\marginbox=\vbox
     {\hsize\@@mbbreedte
      \unvbox\marginbox
      \ifvoid\marginbox\else
        \@@mbtussen
      \fi
      \box\floatbox\filbreak}%
   \ifdim\ht\marginbox>\teksthoogte
     \dosavefloatinfo
   \else
     \doinsertfloatinfo
   \fi}

\newbox\preparedmarginbox

\def\reshapemargin%
  {\beginofshapebox
   \unvbox\preparedmarginbox
   \endofshapebox
   \reshapebox
     {\box\shapebox}%
   \setbox\preparedmarginbox=\vbox to \teksthoogte
     {\@@mbboven
      \flushshapebox
      \@@mbonder}}

\def\plaatsrechtermargeblok%
  {\hskip\rechtermargebreedte}

\def\plaatslinkermargeblok%
  {\hskip\linkermargebreedte}

\def\checkmargeblokken%
  {\setbox\preparedmarginbox=\vbox
     {\forgetall
      \splittopskip\topskip
      \ifvoid\marginbox\else
        \ifdim\ht\marginbox>\teksthoogte
          \vsplit\marginbox to \teksthoogte
        \else
          \unvbox\marginbox
        \fi
      \fi}%
   \reshapemargin
   \setbox\preparedmarginbox=\vbox
      {\@@mbvoor\box\preparedmarginbox\@@mbna}%
   \def\rightmarginbox%
     {\def\plaatsrechtermargeblok%
        {\setbox\preparedmarginbox=\hbox to \rechtermargebreedte
           {\@@mblinks\box\preparedmarginbox\@@mbrechts}%
         \vsmashbox\preparedmarginbox
         \box\preparedmarginbox}}%
   \def\leftmarginbox%
     {\def\plaatslinkermargeblok%
        {\setbox\preparedmarginbox=\hbox to \linkermargebreedte
           {\@@mbrechts\box\preparedmarginbox\@@mblinks}%
         \vsmashbox\preparedmarginbox
         \box\preparedmarginbox}}%
   \processaction
     [\@@mbplaats]
     [ \v!inmarge=>\doifbothsidesoverruled
                   \rightmarginbox
                  \orsideone
                    \rightmarginbox
                  \orsidetwo
                    \leftmarginbox
                  \od,
        \v!midden=>\doifbothsidesoverruled
                    \rightmarginbox
                  \orsideone
                    \leftmarginbox
                  \orsidetwo
                    \rightmarginbox
                  \od,
         \v!links=>\leftmarginbox,
        \v!rechts=>\rightmarginbox,
     \s!unknown=>\setbox\preparedmarginbox=\hbox{}]}

\def\dostartmargeblok%  % 2 maal \vbox ivm \unvbox elders
  {\global\setbox\marginbox=\vtop\bgroup\vbox\bgroup
     \hsize\@@mbbreedte
     \ifvoid\marginbox\else
       \unvbox\marginbox
       \@@mbtussen
     \fi
     \steluitlijnenin[\@@mbuitlijnen]%
     \dostartattributes\??mb\c!letter\c!kleur{}%
     \begstrut\ignorespaces}

\def\dostopmargeblok%
  {\unskip\endstrut
   \dostopattributes
   \egroup
   \egroup}

\def\dontstartmargeblok%
  {\@@mbvoor
   \bgroup
   \dostartattributes\??mb\c!letter\c!kleur{}}

\def\dontstopmargeblok%
  {\dostopattributes
   \egroup
   \@@mbna}

%I n=Uitstellen
%I c=\startuitstellen
%I
%I Zetcommando's kunnen in een wachtrij worden gezet en na
%I een pagina worden uitgevoerd. Dit gebeurt met het commando:
%I
%I   \startuitstellen
%I     ...
%I   \stopuitstellen
%I
%I Dit kan handig zijn bij bijvoorbeeld grote tussen te voegen
%I figuren, tabellen, formulieren enz.
%I
%I   \startuitstellen
%I     \plaatsfiguur[pagina][]{...}{...}
%I   \stopuitstellen
%I
%I Er kunnen meerdere commando's in de wachtrij worden
%I geplaatst.
%P
%I Het mechanisme werkt nog niet vlekkeloos. Zo wordt
%I nog gerekend met waarden van de vorige pagina. Dit heeft
%I bijvoorbeeld als gevolg dat figuren kunnen worden
%I opgespaard.
%I
%I Het kan gebeuren dat een (te) groot figuur er voor zorgt
%I dat ook andere figuren worden verplaatst. De volgorde
%I blijft immers gehandhaafd. In dat geval kan zo'n groot
%I figuur worden verplaatst naar de eerstvolgende voor de
%I handliggende pagina:
%I
%I   \startuitstellen
%I     \plaatsfiguur[pagina][]{...}{...}
%I     \pagina
%I   \stopuitstellen

\newcounter\nofpostponedblocks

\newif\ifinuitstellen

\newevery\everytopofpage\relax

\appendtoks\the\everytopofpage\to\everystarttext
\appendtoks\global\everytopofpage{}\to\everystoptext

\def\douitstellen%
  {\the\everytopofpage
   \ifinuitstellen\else\ifcase\nofpostponedblocks\else % The \nof-test is
     \global\pagetotal\!!zeropoint % recently added 
     \global\inuitstellentrue                          % definitely needed
     \dorecurse{\nofpostponedblocks}                   % else we can loose
       {\haalbuffer[buf-\recurselevel]}                % or disorder floats
     \doflushfloats % new but potential dangerous      % and that is something
     \doglobal\newcounter\nofpostponedblocks           % we don't want, do we?
     \global\inuitstellenfalse                         % Anyhow, 'uitstellen'
   \fi\fi}                                             % is still suboptimal.

\setvalue{\e!start\e!uitstellen}%
  {\doglobal\increment\nofpostponedblocks
   \showmessage{\m!layouts}{3}{\nofpostponedblocks}%
   \dostartbuffer[buf-\nofpostponedblocks]
     [\e!start\e!uitstellen][\e!stop\e!uitstellen]}

% \gotonextsubpage  : voor de pagebody
% \subpaginanummer  : alleen in de voet/kopregels
% \aantalsubpaginas : alleen in de voet/kopregels

% \firstsubpage     : eerste \realpageno, voor interne doeleinden
% \prevsubpage      : vorige \realpageno, voor interne doeleinden
% \nextsubpage      : volgende \realpageno, voor interne doeleinden
% \lastsubpage      : laatste \realpageno, voor interne doeleinden
% \nofsubpages      : laatste subpage (in berekeningen)
% \subpageno        : huidige subpage (in berekeningen)

\newif\ifsubpaging
\newif\ifshowingsubpage

\definieernummer
  [\s!subpage]

\stelnummerin
  [\s!subpage]
  [\c!wijze=\@@snwijze]

\def\resetsubpaginanummer%
  {\resetnummer[\s!subpage]%
   \global\subpageno=\ruwenummer[\s!subpage]}

\def\dostelsubpaginanummerin[#1]%
  {\doifelse{#1}{\v!reset}
     {\resetnummer[\s!subpage]}
     {\getparameters[\??sn][#1]%
      \processaction
        [\@@snstatus]
        [  \v!stop=>\ifsubpaging
                    \else
                      \subpagingfalse
                    \fi
                    \showingsubpagefalse,
          \v!start=>\subpagingtrue
                    \showingsubpagetrue,
           \v!geen=>\subpagingtrue
                    \showingsubpagefalse]}}

\def\aantalsubpaginas%
  {\ifshowingsubpage
     \nofsubpages
   \else
     0%
   \fi}

\def\subpaginanummer%
  {\ifshowingsubpage
     \the\subpageno
   \else
     0%
   \fi}

\def\stelsubpaginanummerin%
  {\dosingleargument\dostelsubpaginanummerin}

\def\newnofsubpages  {0}
\def\nofsubpages     {0}
\def\firstsubpage    {1}
\def\prevsubpage     {1}
\def\nextsubpage     {1}
\def\lastsubpage     {1}

\def\nextpage        {1}
\def\prevpage        {1}

\definetwopasslist{\s!subpage}

\def\savenofsubpages%
  {\ifsubpaging
     \showmessage{\m!layouts}{6}{\newnofsubpages,\the\subpageno}%
     \immediatewriteutilitycommand%
        {\twopassentry%
           {\s!subpage}%
           {\newnofsubpages}%
           {\the\subpageno}}%
   \fi}

\def\setsubpagenumbers%
  {\iftwopassdatafound
     \bgroup
     \xdef\nofsubpages{\twopassdata}%
     \xdef\firstsubpage{\realfolio}%
     \advance\realpageno by \nofsubpages
     \advance\realpageno by -1
     \xdef\lastsubpage{\realfolio}%
     \egroup
   \else
     \xdef\nofsubpages{0}%
   \fi}

\def\gotonextsubpage% overlapt behoorlijk met realpage macro
  {\global\let\checksubpages=\relax
   \ifsubpaging
     \edef\oldsubpage{\the\subpageno}%
     \verhoognummer[\s!subpage]%
     \global\subpageno=\ruwenummer[\s!subpage]\relax
     \ifnum\subpageno=1
       \gettwopassdata{\s!subpage}%
       \setsubpagenumbers
       \ifnum\oldsubpage>0
         \showmessage{\m!layouts}{6}{\newnofsubpages,\oldsubpage}%
         \edef\next%
           {\writeutilitycommand%
              {\twopassentry%
                 {\s!subpage}%
                 {\newnofsubpages}%
                 {\oldsubpage}}}%
         \next
       \fi
       \doglobal\increment\newnofsubpages\relax
     \fi
     \setglobalsystemreference\rt!page{\v!eerstesubpagina}\firstsubpage
     \setglobalsystemreference\rt!page{\v!laatstesubpagina}\lastsubpage
     \bgroup
     \ifnum\realpageno=\firstsubpage\relax
       \global\let\prevsubpage=\firstsubpage
\setglobalsystemreference\rt!page{\v!sub\v!achteruit}\lastsubpage
     \else
       \xdef\prevsubpage{\realfolio}%
       \doglobal\decrement\prevsubpage
\setglobalsystemreference\rt!page{\v!sub\v!achteruit}\prevsubpage
     \fi
     \setglobalsystemreference\rt!page{\v!vorigesubpagina}\prevsubpage
     \ifnum\realpageno=\lastsubpage\relax
       \global\let\nextsubpage=\lastsubpage
\setglobalsystemreference\rt!page{\v!sub\v!vooruit}\firstsubpage
     \else
       \xdef\nextsubpage{\realfolio}%
       \doglobal\increment\nextsubpage
\setglobalsystemreference\rt!page{\v!sub\v!vooruit}\nextsubpage
     \fi
     \setglobalsystemreference\rt!page{\v!volgendesubpagina}\nextsubpage
     \egroup
   \fi}

\def\checksubpages%
  {\getfromtwopassdata{\s!subpage}{1}%
   \setsubpagenumbers
   \global\let\checksubpages=\relax}

% Omdat \gotonextrealpage gebruik maakt van de hulpfile,
% moet het initialiseren van \realpageno plaatsvinden in
% een later stadium, namelijk zodra referenties worden
% gebruikt (anders gaat het mis op nog niet gedefinieerde
% lijstcommando's e.d.). De eerst aanroep vindt dan ook
% plaats vlak nadat de hulpfile voor de eerste maal is
% ingelezen.

\countdef\realpageno = 0   \realpageno = 1
\countdef\userpageno = 1   \userpageno = 1
\countdef\subpageno  = 2   \subpageno  = 0 % !!
\countdef\arrangeno  = 3   \arrangeno  = 0 % !!

% we don't want conflicts when \pageno is used by other
% packages, like CWEB, so we redefine \pageno

\newcount\pageno           \pageno     = 1

\def\setuserpageno#1%
  {\global\userpageno=#1\relax
   \global\pageno=\userpageno}

\def\realfolio   {\the\realpageno}
\def\folio       {\the\userpageno}
\def\firstpage   {1}
\def\lastpage    {1}
\def\currentpage {\the\realpageno}

\def\gotonextrealpage%
  {\global\advance\realpageno by 1
   \ifnum\realpageno>\lastpage
     \xdef\lastpage{\realfolio}%
   \fi
   \setglobalsystemreference\rt!page{\v!eerstepagina}\firstpage
   \setglobalsystemreference\rt!page{\v!laatstepagina}\lastpage
   \bgroup
   \ifnum\realpageno>1
     \advance\realpageno by -1
     \xdef\prevpage{\realfolio}%
     \setglobalsystemreference\rt!page{\v!achteruit}\prevpage
   \else
     \global\let\prevpage=\firstpage
     \setglobalsystemreference\rt!page{\v!achteruit}\lastpage
   \fi
   \setglobalsystemreference\rt!page{\v!vorigepagina}\prevpage
   \egroup
   \bgroup
   \ifnum\realpageno<\lastpage\relax
     \advance\realpageno by 1
     \xdef\nextpage{\realfolio}%
     \setglobalsystemreference\rt!page{\v!pagina}\nextpage
     \setglobalsystemreference\rt!page{\v!vooruit}\nextpage
     \bgroup
     \xdef\nextnextpage{\realfolio}%
     \ifodd\realpageno
       \setglobalsystemreference\rt!page{\v!volgendeonevenpagina}\nextnextpage
     \else
       \setglobalsystemreference\rt!page{\v!volgendeevenpagina}\nextnextpage
     \fi
     \advance\realpageno by 1
     \xdef\nextnextpage{\realfolio}%
     \ifnum\realpageno>\lastpage\relax
      %\ifodd\realpageno
      %  \setglobalsystemreference\rt!page{\v!volgendeonevenpagina}\lastpage
      %\else
      %  \setglobalsystemreference\rt!page{\v!volgendeevenpagina}\lastpage
      %\fi
     \else
       \ifodd\realpageno
         \setglobalsystemreference\rt!page{\v!volgendeonevenpagina}\nextnextpage
       \else
         \setglobalsystemreference\rt!page{\v!volgendeevenpagina}\nextnextpage
       \fi
     \fi
     \egroup
   \else
     \global\let\nextpage=\lastpage
     \setglobalsystemreference\rt!page{\v!pagina}\firstpage
     \setglobalsystemreference\rt!page{\v!vooruit}\firstpage
     \setglobalsystemreference\rt!page{\v!volgendeonevenpagina}\lastpage
     \setglobalsystemreference\rt!page{\v!volgendeevenpagina}\lastpage
   \fi
   \setglobalsystemreference\rt!page{\v!volgendepagina}\realfolio
   \egroup}

\def\checkrealpage%
  {\global\realpageno=0
   \gotonextrealpage
   \global\let\checkrealpage=\relax}

%\def\realnumberofpages#1% meteen laden, voor andere files (met refs)
%  {\gdef\lastpage{#1}%
%   \global\let\realnumberofpages=\gobbleoneargument}

\def\savenofpages%
  {\advance\realpageno by -1
   \savecurrentvalue\lastpage{\realfolio}}%
  %\immediatewriteutilitycommand{\realnumberofpages{\realfolio}}}%

\def\totaalaantalpaginas%
  {\lastpage}

\def\initializepaper%
  {\iflocation
     \dosetuppaper
       {\papierformaat}
       {\the\papierbreedte}
       {\the\papierhoogte}%
   \else
     \dosetuppaper
       {\printpapierformaat}
       {\the\printpapierbreedte}
       {\the\printpapierhoogte}%
   \fi}

\def\myshipout#1%
  {\voorpagina
   \dontshowcomposition
   \ifarrangingpages
     \actualarrange
       {\thisisrealpage{\realfolio}#1}%
   \else
     \actualshipout
       {\thisisrealpage{\realfolio}#1}%
   \fi
   \gotonextrealpage
   \napagina}

\newbox\postponedcontent

\def\flushatshipout%
  {\dowithnextbox
      {\global\setbox\postponedcontent=\hbox to \!!zeropoint
         {%\hskip-\maxdimen % niet hier, gaat mis in acrobat (clipt)
          \box\postponedcontent\box\nextbox}%
       \global\ht\postponedcontent=\!!zeropoint
       \global\dp\postponedcontent=\!!zeropoint
       \global\wd\postponedcontent=\!!zeropoint}%
   \hbox}

% \starttypen
% \def\pagestoshipout{1,3,5}
% \stoptypen

\newcounter\shippedoutpages
\let\pagestoshipout\empty      % {1,3,6}
\chardef\whichpagetoshipout=0 % 0=all 1=odd 2=even

\def\actualshipout#1%
  {\doglobal\increment\shippedoutpages
   \ifx\pagestoshipout\empty
     \ifcase\whichpagetoshipout\relax
       \donetrue
     \or % 1
       \ifodd\shippedoutpages\relax\donetrue\else\donefalse\fi
     \or % 2
       \ifodd\shippedoutpages\relax\donefalse\else\donetrue\fi
     \else
       \donetrue
     \fi
   \else
     \ExpandBothAfter\doifinsetelse{\shippedoutpages}{\pagestoshipout}
       \donetrue\donefalse
   \fi
   \ifdone
     \shipout\vbox
       {\forgetall
        \offinterlineskip
        \mindermeldingen
        \vskip-1in
        \hskip-1in
        \hbox
          {\setbox0=\hbox{#1}% just in case there are objects there
           \setbox\scratchbox=\hbox
             {\the\everyshipout
              \ifnum\realpageno=\lastpage\relax\the\everylastshipout\fi}%
           \smashbox\scratchbox
           \box\scratchbox
           \box\postponedcontent % evt ver naar links !
           \box0}}%
   \else
     \message
       {[\ifarrangingpages arranged \fi page
         \ifarrangingpages\the\arrangeno\else\the\realpageno\fi\normalspace
         not flushed]}%
     \setbox0=\hbox{#1}%
     \deadcycles=0
   \fi}

\def\actualarrange#1%
  {\setbox0=\hbox{\thisisrealpage{\realfolio}#1}%
   \pusharrangedpage0
   \deadcycles=0 }

\def\goleftonpage%
  {\hskip-\linkermargeafstand
   \hskip-\linkermargebreedte
   \hskip-\paginascheiding
   \hskip-\linkerrandafstand
   \hskip-\linkerrandbreedte}

\def\doswapmargins%
  {\let\doswapmargins=\relax % to prevent local swapping
   \swapmacros\@@lylinkermargeafstand\@@lyrechtermargeafstand
   \swapmacros\@@lylinkerrandafstand\@@lyrechterrandafstand
   \swapdimens\linkermargebreedte\rechtermargebreedte
   \swapdimens\linkerrandbreedte\rechterrandbreedte}

\def\doifmarginswapelse#1#2%
  {\doifbothsides#1\orsideone#1\orsidetwo#2\od}

\def\swapmargins%
  {\doifmarginswapelse{}{\doswapmargins}}

% Output routines
%
% \dopagecontents#1#2  : tekst, floats en footnotes
% \dopagebody#1#2      : hoofd, \pagecontents, voet
% \dooutput            : outputroutine
%
% \ifinpagebody

\def\doejectpage#1%
  {\bgroup                         % de \ifdim is nodig omdat
   \par                            % anders een eventuele
   \ifdim\pagetotal>\pagegoal\else % laatste regel boven de
     %\normalvfill                 % baseline te staan terwijl
     \normalvfil                   % baseline te staan terwijl
   \fi                             % de vorige bladzijden op
   #1%                             % de baseline staan
   \egroup}

% ^^ NOG NETTER MAKEN, TEGELIJK MET MULTI COLUMNS EN ACHTERGRONDEN!

\def\ejectpage%
  {\doejectpage\eject}

\def\superejectpage%
  {\doejectpage\supereject}

\def\ejectinsert%
  {\flushfootnotes
   \bgroup
   \noftopfloats=\!!thousand
   \nofbotfloats=0
   \doflushfloats
   \egroup}

% De volgende macro's worden gedefinieerd in de module
% colo-ini. Om resetten bij twee maal laden te voorkomen
% checken we wel even. Anders krijgen we een mark-build-up.

\newif\ifinpagebody

\doifundefined{pushcolor}      {\def\pushcolor{}}
\doifundefined{popcolor}       {\def\popcolor{}}
\doifundefined{startcolorpage} {\def\startcolorpage{}}
\doifundefined{stopcolorpage}  {\def\stopcolorpage{}}

% bewaren tvb documentatie
%
% \hbox to \hsize
%   {\en
%    \switchnaarkorps[5pt]%
%    \emergencystretch2em
%    \dimen0=\baselineskip
%    \baselineskip=\dimen0 plus 1pt
%    \hsize=.2\hsize
%    \vsize=2\hsize
%    \ruledvbox to \vsize{\input tufte \par}\hss
%    \ruledvbox to \vsize{\input tufte \par\kern-\prevdepth}\hss
%    \ruledvbox to \vsize{\input tufte \par\kern0pt}\hss
%    \ruledvbox to \vsize{\input tufte \par\vfill}\hss
%    \ruledvbox to \vsize{\input tufte \par\kern-\prevdepth\vfill}}
%
% \hbox to \hsize
%   {\en
%    \switchnaarkorps[5pt]%
%    \emergencystretch2em
%    \dimen0=\baselineskip
%    \baselineskip=\dimen0 plus 1pt
%    \hsize=.18\hsize
%    \vsize=2.5\hsize
%    \setbox0=\vbox{\input tufte\relax}%
%    \ruledvbox to \vsize{\unvcopy0}\hss
%    \ruledvbox to \vsize{\unvcopy0\kern-\dp0}\hss
%    \ruledvbox to \vsize{\unvcopy0\kern0pt}\hss
%    \ruledvbox to \vsize{\unvcopy0\vfill}\hss
%    \ruledvbox to \vsize{\unvcopy0\kern-\dp0\vfill}}

% \def\dopagecontents#1#2%
%   {\dotopinsertions
%    \bgroup
%    \forgetall
%    \boxmaxdepth=\maxdepth
%    \dimen0=\dp#2%
%    \bgroup
%      #1#2\relax
%      \pushcolor
%      \dobotinsertions
%    \egroup
%    \ifr@ggedbottom
%      \kern-\dimen0
%      \vfil
%    \fi
%    \ifb@selinebottom
%      \kern-\dimen0
%      \kern\maxdepth
%    \fi
%    \egroup
%    \placefootnotes}

% \def\dopagecontents#1#2% \box<n> \unvbox<n>
%   {\bgroup% 
%    \forgetall
%    \boxmaxdepth=\maxdepth
%    \setbox0=\vbox to \teksthoogte
%      {\edef\currentpagedepth{\the\dp#2}% still to be derived from #1
%       \dotopinsertions
%       #1#2% \fuzzysnappedbox{#1}{#2}% goes wrong
%       \pushcolor
%       \ifgridsnapping
%         \vskip-\currentpagedepth
%         \vskip\openstrutdepth % \dp\strutbox
%         \prevdepth\openstrutdepth % \dp\strutbox
%         \dobotinsertions
%         \vfil
%       \else\ifr@ggedbottom
%         \vskip-\currentpagedepth
%         \vskip\openstrutdepth % \dp\strutbox
%         \prevdepth\openstrutdepth % \dp\strutbox
%         \dobotinsertions
%         \vfil
%       \else\ifb@selinebottom
%         \kern-\currentpagedepth
%         \kern\maxdepth
%         \dobotinsertions
%       \else
%        %\dobotinsertions
%       \fi\fi\fi
%       \ifdim\ht\footins>\!!zeropoint % beter dan \ifvoid\footins\else
%         \kern\skip\footins
%         \kern\ht\footins
%       \fi}%
%    \ifgridsnapping
%      \getnoflines\teksthoogte
%      \advance\noflines by -1
%      \scratchdimen=\noflines\lineheight
%      \advance\scratchdimen by \topskip
%    \else
%      \scratchdimen=\ht0
%    \fi
%    \setbox2=\hbox
%      {\ifvoid\savedfootins \else
%         \setbox\footins=\box\savedfootins
%       \fi
%       \lower\scratchdimen\vbox{\placefootnotes}}%
%    \smashbox2
%    \ht0=\!!zeropoint
%    \vbox to \teksthoogte
%      {\box0\box2}%
%    \egroup}

\def\dopagecontents#1#2% \box<n> \unvbox<n>
  {\bgroup
   \forgetall
   \boxmaxdepth=\maxdepth
   \setbox0=\vbox \ifbottomnotes to \teksthoogte \fi
     {\edef\currentpagedepth{\the\dp#2}% still to be derived from #1
      \dotopinsertions
      #1#2% \fuzzysnappedbox{#1}{#2}% goes wrong
      \pushcolor
      \ifgridsnapping
        \vskip-\currentpagedepth
        \vskip\openstrutdepth % \dp\strutbox
        \prevdepth\openstrutdepth % \dp\strutbox
        \dobotinsertions
        \vfil
      \else\ifr@ggedbottom
        \vskip-\currentpagedepth
        \vskip\openstrutdepth % \dp\strutbox
        \prevdepth\openstrutdepth % \dp\strutbox
        \dobotinsertions
        \vfil
      \else\ifb@selinebottom
        \kern-\currentpagedepth
        \kern\maxdepth
        \dobotinsertions
      \fi\fi\fi
      \ifdim\ht\footins>\!!zeropoint % beter dan \ifvoid\footins\else
        \kern\skip\footins
        \kern\ht\footins
      \fi}%
\ifbottomnotes
   \ifgridsnapping
     \getnoflines\teksthoogte
     \advance\noflines by -1
     \scratchdimen=\noflines\lineheight
     \advance\scratchdimen by \topskip
   \else
     \scratchdimen=\ht0
   \fi
\else
  \scratchdimen=\!!zeropoint
\fi
   \setbox2=\hbox
     {\ifvoid\savedfootins \else
        \setbox\footins=\box\savedfootins
      \fi
      \lower\scratchdimen\vbox{\placefootnotes}}%
   \smashbox2
\ifbottomnotes
    \ht0=\!!zeropoint
\fi
   \vbox to \teksthoogte
     {\box0\box2\ifbottomnotes\else\vfill\fi}%
   \egroup}

\def\dodummypageskip#1%
  {\getvalue{\s!dummy\c!commando#1}}

\setvalue{\s!dummy\c!commando\v!links}%
  {\hskip\linkerrandbreedte}

\setvalue{\s!dummy\c!commando\v!rechts}%
  {\hskip\rechterrandbreedte}

\setvalue{\s!dummy\c!commando\v!boven}%
  {\vskip\bovenhoogte} % \vbox to \bovenhoogte{\vss}}

\setvalue{\s!dummy\c!commando\v!onder}%
  {\vskip\onderhoogte} % \vbox to \onderhoogte{\vss}}

\def\plaatslinkerrandblok  {\dodummypageskip\v!links}
\def\plaatsrechterrandblok {\dodummypageskip\v!rechts}

\def\plaatsboventekstblok  {\dodummypageskip\v!boven}
\def\plaatsondertekstblok  {\dodummypageskip\v!onder}

% kan tzt nog eens als:
%
% \newtoks\everyboventekstblok
%
%\def\plaatsboventekstblok%
%  {\vbox to \bovenhoogte
%     {\the\everyboventekstblok}
%
% \def\doplaatsboventekstblok#1%
%   {\vbox to \bovenhoogte
%      {\@@tkboventekstvoor#1\@@tkboventekstna\kern\!!zeropoint}%
%    \vskip-\bovenhoogte}
%
% \appendtoks\interactiemenus[\v!boven]\to\everyboventekstblok
%
% kan vaker, is namelijk sneller als commalist

\newtoks\afterpage     \newtoks\aftereverypage
\newtoks\beforepage    \newtoks\beforeeverypage

\newif\ifshowgrid

\def\toongrid%
  {\tracegridsnappingtrue
   \showgridtrue}

\def\doplaatstekstblok#1#2%
  {\bgroup
   \setbox0=\hbox to \zetbreedte
     {\vbox to \teksthoogte
        {\offinterlineskip
         \boxmaxdepth\maxdepth
         \dopagecontents#1#2}}%
   \ht0=\teksthoogte
   \wd0=\zetbreedte
   \ifshowgrid
     \setgridbox2\zetbreedte\teksthoogte
     \hbox{\color[red]{\box2}\hskip-\zetbreedte\box0}%
   \else
     \box0
   \fi
   \egroup}

\def\getmainbox#1#2%
  {\setbox0=\vbox
     {\offinterlineskip  % na \paginaletter !
      \calculatereducedvsizes
      \calculatehsizes
      \swapmargins
      \vskip\hoofdhoogte
      \vskip\hoofdafstand
      \hbox
        {\bgroup
           \swapmargins
           \goleftonpage
           \plaatslinkerrandblok
           \hskip\linkerrandafstand
           \showpageseparation
           \plaatslinkermargeblok
           \hskip\linkermargeafstand
         \egroup
         \doplaatstekstblok#1#2%
         \bgroup
           \hskip\rechtermargeafstand
           \plaatstestinfo
           \plaatsrechtermargeblok
           \showpageseparation
           \hskip\rechterrandafstand
           \plaatsrechterrandblok
         \egroup}%
      \vfill}
     \smashbox0
     \box0}

% \def\setpagedisplacement%
%   {\global\voffset=\kopoffset
%    \global\hoffset=\rugoffset
%    \global\advance\voffset by -1in
%    \global\advance\hoffset by -1in}

% \def\centerpagebox#1%
%   {\printpapierbreedte=\papierschaal\printpapierbreedte
%    \printpapierhoogte =\papierschaal\printpapierhoogte
%    \setbox#1=\vbox to \printpapierhoogte
%      {\toppagebox
%       \hbox to \printpapierbreedte
%         {\ifdoublesidedprint
%            \doifbothsides
%              \leftpagebox\box#1\rightpagebox
%            \orsideone
%              \leftpagebox\box#1\rightpagebox
%            \orsidetwo
%              \rightpagebox\box#1\leftpagebox
%            \od
%          \else
%            \leftpagebox\box#1\rightpagebox
%          \fi}
%       \bottompagebox}}

\def\centerpagebox#1%
  {\printpapierbreedte=\papierschaal\printpapierbreedte
   \printpapierhoogte =\papierschaal\printpapierhoogte
   \setbox#1=\vbox to \printpapierhoogte
     {\@@ppboven
     %\toppagebox
      \hbox to \printpapierbreedte
        {\ifdoublesidedprint
           \doifbothsides
            %\leftpagebox\box#1\rightpagebox 
             \@@pplinks\box#1\@@pprechts
           \orsideone
            %\leftpagebox\box#1\rightpagebox 
             \@@pplinks\box#1\@@pprechts
           \orsidetwo
            %\rightpagebox\box#1\leftpagebox
             \@@pprechts\box#1\@@pplinks
           \od
         \else
          %\leftpagebox\box#1\rightpagebox
           \@@pplinks\box#1\@@pprechts
         \fi}%
      \par
     %\bottompagebox
      \@@pponder}}

\def\offsetprintbox#1%
  {\dimen0=\wd#1\dimen2=\ht#1\dimen4=\dp#1%
   \setbox#1=\vbox
     {\forgetall
      \offinterlineskip
      \vskip\kopoffset
      \doifbothsides
        \hskip\rugoffset
      \orsideone
        \hskip\rugoffset
      \orsidetwo
        \hskip-\rugoffset
      \od
      \box#1}%
   \wd#1=\dimen0\ht#1=\dimen2\dp#1=\dimen4}

\def\replicatebox#1#2#3%
  {\setbox#1=\vbox
     {\forgetall
      \offinterlineskip
      \dorecurse{#3}
        {\hbox{\dorecurse{#2}{\copy#1\hskip\@@lydx}\unskip}%
         \vskip\@@lydy}
      \unskip}}

\def\replicatepagebox#1%
  {\ifnum\@@lynx>0 \ifnum\@@lyny>0
     \replicatebox{#1}{\@@lynx}{\@@lyny}%
   \fi\fi}

\def\rotatepagebodybox#1#2#3%
  {\ifnum#2#3>0
     \setbox#1=\vbox
       {\edef\somerotation%
          {\ifdubbelzijdig\ifodd\realpageno#2\else#3\fi\else#2\fi}%
        \dorotatebox\somerotation\hbox{\box#1}}%
   \fi}

\def\rotatepaperbox#1%
  {\rotatepagebodybox{#1}\paperrotation\paperreverse}

\def\rotateprintbox#1%
  {\rotatepagebodybox{#1}\printrotation\printreverse}

\def\mirrorpagebodybox#1#2%
  {\ifcase#2\or
     \setbox#1=\vbox
       {\domirrorbox\vbox{\box#1}}%
   \fi}

\def\mirrorpaperbox#1%
  {\mirrorpagebodybox{#1}\papermirror}

\def\mirrorprintbox#1%
  {\mirrorpagebodybox{#1}\printmirror}

\def\scalepagebox#1%
  {\ifdim\@@lyschaal pt=1pt \else
     \setbox#1=\vbox
       {\schaal[\c!sx=\@@lyschaal,\c!sy=\@@lyschaal]{\box#1}}%
     \papierbreedte=\@@lyschaal\papierbreedte
     \papierhoogte =\@@lyschaal\papierhoogte
   \fi}

\def\negateprintbox#1%
  {\ifnegateprintbox
     \negatecolorbox{#1}%
   \fi}

\def\buildpagebox#1%
  {\setbox#1=\vbox to \papierhoogte
     {\hsize\papierbreedte
      \vskip\kopwit
      \doifbothsides
        \hskip\rugwit
      \orsideone
        \hskip\rugwit
      \orsidetwo
        \hskip\papierbreedte
        \hskip-\rugwit
        \hskip-\zetbreedte
      \od
      \box#1}%
   \dp#1=\!!zeropoint}

\def\pagecutmarksymbol%
  {\the\realpageno}%

\def\addpagecutmarks#1%
  {\doif{\@@lymarkering}{\v!aan}
     {\let\cutmarksymbol=\pagecutmarksymbol
      \makecutbox{#1}}}

\def\addpagecolormarks#1%
  {\doif{\@@lymarkering}{\v!kleur}
     {\let\cutmarksymbol=\pagecutmarksymbol
      \makecutbox{#1}%
      \ifnum\horizontalcutmarks>1 \chardef\colormarkoffset=4 \fi
      \ifnum\verticalcutmarks  >1 \chardef\colormarkoffset=4 \fi
      \colormarkbox{#1}}}

\newif\ifpagebodyornaments \pagebodyornamentstrue
\newif\ifarrangingpages    \arrangingpagesfalse

\let\poparrangedpages=\relax
\let\pusharrangedpage=\relax

\def\reportarrangedpage#1%
  {\showmessage
     {\m!systems}{23}
     {\the\realpageno.\the\pageno\ifnum\subpageno>0 .\the\subpageno\fi,#1}}

% \def\buildpagebody#1#2%
%   {\vbox
%      {\beginrestorecatcodes
%       \forgetall  % igv problemen, check: \boxmaxdepth\maxdimen
%       \boxmaxdepth\maxdimen % new
%       \mindermeldingen
%       \setbox0=\vbox
%         {\offinterlineskip
%          \ifpagebodyornaments
%            \getbackgroundbox
%            \getlogobox
%            \bgroup % else footnotes get inconsistent font/baseline
%              \doconvertfont{\@@lyletter}{}%
%              \offinterlineskip
%              \gettextboxes
%            \egroup
%          \fi
%          \getmainbox#1#2}% including footnotes 
%       \buildpagebox0
%       \ifpagebodyornaments
%         \addpagebackground0
%       \fi
%       \ifarrangingpages \else
%         \addpagecutmarks0
%         \replicatepagebox0
%         \scalepagebox0
%         \mirrorpaperbox0
%         \rotatepaperbox0
%         \addpagecolormarks0
%         \centerpagebox0
%         \mirrorprintbox0
%         \rotateprintbox0
%         \offsetprintbox0
%         \negateprintbox0
%       \fi
%       \box0
%       \endrestorecatcodes}}

\def\buildpagebody#1#2%
  {\vbox
     {\beginrestorecatcodes
      \forgetall  % igv problemen, check: \boxmaxdepth\maxdimen
      \boxmaxdepth\maxdimen % new
      \mindermeldingen
      \setbox0=\vbox
        {\offinterlineskip
         \ifpagebodyornaments
           \getbackgroundbox
           \getlogobox
           \bgroup % else footnotes get inconsistent font/baseline
             \doconvertfont{\@@lyletter}{}%
             \offinterlineskip
             \gettextboxes
           \egroup
         \fi
         \getmainbox#1#2}% including footnotes 
      \buildpagebox0
      \ifpagebodyornaments
        \addpagebackground0
      \fi
      \ifarrangingpages \else
        \addpagecutmarks0
        \replicatepagebox0
        \scalepagebox0
        \mirrorpaperbox0
        \rotatepaperbox0
        \addpagecolormarks0
        \centerpagebox0
\addprintbackground0
        \mirrorprintbox0
        \rotateprintbox0
        \offsetprintbox0
        \negateprintbox0
      \fi
      \box0
      \endrestorecatcodes}}

\def\addprintbackground#1% 
  {\ifsomebackgroundfound\v!papier
     \setbox#1=\vbox\localframed
       [\??ma\v!papier]%
       [\c!offset=\v!overlay,\c!strut=\v!nee,
        \c!breedte=\printpapierbreedte,\c!hoogte=\printpapierhoogte]%
       {\noindent\box#1}%
   \fi}

\def\finishpagebox#1%
  {\ifarrangingpages
     \addpagecutmarks#1%
     \addpagecolormarks#1%
     \centerpagebox#1%
     \mirrorprintbox#1%
     \rotateprintbox#1%
     \offsetprintbox#1%
     \negateprintbox#1%
   \fi}

% TBV testdoeleinden:

\def\dotoonprint[#1][#2][#3]%
  {\framed
     [\c!offset=\v!overlay,
      \c!strut=\v!nee]
     {\forgetall
      \mindermeldingen
      \globaldefs=-1
      \dimen0=\pagegoal
      \definieerpapierformaat[X][\c!breedte=4em, \c!hoogte=6em]%
      \definieerpapierformaat[Y][\c!breedte=12em,\c!hoogte=14em]%
      \stelpapierformaatin[#1,X][#2,Y]%
      \stellayoutin[#3]%
      \setbox0=\vbox
        {\framed
          [\c!offset=\v!overlay,\c!strut=\v!nee,
           \c!breedte=\papierbreedte,\c!hoogte=\papierhoogte]
          {\ss ABC\par DEF}}%
      \dubbelzijdigfalse
      \def\cutmarklength{.5em}%
      \addpagecutmarks0%
      \replicatepagebox0%
      \scalepagebox0%
      \mirrorpaperbox0%
      \rotatepaperbox0%
      \centerpagebox0%
      \mirrorprintbox0%
      \rotateprintbox0%
      \offsetprintbox0%
      \pagegoal=\dimen0
      \box0}}

\def\toonprint%
  {\dotripleempty\dotoonprint}

% \switchnaarkorps[8pt]
%
% \startcombinatie[4*4]
%   {\toonprint}                                       {\strut}
%   {\toonprint[][][plaats=midden]}                    {\type{plaats=midden}}
%   {\toonprint[][][plaats=midden,markering=aan]}      {\type{markering=aan}\break
%                                                      \type{plaats=midden}}
%   {\toonprint[][][plaats=midden,markering=aan,nx=2]} {\type{markering=aan}\break
%                                                      \type{plaats=midden}\break
%                                                      \type{nx=2}}
%   {\toonprint[][][plaats=links]}                     {\type{plaats=links}}
%   {\toonprint[][][plaats=rechts]}                    {\type{plaats=rechts}}
%   {\toonprint[][][plaats={links,onder}]}             {\type{plaats={links,onder}}}
%   {\toonprint[][][plaats={rechts,onder}]}            {\type{plaats={rechts,onder}}}
%   {\toonprint[][][nx=2,ny=1]}                        {\type{nx=2,ny=1}}
%   {\toonprint[][][nx=1,ny=2]}                        {\type{nx=1,ny=2}}
%   {\toonprint[][][nx=2,ny=2]}                        {\type{nx=2,ny=2}}
%   {\toonprint[][][nx=2,ny=2,plaats=midden]}          {\type{nx=2,ny=2}\break
%                                                       \type{plaats=midden}}
%   {\toonprint[][][rugoffset=3pt]}                    {\type{rugoffset=.5cm}}
%   {\toonprint[][][kopoffset=3pt]}                    {\type{kopoffset=.5cm}}
%   {\toonprint[][][schaal=1.5]}                       {\type{schaal=1.5}}
%   {\toonprint[][][schaal=0.8]}                       {\type{schaal=0.8}}
% \stopcombinatie
%
% \startcombinatie[3*4]
%   {\toonprint[liggend][][plaats=midden]}              {\type{liggend}}
%   {\toonprint[][liggend][plaats=midden]}              {\strut\break\type{liggend}}
%   {\toonprint[liggend][liggend][plaats=midden]}       {\type{liggend}\break\type{liggend}}
%   {\toonprint[90][][plaats=midden]}                   {\type{90}}
%   {\toonprint[][90][plaats=midden]}                   {\strut\break\type{90}}
%   {\toonprint[90][90][plaats=midden]}                 {\type{90}\break\type{90}}
%   {\toonprint[180][][plaats=midden]}                  {\type{180}}
%   {\toonprint[][180][plaats=midden]}                  {\strut\break\type{180}}
%   {\toonprint[180][180][plaats=midden]}               {\type{180}\break\type{180}}
%   {\toonprint[gespiegeld][][plaats=midden]}           {\type{gespiegeld}}
%   {\toonprint[][gespiegeld][plaats=midden]}           {\strut\break\type{gespiegeld}}
%   {\toonprint[gespiegeld][gespiegeld][plaats=midden]} {\type{gespiegeld}\break\type{gespiegeld}}
% \stopcombinatie

\chardef\normalpagebox=255

\appendtoks \restoreglobalbodyfont \to \everypagebody
\appendtoks \restorecolumnsettings \to \everypagebody

\def\dopagebody#1#2%
  {\getallmarks
   \the\everypagebody
   \startcolorpage
   \gotonextsubpage
   \dontshowboxes
   \naastpagina
   \checkreferences
   \checkmargeblokken
   \dotoks\beforeeverypage
   \flushtoks\beforepage
   \inpagebodytrue\buildpagebody#1#2%
   \flushtoks\afterpage
   \dotoks\aftereverypage
   \resetpagina
   \updatelistreferences
   \resetlayoutregels % mischien in shipout
   \stopcolorpage}

\def\beforefinaloutput%
  {}

\def\afterfinaloutput%
  {\forgetall
   \vskip\!!zeropoint\relax
   \ifvoid\normalpagebox
   \else
     \unvbox\normalpagebox
     \penalty\outputpenalty
   \fi
   \ifnum\outputpenalty>-\@MM\relax
   \else
     \dosupereject
   \fi
   \inpagebodytrue  % needed for enabling \blanko !
   \dosetbothinserts
   \setvsize % this is needed for interacting components, like floats and multicolumns
   \adaptfuzzypagegoal} % watch this hack!

\def\setpagecounters%
  {\setuserpageno{\ruwenummer[\s!page]}%
   \doifelse{\@@snstatus}{\v!stop}
     {\global\subpageno=0}
     {\global\subpageno=\ruwenummer[\s!subpage]}}

\newtoks\pageboundsettings

\prependtoks \initializepaper \to \pageboundsettings

\def\dofinaloutput#1#2%
  {\beforefinaloutput
   \the\everybeforeshipout
   \ifspecialbasedsettings
     \myshipout{\hbox{\hbox to \!!zeropoint{\the\pageboundsettings}\hbox{\dopagebody#1#2\setpagecounters}}}%
   \else
     \the\pageboundsettings
     \myshipout{\hbox{\dopagebody#1#2\setpagecounters}}%
   \fi
   \the\everyaftershipout
   \afterfinaloutput
   \popcolor}  % ... and here ...

\def\donofinaloutput#1#2%
  {\beforefinaloutput
   \the\everybeforeshipout
   \setpagecounters
   \message{[-\the\realpageno]}%
   \setbox0=\hbox
     {\the\everyshipout
      \dopagebody#1#2}%
   \deadcycles=0
   \gotonextrealpage
   \the\everyaftershipout
   \afterfinaloutput
   \popcolor}  % ... and here

\let\checkpageversion=\relax

\def\finaloutput#1#2%
  {\checkpageversion
   \ifverwerken
     \ifgeselecteerd
       \dofinaloutput#1#2%
     \else
       \donofinaloutput#1#2%
     \fi
   \else
     \ifgeselecteerd
       \donofinaloutput#1#2%
     \else
       \dofinaloutput#1#2%
     \fi
   \fi
   \resetselectiepagina
   \verhoogpaginanummer
   \checkpagedimensions
   \ifnum\outputpenalty>-\@MM\relax
   \else
     \dosupereject
   \fi
   \douitstellen}

\def\dooutput%
  {\finaloutput\unvbox\normalpagebox}

\output={\dooutput}

%I n=Beeldmerken
%I c=\definieerbeeldmerk,\plaatsbeeldmerken
%I
%I In het hoofd of in de voet kan een logo worden gezet met
%I het commando:
%I
%I   \plaatsbeeldmerken[naam]
%I
%I Plaatsen kan dan ook pas nadat een beeldmerk is gedefinieerd:
%I
%I   \definieerbeeldmerk[naam][lokatie][plaats][commando=,status=]
%I
%I waarbij status 'start' of 'stop' kan zijn. In geval van
%I 'start' wordt op elke bladzijde het logo geplaatst.
%I
%I Mogelijke lokaties zijn 'boven', 'hoofd', 'voet' en 'onder' en
%I als plaats kan worden opgegeven 'linkerrand', 'linkermarge',
%I 'links', 'midden', 'rechts', 'rechtermarge' en 'rechterrand'.
%I
%I Logo's worden boven, onder of in de hoofd- of voetregel gezet,
%I zo hoog of laag mogelijk. Verdere positionering zal dus in
%I het commando moeten plaatsvinden!

\newbox\leftlogos
\newbox\rightlogos

\newif\ifnewlogos

% \logostatus
%
% 0 = niet plaatsen                    > 0
% 1 = direkt plaatsen                  > 1
% 2 = berekenen en plaatsen            > 1
% 3 = een pagina berekenen en plaatsen > 2

\def\logostatus{0}

\def\gedefinieerdebeeldmerken{}
\def\teplaatsenbeeldmerken{}

\def\dodefinieerbeeldmerk[#1][#2][#3][#4]%
  {\addtocommalist{#1}\gedefinieerdebeeldmerken
   \setvalue{\??lo#2#3}{#1}%
   \getparameters[\??lo#2#3][#4]%
   \gdef\logostatus{2}}

\def\definieerbeeldmerk%
  {\doquadrupleargument\dodefinieerbeeldmerk}

\def\complexplaatsbeeldmerken[#1]%
  {\xdef\teplaatsenbeeldmerken{#1}%
   \gdef\logostatus{3}}

\def\simpleplaatsbeeldmerken%
  {\global\let\teplaatsenbeeldmerken=\gedefinieerdebeeldmerken
   \gdef\logostatus{3}}

\definecomplexorsimple\plaatsbeeldmerken

\def\doplaatsbeeldmerken#1#2%
  {\bgroup
   \setbox0=\vbox
     {\hbox
        {\ifnum\logostatus=3
           \def\docommando##1%
             {\ExpandBothAfter\doifinset{\getvalue{\??lo#1##1}}{\teplaatsenbeeldmerken}
                {#2{\hbox{\getvalue{\??lo#1##1\c!commando}}}}}%
         \else
           \def\docommando##1%
             {\doifvalue{\??lo#1##1\c!status}{\v!start}
                {#2{\hbox{\getvalue{\??lo#1##1\c!commando}}}}}%
         \fi
         \def\dodocommando##1##2##3##4##5##6%
           {\hskip\linkerrandafstand
            \hskip\pageseparation
            \hbox to \linkermargebreedte{\docommando{##2}\hss}%
            \hskip\linkermargeafstand
            \hbox to \zetbreedte{\docommando{##3}\hss\docommando{##4}}%
            \hskip\rechtermargeafstand
            \hbox to \rechtermargebreedte{\hss\docommando{##5}}%
            \hskip\pageseparation
            \hskip\rechterrandafstand
            \hbox to \rechterrandbreedte{\hss\docommando{##6}}}%
         \normalbaselines
         \hsmash
           {\hbox to \zetbreedte{\hss\docommando\c!midden\hss}}%
         \hsmash
           {\doifbothsides
              \hskip-\rugwit
            \orsideone
              \hskip-\rugwit
            \orsidetwo
              \hskip-\papierbreedte
              \hskip+\rugwit
              \hskip+\zetbreedte
            \od
            \hbox to \papierbreedte{\docommando\v!pagina\hss}}%
         \swapmargins
         \goleftonpage
         \doifbothsidesoverruled
           \dodocommando
             {\v!linkerrand}{\v!linkermarge}{\v!links}
             {\v!rechts}{\v!rechtermarge}{\v!rechterrand}%
         \orsideone
           \dodocommando
             {\v!linkerrand}{\v!linkermarge}{\v!links}
             {\v!rechts}{\v!rechtermarge}{\v!rechterrand}%
         \orsidetwo
           \dodocommando
             {\v!rechterrand}{\v!rechtermarge}{\v!rechts}
             {\v!links}{\v!linkermarge}{\v!linkerrand}%
         \od}}%
   \getboxheight\dimen0\of\box0\relax
   \vskip-\dimen0
   \box0
   \egroup}

\def\setlogobox#1#2%
  {\global\setbox#1=\vbox to \papierhoogte
     {\offinterlineskip
      \mindermeldingen
      \calculatereducedvsizes
      #2\relax
      \vskip-\kopwit
      \doplaatsbeeldmerken\v!boven\vsmash
      \vskip\kopwit
      \doplaatsbeeldmerken\v!hoofd\vsmash
      \vskip\hoofdhoogte
      \vskip\hoofdafstand
      \doplaatsbeeldmerken\v!tekst\vsmash  % evt \vbox
      \vskip\teksthoogte
      \vskip\voetafstand
      \vskip\voethoogte
      \doplaatsbeeldmerken\v!voet\vbox
      \vfilll
      \doplaatsbeeldmerken\v!onder\vbox%
      \vskip\kopwit}
  \smashbox#1}

\def\setlogoboxes%
  {\showmessage{\m!layouts}{7}{}%
   \setlogobox\leftlogos\relax
   \ifdubbelzijdig
     \setlogobox\rightlogos\doswapmargins
   \fi}

\def\getlogobox%
  {\ifnum\logostatus>0
     \ifnum\logostatus=3
       \setlogoboxes
       \gdef\logostatus{2}%
     \else\ifnum\logostatus=2
       \setlogoboxes
       \gdef\logostatus{1}%
     \else\ifnewlogos
       \gdef\logostatus{2}%
       \setlogoboxes
       \gdef\logostatus{1}%
       \global\newlogosfalse
     \fi\fi\fi
     \doifmarginswapelse
       {\copy\leftlogos}
       {\copy\rightlogos}%
   \fi}

%I n=Spatiering
%I c=\stelspatieringin
%I c=\omlaag,\opelkaar,\spatie,\vastespaties
%I
%I De ruimte na interpunctie worden ingesteld met:
%I
%I   \stelspatieringin[instelling]
%I
%I waarbij de volgende instellingen mogelijk zijn:
%I
%I   ruim              flexibele ruimte na interpunctie
%I   opelkaar          een spatie na interpunctie
%I
%I Bij een smalle layout levert de instelling 'ruim' minder
%I in de marge uitstekende (niet af te breken) woorden op.
%I
%P
%I Andere commando's zijn:
%I
%I   \omlaag[afstand]      een vaste afstand omlaag
%I   \opelkaar             ruimte tussen regels weghalen
%I
%I   \spatie               een (harde) spatie
%I   \geenspatie           geen vorige/volgende spatie
%I
%I   \hfil \hfill \hfilll  opvullen met horizontaal wit
%I   \vfil \vfill \vfilll  opvullen met vertikaal wit
%I
%I   \strut                karakter-box zonder breedte
%I
%I   \vastespaties         geeft ~ de breedte van een cijfer

% \frenchspacing leidt soms tot afbreken tussen -, vandaar
% de variant \newfrenchspacing.

\def\dofrenchspacing#1%
  {\sfcode`\.#1 \sfcode`\,#1\relax
   \sfcode`\?#1 \sfcode`\!#1\relax
   \sfcode`\:#1 \sfcode`\;#1\relax}

\def\frenchspacing%
  {\dofrenchspacing{1000}}   % \@m

\def\newfrenchspacing%
  {\dofrenchspacing{1050}}   % \@ml

\def\complexstelspatieringin[#1]%
  {\processaction
     [#1]
     [\v!opelkaar=>\newfrenchspacing,
          \v!ruim=>\nonfrenchspacing]%
   \updateraggedskips}

\def\simplestelspatieringin%
  {\updateraggedskips}

\definecomplexorsimple\stelspatieringin

\bgroup
\catcode`\~=\@@active       % eigenlijk is ~ al actief
\gdef\fixedspaces%          % in Plain \TeX, maar we weten
  {\catcode`\~=\@@active    % nooit wat er inmiddels is
   \def~{\fixedspace}}      % gebeurd, vandaar.
\egroup

\def\space      { }
\def\fixedspace {\hskip.5em\relax}
\def\nospace    {\unskip\ignorespaces}

\let\spatie     \space
\let\hardespatie\fixedspace
\let\geenspatie \nospace

\def\opelkaar%
  {\nointerlineskip}

\def\omlaag[#1]% nog eens mooier, relateren aan blanko
  {\nointerlineskip
   \vskip#1 }

%I n=Witruimte
%I c=\stelwitruimtein,\witruimte,\geenwitruimte
%I c=\startopelkaar,\startvanelkaar
%I c=\startregelcorrectie,\corrigeerwitruimte
%I
%I De afstand tussen paragrafen is in te stellen met:
%I
%I   \stelwitruimtein[maat]
%I
%I In te vullen op de plaats van 'maat' (12pt, 1cm) of een
%I van de aanduidingen klein, middel of groot. Als niets
%I wordt meegegeven, dus alleen \stelwitruimtein, dan
%I wordt de ingestelde witruimte aangepast aan het formaat
%I letter.
%I
%I Voor elke lege regel in de ASCII-file voegt TEX de
%I ingestelde witruimte tussen.
%I
%I Het commando \witruimte dwingt witruimte af en het
%I commando \geenwitruimte maakt witruimte ongedaan.
%I
%I Behalve met de hier beschreven witruimte-commando's is de
%I witruimte tussen paragrafen te be‹nvloeden met behulp van
%I de elders beschreven blanko-commando's.
%P
%I Een stuk tekst kan zonder witruimte worden gezet door het
%I tussen de volgende commando's op te nemen:
%I
%I   \startopelkaar
%I   \stopopelkaar
%I
%I Waarbij een optioneel argument [blanko] mogelijk is. De
%I tegenhanger hiervan is:
%I
%I   \startvanelkaar
%I   \stopvanelkaar
%P
%I TeX handelt de interlinie van een (omlijnde) box of een
%I rule anders af dan van een regel tekst. In dergelijke
%I gevallen kan de volgende constructie worden gebruikt:
%I
%I   \startregelcorrectie
%I     \omlijnd{tekst}
%I   \stopregelcorrectie

\newskip\tussenwit
\tussenwit=\!!zeropoint

\def\blankokleinmaat%
  {\smallskipamount}

\def\blankomiddelmaat%
  {\medskipamount}

\def\blankogrootmaat%
  {\bigskipamount}

\def\currentwitruimte%
  {\!!zeropoint}

\def\stelwitruimteopnieuwin%
  {\expanded{\stelwitruimtein[\currentwitruimte]}}

% \def\dodostelwitruimtein[#1]%
%   {\processallactionsinset
%      [#1]
%      [\v!herstel=>\parskip=\tussenwit,
%         \v!regel=>\edef\currentwitruimte{#1}%
%                   \tussenwit=\baselineskip
%                   \parskip=\tussenwit,
%          \v!vast=>\tussenwit=1\tussenwit
%                   \parskip=1\parskip,
%       \s!default=>\doifnot{\currentwitruimte}{\v!geen}
%                     {\stelwitruimteopnieuwin},
%       \s!unknown=>\edef\currentwitruimte{#1}%
%                   \assigndimension{#1}
%                     {\tussenwit}{\blankokleinmaat}
%                     {\blankomiddelmaat}{\blankogrootmaat}%
%                   \parskip=\tussenwit]}

\newif\ifwitruimteflexibel

\def\dodostelwitruimtein[#1]%
  {\witruimteflexibeltrue
   \processallactionsinset
     [#1]
     [\v!herstel=>,
         \v!vast=>\witruimteflexibelfalse,
     \v!flexibel=>\witruimteflexibeltrue,
        \v!regel=>\tussenwit=\baselineskip,
   \v!halveregel=>\tussenwit=.5\baselineskip,
      \s!default=>\doifnot{\currentwitruimte}{\v!geen}
                    {\stelwitruimteopnieuwin},
      \s!unknown=>\@EA\assigndimension\@EA{\commalistelement} % \@EA is nodig
                    {\tussenwit}
                    {\blankokleinmaat}{\blankomiddelmaat}{\blankogrootmaat}]%   % te vangen
   \edef\currentwitruimte%
     {\ifdim\tussenwit=\!!zeropoint
        \v!geen
      \else
        \ifgridsnapping\the\baselineskip\else\the\tussenwit\fi
      \fi}%
   \ifgridsnapping
     \witruimteflexibelfalse
     \tussenwit=1\tussenwit
     \ifdim\tussenwit>\!!zeropoint
       \tussenwit=\baselineskip
     \fi
   \else
     \ifwitruimteflexibel \else \tussenwit=1\tussenwit \fi
   \fi
   \parskip=\tussenwit}

\def\dostelwitruimtein[#1]%
  {\expanded{\dodostelwitruimtein[#1]}}

\def\stelwitruimtein%
  {\dosingleempty\dostelwitruimtein}

\def\geenwitruimte%
  {\ifdim\parskip>\!!zeropoint\relax
     \ifdim\lastskip=-\parskip
     \else
       \vskip-\parskip
     \fi
   \fi}

\def\savecurrentwitruimte%
  {\edef\restorecurrentwitruimte%
     {\tussenwit=\the\tussenwit
      \parskip=\the\parskip
      \noexpand\def\noexpand\currentwitruimte{\currentwitruimte}%
      \ifwitruimteflexibel
        \noexpand\witruimteflexibeltrue
      \else
        \noexpand\witruimteflexibelfalse
      \fi}}

% deze variant is nodig binnen \startopelkaar
% steeds testen:
%
% \hoofdstuk{..}
% \plaatslijst[..]
% \hoofdstuk{..}
% \input tufte
%
% met/zonder witruimte

\def\witruimte%
  {\par
   \ifdim\parskip>\!!zeropoint\relax
    %\ifdim\lastskip>\parskip \else
     % \removelastskip interferes with blanko blokkeer en klein
       \vskip\parskip
    %\fi
   \fi}

\def\nonoblanko[#1]%
  {\par}

\def\noblanko%
  {\dosingleempty\nonoblanko}

% De onderstaande macro handelt ook de situatie dat er geen
% tekst tussen \start ... \stop is geplaatst. Daartoe wordt de
% laatste skip over de lege tekst heen gehaald. Dit komt goed
% van pas bij het plaatsen van (mogelijk lege) lijsten.

\newif\ifopelkaar

\def\noparskipsignal {0.00001pt}
\def\lastdoneparskip {0pt}

\def\startopelkaar%
  {\dosingleempty\dostartopelkaar}

\def\dostartopelkaar[#1]% nesting afvangen
  {\par
   \ifvmode
     \edef\lastdoneparskip{\the\lastskip}%
\edef\lastdoneprevdepth{\the\prevdepth}% zeer recent toegevoegd
     \ifdim\prevdepth=-1000pt   % toegevoegd omdat binnen
     \else                      % een vbox een extra skip
       \witruimte               % ongewenst is; dit kan
\baselinecorrection %% zie in \plaatsregister[n=1]
       \vskip\noparskipsignal   % waarschijnlijk ook in
     \fi                        % blanko blokkeer
     \bgroup
     \doifelse{#1}{\v!blanko}
       {\opelkaarfalse}
       {\opelkaartrue}%
     \blanko[\v!blokkeer]%
     \stelwitruimtein[\v!geen]
  \fi}

\def\stopopelkaar%
  {\par
\ifvmode
   \egroup
   \ifdim\lastskip=\noparskipsignal\relax
     \removelastskip
     \geenwitruimte
     \vskip-\lastdoneparskip
     \vskip+\lastdoneparskip
\prevdepth-\lastdoneprevdepth % zeer recent toegevoegd
   \fi
\fi}

\def\startvanelkaar%
  {\blanko
   \leavevmode
   \bgroup}

\def\stopvanelkaar%
  {\egroup
   \blanko}

% De onderstaande macro's moeten nog eens nader worden uitgewerkt.
% Ze spelen een rol bij de spatiering rond omkaderde teksten
% en/of boxen zonder diepte.

\def\toonregelcorrectie   {\showbaselinecorrection}
\def\regelcorrectie       {\baselinecorrection}
%\def\startregelcorrectie {\startbaselinecorrection}
%\def\stopregelcorrectie  {\stopbaselinecorrection}

\definecomplexorsimpleempty\startregelcorrectie

% \prevdepth crosses pageboundaries!

\let\dorondomregelcorrectie=\relax

\def\complexstartregelcorrectie[#1]%
  {\bgroup
   \processaction
     [#1]
     [ \v!blanko=>\let\dorondomregelcorrectie=\blanko,
      \s!default=>\let\dorondomregelcorrectie=\relax,
      \s!unknown=>{\def\dorondomregelcorrectie{\blanko[#1]}}]%
   \dorondomregelcorrectie
   \startbaselinecorrection
   \offbaselinecorrection}

\def\stopregelcorrectie%
  {\stopbaselinecorrection
   \dorondomregelcorrectie
   \egroup}

\def\corrigeerwitruimte%
  {\dowithnextbox
     {\startbaselinecorrection
      \box\nextbox
      \stopbaselinecorrection}%
   \vbox}

%I n=Regelafstand
%I c=\stelinterliniein
%I
%I De regelafstand is in te stellen met het commando:
%I
%I   \stelinterliniein[factor]
%I
%I Invulmogelijkheden voor 'factor' zijn: klein (1.00),
%I middel (1.25), groot (1.50) of een getal. OOk kan
%I aan of uit worden opgegeven.
%I
%I Als het commando zonder [factor] wordt gegeven, dan
%I worden de interlinie aangepast aan het formaat van het
%I actuele letterformaat. Een aan het formaat aangepaste
%I interlinie kan ook worden ingesteld met:
%I
%I   \stelinterliniein[reset,factor]
%I
%I In z'n eenvoudigste vorm \stelinterliniein wordt de
%I interlinie aangepast aan het formaat letter.

%D There are two ways to influence the interline spacing. The
%D most general and often most consistent way is using
%D
%D \showsetup{\y!stelinterliniein}
%D
%D For instance
%D
%D \starttypen
%D \setupinterlinespace[line=2.8ex]
%D \stoptypen
%D
%D This setting adapts itself to the bodyfontsize, while for
%D instance saying
%D
%D \starttypen
%D \setupinterlinespace[line=12pt]
%D \stoptypen
%D
%D sets things fixed for all sizes, which is definitely not
%D what we want. Therefore one can also say:
%D
%D \starttypen
%D \definecorpsenvironment[9pt][interlinespace=11pt]
%D \stoptypen
%D
%D One can still use \type{\setupinterlinespace} (without
%D arguments) to set the interline space according to the
%D current font, e.g. a \type{\bfa}.

\newif\iflocalinterlinespace

\def\bodyfontinterlinespecs%
  {\??ft\normalizedbodyfontsize\c!interlinie}

\def\bodyfontinterlinespace%
  {\csname\bodyfontinterlinespecs\endcsname}

\def\presetnormallineheight%
  {\edef\normallineheight{\@@itregel}%
   \iflocalinterlinespace \else
     \doifdefined{\bodyfontinterlinespecs}
       {\doifsomething{\bodyfontinterlinespace}
          {\edef\normallineheight{\bodyfontinterlinespace}}}%
   \fi}

\def\complexstelinterliniein[#1]% \commalistelement ipv #1
  {\doifassignmentelse{#1}
     {\getparameters[\??it][#1]%
      \scratchdimen=0\@@ithoogte pt
      \advance\scratchdimen by 0\@@itdiepte pt
      \ifdim\scratchdimen>1pt
        \showmessage{\m!layouts}{10}{\@@ithoogte,\@@itdiepte}%
        \let\@@ithoogte=\strutheightfactor
        \let\@@itdiepte=\strutdepthfactor
      \else
        \let\strutheightfactor=\@@ithoogte
        \let\strutdepthfactor =\@@itdiepte
      \fi
      \let\normallineheight=\@@itregel
      \let\topskipfactor   =\@@itboven
      \let\maxdepthfactor  =\@@itonder
      \setfontparameters % redundant \setstrut
      \updateraggedskips} % yes indeed
     {\processallactionsinset % \regelwit = dummy !
        [#1]
        [     \v!aan=>\oninterlineskip,
              \v!uit=>\offinterlineskip,
            \v!reset=>\setfontparameters,
          \s!unknown=>\assignvalue{#1}{\regelwit}{1.00}{1.25}{1.50}%
                      \spacing{\regelwit}]}}

\def\simplestelinterliniein%
  {\localinterlinespacetrue
   \setfontparameters
   \updateraggedskips % funny one here
   \localinterlinespacefalse}

\definecomplexorsimple\stelinterliniein

%I n=Blanko
%I c=\blanko,\geenblanko,\stelblankoin
%I c=\startregelcorrectie
%I
%I Behalve met de hier beschreven blanko-commando's is de
%I witruimte tussen paragrafen te be‹nvloeden met behulp van
%I de elders beschreven witruimte-commando's.
%I
%I Het commando
%I
%I   \blanko[sprong]
%I
%I voegt witruimte tussen paragrafen toe.
%I
%I Mogelijke instellingen voor 'sprong' zijn: terug, klein,
%I middel, groot. Per blanko is elke combinatie van
%I instellingen toegestaan. Ook een veelvoud van een instelling
%I is mogelijk. Enkele voorbeelden:
%I
%I   \blanko[terug,3*groot]
%I   \blanko[klein,middel]
%P
%I Naast de genoemde instellingen zijn enkele bijzondere
%I instellingen mogelijk:
%I
%I   wit         tussenvoegen van \witruimte
%I   geenwit     terugspringen van \witruimte
%I   blokkeer    overslaan van de volgende \blanko
%I   reset       opheffen van \blanko[blokkeer]
%I   forceer     afdwingen van een blanko (bovenaan)
%I
%I Ook deze instellingen zijn in combinatie met andere te
%I gebruiken. Een voorbeeld: \blanko[forceer,wit,2*middel].
%I
%I Het commando \blanko (zonder instelling) is gelijk aan
%I \blanko[groot].
%I
%I Het commando \geenblanko maakt het commando \blanko
%I ongedaan.
%P
%I Met het commando's
%I
%I   \stelblankoin[maat]
%I
%I is het mogelijk de spronggrootte in te stellen. De maat
%I kan worden opgegeven in getallen en eenheden (12pt, 1cm).
%I De standaard instellingen krijgt met met 'normaal',
%I regelafstanden met 'regel'.
%I
%I Het commando \stelblankoin (zonder argument) past de sprong
%I aan het formaat letter aan.
%P
%I Rond omlijnde tekst, of algemener: rond lijnen, wordt
%I geen witruimte gegenereerd. Wil men dit wel, dan dient men
%I de betreffende tekst te omringen met:
%I
%I   \startregelcorrectie
%I   \stopregelcorrectie

% In earlier versions \type{\bigskipamount} was
% \type{\ht\strutbox} and the stretch was plus or minus
% \type{.4\dp\strutbox}. Don't ask me why. The most recent
% implementation is based on a user supplied distance, which
% is by default \type{.75\normalskipamount} where
% \type{\normalskipamount} equals the current baseline
% distance.

\newif\ifblankoreset        \blankoresetfalse
\newif\ifblankoblokkeer     \blankoblokkeerfalse
\newif\ifblankogeenwit      \blankogeenwitfalse
\newif\ifdoeblanko          \doeblankofalse
\newif\ifblankoflexibel     \blankoflexibeltrue
\newif\ifblankobuiten
\newif\ifblankoforceer

\newskip\blankoskip         \blankoskip=\bigskipamount
\newskip\blankoskipamount

\def\skipfactor       {.75}
\def\skipgluefactor   {.25}

%\def\normalskipamount%
%  {\openlineheight
%     \ifblankoflexibel
%       \!!plus\skipgluefactor\openlineheight
%       \!!minus\skipgluefactor\openlineheight
%     \fi
%   \relax}

\def\normalskipamount%
  {\openlineheight
     \ifgridsnapping \else \ifblankoflexibel
       \!!plus\skipgluefactor\openlineheight
       \!!minus\skipgluefactor\openlineheight
     \fi \fi
   \relax}

\def\regelafstand{\normalskipamount}

\def\deblankoskip{\skipfactor\regelafstand}

\def\laatsteblankoskip%
  {\blankoskip}

\def\geenblanko%
  {\removelastskip}

\def\dosingleblanko#1% ook nog \v!halveregel+fuzzysnap
  {\doifelse{#1}{\v!regel}
     {\blankoskipamount=\openlineheight}
     {\ifgridsnapping
        \assigndimension{#1}{\blankoskipamount}%
          {.25\openlineheight}{.5\openlineheight}{\openlineheight}%
      \else
        \assigndimension{#1}{\blankoskipamount}%
          {\smallskipamount}{\medskipamount}{\bigskipamount}%
      \fi}%
   \global\advance\blankoskip by \blankoskipamount}

\newif\iffuzzyvskip

\def\doblanko#1%
  {\processallactionsinset
     [#1]
     [    \v!groot=>\dosingleblanko\v!groot, % happens often
         \v!buiten=>\ifvmode\ifinner\blankobuitentrue\fi\fi,
          \v!reset=>\global\blankoresettrue,
           \v!back=>\geenblanko,
            \v!wit=>\global\advance\blankoskip by \parskip,
        \v!formule=>\global\advance\blankoskip by \medskipamount,
        \v!geenwit=>\global\blankogeenwittrue,
           -\v!wit=>\global\advance\blankoskip by -\parskip,
       \v!blokkeer=>\global\blankoblokkeertrue,
        \v!forceer=>\global\blankoforceertrue,
          \v!regel=>\global\advance\blankoskip by \lineheight,
     \v!halveregel=>\global\fuzzyvskiptrue\global\advance\blankoskip by .5\lineheight,
        \s!unknown=>{\herhaalmetcommando[#1]\dosingleblanko}]}

\def\oldprevdepth{\prevdepth}%
\def\newprevdepth{-1001pt}

\def\mindimen{0.00002pt}

\def\docomplexdoblanko[#1]% pas op \relax's zijn nodig ivm volgende \if
  {\global\blankoresetfalse
   \global\blankoblokkeerfalse
   \global\blankogeenwitfalse
   \global\blankoskip=\!!zeropoint\relax
   \global\blankoforceerfalse
   \blankobuitenfalse
   \processcommalist[#1]\doblanko
   \ifblankobuiten
   \else
     \par
     \ifvmode
       \ifblankoforceer\ifdim\prevdepth>\!!zeropoint\else
         \vbox{\strut}\kern-\lineheight
       \fi\fi
       \ifblankoblokkeer
         \global\doeblankofalse
         \edef\oldprevdepth{\the\prevdepth}%
         \prevdepth=\newprevdepth
       \else
         \global\doeblankotrue
       \fi
       \ifblankoreset
         \global\doeblankotrue
         \ifdim\prevdepth=\newprevdepth
           \prevdepth=\oldprevdepth
         \fi
       \fi
       \ifdoeblanko
         \ifdim\lastskip<\blankoskip\relax
           % else when \blanko[2*groot] + \blanko[3*groot] with parskip
           % equaling 1*groot, gives a groot=\parskip so adding a small
           % value makes it distinguishable; can also be done at parskip
           % setting time (better)
           \global\advance\blankoskip by \mindimen\relax % = skip
           % test this on 2* + 3* and parskip groot
           \ifblankogeenwit
             \global\advance\blankoskip by -\parskip
           \else
             \ifdim\lastskip=\parskip
             \else  % force this due to previous comment
               \ifdim\parskip>\!!zeropoint\relax
                 \ifdim\blankoskip<\parskip\relax
                   \global\blankoskip=\!!zeropoint
                 \else
                   \global\advance\blankoskip by -\parskip
                 \fi
               \fi
             \fi
           \fi
           \ifdim\prevdepth=\newprevdepth
           \else
             \iffuzzyvskip
               \removelastfuzzyvskip
               \fuzzyvskip\blankoskip\relax
             \else
               \removelastskip
               \vskip\blankoskip\relax
             \fi
           \fi
         \else
           \iffuzzyvskip
             \removelastfuzzyvskip
             \fuzzyvskip\blankoskip\relax
           \fi
         \fi
       \fi
     \fi
   \fi
   \global\fuzzyvskipfalse
   \presetindentation}

\def\complexdodoblanko[#1]%
  {\flushfootnotes
   \ifopelkaar
     \ifinpagebody
       \expanded{\docomplexdoblanko[#1]}% \expanded=nieuw
     \else
       \par
     \fi
   \else
     \expanded{\docomplexdoblanko[#1]}% \expanded = nieuw
   \fi}

\def\doindirectblanko#1%
  {\ifundefined{\??bo#1}% <-etex \expandafter\ifx\csname\??bo#1\endcsname\relax
     \expanded{\complexdodoblanko[#1]}%
   \else
     \expandafter\complexdoblanko\expandafter[\csname\??bo#1\endcsname]%
   \fi}

\def\complexdoblanko[#1]% enables [force,8\bodyfontsize]
  {\doifinstringelse{,}{#1}
     {\expanded{\complexdodoblanko[#1]}}
     {\doifnumberelse{#1}
        {\expanded{\complexdodoblanko[#1]}}
        {\doindirectblanko{#1}}}}

\def\currentblanko%
  {\v!groot}

%D For a long time we had: 
%D
%D \startypen 
%D \def\simpledoblanko%
%D   {\doifelse{\currentwitruimte}{\v!geen}
%D      {\blanko[\currentblanko]}
%D      {\blanko[\currentwitruimte]}}
%D \stoptypen
%D
%D But Berend de Boer wanted more control, so now we have:  

\def\simpledoblanko%
  {\doifelse{\currentwitruimte}{\v!geen}
     {\blanko[\currentblanko]}
     {\blanko[\s!default]}}

%D Another useful definition would be:
%D
%D \starttypen 
%D \definieerblanko
%D   [\s!default]
%D   [\v!groot]
%D \stoptypen

\def\blanko% % the \relax is definitely needed due to the many \if's
  {\relax\complexorsimple\doblanko}

\def\dostelblankoin#1%
  {\bgroup
   \skip0=#1\relax
   \xdef\globalblanko{\the\skip0}%
   \egroup
   \bigskipamount=\globalblanko
   \smallskipamount=\globalblanko
   \medskipamount=\globalblanko
   \divide\medskipamount by 2\relax
   \divide\smallskipamount by 4\relax}%

\def\complexstelblankoin[#1]%
  {\ifgridsnapping
     \blankoflexibelfalse
   \else
     \ExpandFirstAfter\processallactionsinset
       [#1]
       [ \v!flexibel=>\blankoflexibeltrue,
             \v!vast=>\blankoflexibelfalse]%
   \fi
   \ExpandFirstAfter\processallactionsinset
     [#1]
     [ \v!flexibel=>\dostelblankoin{\deblankoskip},
           \v!vast=>\dostelblankoin{\deblankoskip},
          \v!regel=>\edef\deblankoskip{\regelafstand}%
                    \dostelblankoin{\deblankoskip}%
                    \let\deblanko=\v!groot,
     \v!halveregel=>\scratchskip=.5\regelafstand
                    \edef\deblankoskip{\the\scratchskip}%
                    \dostelblankoin{\deblankoskip}%
                    \let\deblanko=\v!middel,
          \v!groot=>\ifgridsnapping
                      \edef\deblankoskip{\regelafstand}%
                      \dostelblankoin{\deblankoskip}%
                    \fi
                    \def\currentblanko{\v!groot}%
                    \let\deblanko=\v!groot,
         \v!middel=>\def\currentblanko{\v!middel}%
                    \let\deblanko=\v!middel,
          \v!klein=>\def\currentblanko{\v!klein}%
                    \let\deblanko=\v!klein,
        \v!normaal=>\dostelblankoin{\deblankoskip}%
                    \let\deblanko=\v!groot,
      \v!standaard=>\edef\deblankoskip{\skipfactor\regelafstand}%
                    \dostelblankoin{\deblankoskip}%
                    \let\deblanko=\v!groot,
        \s!default=>\dostelblankoin{\deblankoskip}%
                    \let\deblanko=\v!groot,
        \s!unknown=>\let\deblankoskip=\commalistelement
                    \dostelblankoin{\deblankoskip}%
                    \let\deblanko=\v!groot]%
   \stelwitruimtein}

\definecomplexorsimpleempty\stelblankoin

\def\dodefinieerblanko[#1][#2]%
  {\setvalue{\??bo#1}{#2}}

\def\definieerblanko%
  {\dodoubleargument\dodefinieerblanko}

\def\savecurrentblanko%
  {\edef\restorecurrentblanko%
     {\bigskipamount=\the\bigskipamount
      \medskipamount=\the\medskipamount
      \smallskipamount=\the\smallskipamount
      \noexpand\def\noexpand\currentblanko{\currentblanko}%
      \ifblankoflexibel
        \noexpand\blankoflexibeltrue
      \else
        \noexpand\blankoflexibelfalse
      \fi}}

%D Now. 

\definieerblanko
  [\s!default]
  [\v!wit]

%I n=Inspringen
%I c=\inspringen,\nietinspringen,\welinspringen
%I c=\stelinspringenin
%I
%I Het inspringen van de eerste regel van een paragraaf
%I wordt ingesteld met het commando:
%I
%I   \inspringen[parameter]
%I
%I waarbij als parameter kan worden meegegeven:
%I
%I   niet       de volgende paragraaf niet inspringen
%I   nooit      de volgende paragrafen niet inspringen
%I   altijd     de volgende paragrafen inspringen
%I
%I De mate van inspringen wordt ingesteld met:
%I
%I   \stelinspringenin[maat]
%I
%I waarbij maat staat voor een TeX-maat of het woord klein,
%I middel, groot of geen.

\let\currentvoorwit=\empty

\newdimen\voorwit

\newif\ifindentfirstparagraph % \indentfirstparagraphtrue

\def\presetindentation%
  {\doifoutervmode
     {\ifindentfirstparagraph\else\noindentation\fi}}

\def\dostelinspringenin[#1]%
  {\processallactionsinset
     [#1]
     [   \v!eerste=>\indentfirstparagraphtrue,
       \v!volgende=>\indentfirstparagraphfalse,
        \s!default=>\dodostelinspringenin,
        \s!unknown=>\edef\currentvoorwit{\commalistelement}%
                    \dodostelinspringenin]}

\def\dodostelinspringenin%
  {\assigndimension{\currentvoorwit}{\voorwit}{1em}{1.5em}{2em}%
   \parindent=\voorwit\relax}

\def\stelinspringenin%
  {\dosingleempty\dostelinspringenin}

\def\doinspringen[#1]%
  {\processallactionsinset
     [#1]
     [    \v!nee=>\parindent=\voorwit\relax\noindent,
         \v!niet=>\parindent=\voorwit\relax\noindent,
           \v!ja=>\parindent=\voorwit\relax,            % geen \indent !
       \v!eerste=>\indentfirstparagraphtrue,
     \v!volgende=>\indentfirstparagraphfalse,
       \v!altijd=>\parindent=\voorwit\relax,            % geen \indent !
        \v!nooit=>\parindent=\!!zeropoint\relax]}

\def\inspringen%
  {\dosingleargument\doinspringen}

\def\nietinspringen{\inspringen[\v!nee,\v!volgende]}
\def\welinspringen {\inspringen[\v!ja,\v!eerste]}

%I n=Positioneren
%I c=\startpositioneren,\stelpositionerenin
%I
%I Er kan (binnen zekere grenzen) gepositioneerd worden met
%I de commando's:
%I
%I   \startpositioneren
%I   \stoppositioneren
%I
%I met daartussen
%I
%I   \positioneer(x,y){...}
%I
%I waarbij x en y alleen getallen worden ingevuld. Ongewenste
%I spaties moeten zonodig met worden voorkomen met een %-teken.
%P
%I Een en ander kan worden ingesteld met:
%I
%I   \stelpositionerenin[eenheid=,factor=,schaal=,xstap=,
%I     ystap=,xoffset=,yoffset=,offset=]
%I
%I Standaard is de eenheid cm en de factor 1. Mogelijke
%I stapaanduidingen zijn 'absoluut' en 'relatief'. Deze
%I instellingen kunnen \resetpositioneren worden hersteld.
%I
%I Als men negatieve coordinaten (of een negatieve offset)
%I gebruikt, dan kan het soms wenselijk zijn het nulpunt te
%I laten samenvallen met de linkerbovenhoek van de omringende
%I box. In dat geval kan met offset=nee instellen. De negatieve
%I posities vallen in dat geval buiten de box.

% Het gebruik van \skip's spaart \dimen's.

\newskip\xpositie
\newskip\ypositie

\newskip\xafmeting
\newskip\yafmeting

\newskip\xoffset
\newskip\yoffset

\newbox\positiebox

\def\startpositioneren%
  {\bgroup
   \xpositie=\!!zeropoint
   \ypositie=\!!zeropoint
   \xafmeting=\!!zeropoint
   \yafmeting=\!!zeropoint
   \xoffset=\!!zeropoint
   \yoffset=\!!zeropoint
   \hfuzz=30cm
   \vfuzz=30cm
   \setbox\positiebox=\hbox\bgroup}

\def\stoppositioneren%
  {\doifnot{\@@psoffset}{\v!ja}
     {\global\xoffset=\!!zeropoint
      \global\yoffset=\!!zeropoint}%
   \global\advance\xafmeting by \xoffset
   \global\advance\yafmeting by \yoffset
   \egroup
   \vbox to \yafmeting
     {\vskip\yoffset
      \hbox to \xafmeting
        {\hskip\xoffset
         \box\positiebox
         \hfill}%
      \vfill}%
   \egroup}

\def\resetpositioneren%
  {\getparameters[\??ps]
     [\c!status=\v!start,
      \c!eenheid=\s!cm,
      \c!factor=1,
      \c!xfactor=\@@psfactor,
      \c!yfactor=\@@psfactor,
      \c!schaal=1,
      \c!xschaal=\@@psschaal,
      \c!yschaal=\@@psschaal,
      \c!xstap=\v!absoluut,
      \c!ystap=\v!absoluut,
      \c!xoffset=\!!zeropoint,
      \c!yoffset=\!!zeropoint]}

\resetpositioneren

\def\stelpositionerenin%
  {\resetpositioneren%
   \dodoubleargument\getparameters[\??ps]}%

\def\positioneer(#1,#2)#3% \nextbox
  {\setbox0=\hbox{#3}%
   \def\berekenpositioneren##1##2##3##4##5##6##7##8##9%
     {\skip0=##1\@@pseenheid\relax
      \skip0=##8\skip0\relax
      \skip0=##9\skip0\relax
      \doifelse{##2}{\v!relatief}%
        {\advance\skip0 by ##3\relax
         \advance\skip0 by ##4\relax
         \def##4{\!!zeropoint}}%
        {\advance\skip0 by ##4\relax}%
      ##3=\skip0\relax
      \doifnot{\@@psstatus}{\v!overlay}
        {\skip2=##5\relax
         \advance\skip2 by ##3\relax
         \ifdim##3<-##7\relax\global##7=-##3\relax\fi
         \ifdim\skip2>##6\relax\global##6=\skip2\relax\fi}}%
   \berekenpositioneren{#1}{\@@psxstap}{\xpositie}
     {\@@psxoffset}{\wd0}{\xafmeting}{\xoffset}
     {\@@psxschaal}{\@@psxfactor}%
   \skip4=\ht0 \advance\skip4 by \dp0
   \berekenpositioneren{#2}{\@@psystap}{\ypositie}
     {\@@psyoffset}{\skip4}{\yafmeting}{\yoffset}
     {\@@psyschaal}{\@@psyfactor}%
   \vbox to \!!zeropoint
     {\vskip\ypositie
      \hbox to \!!zeropoint
        {\hskip\xpositie
         \box0
         \hskip-\xpositie}%
      \vskip-\ypositie}%
   \ignorespaces}

%I n=Kolommen
%I c=\stelkolommenin,\startkolommen,\kolom
%I
%I Tekst kan in kolommen worden gezet. Het aantal kolommen
%I en het al dan niet opnemen van een vertikale lijn kan
%I worden ingesteld.
%I
%I   \stelkolommenin[n=,lijn=,tolerantie=,afstand=,
%I      balanceren=,uitlijnen=,hoogte=]
%I
%I Hierin staat n voor het aantal kolommen. Aan lijn
%I kan aan of uit worden toegekend. Aan voor en na kan
%I een commando worden toegekend, bijvoorbeeld ~~.
%I
%I Mogelijke waarden voor de tolerantie zijn: zeerstreng,
%I streng, soepel en zeersoepel.
%P
%I De in kolommen te zetten tekst moet worden opgenomen
%I tussen de commando's:
%I
%I   \startkolommen
%I   \stopkolommen
%I
%I Er wordt naar een nieuwe kolom gesprongen met:
%I
%I   \kolom

\newif\ifbinnenkolommen
\newif\if@@klbalanceren
\newif\if@@kluitlijnen

\binnenkolommenfalse

\def\stelkolommenin%
  {\dodoubleargument\dostelkolommenin}

\def\stelkolommenin[#1]%
  {\getparameters[\??kl][#1]%
   \nofcolumns=\@@kln\relax
   \processaction
     [\@@kllijn]
     [    \v!aan=>\let\betweencolumns=\linebetweencolumns,
          \v!uit=>\let\betweencolumns=\spacebetweencolumns,
      \s!default=>\let\betweencolumns=\spacebetweencolumns,
      \s!unknown=>\let\betweencolumns=\@@kllijn]}

\def\linebetweencolumns%
  {\bgroup
   \startcolorpage
   \ifdim\@@klafstand>\!!zeropoint
     \dimen0=\@@klafstand
   \else
     \dimen0=\linewidth
   \fi
   \advance\dimen0 by -\linewidth
   \hskip.5\dimen0
   \vrule
     \!!width\linewidth
     \ifb@selinebottom\!!depth\strutdepth\fi
   \hskip.5\dimen0\relax
   \stopcolorpage
   \egroup}

\def\spacebetweencolumns%
  {\hskip\@@klafstand}

\presetlocalframed[\??kl]

\def\backgroundfinishcolumnbox%
  {\doifinsetelse{\@@kloffset}{\v!geen,\v!overlay}
     {\let\@@kloffset\!!zeropoint}
     {\scratchdimen=\@@kloffset
      \advance\scratchdimen by -\@@kllijndikte
      \edef\@@kloffset{\the\scratchdimen}}%
   \localframed
     [\??kl]
     [\c!strut=\v!nee,
      \c!breedte=\v!passend,
      \c!hoogte=\v!passend,
      \c!uitlijnen=]}

\let\restorecolumnsettings\relax

\def\complexstartkolommen[#1]% %% \startkolommen
  {\bgroup
   \let\stopkolommen=\egroup
   \ifbinnenkolommen
   \else
     \stelkolommenin[#1]%
     \ifnum\@@kln>1\relax
       \witruimte
       \begingroup
       \doif{\@@kloptie}{\v!achtergrond}
         {\let\finishcolumnbox = \backgroundfinishcolumnbox
          \def\columntextoffset{\@@kloffset}}%
       \ifx\@@klcommando\empty\else
         \let\postprocesscolumnline\@@klcommando
       \fi
       \doifelsenothing{\@@klhoogte}
         {\heightencolumnsfalse}
         {\heightencolumnstrue}%
       \doifelse{\@@klrichting}{\v!rechts}
         {\reversecolumnsfalse}
         {\reversecolumnstrue}%
       \doifelse{\@@klbalanceren}{\v!ja}
         {\balancecolumnstrue}
         {\balancecolumnsfalse}%
       \processaction     % ook nog: laatsteuitlijnen
         [\@@kluitlijnen]
         [   \v!ja=>\stretchcolumnstrue
                    \inheritcolumnsfalse,
            \v!nee=>\stretchcolumnsfalse
                    \inheritcolumnsfalse,
          \v!tekst=>\stretchcolumnsfalse
                    \inheritcolumnstrue]%
       \nofcolumns=\@@kln
       %
       % probably more is needed, and how about nesting save's
       %
       \savecurrentblanko
       \savecurrentwitruimte
       \def\restorecolumnsettings%
         {\boxmaxdepth\maxdimen % done elsewhere
          \restorecurrentblanko
          \restorecurrentwitruimte}%
       %
       \edef\fixedcolumnheight{\@@klhoogte}%
       \steltolerantiein[\@@kltolerantie]%     %% \startkolommen
       \stelblankoin[\@@klblanko]%
       \ifdim\tussenwit>\!!zeropoint
         \stelwitruimtein[\@@klblanko]%
       \fi
       \def\stopkolommen%
         {\endmulticolumns
          \global\binnenkolommenfalse
          \endgroup
          \egroup}%
       \global\binnenkolommentrue
       \beginmulticolumns
     \fi
   \fi}

\definecomplexorsimpleempty\startkolommen

\def\kolom%
  {\ifbinnenkolommen
     \ejectcolumn
   \fi}

%I n=Kader
%I c=\toonkader,\tooninstellingen,\toonlayout
%I
%I Met behulp van de drie commando's:
%I
%I   \toonkader
%I   \tooninstellingen
%I
%I kan de zetspiegel zichtbaar worden gemaakt, of eventueel
%I met:
%I
%I   \toonkader [rand,tekst,marge]
%I
%I Het commando:
%I
%I   \toonlayout
%I
%I genereert enkele (linker en rechter) pagina's.

\def\dotoonkader[#1][#2]%
  {\ifsecondargument
     \stelachtergrondenin
       [#1][#2]
       [\c!achtergrond=,
        \c!kader=\v!aan,
        \c!hoek=\v!recht,
        \c!kaderoffset=\!!zeropoint,
        \c!kaderdiepte=\!!zeropoint,
        \c!kaderkleur=]
   \else\iffirstargument
     \toonkader
       [\v!hoofd,\v!tekst,\v!voet]
       [#1]
   \else
     \toonkader
       [\v!hoofd,\v!tekst,\v!voet]
       [\v!linkerrand,\v!linkermarge,
        \v!tekst,
        \v!rechtermarge,\v!rechterrand]
   \fi\fi
   \let\pageseparation=\!!zeropoint}

\def\toonkader{\dodoubleempty\dotoonkader}

\def\tooninstellingA#1#2%
  {#1&\PtToCm{\the#2}&\the#2&\tttf\string#2\cr}

\def\tooninstellingC#1#2%
  {#1&\dimen0=#2\PtToCm{\the\dimen0}&\dimen0=#2\the\dimen0&\tttf\string#2\cr}

\def\tooninstellingB#1#2#3%
  {#1&&#2#3&\tttf\string#3\cr}

\startinterface dutch

\def\tooninstellingen%
  {\noindent
   \vbox
     {\forgetall
      \mindermeldingen
      \switchtobodyfont[\v!klein]
      \tabskip\!!zeropoint
      \halign
        {\strut##\quad\hss&##\quad\hss&##\quad\hss&##\hss\cr
         \tooninstellingA{papierhoogte}       \papierhoogte
         \tooninstellingA{papierbreedte}      \papierbreedte
         \tooninstellingA{printpapierhoogte}  \printpapierhoogte
         \tooninstellingA{printpapierbreedte} \printpapierbreedte
         \noalign{\blanko}
         \tooninstellingA{kopwit}             \kopwit
         \tooninstellingA{rugwit}             \rugwit
         \tooninstellingA{hoogte}             \zethoogte
         \tooninstellingA{breedte}            \zetbreedte
         \noalign{\blanko}
         \tooninstellingA{boven}              \bovenhoogte
         \tooninstellingC{bovenafstand}       \bovenafstand
         \tooninstellingA{hoofd}              \hoofdhoogte
         \tooninstellingC{hoofdafstand}       \hoofdafstand
         \tooninstellingA{teksthoogte}        \teksthoogte
         \tooninstellingC{voetafstand}        \voetafstand
         \tooninstellingA{voet}               \voethoogte
         \tooninstellingC{onderafstand}       \onderafstand
         \tooninstellingA{onder}              \onderhoogte
         \noalign{\blanko}
         \tooninstellingA{linkerrand}         \linkerrandbreedte
         \tooninstellingC{linkerrandafstand}  \linkerrandafstand
         \tooninstellingA{linkermarge}        \linkermargebreedte
         \tooninstellingC{linkermargeafstand} \linkermargeafstand
         \tooninstellingA{tekstbreedte}       \tekstbreedte
         \tooninstellingC{rechtermargeafstand}\rechtermargeafstand
         \tooninstellingA{rechtermarge}       \rechtermargebreedte
         \tooninstellingC{rechterrandafstand} \rechterrandafstand
         \tooninstellingA{rechterrand}        \rechterrandbreedte
         \noalign{\blanko}
         \tooninstellingB{korps}  \the   \globalbodyfontsize
         \noalign{\blanko}
         \tooninstellingB{regel}  \relax \normallineheight
         \tooninstellingB{hoogte} \relax \strutheightfactor
         \tooninstellingB{diepte} \relax \strutdepthfactor
         \tooninstellingB{boven}  \relax \topskipfactor
         \tooninstellingB{onder}  \relax \maxdepthfactor}}}

\stopinterface

\startinterface english

\def\tooninstellingen%
  {\noindent
   \vbox
     {\forgetall
      \mindermeldingen
      \switchtobodyfont[\v!klein]
      \tabskip\!!zeropoint
      \halign
        {\strut##\quad\hss&##\quad\hss&##\quad\hss&##\hss\cr
         \tooninstellingA{paperheight}        \paperheight
         \tooninstellingA{paperwidth}         \paperwidth
         \tooninstellingA{printpaperheight}   \printpaperheight
         \tooninstellingA{printpaperwidth}    \printpaperwidth
         \noalign{\blanko}
         \tooninstellingA{topspace}           \topspace
         \tooninstellingA{backspace}          \backspace
         \tooninstellingA{height}             \makeupheight
         \tooninstellingA{width}              \makeupwidth
         \noalign{\blanko}
         \tooninstellingA{top}                \topheight
         \tooninstellingC{topdistance}        \topdistance
         \tooninstellingA{header}             \headerheight
         \tooninstellingC{headerdistance}     \headerdistance
         \tooninstellingA{textheight}         \textheight
         \tooninstellingC{footerdistance}     \footerdistance
         \tooninstellingA{footer}             \footerheight
         \tooninstellingC{bottomdistance}     \bottomdistance
         \tooninstellingA{bottom}             \bottomheight
         \noalign{\blanko}
         \tooninstellingA{leftedge}           \leftedgewidth
         \tooninstellingC{leftedgedistance}   \leftedgedistance
         \tooninstellingA{leftmargin}         \leftmarginwidth
         \tooninstellingC{leftmargindistance} \leftmargindistance
         \tooninstellingA{textwidth}          \textwidth
         \tooninstellingC{rightmargindistance}\rightmargindistance
         \tooninstellingA{rightmargin}        \rightmarginwidth
         \tooninstellingC{rightedgedistance}  \rightedgedistance
         \tooninstellingA{rightedge}          \rightedgewidth
         \noalign{\blanko}
         \tooninstellingB{bodyfontsize}       \the   \globalbodyfontsize
         \noalign{\blanko}
         \tooninstellingB{line}               \relax \normallineheight
         \tooninstellingB{height}             \relax \strutheightfactor
         \tooninstellingB{depth}              \relax \strutdepthfactor
         \tooninstellingB{topskip}            \relax \topskipfactor
         \tooninstellingB{maxdepth}           \relax \maxdepthfactor}}}

\stopinterface

\startinterface german

\def\tooninstellingen%
  {\noindent
   \vbox
     {\forgetall
      \mindermeldingen
      \switchtobodyfont[\v!klein]
      \tabskip\!!zeropoint
      \halign
        {\strut##\quad\hss&##\quad\hss&##\quad\hss&##\hss\cr
         \tooninstellingA{papierhoehe}          \papierhoehe
         \tooninstellingA{papierbreite}         \papierbreite
         \tooninstellingA{printpapierhoehe}     \printpapierhoehe
         \tooninstellingA{printpapierbreite}    \printpapierbreite
         \noalign{\blanko}
         \tooninstellingA{kopfweite}            \kopfweite
         \tooninstellingA{rumpfweite}           \rumpfweite
         \tooninstellingA{hoehe}                \satzhoehe
         \tooninstellingA{breite}               \satzbreite
         \noalign{\blanko}
         \tooninstellingA{oben}                 \hoeheoben
         \tooninstellingC{abstandoben}          \abstandoben
         \tooninstellingA{kopfzeile}            \kopfzeilenhoehe
         \tooninstellingC{kopfzeilenabstand}    \kopfzeilenabstand
         \tooninstellingA{texthoehe}            \texthoehe
         \tooninstellingC{fusszeileabstand}     \fusszeileabstand
         \tooninstellingA{fusszeilen}           \fusszeilenhoehe
         \tooninstellingC{abstandunten}         \abstandunten
         \tooninstellingA{hoeheunten}           \hoeheunten
         \noalign{\blanko}
         \tooninstellingA{linkerrand}           \breitelinkerrand
         \tooninstellingC{abstandlinkerrand}    \abstandlinkerrand
         \tooninstellingA{linkemarginal}        \linkemarginalbreite
         \tooninstellingC{linkemarginalafstand} \linkemarginalafstand
         \tooninstellingA{textbreite}           \textbreite
         \tooninstellingC{rechtemarginalafstand}\rechtemarginalafstand
         \tooninstellingA{rechtemarginal}       \rechtemarginalbreite
         \tooninstellingC{abstandrechterrand}   \abstandrechterrand
         \tooninstellingA{rechterrand}          \breiterechterrand
         \noalign{\blanko}
         \tooninstellingB{fliesstext}           \the   \globalbodyfontsize
         \noalign{\blanko}
         \tooninstellingB{linie}                \relax \normallineheight
         \tooninstellingB{hoehe}                \relax \strutheightfactor
         \tooninstellingB{tiefe}                \relax \strutdepthfactor
         \tooninstellingB{topskip}              \relax \topskipfactor
         \tooninstellingB{maxdepth}             \relax \maxdepthfactor}}}

\stopinterface

\startinterface czech

\def\tooninstellingen% 
  {\noindent
   \vbox
     {\forgetall
      \mindermeldingen
      \switchtobodyfont[\v!klein]
      \tabskip\!!zeropoint
      \halign
        {\strut##\quad\hss&##\quad\hss&##\quad\hss&##\hss\cr
         \tooninstellingA{vyskapapiru}          \vyskapapiru
         \tooninstellingA{sirkapapiru}          \sirkapapiru
         \tooninstellingA{vyskatiskpapiru}      \vyskatiskpapiru
         \tooninstellingA{sirkatiskpapiru}      \sirkatiskpapiru
         \tooninstellingA{hornimezera}          \hornimezera
         \tooninstellingA{spodnimezera}         \spodnimezera
         \tooninstellingA{vyska}                \vyskasazby
         \tooninstellingA{breite}               \sirkasazby
         \tooninstellingA{vyskatextu}           \vyskatextu
         \tooninstellingA{sirkatextu}           \sirkatextu
         \tooninstellingA{horejsek}             \vyskahorejsku
         \tooninstellingC{vzdalenosthorejsku}   \vzdalenosthorejsku
         \tooninstellingA{zahlavi}              \vyskazahlavi
         \tooninstellingC{vzdalenostzahlavi}    \vzdalenostzahlavi
         \tooninstellingC{fusszeileabstand}     \vzdalenostupati
         \tooninstellingA{upati}                \vyskaupati
         \tooninstellingC{vzdalenostspodku}     \vzdalenostspodku
         \tooninstellingA{spodek}               \vyakaspodku
         \tooninstellingA{levyokraj}            \sirkalevehookraje
         \tooninstellingC{vzdalenostlevehookraje}\vzdalenostlevehookraje
         \tooninstellingA{levamarginalie}       \sirkalevemarginalie
         \tooninstellingC{vzdalenostlevemarginalie}\vzdalenostlevemarginalie
         \tooninstellingC{vzdalenostpravemarginalie}\vzdalenostpravemarginalie
         \tooninstellingA{pravamarginalie}      \sirkapravemarginalie
         \tooninstellingC{vzdalenostpravehookraje}\vzdalenostpravehookraje
         \tooninstellingA{pravyokraj}           \sirkapravehookraje
         \noalign{\blanko}
         \tooninstellingB{zakladnivelikost}     \the   \globalbodyfontsize
         \noalign{\blanko}
         \tooninstellingB{linka}                \relax \normallineheight
         \tooninstellingB{vyska}                \relax \strutheightfactor
         \tooninstellingB{hloubka}              \relax \strutdepthfactor
         \tooninstellingB{topskip}              \relax \topskipfactor
         \tooninstellingB{maxdepth}             \relax \maxdepthfactor}}}

\stopinterface

\def\toonlayout% interfereert lelijk met een \typefile er na
  {\bgroup
   \pagina
   \toonkader
   \stellayoutin[\c!markering=\v!aan]
   \herhaal[4*\tooninstellingen\pagina]
   \egroup}

%I n=Uitlijnen
%I c=\startuitlijnen,\steluitlijnenin,\steltolerantiein
%I c=\regellinks,\regelrechts,\regelmidden,
%I c=\woordrechts
%I
%I De regelval kan worden ingesteld met:
%I
%I   \steluitlijnenin[instelling]
%I
%I waarbij de volgende instellingen mogelijk zijn:
%I
%I   links      links niet uitvullen
%I   midden     links/rechts niet uitvullen = centreren
%I   rechts     rechts niet uitvullen
%I   breedte    uitvullen over breedte (default)
%I   beide      wisselend (afhankelijk bladzijde)
%I   onder      onderkant niet uitgelijnd (default)
%I   hoogte     uitvullen over hoogte (op baseline)
%I   regel      uitvullen over hoogte (binnen kader)
%I   reset      uitvullen over breedte en hoogte
%I
%I In combinatie met links, midden en rechts kan 'ruim'
%I worden opgegeven.
%P
%I Aanvullend zijn de volgende commando's beschikbaar:
%I
%I   \startuitlijnen[instelling]
%I   \stopuitlijnen
%I
%I Een regel kan op verschillende manieren worden uitgelijnd
%I met behulp van de commando's:
%I
%I   \regellinks{tekst}
%I   \regelrechts{tekst}
%I   \regelmidden{tekst}
%I
%I Aan het eind van een paragraaf kan een stukje tekst
%I worden geplaatst met:           \woordrechts{ziezo}
%P
%I De tolerantie waarbinnen het uitlijnen plaatsvindt kan
%I worden ingesteld met:
%I
%I   \steltolerantiein[instelling]
%I
%I Mogelijke waarden zijn: zeerstreng, streng, soepel en
%I zeersoepel.
%I
%I Standaard heeft de tolerantie betrekking op horizontaal
%I uitlijnen. Vertikaal kan het uitlijnen worden beinvloed
%I door het trefwoord 'vertikaal' mee te geven. Standaard
%I geldt [vertikaal,streng] en [horizontaal,zeerstreng].

\definetwopasslist{\s!paragraph}

\newcounter\nofraggedparagraphs

\def\doparagraphreference% looks very much like domarginreference
  {\doglobal\increment\nofraggedparagraphs\relax
   \edef\writeparref%
     {\writeutilitycommand%
        {\twopassentry%
           {\s!paragraph}%
           {\nofraggedparagraphs}%
           {\noexpand\realfolio}}}%
   \writeparref}

\def\setraggedparagraphmode#1#2%
  {\ifinner
     \ifdubbelzijdig
       \gettwopassdata{\s!paragraph}%
       \iftwopassdatafound
         \ifodd\twopassdata#1\else#2\fi
       \else
         \ifodd\realfolio#1\else#2\fi
       \fi
       \doparagraphreference
     \else
       #2\relax
     \fi
   \else
     #2\relax
   \fi}

% De onderstaande macro's zijn opgenomen in Plain TeX.
%
% \def\raggedright%
%   {\rightskip\z@ plus2em \spaceskip.3333em \xspaceskip.5em\relax}
%
% \def\ttraggedright%
%   {\tttf\rightskip\z@ plus2em\relax}
%
% \newif\ifr@ggedbottom
%
% \def\raggedbottom%
%   {\topskip 10\p@ plus60\p@ \r@ggedbottomtrue}
%
% \def\normalbottom%
%   {\topskip 10\p@ \r@ggedbottomfalse}
%
% en worden hieronder wat aangepast.

\newif\ifn@rmalbottom
\newif\ifr@ggedbottom
\newif\ifb@selinebottom

\def\normalbottom%
  {\n@rmalbottomtrue
   \r@ggedbottomfalse
   \b@selinebottomfalse
   \settopskip}

\def\raggedbottom%
  {\n@rmalbottomfalse
   \r@ggedbottomtrue
   \b@selinebottomfalse
   \settopskip}

\def\baselinebottom%
  {\n@rmalbottomfalse
   \r@ggedbottomfalse
   \b@selinebottomtrue
   \settopskip}

% \hyphenpenalty  = ( 2.5 * \hsize ) / \raggedness
% \tolerance     >= 1500 % was 200
% \raggedness     = 2 .. 6\korpsgrootte

\chardef\raggedstatus=0 % normal left center right 

\def\leftraggedness   {2\bodyfontsize}
\def\rightraggedness  {2\bodyfontsize}
\def\middleraggedness {6\bodyfontsize}

\def\setraggedness#1%
  {\ifnum\tolerance<1500\relax       % small values have
     \tolerance=1500\relax           % unwanted side effects
   \fi                               %
   \spaceskip=2.5\hsize              % we misuse these
   \xspaceskip=#1\relax              % registers for temporary
   \divide\spaceskip by \xspaceskip  % storage; they are
   \hyphenpenalty=\spaceskip}        % changed anyway

\let\updateraggedskips\relax

\def\setraggedskips#1#2#3#4#5#6#7% never change this name
  {\def\updateraggedskips%
     {\dosetraggedskips{#1}{#2}{#3}{#4}{#5}{#6}{#7}}%
   \updateraggedskips}

\def\dosetraggedskips#1#2#3#4#5#6#7%
  {\chardef\raggedstatus=#1\relax 
   \leftskip=1\leftskip\!!plus#2\relax   % zie: Tex By Topic 8.1.3
   \rightskip=1\rightskip\!!plus#3\relax % zie: Tex By Topic 8.1.3
   \spaceskip#4\relax
   \xspaceskip#5\relax
   \parfillskip\!!zeropoint\!!plus#6\relax
   \parindent#7\relax}

\def\notragged%
  {\setraggedskips{0}{0em}{0em}{0em}{0em}{1fil}{\parindent}}

\def\raggedleft%
  {\setraggedness\leftraggedness
   \setraggedskips{1}{\leftraggedness}{0em}{.3333em}{.5em}{0em}{0em}}

\def\raggedcenter%
  {\setraggedness\middleraggedness
   \setraggedskips{2}{\middleraggedness}{\middleraggedness}{.3333em}{.5em}{0em}{0em}}

%D We used to have:
%D
%D \starttypen
%D \def\raggedright%
%D   {\setraggedness\rightraggedness
%D    \setraggedskips{3}{0em}{\rightraggedness}{.3333em}{.5em}{0em}{\parindent}}
%D \stoptypen
%D
%D However, the next alternative, suggested by Taco, is better.

\def\raggedright%
  {\setraggedness\rightraggedness
   \setraggedskips{3}{0em}{\rightraggedness}{.3333em}{.5em}{1fil}{\parindent}}

\def\veryraggedleft%
  {\setraggedskips{1}{1fil}{0em}{.3333em}{.5em}{0em}{0em}}

%D When we want the last line to have a natural width:
%D
%D \starttypen
%D \def\veryraggedleft%
%D   {\setraggedskips{1}{1fil}{0em}{.3333em}{.5em}{0em}{-1fil}}
%D \stoptypen
%D
%D but this one is not accepted by the macros.

\def\veryraggedcenter%
  {\setraggedskips{2}{1fil}{1fil}{.3333em}{.5em}{0em}{0em}}

\def\veryraggedright%
  {\setraggedskips{3}{0em}{1fil}{.3333em}{.5em}{0em}{\parindent}}

\def\ttraggedright%
  {\tttf
   \setraggedskips{3}{0em}{\rightraggedness}{0em}{0em}{0em}{\parindent}} % {\voorwit}}

%D A bonus one:

\def\raggedwidecenter%
  {\setraggedness\middleraggedness
   \setraggedskips{2}{.5fil}{.5fil}{.3333em}{.5em}{0em}{0em}}

\def\dodosteluitlijnenin[#1]%
  {\doifinsetelse{\v!ruim} {#1}{\!!doneatrue}{\!!doneafalse}%
   \doifinsetelse{\v!breed}{#1}{\!!donebtrue}{\!!donebfalse}%
   \ExpandFirstAfter\processallactionsinset
     [#1]
     [   \v!regel=>\baselinebottom,
         \v!onder=>\raggedbottom,
        \v!hoogte=>\normalbottom,
       \v!breedte=>\notragged,
        \v!binnen=>\setraggedparagraphmode\raggedleft\raggedright,
        \v!buiten=>\setraggedparagraphmode\raggedright\raggedleft,
         \v!links=>\if!!donea\veryraggedleft  \else\raggedleft  \fi,
        \v!rechts=>\if!!donea\veryraggedright \else\raggedright \fi,
        \v!midden=>\if!!doneb\raggedwidecenter\else
                   \if!!donea\veryraggedcenter\else\raggedcenter\fi\fi,
         \v!reset=>\notragged\normalbottom]}

\def\dosteluitlijnenin[#1]%
  {\expanded{\dodosteluitlijnenin[#1]}}

\def\steluitlijnenin%
  {\dosingleargument\dosteluitlijnenin}

\def\startuitlijnen%
  {\bgroup
   \steluitlijnenin}

\def\stopuitlijnen
  {\par
   \egroup}

%\def\regellinks#1%
%  {\noindent\leftline{{\strut#1}}}
%
%\def\regelrechts#1%
%  {\noindent\rightline{{#1\strut}}}
%
%\def\regelmidden#1%
%  {\noindent\centerline{{\strut#1}}}

\def\doalignline#1#2%
  {\dowithnextbox
     {\noindent\hbox to \hsize
        {\strut#1\unhbox\nextbox#2}}
     \hbox}

% also supporting \\
%
% \def\doalignline#1#2%
%   {\dowithnextbox
%      {\noindent\hbox to \hsize
%         {\strut#1\unhbox\nextbox#2}}
%      \hbox\bgroup
%        \def\\{\egroup\par\doalignline#1#2\bgroup}\let\next=}

\def\doalignline#1#2%
  {\bgroup
   \def\\{\egroup\par\doalignline#1#2\bgroup}%
   \dowithnextbox
     {\noindent\hbox to \hsize
        {\strut#1\unhbox\nextbox#2}\egroup}
     \hbox}

% directe commando's

\def\regellinks {\doalignline \relax \hss  }
\def\regelrechts{\doalignline \hss   \relax}
\def\regelmidden{\doalignline \hss   \hss  }

\def\regelbegrensd#1{\limitatetext{#1}{\hsize}{\unknown}}

% indirecte commando's

\setvalue{regel\v!links }{\doalignline \relax \hss  }
\setvalue{regel\v!rechts}{\doalignline \hss   \relax}
\setvalue{regel\v!midden}{\doalignline \hss   \hss  }

\def\doregelplaats#1%
  {\getvalue{regel#1}}

\def\dosteltolerantiein[#1]%
  {\doifinsetelse{\v!vertikaal}{#1}%
     {\ExpandFirstAfter\processallactionsinset
        [#1]
        [\v!zeerstreng=>\def\bottomtolerance{},
             \v!streng=>\def\bottomtolerance{.050},
             \v!soepel=>\def\bottomtolerance{.075},
         \v!zeersoepel=>\def\bottomtolerance{.100}]}%
     {\ExpandFirstAfter\processallactionsinset
        [#1]
        [       \v!rek=>\emergencystretch=\bodyfontsize,
         \v!zeerstreng=>\tolerance=200,
             \v!streng=>\tolerance=1500,
             \v!soepel=>\tolerance=3000,
         \v!zeersoepel=>\tolerance=4500]}}

\def\steltolerantiein%
  {\dosingleargument\dosteltolerantiein}

\def\woordrechts%
  {\groupedcommand{\hfill\hbox}{\parfillskip\!!zeropoint}}

%I n=Margeteksten
%I c=\inmarge,\inlinker,\inrechter,\stelinmargein
%I c=\margetitel,\figuurinmarge
%I c=\oplinker
%I
%I Een paragraaf kan worden ingeluid met een tekst in
%I de marge:
%I
%I   \inmarge{tekst}
%I   \inlinker{tekst}
%I   \inrechter{tekst}
%I
%I Met \\ kan binnen een margetekst naar een volgende regel
%I worden gesprongen.
%P
%I Het onderstaande commando kan gebruikt worden om een
%I paragraafaanduiding in de marge te plaatsen. Het commando
%I moet aan het begin van de paragraaf staan. Er wordt
%I gecontroleerd of een en ander nog op de bladzijde past.
%I
%I   \margetitel{tekst}
%I
%I Tussen \margetitel{tekst} en de volgende alinea mag,
%I omwille van de overzichtelijkheid, een lege regels staan.
%I Als dit commando wordt gebruikt na een commando als
%I \paragraaf, kan het controlemechanisme leiden tot een
%I ongewenste overgang naar een nieuwe bladzijde. In dat
%I geval kan beter het volgende commando worden gebruikt.
%I
%I   \margewoord{tekst}
%I
%I Dit commando komt overeen met \inmarge, alleen is bij
%I \margewoord de lege regel toegestaan.
%P
%I Er kan eventueel voor {tekst} een [referentie] worden
%I meegegeven. In dat geval kan worden verwezen naar het
%I paginanummer waarop het margewoord staat.
%I
%I Als TeX twijfelt in welke marge het woord moet staan, is
%I een tweede verwerkingsslag nodig. Als een margewoord bij
%I herhaling verkeerd wordt geplaatst, dan kan het
%I automatisme worden verstoord door [+] mee te geven. Een
%I margewoord kan lager worden gezet met [laag]. Combinaties
%I kunnen ook:
%I
%I   \margewoord[+,laag][referentie]{woord}
%P
%I De wijze van weergeven kan worden ingesteld met het
%I commando:
%I
%I   \stelinmargein[letter=,plaats=,voor=,na=,uitlijnen=]
%I
%I Als plaats kan links, rechts of beide worden meegegeven. In
%I het laatste geval hangt de plaats af van het
%I enkel/dubbelzijdig zetten.
%I
%I Uitlijnen kent twee instellingen: 'ja' en 'nee'. Inhet
%I eerste geval (default) worden de margewoorden tegen de
%I kantlijn geplaatst.
%P
%I Vooruitlopend op meer commando's is er al vast het
%I commando:
%I
%I   \oplinker{tekst}
%I
%I Dit commando kan bijvoorbeeld worden gebruikt binnen
%I een midden-uitgelijnde tekst. Het commando is nog niet
%I definitief en robuust.

% %P
% %I Aanvullend zijn commando's beschikbaar om figuren in
% %I de marge te plaatsen:
% %I
% %I   \figuurinmarge{figuur}
% %I   \figuurinlinker{figuur}
% %I   \figuurinrechter{figuur}

%T n=margetitel
%T m=mar
%T a=m
%T
%T \margetitel{?}
%T

\newif\iflowinmargin

\def\stelinmargein%
  {\dodoubleempty\dostelinmargein}

\def\dostelinmargein[#1][#2]%
  {\ifsecondargument
     \doifundefinedelse{\??im#1\c!offset}
       {\presetlocalframed
          [\??im#1]%
        \getparameters
          [\??im#1]
          [\c!kader=\v!uit,
           \c!offset=\v!overlay,
           \c!regel=1,
           \c!scheider=,
           \c!breedte=\v!ruim,
           \c!afstand=\!!zeropoint,
           \c!letter=\@@imletter,
           \c!kleur=\@@imkleur,
           \c!plaats=\@@implaats,
           \c!uitlijnen=\@@imuitlijnen,
           \c!voor=\@@imvoor,
           \c!na=\@@imna,
           #2]}
       {\getparameters[\??im#1][#2]}%
   \else
     \getparameters[\??im][#1]%
   \fi}

\let\margetekstafstand  = \!!zeropoint
\def\margetekstregels     {1}
\def\margetekstnummer     {0}
\let\margetekstscheider = \empty

\def\margestrutheight{\ht\strutbox}

\def\maakmargetekstblok#1#2#3#4#5#6%
  {#4\relax
   \bgroup
   \forgetall % added, else problems with 'center' and nested itemize
   \mindermeldingen
   \hsize#1\relax
   \ifnum\margetekstnummer=0
     \def\margetekstnummer{#2}%
   \fi
   \processaction
     [\getvalue{\??im\margetekstnummer\c!uitlijnen}]
     [     \v!ja=>\setvalue{\??im\margetekstnummer\c!uitlijnen}{#2},
          \v!nee=>\setvalue{\??im\margetekstnummer\c!uitlijnen}{\v!normaal},
       \v!binnen=>\setvalue{\??im\margetekstnummer\c!uitlijnen}{#2},
       \v!buiten=>\setvalue{\??im\margetekstnummer\c!uitlijnen}{#3},
        \v!links=>\setvalue{\??im\margetekstnummer\c!uitlijnen}{\v!links},
       \v!midden=>\setvalue{\??im\margetekstnummer\c!uitlijnen}{\v!midden},
       \v!rechts=>\setvalue{\??im\margetekstnummer\c!uitlijnen}{\v!rechts},
      \s!default=>\setvalue{\??im\margetekstnummer\c!uitlijnen}{#2}]%
   \setbox0=\vbox\localframed
     [\??im\margetekstnummer]
     [\c!strut=\v!nee]
     {\decrement\margetekstregels
      \@@imvoor
      \doattributes
        {\??im\margetekstnummer}\c!letter\c!kleur
        {\dorecurse{\margetekstregels}{\strut\\}%
         \xdef\margestrutheight{\the\ht\strutbox}%
         \begstrut#6\endstrut\endgraf}%
      \@@imna}%
   \ht0=\ht\strutbox
   \box0
   \egroup
   #5\relax}

\def\plaatsmargetekstscheider%
  {\ifnum\margincontent>0
     \bgroup
     \dimen0=\margetekstregels\lineheight
     \advance\dimen0 by -\lineheight
     \lower\dimen0\hbox{\margetekstscheider}%
     \egroup
   \fi}

\def\linkermargetekstblok#1%
  {\maakmargetekstblok
     {\linkermargebreedte}
     {\v!links}{\v!rechts}
     {\llap{\plaatsmargetekstscheider}}{\hskip\margetekstafstand}
     {#1}}

\def\rechtermargetekstblok#1%
  {\maakmargetekstblok
     {\rechtermargebreedte}
     {\v!rechts}{\v!links}
     {\hskip\margetekstafstand}{\rlap{\plaatsmargetekstscheider}}
     {#1}}

\def\doplacemargintext#1#2#3%
  {\strut
   \setbox0=\hbox{#1}%
   \dimen0=\ht0
   \advance\dimen0 by \dp0
   \ifdim\dimen0>\marginheight
     \global\marginheight=\dimen0
   \fi
   \setbox0=\hbox
     {#2{\hskip#3\strut
         \iflowinmargin\else
           \dimen0=\dp\strutbox
           \advance\dimen0 by \margestrutheight
           \advance\dimen0 by -\ht\strutbox
           \raise\dimen0
         \fi
         \box0}}%
   \ht0=\!!zeropoint
   \dp0=\!!zeropoint
   \gdef\margestrutheight{\the\ht\strutbox}%
   \vadjust{\box0}}

\def\doinlinker#1%
  {\doplacemargintext
     {\linkermargetekstblok{#1}\hskip\linkermargeafstand}
     \llap\!!zeropoint}

\def\doinrechter#1%
  {\doplacemargintext
     {\hskip\rechtermargeafstand\rechtermargetekstblok{#1}}
     \rlap\hsize}

\newcounter \nofmarginnotes
\newif      \iftrackingmarginnotes
\newif      \ifrightmargin            % documenteren

\definetwopasslist{\s!margin}

\def\domarginreference%
  {\doglobal\increment\nofmarginnotes\relax
   \edef\writemarref%
     {\writeutilitycommand%
        {\twopassentry%
           {\s!margin}%
           {\nofmarginnotes}%
           {\noexpand\realfolio}}}%
   \writemarref}

\def\dodoinmargenormal#1#2#3#4%
  {\iffirstsidefloatparagraph\geenwitruimte\fi % zo laat mogelijk
   \ifodd#1\relax
     \rightmargintrue
     #3{#4}%
   \else
     \rightmarginfalse
     #2{#4}%
   \fi}

\def\doinmargenormal#1#2#3%
  {\bgroup
   \iftrackingmarginnotes
     \gettwopassdata{\s!margin}%
     \iftwopassdatafound
       \dodoinmargenormal\twopassdata#1#2{#3}%
     \else
       \dodoinmargenormal\realfolio#1#2{#3}%
     \fi
     \domarginreference
   \else
     \dodoinmargenormal\realfolio#1#2{#3}%
   \fi
   \egroup}

\def\doinmargereverse#1#2#3%
  {\dodoinmargenormal\realfolio#2#1{#3}}

\def\doinmarge[#1][#2][#3][#4][#5]#6%
  {\doifcommonelse{+,-,\v!laag}{#4}
     {\dodoinmarge[#1][#2][#3][#4][#5]{#6}}
     {\dodoinmarge[#1][#2][#3][][#4]{#6}}%
   \ignorespaces}

\def\dodoinmarge[#1][#2][#3][#4][#5]#6%
  {\ignorespaces
   \doifinsetelse{\v!laag}{#4}
     {\lowinmargintrue}
     {\lowinmarginfalse}%
   \processaction
     [#1]
     [  \v!links=>#2{#6},
       \v!rechts=>#3{#6},
      \s!unknown=>\ifdubbelzijdig
                    \doifcommonelse{+,-}{#4}
                      {\doinmargereverse#2#3{#6}}
                      {\doinmargenormal#2#3{#6}}%
                  \else
                    #2{#6}%
                  \fi]%
   \rawpagereference{\s!mar}{#5}%
   \ignorespaces}

\def\inlinker%
  {\indentation\doquintupleempty\doinmarge
     [\v!links][\doinlinker][\doinrechter]}

\def\inrechter%
  {\indentation\doquintupleempty\doinmarge
     [\v!rechts][\doinlinker][\doinrechter]}

\def\inmarge%
  {\doquintupleempty\doinmarge
     [\@@implaats][\doinlinker][\doinrechter]}

\def\inanderemarge%
  {\doquintupleempty\doinmarge
     [\@@implaats][\doinrechter][\doinlinker]}

\newcounter\margincontent

\def\flushmargincontent% [#1][#2]#3% hier plaats 'globaal' (geen 1,2 enz)
  {\doinmarge[\@@implaats][\doinlinker][\doinrechter]} % [#1][#2]{#3}}

\newdimen\marginheight

\let\restoreinterlinepenalty=\relax

\def\flushmargincontents%
  {\restoreinterlinepenalty  % here?
   \ifnum\margincontent>0               % called quite often, so we
     \expandafter\doflushmargincontents % speed up the \fi scan by
   \fi}                                 % using a \do..

\def\doflushmargincontents% % links + rechts
  {\bgroup
   \forgetall
   \global\marginheight\!!zeropoint
   \dorecurse{\margincontent}
     {\bgroup
      \edef\margetekstafstand {\getvalue{\??im\recurselevel\c!afstand}}%
      \edef\margetekstregels  {\getvalue{\??im\recurselevel\c!regel}}%
      \edef\margetekstscheider{\getvalue{\??im\recurselevel\c!scheider}}%
      \let\margetekstnummer=\recurselevel
      \getvalue{\??im\recurselevel}%
      \global\setvalue{\??im\recurselevel}{}%
      \egroup}%
   \ifdim\marginheight>\lineheight % This is something real dirty!
     \advance\marginheight by \pagetotal
     \advance\marginheight by \lineheight  % a sort of bonus
     \ifdim\marginheight>\pagegoal
       \xdef\restoreinterlinepenalty%
         {\global\let\restoreinterlinepenalty\relax
          \global\interlinepenalty=\the\interlinepenalty}%
       \global\interlinepenalty=10000
     \fi
   \else % We need the above because interlinepenalties overrule vadjusted \nobreaks.
     %\vadjust
     %  {\forgetall
     %   \global\advance\marginheight by \lineheight
     %   \global\divide\marginheight by \lineheight
     %   \dorecurse{\number\marginheight}
     %     {\nobreak\vskip\lineheight}%
     %   \kern-\number\marginheight\lineheight}%
     \vadjust{\nobreak}%
   \fi
   \doglobal\newcounter\margincontent
   \egroup}

\def\docomplexmargewoord#1#2#3%
  {\@EA\setgvalue\@EA{\@EA\??im\@EA\margincontent\@EA}\@EA
     {\@EA\stelinmargein\@EA[\margincontent][]%  see next macro
      \flushmargincontent[#1][#2]{#3}}}

\def\complexmargewoord[#1][#2]#3%
  {\doglobal\increment\margincontent
   \stelinmargein[\margincontent][]% see next macro
   \ifsecondargument
     \doifnumberelse{#1}
       {\docomplexmargewoord{#2}{#1}{#3}}
       {\docomplexmargewoord{#1}{#2}{#3}}%
   \else
     \doifnumberelse{#1}
       {\docomplexmargewoord{}{#1}{#3}}
       {\docomplexmargewoord{#1}{}{#3}}%
   \fi}

\def\margewoordpositie[#1]#2%
  {\ifnum#1>\margincontent
     \xdef\margincontent{#1}%
   \fi
   \stelinmargein[#1][]% when at outer level, saves local settings
   \setgvalue{\??im#1}%
     {\stelinmargein[#1][]% needed when par start outside group
      \flushmargincontent[][]{#2}}}

\def\margewoord%
  {\dodoubleempty\complexmargewoord}

\def\margetitel%
  {\margewoord}

\def\margetekst%
  {\margewoord}

\def\oplinker#1%
  {\strut
   \vadjust
     {\mindermeldingen
      \setbox0=\vtop{\forgetall\strut#1}%
      \getboxheight\dimen0\of\box0
      \vskip-\dimen0\
      \box0}}

%D \macros
%D   {inleftside,inleftmargin,inrightmargin,inrightside}
%D   {}
%D
%D The fast and clean way of putting things in the margin is
%D using \type{\rlap} or \type{\llap}. Unfortunately these
%D macro's don't handle indentation, left and right skips. We
%D therefore embed them in some macro's that (force and)
%D remove the indentation and restore it afterwards.

\def\inleftmargin#1%
  {\pushindentation
   \llap{#1\hskip\leftskip\hskip\linkermargeafstand}%
   \popindentation
   \ignorespaces}

\def\inrightmargin#1%
  {\pushindentation
   \rlap{\hskip\hsize\hskip-\rightskip\hskip\rechtermargeafstand#1}%
   \popindentation
   \ignorespaces}

\def\inleftside#1%
  {\inleftmargin
     {#1\relax
      \hskip\linkermargebreedte
      \hskip\pageseparation
      \hskip\linkerrandafstand}}

\def\inrightside#1%
  {\inrightmargin
     {\hskip\rechtermargebreedte
      \hskip\rechterrandafstand
      \hskip\pageseparation
      #1}}

%D We want to keep things efficient and therefore only handle
%D situations like:
%D
%D \startbuffer
%D                  \inleftside    {fine} some text \par
%D \strut           \inleftmargin  {fine} some text \par
%D \noindent        \inrightmargin {fine} some text \par
%D \noindent \strut \inrightside   {fine} some text \par
%D \stopbuffer
%D
%D \typebuffer
%D
%D which looks like:
%D
%D \bgroup
%D \haalbuffer
%D \parindent 30pt
%D \haalbuffer
%D \egroup

%D \macros
%D   {pushindentation,popindentation}
%D
%D The pushing and popping is done by:

\newbox\indentationboxA
\newbox\indentationboxB

\def\pushindentation%
  {\bgroup
   \ifhmode
     \unskip
     \setbox\indentationboxA=\lastbox       % get \strut if present
     \unskip
     \setbox\indentationboxB=\lastbox       % get \indent generated box
     \unskip
   \else
     \hskip\!!zeropoint                     % switch to horizontal mode
     \unskip
     \setbox\indentationboxA=\lastbox       % get \indent generated box
     \setbox\indentationboxB=\box\voidb@x
   \fi}

\def\popindentation%
  {\box\indentationboxB\box\indentationboxA % put back the boxes
   \egroup}

%D The only complication lays in \type{\strut}. In \PLAIN\
%D \TEX\ a \type{\strut} is defined as:
%D
%D \starttypen
%D \def\strut%
%D   {\relax\ifmmode\copy\strutbox\else\unhcopy\strutbox\fi}
%D \stoptypen
%D
%D But what is a \type{\strut}? Normally it's a rule of width
%D zero, but when made visual, it's a rule and a negative skip.
%D The mechanism for putting things in the margins described
%D here cannot handle this situation very well. One
%D characteristic of \type{\strut} is that the \type{\unhcopy}
%D results in entering horizontal mode, which in return leads
%D to some indentation.
%D
%D To serve our purpose a bit better, the macro \type{\strut}
%D can be redefined as:
%D
%D \starttypen
%D \def\strut%
%D   {\relax\ifmmode\else\hskip0pt\fi\copy\strutbox}
%D \stoptypen
%D
%D Or more compatible:
%D
%D \starttypen
%D \def\strut%
%D   {\relax\ifmmode
%D      \copy\strutbox
%D    \else
%D      \bgroup\setbox\strutbox=\normalhbox{\box\strutbox}\unhcopy\strutbox\egroup
%D    \fi}
%D \stoptypen
%D
%D In \CONTEXT\ however we save some processing time by putting
%D an extra \type{\hbox} around the \type{\strutbox}.

% dit zijn voorlopig lokale commando's

\def\woordinlinker {\inleftmargin}  % vervallen
\def\woordinrechter{\inrechtermarge} % vervallen

\def\woordinmarge%
  {\doquintupleempty\doinmarge
     [\@@implaats][\woordinlinker][\woordinrechter]}

%I n=Paginanummer
%I c=\stelpaginanummerin,\stelsubpaginanummerin
%I
%I Het paginanummer kan worden ingesteld met het commando:
%I
%I   \stelpaginanummerin[nummer=,status=]
%I
%I Het nummeren kan gedurende een of meerdere pagina's worden
%I stilgezet door in plaats van een nummer start, stop of
%I handhaaf mee te geven.
%I
%I Het paginanummer is oproepbaar met:
%I
%I   \paginanummer
%I
%I en het totaal aantal paginanummers met:
%I
%I   \totaalaantalpaginas
%P
%I Er zijn subnummers beschikbaar. De wijze van nummeren
%I wordt ingesteld met:
%I
%I   \stelsubpaginanummerin[wijze=,status=]
%I
%I De status kan 'stop', 'start' of 'geen' zijn. In het
%I laatste geval wordt gewoon doorgenummerd, maar wordt het
%I nummer niet geplaatst.
%I
%I Standaard wordt 'perdeel' genummerd. De subnummers zijn
%I oproepbaar met:
%I
%I    \subpaginanummer
%I    \aantalsubpaginas

% Standaard is \count0 in Plain TeX de paginateller. Omwille
% van de afhandeling van lokaal nummeren, definieren we
% echter een eigen nummer.

\definieernummer
  [\s!page]
  [\c!conversie=\@@nmconversie,
   \c!wijze=\@@nmwijze,
   \c!status=\@@nmstatus,
   \c!start=1]

\def\dostelpaginanummerin[#1]%
  {\getparameters
     [\??pn]
     [\c!status=\v!start,
      \c!nummer=,
      #1]%
   \doifsomething{\@@pnnummer}
     {\setnummer[\s!page]{\@@pnnummer}%
      \setuserpageno{\ruwenummer[\s!page]}}}

\def\stelpaginanummerin%
  {\dosingleargument\dostelpaginanummerin}

\def\verlaagpaginanummer%
  {\doif{\@@pnstatus}{\v!start}
     {\verlaagnummer[\s!page]%
      \setuserpageno{\ruwenummer[\s!page]}}}

\def\verhoogpaginanummer%
  {\processaction
     [\@@pnstatus]
     [    \v!start=>{\verhoognummer[\s!page]%
                     \setuserpageno{\ruwenummer[\s!page]}},
       \v!handhaaf=>{\doassign[\??pn][\c!status=\v!start]}]}

\def\checkpagecounter%
  {\checknummer{\s!page}}

%I n=Pagina
%I c=\pagina
%I
%I Het volgende commando kan worden gebruikt om pagina's af
%I te dwingen of blokkeren:
%I
%I   \pagina[instelling]
%I
%I Waarbij als instelling kan worden gegeven:
%I
%I   ja             een geforceerde paginaovergang met \vfill
%I   opmaak         een geforceerde paginaovergang zonder \vfill
%I   nee            bij voorkeur geen paginaovergang
%I   voorkeur       bij voorkeur de paginaovergang hier (3)
%I   grotevoorkeur  bij voorkeur de paginaovergang hier (7)
%I   links          ga naar een linker pagina
%I   rechts         ga naar een rechter pagina
%I   leeg           een lege pagina
%I   blokkeer       blokkeer ja ... grotevoorkeur (1 pagina)
%I   reset          het blokkering ja ... grotevoorkeur op
%I
%I Als geen instelling wordt meegegeven (\pagina), wordt een
%I overgang geforceerd. Als een nummer wordt meegegeven, wordt
%I naar de opgegeven pagina gegaan.

\newif\ifpaginageblokkeerd
\paginageblokkeerdfalse

\def\testpagina[#1][#2]%
  {\ifpaginageblokkeerd \else
     \ifdim\pagetotal<\pagegoal
       \dimen0=\lineheight
       \multiply\dimen0 by #1\relax
       \advance\dimen0 by \pagetotal
       \ifdim\lastskip<\parskip
         \advance\dimen0 by \parskip
       \fi
       \advance\dimen0 by #2\relax
       \ifdim\dimen0>.99\pagegoal
         \penalty-\!!tenthousand\relax
       \fi
     \else
       \goodbreak
     \fi
   \fi}

\let\resetcurrentsectionmarks=\relax

% was: \resetsectionmarks[\firstsection], zie \handelpaginaaf

\def\insertdummypage%
  {\ejectinsert % beter
   \hardespatie
   \vfill
   \ejectpage}

\def\docomplexpagina[#1]%
  {\flushfootnotes
   \bgroup
   \processallactionsinset
     [#1]
     [    \v!reset=>\global\paginageblokkeerdfalse,
       \v!blokkeer=>\global\paginageblokkeerdtrue,
             \v!ja=>\ifpaginageblokkeerd\else
                      \ejectinsert
                      \ejectpage
                      \ifbinnenkolommen
                        \ejectpage  % anders soms geen overgang
                      \fi
                    \fi,
         \v!opmaak=>\ifpaginageblokkeerd\else
                      \eject
                    \fi,
         \v!blanko=>\pagebodyornamentsfalse,
            \v!nee=>\ifpaginageblokkeerd\else
                      \dosomebreak\nobreak
                    \fi,
       \v!voorkeur=>{\ifpaginageblokkeerd\else
                       \ifbinnenkolommen
                         \dosomebreak\goodbreak
                       \else
                         \testpagina[3][\!!zeropoint]%
                       \fi
                     \fi},
  \v!grotevoorkeur=>{\ifpaginageblokkeerd\else
                      \ifbinnenkolommen
                        \dosomebreak\goodbreak
                      \else
                        \testpagina[5][\!!zeropoint]%
                      \fi
                     \fi},
           \v!leeg=>{\ejectinsert
                     \ejectpage
                     \doifnotvalue{\??tk\v!hoofd\v!tekst\c!status}{\v!stop}
                       {\stelhoofdin[\c!status=\v!leeg]}%
                     \doifnotvalue{\??tk\v!voet\v!tekst\c!status}{\v!stop}
                       {\stelvoetin[\c!status=\v!leeg]}%
                     \insertdummypage},
          \v!links=>{\ejectinsert
                     \superejectpage
                     \doifbothsidesoverruled
                     \orsideone
                       \resetcurrentsectionmarks
                       \insertdummypage
                     \orsidetwo
                     \od},
         \v!rechts=>{\ejectinsert
                     \superejectpage
                     \doifbothsidesoverruled
                     \orsideone
                     \orsidetwo
                       \resetcurrentsectionmarks
                       \insertdummypage
                     \od},
           \v!even=>\pagina
                    \doifonevenpaginaelse
                      {\resetcurrentsectionmarks\insertdummypage}{},
         \v!oneven=>\pagina
                    \doifonevenpaginaelse
                      {}{\resetcurrentsectionmarks\insertdummypage},
        \v!viertal=>{\ifdubbelzijdig
                       \!!counta=\realpageno
                       \!!countb=\realpageno
                       \divide\!!counta by 4
                       \divide\!!countb by 2
                       \ifnum\!!counta=\!!countb
                       \else
                         \pagina
                         \pagina[\v!leeg]%
                         \pagina[\v!leeg]%
                       \fi
                     \fi},
        \v!laatste=>{\ejectinsert
                     \superejectpage
                     \doifbothsidesoverruled
                       \naastpagina
                     \orsideone
                     \orsidetwo
                       %\ifodd\realpageno \else % kan weer weg
                         \geenhoofdenvoetregels
                         \insertdummypage
                       %\fi
                     \od
                     \filluparrangedpages},
        \s!unknown=>\doifinstringelse{+}{#1}
                      {\ejectinsert\ejectpage
                       \dorecurse{#1}{\insertdummypage}}
                      {\doifnumberelse{#1}
                         {\ejectinsert\ejectpage
                          \doloop
                            {\ifnum\userpageno<#1\relax
                               \insertdummypage
                             \else
                               \exitloop
                             \fi}}
                         {}}]%
   \egroup}

\def\complexpagina[#1]%
  {\expanded{\docomplexpagina[#1]}}

\def\simplepagina%
  {\docomplexpagina[\v!ja]}

\definecomplexorsimple\pagina

\def\resetpagina%
  {\global\paginageblokkeerdfalse}

% \getpagestatus
% \ifrightpage als odd/enkelzijdig

\newif\ifrightpage \rightpagetrue

\newcounter \nofpagesets

\definetwopasslist{\s!page}

\def\dopagesetreference%
  {\doglobal\increment\nofpagesets\relax
   \edef\writepagref%
     {\writeutilitycommand
        {\twopassentry
           {\s!page}%
           {\nofpagesets}%
           {\noexpand\realfolio}}}%
   \writepagref}

\def\getpagestatus% hierboven gebruiken
  {\ifdubbelzijdig
     \gettwopassdata{\s!page}%
     \iftwopassdatafound \else
       \let\twopassdata=\realpageno
     \fi
     \ifodd\twopassdata
       \global\rightpagetrue
     \else
       \global\rightpagefalse
     \fi
     \dopagesetreference
   \else
     \global\rightpagetrue
   \fi}

%I n=Hoofdteksten
%I c=\stelnummeringin
%I c=\stelhoofdtekstenin,\stelvoettekstenin,\stelhoofdin,\stelvoetin
%I c=\stelboventekstenin,\stelondertekstenin,\stelbovenin,\stelonderin
%I
%I Zogeheten hoofd- en/of voetteksten kan men instellen
%I met:
%I
%I   \stelhoofdtekstenin [linker tekst] [rechter tekst]
%I   \stelvoettekstenin  [linker tekst] [rechter tekst]
%I
%I Bij dubbelzijdig zetten worden de linker en rechter
%I teksten gespiegeld.
%I
%I In plaats van een tekst kunnen de woorden 'hoofdstuk',
%I 'paragraaf' en 'deel' worden meegegeven. Ook kan het
%I woord 'datum' worden meegegeven.
%P
%I Als men op de even en oneven pagina's een andere tekst
%I wil hebben, dan kan men een tweede paar meegeven. In dat
%I geval zijn er dus vier argumenten: [][][][].
%I
%I Als men in de marge of randen teksten wil, kan men dat
%I direct achter het commando aangeven:
%I
%I   \stelhoofdtekstenin [lokatie] [links] [rechts]
%I   \stelvoettekstenin  [lokatie] [links] [rechts]
%I
%I Mogelijke lokaties zijn: tekst, marge en rand.
%P
%I In de tekst opgenomen commando's kunnen soms voor
%I problemen zorgen. Commando's kan men daarom laten
%I voorafgaan \geentest, bijvoorbeeld:
%I
%I   \stelvoettekstenin[\geentest\lastigcommando][]
%I
%I Meestal geven commando's geen problemen. Wel moet men
%I oppassen met []. Accolades zijn hiervoor de oplossing:
%I
%I   \stelvoettekstenin[{{\huidigedatum[mm,/,jj]}}][]
%I
%I of
%I
%I   \stelvoettekstenin[\geentest{\huidigedatum[mm,/,jj]}][]
%P
%I De wijze van nummeren wordt gedefinieerd met:
%I
%I   \stelnummeringin[variant=,plaats=,conversie=,
%I     links=,rechts=,tekst=,tekstscheider=,nummerscheider,
%I     wijze=,blok=,status=,letter=,<sectie>nummer=,commando=]
%I
%I De plaats van het nummer hangt af van het eerste
%I meegegeven argument:
%I
%I   enkelzijdig             dubbelzijdig
%I
%I   links, rechts           kantlijn (links of rechts)
%I   marge                   marge (links of rechts)
%I   midden                  midden
%I   inlinker, inrechter     inlinker, inrechter
%P
%I Met plaats geeft men tevens aan of het nummer in het hoofd
%I of in de voet komt {hoofd,midden}. Met 'nummerscheider' geeft
%I men aan wat er binnen een (eventueel) samengestelde nummer
%I als scheider wordt gezet, standaard: 2-3. Met 'tekstscheider'
%I geeft men aan wat er tussen het paginanummer en een hoofd- of
%I voettekst wordt gezet (in geval van plaatsen op de marge).
%I
%I Liefhebbers kunnen aan 'commando' een eigen commando om het
%I nummer te zetten meegeven. Dit eigen commando krijgt als
%I argument het paginanummer mee.
%I
%I Het is mogelijk een dubbelzijdige tekst met enkelzijdige
%I marges te zetten:
%I
%I   \stelnummeringin[variant={enkelzijdig,dubbelzijdig}]
%I
%I In dit geval worden de hoofd- en voetregels dus wel
%I gespiegeld en hebben commando's als \pagina[rechts] betekenis.
%P
%I Als 'conversie' is mogelijk: cijfers, letters, Letters,
%I romeins en Romeins. Als 'status' kan 'start' of 'stop'
%I worden meegegeven. Op deze manier kan het aangeven van
%I een paginanummer worden aan- en uitgezet.
%I
%I Er kan per sectienummer (deelnummer, hoofdstuknummer enz.)
%I worden ingesteld of het zichtbaar is ('ja' of 'nee').
%I
%I Mogelijke wijzen van nummeren zijn: perdeel of perhoofdstuk.
%P
%I Hoofd- en voetregels blijven achterwege of juist niet na het
%I commando:
%I
%I   \geenhoofdenvoetregels
%I   \welhoofdenvoetregels
%I
%I of na:
%I
%I   \stelhoofdin[lokatie][linkerletter=,rechterletter=,
%I     letter=,linkerbreedte=,rechterbreedte=,voor=,na=]
%I   \stelvoetin[locatie][linkerletter=,rechterletter=,
%I     letter=,linkerbreedte=,rechterbreedte=,voor=,na=]
%I
%I mogelijke lokaties zijn: tekst, marge en rand. Als [lokatie]
%I wordt wegelaten, dan wordt tekst verondersteld.
%I
%I Als de breedte wordt ingesteld, dan wordt de weergegeven
%I tekst zonodig ingekort en gevolgd door ...
%P
%I Het is mogelijk het plaatsen van hoofd- en voetregels
%I stop te zetten:
%I
%I   \stelhoofdin[status=]
%I   \stelvoetin[status=]
%I
%I Aan status kunnen de olgende aarden worden toegekend:
%I
%I   geen      de kop/voet vervalt (de tekst schuift omhoog)
%I   leeg      de kop/voet blijft 1 pagina leeg
%I   hoog      de kop/voet vervalt 1 pagina leeg (idem)
%I   normaal   de kop/voet wordt gezet
%I   stop      de kop/voet blijft vanaf nu leeg
%I   start     de kop/voet wordt vanaf nu weer gevuld
%I
%I Het is ook mogelijk bij \stelhoofdin en \stelvoetin als
%I parameters [voor=] en [na=] mee te geven. De toegekende
%I commando's worden in dat geval voor en na het hoofd en de
%I de voet uitgevoerd.
%P
%I Boven het hoofd en onder de voet is ook ruimte. Deze kan
%I worden gedefinieerd met vergelijkbare commando's:
%I
%I   \stelboventekstenin[...][...][...]
%I   \stelondertekstenin[...][...][...]
%I
%I   \stelbovenin[...]
%I   \stelonderin[...]
%I
%I   \geenbovenenonderregels
%I   \welbovenenonderregels

% De onderstaande macro's lijken op het eerste gezicht vrij
% ingewikkeld en omslachtig. Dit is het gevolg van een
% dubbel optioneel zijn van argumenten: zowel het eerste als
% de twee laatste argumenten zijn optioneel. Dit is mede het
% gevolg van een uitbreiding naar marges en randen, waarbij
% upward-compatibiliteit zwaar heeft gewogen.

\def\dostellayouttekstin[#1][#2][#3]%
  {\ifthirdargument
     \getparameters[\??tk#1#2][#3]%
   \else
     \getparameters[\??tk#1\v!tekst][#2]%
   \fi
   \calculatevsizes}

\def\stelbovenin {\dotripleempty\dostellayouttekstin[\v!boven]}
\def\stelhoofdin {\dotripleempty\dostellayouttekstin[\v!hoofd]}
\def\steltekstin {\dotripleempty\dostellayouttekstin[\v!tekst]}
\def\stelvoetin  {\dotripleempty\dostellayouttekstin[\v!voet]}
\def\stelonderin {\dotripleempty\dostellayouttekstin[\v!onder]}

\letvalue{\??tk\v!boven\v!tekst\c!status}=\v!normaal
\letvalue{\??tk\v!hoofd\v!tekst\c!status}=\v!normaal
\letvalue{\??tk\v!tekst\v!tekst\c!status}=\v!normaal
\letvalue{\??tk\v!voet \v!tekst\c!status}=\v!normaal
\letvalue{\??tk\v!onder\v!tekst\c!status}=\v!normaal

\def\geenhoofdenvoetregels%
  {\stelhoofdin[\c!status=\v!leeg]%
   \stelvoetin[\c!status=\v!leeg]}

\def\geenbovenenonderregels%
  {\stelbovenin[\c!status=\v!leeg]%
   \stelonderin[\c!status=\v!leeg]}

% THIS: !!!

\def\dolimitateteksten#1#2%
  {\doifelsevaluenothing{#1}{#2}{\limitatetext{#2}{\getvalue{#1}}{...}}}

\def\doteksten#1#2#3#4#5#6%
  {\bgroup
  %\showcomposition % I need to test first
   \convertargument#6\to\ascii
   \doifsomething{\ascii}
     {\doattributes{#1#2}#3#4%
        {\doifvalue{#1\v!tekst\c!strut}{\v!ja}{\setstrut\strut}% here!
         \doifdefinedelse{\??mk\ascii\c!koppeling} % brrr
           {\dolimitateteksten{#1#2#5}{\haalmarkering[\ascii][\v!eerste]}}
           {\ConvertConstantAfter\doifelse{\v!paginanummer}{#6}
              {\@@plaatspaginanummer}
              {\ConvertConstantAfter\doifelse{\v!datum}{#6}
                 {\currentdate}
                 {\opeenregel\dolimitateteksten{#1#2#5}{#6}}}}}}%
  \egroup}

\def\dodoteksten#1#2#3#4#5#6%
  {\doifonevenpaginaelse
     {\doteksten{#1}{#2}#3{#4}}  % #3 => provides three arguments
     {\doteksten{#1}{#2}#5{#6}}} % #5 => provides three arguments

\def\dodododoteksten[#1][#2][#3][#4][#5][#6]%
  {\ifsixthargument
     \setvalue{\??tk#1#2\c!linkertekst}%
       {\dodoteksten{\??tk#1}{#2}
          {\c!linkerletter \c!linkerkleur \c!linkerbreedte }{#3}
          {\c!rechterletter\c!rechterkleur\c!rechterbreedte}{#6}}%
     \setvalue{\??tk#1#2\c!rechtertekst}%
       {\dodoteksten{\??tk#1}{#2}
          {\c!rechterletter\c!rechterkleur\c!rechterbreedte}{#4}
          {\c!linkerletter \c!linkerkleur \c!linkerbreedte }{#5}}%
   \else\iffifthargument
     \setvalue{\??tk#1\v!tekst\c!linkertekst}%
       {\dodoteksten{\??tk#1}{\v!tekst}
          {\c!linkerletter \c!linkerkleur \c!linkerbreedte }{#2}
          {\c!rechterletter\c!rechterkleur\c!rechterbreedte}{#5}}%
     \setvalue{\??tk#1\v!tekst\c!rechtertekst}%
       {\dodoteksten{\??tk#1}{\v!tekst}
          {\c!rechterletter\c!rechterkleur\c!rechterbreedte}{#3}
          {\c!linkerletter \c!linkerkleur \c!linkerbreedte }{#4}}%
   \else\iffourthargument
     \setvalue{\??tk#1#2\c!linkertekst}%
       {\dodoteksten{\??tk#1}{#2}
          {\c!linkerletter\c!linkerkleur\c!linkerbreedte}{#3}
          {\c!linkerletter\c!linkerkleur\c!linkerbreedte}{#3}}%
     \setvalue{\??tk#1#2\c!rechtertekst}%
       {\dodoteksten{\??tk#1}{#2}
          {\c!rechterletter\c!rechterkleur\c!rechterbreedte}{#4}
          {\c!rechterletter\c!rechterkleur\c!rechterbreedte}{#4}}%
   \else\ifthirdargument
     \setvalue{\??tk#1\v!tekst\c!linkertekst}%
       {\dodoteksten{\??tk#1}{\v!tekst}
          {\c!linkerletter\c!linkerkleur\c!linkerbreedte}{#2}
          {\c!linkerletter\c!linkerkleur\c!linkerbreedte}{#2}}%
     \setvalue{\??tk#1\v!tekst\c!rechtertekst}%
       {\dodoteksten{\??tk#1}{\v!tekst}
          {\c!rechterletter\c!rechterkleur\c!rechterbreedte}{#3}
          {\c!rechterletter\c!rechterkleur\c!rechterbreedte}{#3}}%
   \else\ifsecondargument % new
     \setvalue{\??tk#1\v!tekst\c!linkertekst}{}%
     \setvalue{\??tk#1\v!tekst\c!rechtertekst}{}%
     \setvalue{\??tk#1\v!tekst\c!middentekst}%
       {\doteksten{\??tk#1}{\v!tekst}\c!letter\c!kleur\c!breedte{#2}}%
   \else
     \dosixtupleempty\dodododoteksten[#1][\v!tekst][][][][]%
     \dosixtupleempty\dodododoteksten[#1][\v!marge][][][][]%
     \dosixtupleempty\dodododoteksten[#1][\v!rand] [][][][]%
   \fi\fi\fi\fi\fi}

\def\stelboventekstenin {\dosixtupleempty\dodododoteksten[\v!boven]}
\def\stelhoofdtekstenin {\dosixtupleempty\dodododoteksten[\v!hoofd]}
\def\stelteksttekstenin {\dosixtupleempty\dodododoteksten[\v!tekst]}
\def\stelvoettekstenin  {\dosixtupleempty\dodododoteksten[\v!voet]}
\def\stelondertekstenin {\dosixtupleempty\dodododoteksten[\v!onder]}

\def\@@nmpre#1{\setbox0=\hbox{#1}\ifdim\wd0=\!!zeropoint\else\unhbox0\tfskip\fi}
\def\@@nmpos#1{\setbox0=\hbox{#1}\ifdim\wd0=\!!zeropoint\else\tfskip\unhbox0\fi}

\def\dodoplaatsteksten#1#2#3#4#5#6% \hsize toegevoegd
  {\hbox
     {\hbox to \linkerrandbreedte
        {\hsize\linkerrandbreedte
         \hss\getvalue{\??tk#1\v!rand#2}}%
      \hskip\linkerrandafstand
      \hskip\pageseparation
      \hbox to \linkermargebreedte
        {\hsize\linkermargebreedte
         \hsmash{\hbox to \linkermargebreedte
           {\hss\getvalue{\??tk#1\v!marge#2}}}%
         \hsmash{\hbox to \linkermargebreedte
           {\hss#5{\??tk#1\v!marge\c!margetekst}}}%
         \hss}% let op: \smashed
      \hskip\linkermargeafstand
      \hbox to \zetbreedte
        {\hsize\zetbreedte
         \hsmash{\hbox to \zetbreedte
           {\@@nmpre{#5{\??tk#1\v!tekst\c!kantlijntekst}}%
            \getvalue{\??tk#1\v!tekst#2}\hss}}%
         \hsmash{\hbox to \zetbreedte
           {\hss\getvalue{\??tk#1\v!tekst#3}\hss}}%
         \hsmash{\hbox to \zetbreedte
           {\hss\getvalue{\??tk#1\v!tekst#4}%
            \@@nmpos{#6{\??tk#1\v!tekst\c!kantlijntekst}}}}%
         \hss}%
      \hskip\rechtermargeafstand
      \hbox to \rechtermargebreedte
        {\hsize\rechtermargebreedte
         \hsmash{\hbox to \rechtermargebreedte
           {\getvalue{\??tk#1\v!marge#4}\hss}}%
         \hsmash{\hbox to \rechtermargebreedte
           {#6{\??tk#1\v!marge\c!margetekst}\hss}}%
         \hss}% let op: \smashed
      \hskip\pageseparation
      \hskip\rechterrandafstand
      \hbox to \rechterrandbreedte
        {\hsize\rechterrandbreedte
         \getvalue{\??tk#1\v!rand#4}\hss}}}

\def\doplaatslayoutregel#1#2%
  {\ifdim#2>\!!zeropoint\relax  % prevents pagenumbers when zero height
     \goleftonpage
     \hbox
       {\setbox0=\vbox to #2
          {\forgetall
           \vsize#2
           \normalbaselines
           \def\\{ \ignorespaces}%
           \def\crlf{ \ignorespaces}%
           \getvalue{\??tk#1\v!tekst\c!voor}%
           \doifbothsidesoverruled
             \dodoplaatsteksten#1\c!linkertekst\c!middentekst\c!rechtertekst
               \gobbleoneargument\getvalue
           \orsideone
             \dodoplaatsteksten#1\c!linkertekst\c!middentekst\c!rechtertekst
               \gobbleoneargument\getvalue
           \orsidetwo
             \dodoplaatsteksten#1\c!rechtertekst\c!middentekst\c!linkertekst
               \getvalue\gobbleoneargument
           \od
           \getvalue{\??tk#1\v!tekst\c!na}%
           \kern\!!zeropoint}% keep the \dp, beware of \vtops, never change this!
        \dp0=\!!zeropoint
        \box0}%
   \fi}

% \stelhoofdin[status=normaal] \titel{NORMAAL} \dorecurse{8}{\input tufte} \pagina
% \stelhoofdin[status=hoog]    \titel{HOOG}    \dorecurse{8}{\input tufte} \pagina
% \stelhoofdin[status=leeg]    \titel{LEEG}    \dorecurse{8}{\input tufte} \pagina
% \stelhoofdin[status=geen]    \titel{GEEN}    \dorecurse{8}{\input tufte} \pagina
% \stelhoofdin[status=stop]    \titel{STOP}    \dorecurse{8}{\input tufte} \pagina

\def\definieertekst%
  {\dosixtupleempty\dodefinieertekst}

\def\dodefinieertekst[#1][#2][#3][#4][#5][#6]%
  {\ifsixthargument
     \setvalue{\??tk#2#1}{\dosixtupleempty\dodododoteksten[#2][#3][#4][#5][#6]}%
   \else\iffourthargument
     \setvalue{\??tk#2#1}{\dosixtupleempty\dodododoteksten[#2][#3][#4]}%
   \else
     \setvalue{\??tk#2#1}{\dosixtupleempty\dodododoteksten[#2][#3]}%
   \fi\fi}

% \definieertekst[hoofdstuk][voet][paginanummer]
% \stelkopin[hoofdstuk][hoofd=hoog,voet=hoofdstuk]
% \stelhoofdtekstenin[paginanummer]
% \stelvoettekstenin[links][rechts]
% \hoofdstuk{eerste} \dorecurse{20}{\input tufte \relax}
% \hoofdstuk{tweede} \dorecurse{20}{\input tufte \relax}

\def\plaatslayoutregel#1#2%  % handelt o.b.v. tekst
  {\ExpandFirstAfter\processaction
     [\getvalue{\??tk#1\v!tekst\c!status}]
     [        \v!geen=>,
              \v!hoog=>, % is reset later on
             \v!start=>\setgvalue{\??tk#1\v!tekst\c!status}{\v!normaal}%
                       \doplaatslayoutregel{#1}{#2},
              \v!stop=>\vskip#2\relax,
              \v!leeg=>\setgvalue{\??tk#1\v!tekst\c!status}{\v!normaal}%
                       \vskip#2\relax,
     \v!geenmarkering=>\bgroup
                       \setgvalue{\??tk#1\v!tekst\c!status}{\v!normaal}%
                       \let\dohaalmarkering=\nohaalmarkering
                       \doplaatslayoutregel{#1}{#2}%
                       \egroup,
           \v!normaal=>\doplaatslayoutregel{#1}{#2},
           \s!default=>\doplaatslayoutregel{#1}{#2},
           \s!unknown=>\bgroup % new
                       \setgvalue{\??tk#1\v!tekst\c!status}{\v!normaal}%
                       \getvalue{\??tk#1\commalistelement}%
                       \doplaatslayoutregel{#1}{#2}%
                       \egroup]}

\def\resetlayoutregel#1%
  {\doifvalue{\??tk#1\v!tekst\c!status}{\v!hoog}
     {\setgvalue{\??tk#1\v!tekst\c!status}{\v!normaal}% ! global
      \doglobal\calculatevsizes
      \global\newlogostrue
      \global\newbackgroundtrue}}

\def\resetlayoutregels%
  {\resetlayoutregel\v!boven
   \resetlayoutregel\v!hoofd
   \resetlayoutregel\v!tekst
   \resetlayoutregel\v!voet
   \resetlayoutregel\v!onder}

\def\plaatsbovenregel {\plaatslayoutregel\v!boven\bovenhoogte}
\def\plaatshoofdregel {\plaatslayoutregel\v!hoofd\hoofdhoogte}
\def\plaatstekstregel {\plaatslayoutregel\v!tekst\teksthoogte}
\def\plaatsvoetregel  {\plaatslayoutregel\v!voet\voethoogte}
\def\plaatsonderregel {\plaatslayoutregel\v!onder\onderhoogte}

\def\gettextboxes%  elders weghalen
  {\bgroup
   \setbox0=\vbox
     {\mindermeldingen
      \calculatereducedvsizes
      \swapmargins
      \forgetall
      \offinterlineskip
      \vskip-\bovenhoogte
      \vskip-\bovenafstand
      \plaatsbovenregel
      \vskip-\bovenhoogte
      \plaatsboventekstblok
      \vskip\bovenafstand
      \plaatshoofdregel
      \vskip\hoofdafstand
      \placepositionanchors
      \vskip-\teksthoogte
      \plaatstekstregel
      \vskip\voetafstand
      \plaatsvoetregel
      \vskip\onderafstand
      \plaatsonderregel
      \vskip-\onderhoogte
      \plaatsondertekstblok
      \plaatsversieaanduiding
      \vfilll}%
  \smashbox0
  \box0
  \egroup}

\ifx\undefined\placepositionanchors
  \def\placepositionanchors{\vskip\teksthoogte}
\fi

%\def\@@plaatspaginascheider%
%  {\doif{\@@nmstatus}{\v!start}%
%     {\@@nmtekstscheider}}

\def\@@nmin     {} % kan vervallen  (upward compatibility)
\def\@@nmplaats {} % mag {plaats, in} zijn

\newcounter\@@pagenumberlocation

\def\do@@plaatspaginanummer#1%
  {\ifnum#1=\@@pagenumberlocation\@@plaatspaginanummer\fi}

\def\dodosetpagenumberlocation#1% tricky because of ...texts
  {\increment\@@pagenumberlocation
   \ifx\@@nmplaats\empty\else
     \def\dododosetpagenumberlocation##1%
       {\donetrue
        \setevalue{\??tk#1##1}%
          {\noexpand\do@@plaatspaginanummer{\@@pagenumberlocation}}}%
     \donefalse
     \ExpandFirstAfter\processallactionsinset
       [\@@nmplaats]
       [    \v!midden=>\dododosetpagenumberlocation{\v!tekst\c!middentekst},
             \v!links=>\dododosetpagenumberlocation{\v!tekst\c!linkertekst},
            \v!rechts=>\dododosetpagenumberlocation{\v!tekst\c!rechtertekst},
          \v!inlinker=>\dododosetpagenumberlocation{\v!marge\c!linkertekst},
         \v!inrechter=>\dododosetpagenumberlocation{\v!marge\c!rechtertekst},
           \v!inmarge=>\dododosetpagenumberlocation{\v!marge\ifdubbelzijdig
                         \c!margetekst\else\c!rechtertekst\fi},
             \v!marge=>\dododosetpagenumberlocation{\v!marge\ifdubbelzijdig
                         \c!margetekst\else\c!rechtertekst\fi},
           \v!opmarge=>\dododosetpagenumberlocation{\v!tekst\c!kantlijntekst},
          \v!kantlijn=>\dododosetpagenumberlocation{\v!tekst\c!kantlijntekst}]%
     \ifdone \else
       \dododosetpagenumberlocation{\v!tekst\c!middentekst}% default
     \fi
   \fi}

\def\dosetpagenumberlocation%
  {\ExpandBothAfter\doifinsetelse{\v!hoofd}{\@@nmplaats,\@@nmin}
     {\dodosetpagenumberlocation\v!hoofd}
     {\dodosetpagenumberlocation\v!voet}}

\def\dostelnummeringin[#1]%
  {\getparameters[\??nm][#1]%
   \preparepaginaprefix{\??nm}%
   \enkelzijdigfalse
   \dubbelzijdigfalse
   \ExpandFirstAfter\processallactionsinset
     [\@@nmvariant]
     [ \v!enkelzijdig=>\enkelzijdigtrue,
      \v!dubbelzijdig=>\dubbelzijdigtrue]%
   \ifdubbelzijdig
     \trackingmarginnotestrue
   \else
     \trackingmarginnotesfalse
   \fi
   \dosetpagenumberlocation
   \global\newbackgroundtrue
   \global\newlogostrue}

\def\stelnummeringin%
  {\dosingleempty\dostelnummeringin}

% listig: hangt af van \@@kolijst

% erg fout
%
% \def\preparepaginaprefix#1%
%   {\def\dopreparepaginaprefix##1%
%      {\doifvalue{#1##1\c!nummer}{\v!ja}
%         {\setvalue{#1\getvalue{\??by##1}\c!nummer}{\v!ja}}}%
%    \processcommacommand[\@@kolijst]\dopreparepaginaprefix}
%
% nog fouter
%
% \def\preparepaginaprefix#1%
%   {\def\dopreparepaginaprefix##1%
%      {\doifelsevalue{#1##1\v!nummer}{\v!ja}                    % v
%         {\setvalue{#1\getvalue{\??by##1}\v!nummer}{\v!ja}}     % v
%         {\setvalue{#1\getvalue{\??by##1}\v!nummer}{\v!nee}}}%  % v
%    \processcommacommand[\@@kolijst]\dopreparepaginaprefix}
%
% best, beware, chapter (yes) can be followed by title (no)

\def\preparepaginaprefix#1%
  {\def\dopreparepaginaprefix##1%
     {\setvalue{#1\getvalue{\??by##1}\v!nummer}{\v!nee}}%  %v
   \processcommacommand[\@@kolijst]\dopreparepaginaprefix
   \def\dopreparepaginaprefix##1%
     {\doifvalue{#1##1\v!nummer}{\v!ja}                    %v
        {\setvalue{#1\getvalue{\??by##1}\v!nummer}{\v!ja}}}%
   \processcommacommand[\@@kolijst]\dopreparepaginaprefix}

% \def\dopaginaprefix#1#2%
%   {\doifelsevalue{#1#2\v!nummer}{\v!ja}                        % v
%      {\@EA\beforesplitstring\@EA{\postprefix}\at:\to\preprefix
%       \@EA\aftersplitstring\@EA{\postprefix}\at:\to\postprefix
%       \doifsomething{\preprefix}
%         {\doifnot{\preprefix}{0}{\preprefix\@@nmnummerscheider}}}%
%     {\@EA\aftersplitstring\@EA{\postprefix}\at:\to\postprefix}}

\def\dopaginaprefix#1#2%
  {\let\normaluchar\uchar\let\uchar\relax % ugly but needed
   \doifelsevalue{#1#2\v!nummer}{\v!ja} % \v! and no \c!
     {\@EA\beforesplitstring\@EA{\postprefix}\at:\to\preprefix
      \@EA\aftersplitstring\@EA{\postprefix}\at:\to\postprefix
      \let\uchar\normaluchar % ugly but needed
      \doifsomething{\preprefix}
        {\doifnot{\preprefix}{0}{\preprefix\@@nmnummerscheider}}}%
     {\@EA\aftersplitstring\@EA{\postprefix}\at:\to\postprefix
      \let\uchar\normaluchar}} % ugly but needed

\def\paginaprefix#1[#2::#3::#4]% kan wat sneller ####1:0:
  {\bgroup
   \edef\postprefix{#3}%
   \def\donexttrackcommando##1%
     {\dopaginaprefix{#1}{##1}%
      \donexttracklevel{##1}}%
   \donexttrackcommando\firstsection
   \egroup}

\unexpanded\def\@@plaatspaginanummer% called in empty tests
  {\doif{\@@nmstatus}{\v!start}%
     {{\@@nmcommando{\doattributes\??nm\c!letter\c!kleur{\volledigepaginanummer}}}}}

\def\@@plaatspaginascheider%
  {\doif{\@@nmstatus}{\v!start}%
     {\@@nmtekstscheider}}

\def\userfolio%  naast realfolio
  {\nummer[\s!page]}

\def\pagenumber%
  {\userfolio}

\def\volledigepaginanummer%   alleen voor paginanummers !!
  {\@@nmlinks
   \def\donexttrackcommando##1%
     {\doifvalue{\??nm##1\v!nummer}{\v!ja}  % v
        {\ifnum\countervalue{\??se##1}>0\relax
           \getvalue{##1\c!nummer}\@@nmnummerscheider
         \fi}%
      \doifsomething{\@@nmtekst}
        {\@@nmtekst\@@nmnummerscheider}%
      \donexttracklevel{##1}}%
   \donexttrackcommando{\firstsection}%
   \pagenumber
   \@@nmrechts}

\def\translatednumber[#1::#2::#3]%
  {#3}

%I n=Selecteren
%I c=\soortpagina,\verwerkpagina,\koppelpagina
%I
%I Het is mogelijk pagina's te markeren en selectief te
%I verwerken. Markering vindt plaats met het commando:
%I
%I   \soortpagina[aanduiding]
%I
%I en selecteren vindt plaats met:
%I
%I   \verwerkpagina[aanduiding,...][instelling]
%I
%I waarbij de instelling 'ja' of 'nee' is en meerdere
%I aanduidingen worden gescheiden door een comma.
%P
%I Er kunnen commando's worden gekoppeld aan pagina's:
%I
%I   \koppelpagina[aanduiding,...][voor=,na=,optie=]
%I
%I De opgegeven commando's worden voor respectievelijk na het
%I vrijgeven van de pagina uitgevoerd.

% hier nog uti blokkeren

\newif\ifgeselecteerd
\geselecteerdtrue

\newif\ifselecteren
\selecterenfalse

\newif\ifverwerken
\verwerkentrue

\def\selectie{}
\def\paginasoort{}

\let\naastpagina=\relax
\let\napagina=\relax
\let\voorpagina=\relax

\def\dovoorpagina%
  {\doifsomething{\paginasoort}
     {\def\dododopagina##1%
        {\global\let\voorpagina=\relax
         \getvalue{\??pg##1\c!voor}}%
      \processcommacommand[\paginasoort]\dododopagina}}

\def\dododonapagina#1%
  {\global\let\napagina=\relax
   \gdef\paginasoort{}%
   \getvalue{\??pg#1\c!na}}

\def\donapagina%
  {\doifsomething{\paginasoort}
     {\def\dodopagina##1%
        {\doifelsevalue{\??pg##1\c!optie}{\v!dubbelzijdig}
           {\doifbothsidesoverruled
              \dododonapagina{##1}%
            \orsideone
              \dododonapagina{##1}%
            \orsidetwo
            \od}%
           {\dododonapagina{##1}}}%
      \processcommacommand[\paginasoort]\dodopagina}}

\def\dosoortpagina[#1]%
  {\doglobal\addtocommalist{#1}\paginasoort
   \ifselecteren
     \ExpandBothAfter\doifcommon{#1}{\selectie}
       {\global\geselecteerdtrue}%
   \fi
   \gdef\voorpagina{\dovoorpagina}%
   \gdef\napagina{\donapagina}}

\def\soortpagina%
  {\dosingleargument\dosoortpagina}

\def\dokoppelpagina[#1][#2]%
  {\getparameters
     [\??pg]
     [\c!voor=,
      \c!na=,
      \c!optie=,
      #2]%
   \def\docommando##1%
     {\getparameters
        [\??pg##1]
        [\c!voor=\@@pgvoor,
         \c!na=\@@pgna,
         \c!optie=\@@pgoptie]}%
   \processcommalist[#1]\docommando}%

\def\koppelpagina%
  {\dodoubleargument\dokoppelpagina}

\def\doverwerkpagina[#1][#2]%
  {\processaction
     [#2]
     [ \v!ja=>\global\verwerkentrue,
      \v!nee=>\global\verwerkenfalse]%
   \gdef\selectie{#1}%
   \global\selecterentrue
   \global\geselecteerdfalse}

\def\verwerkpagina%
  {\dodoubleargument\doverwerkpagina}

\def\resetselectiepagina%
  {\ifselecteren
     \doifbothsidesoverruled
       \global\geselecteerdfalse
     \orsideone
     \orsidetwo
       \global\geselecteerdfalse
     \od
   \fi}

\newif\iflocation

\def\ifinteractief{\iflocation}

\def\previoussectionformat{}
\def\currentsectionformat{}

\let\updatelistreferences=\relax
\def\updatedlistreferences{}

\def\setsectionlistreference#1#2%
  {\ifnum\countervalue{\??se\previoussection{#1}}>0\relax
     \xdef\previoussectionformat{\@@longformatnumber{\previoussection{#1}}}%
   \else
     \xdef\previoussectionformat{}%
   \fi
   \xdef\currentsectionformat{\@@longformatnumber{#1}}}

\def\startlistreferences#1%
  {\thisissomeinternal{\s!lst}{#1\currentsectionformat}%
   \setxvalue{\s!lst:#1}{\realfolio}% to be sure
   \setxvalue{\s!lst:#1\currentsectionformat}{\realfolio}%
   \setxvalue{\e!vorigelokale#1}{\s!lst:#1\previoussectionformat}%
   \setxvalue{\e!huidigelokale#1}{\s!lst:#1\currentsectionformat}%
   \doifelse{\currentsectionformat}{}
     {\setglobalcrossreference
        {\e!vorige#1}{}{\realfolio}{}}
%
     {\setglobalsystemreference\rt!list
        {\e!vorige#1}{\getvalue{\e!vorigelokale#1}}}%
%
%         {\definereference[\e!vorige#1][\getvalue{\e!vorigelokale#1}]%
%
   \def\stoplistreferences{\dostoplistreferences}}

\def\dostoplistreferences#1%
  {\iflijstgeplaatst
     \addtocommalist{#1}\updatedlistreferences                % nog global (\doglobal)
     \global\let\updatedlistreferences=\updatedlistreferences % een noodverbandje
     \gdef\updatelistreferences%
       {\def\docommando####1%
%
          {\setglobalsystemreference\rt!list
             {\e!vorige####1}{\getvalue{\e!huidigelokale####1}}}%
%
%         {\definereference[\e!vorige####1][\getvalue{\e!huidigelokale####1}]%
%
        \processcommacommand[\updatedlistreferences]\docommando
        \global\let\updatelistreferences=\relax
        \global\let\updatedlistreferences=\empty}%
   \fi}

\def\stoplistreferences%
  {\gobbleoneargument}

% de rest

\newcount\prefixteller

\def\referenceprefix{}

% \def\showlocation            #1{#1}
% \def\showcontrastlocation#1#2#3{#3}
% \def\showcoloredlocation   #1#2{#2}

\unexpanded\def\referencepagenumber[#1]%
  {\paginaprefix\??rf[#1]\translatednumber[#1]}

%I n=Regels
%I c=\startregels,\stelregelsin
%I c=\startregelnummeren,\stelregelnummerenin
%I c=\crlf
%I c=\startregel,\stopregel,\eenregel,\inregel
%I
%I Het is mogelijk de indeling in regels zoals die in de ruwe
%I tekst wordt gehanteerd af te dwingen. Er wordt in dit
%I geval niet ingesprongen. De regels worden gezet tussen de
%I twee commando's:
%I
%I   \startregels
%I
%I     ...................................................
%I
%I   \stopregels
%P
%I Er kan met betrekking tot regels een en ander worden
%I ingesteld:
%I
%I   \stelregelsin[voor=,na=,inspringen=]
%I
%I Aan 'inspringen' kan men 'ja', 'nee', 'even' of 'oneven'
%I toekennen.
%P
%I Het is mogelijk regels te nummeren door ze tussen de
%I volgende commando's te plaatsen:
%I
%I   \startregelnummeren
%I   \stopregelnummeren
%I
%I Als de regelovergangen moeten worden gehandhaafd, dan moet
%I \startregels voor \startregelnummeren worden gegeven.
%I
%I Het nummeren begint steeds opnieuw bij 1. Als verder moet
%I worden genummeren, dan kan achter \startregelnummeren
%I [verder] worden meegegeven.
%I
%I Standaard worden regels alinea-gewijs genummerd. Als men
%I over een paginagrens wil nummeren, dan moet [opelkaar]
%I worden meegegeven.
%P
%I De wijze van nummeren kan worden ingesteld met:
%I
%I   \stelregelnummerenin[conversie=,start=,stap=,letter=,
%I     plaats=,breedte=,letter=]
%I
%I Als 'conversie' kan worden meegegeven: cijfers, letters,
%I Letters, romeins of Romeins. Aan 'start' en 'stap' kan
%I een getal worden toegekend, aan 'letter' een trefwoord,
%I aan 'breedte' een maat (bij voorkeur in ex) en aan
%I 'plaats' het trefwoord 'inmarge' of 'intekst'.
%P
%I Er kan worden overgegaan naar een nieuwe regel met:
%I
%I   \crlf
%P
%I .... testfase ...
%I
%I \startregel[tag] ... \stopregel[tag]
%I \eenregel[tag]
%I
%I \inregel[tag]

\newif\ifinregels
\newif\ifregelnummersinmarge

\def\stelregelsin%
  {\dodoubleargument\getparameters[\??rg]}

\def\startregels%
  {\@@rgvoor
   \witruimte
  %\pagina[\v!voorkeur]} gaat mis na koppen, nieuw: later \nobreak
   \begingroup
   \def\@@rgstepyes{\parindent\!!zeropoint}%
   \def\@@rgstepno{\parindent\!!zeropoint}%
   \edef\@@rgparindent{\the\parindent}%
   \gdef\@@rglinesteptoggle{1}%
   \processaction
     [\@@rginspringen]
     [    \v!ja=>\def\@@rgstepyes{\parindent\@@rgparindent}%
                 \def\@@rgstepno {\parindent\@@rgparindent},
      \v!oneven=>\def\@@rgstepyes{\parindent\!!zeropoint  }%
                 \def\@@rgstepno {\parindent\@@rgparindent},
        \v!even=>\def\@@rgstepno {\parindent\!!zeropoint  }%
                 \def\@@rgstepyes{\parindent\@@rgparindent}]%
   \inregelstrue
   \stelwitruimtein[\v!geen]%
   \obeylines
   \let\checkindentation=\relax
   \@@rgstepno
   \ignorespaces
   \gdef\afterfirstobeyedline% tzt two pass, net als opsomming
     {\gdef\afterfirstobeyedline%
        {\nobreak
         \global\let\afterfirstobeyedline\relax}}%
   \def\obeyedline%
     {\par
      \afterfirstobeyedline
      \ifdim\lastskip>\!!zeropoint
        \gdef\@@rglinesteptoggle{0}%
      \else
        \doglobal\increment\@@rglinesteptoggle
      \fi
      \ifodd\@@rglinesteptoggle\relax
        \@@rgstepyes
      \else
        \@@rgstepno
      \fi
      \futurelet\next\dobetweenthelines}%
   \GotoPar}

% \def\dobetweenthelines%
%   {\convertcommand \next      \to\!!stringa % very ugly and fuzzy
%    \convertargument\obeyedline\to\!!stringb % but needed anyway
%    \ifx\!!stringa\!!stringb                 % but alas, it fails 
%      \@@rgtussen                            % hopelessly in non 
%    \fi}                                     % etex

\def\dobetweenthelines%
  {\doifmeaningelse{\next}{\obeyedline}{\@@rgtussen}{}}

\def\stopregels%
  {\endgroup
   \@@rgna}

\newcount\linenumber
\newcount\linestepper

% het gebruik van \setlocalreference scheelt een hash entry

\def\regelweergave%
  {\convertnumber\@@rnconversie\linenumber}%

\def\dostelregelnummerenin[#1]%
  {\getparameters
     [\??rn]
     [\c!start=1,
      \c!stap=1,
      #1]%
   \global\linenumber=1\relax}

\def\stelregelnummerenin%
  {\dosingleargument\dostelregelnummerenin}

\def\dostartnummerenLINE%                % !! \everypar !!
  {\EveryPar{\schrijfregelnummer}}

\def\dostopnummerenLINE%
  {\egroup}

\def\dodoschrijfregelnummer%
  {\setbox0=\hbox{\regelweergave}%
   \vsmashbox0
   \ifregelnummersinmarge
     \llap{\hbox{\box0\hskip\linkermargeafstand}}%
   \else
     \llap{\hbox to \@@rnbreedte{\box0\hss}}%
   \fi}

\def\complexstartregelnummeren[#1]%
  {\doifnotinset{\v!verder}{#1}
     {\global\linenumber=1\relax}%
   \doifinsetelse{\@@rnplaats}{\v!inmarge,\v!marge}
     {\regelnummersinmargetrue}
     {\regelnummersinmargefalse}%
   \ifregelnummersinmarge\else
     \advance\leftskip by \@@rnbreedte\relax
   \fi
   \ifinregels
     \let\dostartnummeren=\dostartnummerenLINE
     \let\stopregelnummeren=\dostopnummerenLINE
     \def\schrijfregelnummer%
       {\doschrijfregelnummer
        \global\advance\linenumber by 1\relax}%
   \else
     \let\dostartnummeren=\dostartnummerenPAR
     \let\stopregelnummeren=\dostopnummerenPAR
     \def\schrijfregelnummer%
       {\global\advance\linenumber by -1\relax
        \doschrijfregelnummer}%
   \fi
   \dostartnummeren}

\def\startregelnummeren%
  {\bgroup
   \complexorsimpleempty\startregelnummeren}

\def\doschrijfregelnummer%
  {\ifnum\linenumber<\@@rnstart\relax
   \else
     \!!counta=\linenumber
     \divide\!!counta by \@@rnstap\relax
     \multiply\!!counta by \@@rnstap\relax
     \ifnum\!!counta=\linenumber
       \doattributes\??rn\c!letter\c!kleur{\dodoschrijfregelnummer}%
     \fi
   \fi}

\def\eenregel[#1]%
  {\regelreferentie0[#1]\ignorespaces}

\def\startregel[#1]%
  {\regelreferentie1[#1]\ignorespaces}

\def\stopregel[#1]%
  {\unskip\regelreferentie2[#1]}

% \def\inregellabel#1%
%   {\doifinstringelse{--}{#1}
%      {\labeltext{\v!regels}}
%      {\labeltext{\v!regel}}}
% 
% \def\inregel#1[#2]%
%   {\doifelsenothing{#1}
%      {\in{\inregellabel{\currenttextreference}}[\@@rnprefix#2]}
%      {\in{#1}[\@@rnprefix#2]}}
%
% double labels: 

\def\inregel#1[#2]%
  {\doifelsenothing{#1}
     {\doifinstringelse{--}{\currenttextreference}
        {\in{\leftlabeltext\v!regels}{\rightlabeltext\v!regels}[\@@rnprefix#2]}
        {\in{\leftlabeltext\v!regel }{\rightlabeltext\v!regel }[\@@rnprefix#2]}}
     {\in{#1}[\@@rnprefix#2]}}

\def\dostartnummerenPAR%
  {\beginofshapebox
   \doglobal\newcounter\linereference}

% localcrossref heroverwegen

\def\setlinereference#1#2#3#4%
  {\setxvalue{lrf:#1}{\noexpand\dogetlinereference{#2}{#3}{#4}}}

\def\getlinereference#1%
  {\getvalue{lrf:#1}}

\def\dogetlinereference#1#2#3%
  {\edef\linereferencename{#1}%
   \edef\linereferenceline{#2}%
   \edef\linereferenceplus{#3}}

% 1 xxx xxx xxx xxx xxx xxx xxx
% 2 xxx yyy yyy yyy yyy yyy yyy <= start y
% 3 yyy yyy yyy yyy yyy yyy yyy
% 4 yyy yyy yyy yyy yyy xxx xxx <= stop y
% 5 xxx xxx xxx xxx xxx xxx xxx

%\def\regelreferentie#1[#2]%
%  {\bgroup
%   \dimen0=\dp\strutbox
%   \doif{\@@rnrefereren}{\v!aan}
%     {\doglobal\increment\linereference
%      % start 1=>(n=y,l=0,p=1)
%      % stop  2=>(n=y,l=0,p=2)
%      \setxvalue{lrf:n:\linereference}{\@@rnprefix#2}%
%      \setxvalue{lrf:l:\linereference}{0}%
%      \setxvalue{lrf:p:\linereference}{#1}%
%      \advance\dimen0 by \linereference sp}%
%   \prewordbreak
%   \vrule \!!width \!!zeropoint \!!depth \dimen0 \!!height \!!zeropoint
%   \prewordbreak
%   \egroup}

\def\regelreferentie#1[#2]%
  {\bgroup
   \dimen0=\dp\strutbox
   \doif{\@@rnrefereren}{\v!aan}
     {\doglobal\increment\linereference
      % start 1=>(n=y,l=0,p=1)
      % stop  2=>(n=y,l=0,p=2)
      \setlinereference{\linereference}{\@@rnprefix#2}{0}{#1}%
      \advance\dimen0 by \linereference sp}%
   \prewordbreak
   \vrule \!!width \!!zeropoint \!!depth \dimen0 \!!height \!!zeropoint
   \prewordbreak
   \egroup}

\def\dostopnummerenPAR% dp's -> openstrutdepth
  {\endofshapebox
   \checkreferences
   \linestepper=0
   \reshapebox{\global\advance\linestepper by 1\relax}%
   \global\advance\linenumber by \linestepper
   \doifelse{\@@rnrefereren}{\v!aan}
     {\reshapebox % We are going back!
        {\global\advance\linenumber by -1
         \dimen0=\dp\shapebox
         \advance\dimen0 by -\dp\strutbox
         \ifdim\dimen0>\!!zeropoint\relax
           % 1=>4 | 2=>4 1=>2
           % start 1=>(n=y,l=2,p=1)
           % stop  2=>(n=y,l=4,p=2)
           \dostepwiserecurse{1}{\number\dimen0}{1}
             {\getlinereference\recurselevel
              \setlinereference\recurselevel
                {\linereferencename}{\the\linenumber}{\linereferenceplus}}%
         \fi}%
      \global\advance\linenumber by \linestepper
      \ifnum\linereference>0 % anders vreemde loop in paragraphs+recurse
        \dorecurse{\linereference}
          {\getlinereference\recurselevel
           \ifnum\linereferenceplus=2 % stop
             % ref y: text = 4 / Kan dit buiten referentie mechanisme om?
             \expanded{\setlocalcrossreference
               {\referenceprefix\linereferencename}{}{}{\linereferenceline}}%
           \fi}%
        \dorecurse{\linereference}
          {\getlinereference\recurselevel
           \ifnum\linereferenceplus<2 % start / lone
             \ifnum\linereferenceplus=1 % start
               \getreferenceelements{\linereferencename}% text = 4
               \ifnum\linereferenceline<0\currenttextreference\relax % 0 prevents error
                 \edef\linereferenceline{\linereferenceline--\currenttextreference}%
               \fi
             \fi
             \expanded{\setlocalcrossreference
               {\referenceprefix\linereferencename}{}{}{\linereferenceline}}%
           \fi}%
        \global\let\scratchline=\linenumber  % We are going back!
        \reshapebox
          {\doglobal\decrement\scratchline
           \hbox
             {\dorecurse{\linereference}
                {\getlinereference\recurselevel
                 \getreferenceelements{\linereferencename}%
                 \beforesplitstring\currenttextreference--\at--\to\firstline
                 \ifnum\firstline=\scratchline\relax
                   % beter een rawtextreference
                   \textreference[\linereferencename]{\currenttextreference}%
                   \expanded{\setlocalcrossreference
                     {\referenceprefix\linereferencename}{}{}{0}}% ==done
                 \fi}%
              \dimen0=\dp\shapebox
              \advance\dimen0 by -\dp\strutbox
              \ifdim\dimen0>\!!zeropoint\relax
                \dp\shapebox=\dp\strutbox
              \fi
              \schrijfregelnummer\box\shapebox}}% no \strut !
      \else
        \reshapebox{\hbox{\schrijfregelnummer\box\shapebox}}% no \strut !
      \fi}
     {\reshapebox{\global\advance\linenumber by -1}%
      \global\advance\linenumber by \linestepper
      \reshapebox{\hbox{\schrijfregelnummer\box\shapebox}}}% no \strut !
   \global\advance\linenumber by \linestepper
   \flushshapebox
   \egroup}

\def\crlf%
  {\ifhmode\unskip\else\strut\fi\ifcase\raggedstatus\hfil\fi\break}

\def\opeenregel%
  {\def\crlf{\ifhmode\unskip\fi\space}\let\\\crlf}

%I n=Opmaak
%I c=\definieeropmaak,\testopmaak,\startstandaardopmaak
%I
%I Het is mogelijk een lege pagina op te maken. Hiertoe wordt
%I een blok gereserveerd met het commando:
%I
%I  \definieeropmaak[naam][breedte=,hoogte=,voffset=,
%I    hoffset=,pagina=,commandos=,voor=,na=,dubbelzijdig=]
%I
%I Hierbij wordt bij de eerste vier parameters een getal
%I meegegeven (5cm, 24pt, enz.). Met 'pagina' geeft men aan
%I of naar een nieuwe pagina wordt gesprongen (standaard
%I 'rechts'). Aan de 'commandos' kunnen commando's worden
%I toekend die tijdens de opmaak gelden. Aan de laatste twee
%I parameters toegekende commando's worden voor en na het
%I opmaken van de pagina uitgevoerd. De opgemaakte pagina
%I kan worden geselecteerd op naam. Met 'dubbelzijdig' geeft
%I men aan of er een lege achterkant moet worden opgemaakt
%I (standaard: ja). Dit geldt aleen bij dubbelzijdig zetten.
%I
%I Naast het bovenstaande commando is er het commando:
%I
%I  \stelopmaakin[naam][instellingen]
%P
%I Na het geven van dit commando zijn twee commando's
%I beschikbaar: \startnaamopmaak en \stopnaamopmaak. Tussen
%I deze twee commando's kunnen zetopdrachten en teksten
%I worden opgenomen. Een en ander wordt op een lege bladzijde
%I gezet.
%I
%I Met het commando \testopmaak kunnen hulplijnen worden
%I opgeroepen.
%I
%I De commando's \startstandaardopmaak en \stopstandaardopmaak
%I maken het opmaken binnen de standaard-layout mogelijk.
%P
%I Eventueel kunnen de volgende twee commando's worden gebruikt
%I om een pagina op te maken met hoofd- en voetregels.
%I
%I   \startopmaak
%I     .....
%I   \stopopmaak

\newbox\opmaak

\def\setopmaaklayout[#1]%
  {\stelvoetin [\c!status=\getvalue{\??do#1\c!voetstatus}]%
   \stelhoofdin[\c!status=\getvalue{\??do#1\c!hoofdstatus}]%
   \steltekstin[\c!status=\getvalue{\??do#1\c!tekststatus}]%
   \stelonderin[\c!status=\getvalue{\??do#1\c!onderstatus}]%
   \stelbovenin[\c!status=\getvalue{\??do#1\c!bovenstatus}]}

\def\dododostartopmaak[#1]%
  {\doifvaluesomething{\??do#1\c!pagina}
     {\ExpandFirstAfter\pagina[\getvalue{\??do#1\c!pagina}]}%
   \soortpagina[#1]%
   \setopmaaklayout[#1]%
   \getvalue{\??do#1\c!commandos}%
   \global\setbox\opmaak=\vbox to \getvalue{\??do#1\c!hoogte}%
   \bgroup
   \forgetall
   \hsize=\getvalue{\??do#1\c!breedte}%
   \getvalue{\??do#1\c!boven}}

\def\dododostopopmaak[#1]%
  {\getvalue{\??do#1\c!onder}%
   \egroup}

\def\doshipoutopmaak[#1]%
  {\bgroup
   \getvalue{\??do#1\c!voor}%
   \box\opmaak
   \setopmaaklayout[#1]%
   \pagina
   \getvalue{\??do#1\c!na}%
   \ifdubbelzijdig
     \ifodd\realpageno\else
       \processaction
         [\getvalue{\??do#1\c!dubbelzijdig}]
         [  \v!ja=>\null\pagina\verlaagpaginanummer,
          \v!leeg=>\pagebodyornamentsfalse
                   \null\pagina\verlaagpaginanummer]%
     \fi
   \fi
   \verlaagpaginanummer
   \egroup}

\def\doflushopmaak[#1]%
  {\ifverwerken
     \ifgeselecteerd
       \doshipoutopmaak[#1]%
     \fi
   \else
     \ifgeselecteerd
     \else
       \doshipoutopmaak[#1]%
     \fi
   \fi
   \ifselecteren
     \global\geselecteerdfalse
   \fi}

\def\dodostartopmaak[#1][#2]%
  {\begingroup
   \stelopmaakin[#1][#2]%
   \dododostartopmaak[#1]}

%\def\dodostopopmaak[#1]%
%  {\dododostopopmaak[#1]%
%   \doflushopmaak[#1]%
%   \endgroup}

\def\dodostopopmaak[#1]%
  {\dododostopopmaak[#1]%
   \doflushopmaak[#1]%
   \endgroup
   \calculatehsizes
   \calculatevsizes}

\def\dostartopmaak[#1][#2]%
  {\iffirstargument
     \dodostartopmaak[#1][#2]%
     \def\stopopmaak%
       {\dodostopopmaak[#1]}%
   \else
     \pagina
     \stelhoofdin[\c!status=\v!leeg]
     \stelvoetin[\c!status=\v!leeg]
     \vbox to \teksthoogte % nog een topskip optie
       \bgroup
       \def\stopopmaak%
         {\egroup
          \eject}%
   \fi}

\def\startopmaak%
  {\dodoubleempty\dostartopmaak}

\def\dodefinieeropmaak[#1][#2]%
  {\getparameters
     [\??do#1]%
     [\c!breedte=\zetbreedte,
      \c!hoogte=\teksthoogte,
      \c!voffset=\!!zeropoint,
      \c!hoffset=\!!zeropoint,
      \c!commandos=,
      \c!pagina=\v!rechts,
      \c!dubbelzijdig=\v!leeg,
      \c!voor=,
      \c!boven=\vss,
      \c!onder=\vss,
      \c!na=,
      \c!onderstatus=\v!normaal,
      \c!bovenstatus=\v!normaal,
      \c!tekststatus=\v!normaal,
      \c!hoofdstatus=\v!stop,
      \c!voetstatus=\v!stop,
      #2]%
   \setvalue{\e!start#1\e!opmaak}%
     {\dodoubleempty\dodostartopmaak[#1]}%
   \setvalue{\e!stop#1\e!opmaak}%
     {\dodostopopmaak[#1]}}

\def\definieeropmaak%
  {\dodoubleargument\dodefinieeropmaak}

\def\dostelopmaakin[#1]%
  {\getparameters[\??do#1]}

\def\stelopmaakin%
  {\dodoubleargument\dostelopmaakin}

%I n=Smaller
%I c=\startsmaller,\stelsmallerin
%I
%I Een paragraaf kan smaller gezet worden met behulp van de
%I commando's:
%I
%I   \startsmaller[afstand]
%I   \stopsmaller
%I
%I Als maat wordt links, rechts, midden of een combinatie
%I hiervan meegegeven. Eventueel wordt geen afstand meegegeven.
%I
%I De linker, rechter of dubbele inspringing kan worden
%I ingesteld met:
%I
%I   \stelsmallerin[links=,rechts=,midden=]
%I
%I Enkele voorbeelden van smelelr zetten zijn:
%I
%I   \startsmaller[2*links,rechts]
%I   \stopsmaller
%I
%I   \startsmaller[midden,rechts]
%I   \stopsmaller

\newskip\linkssmaller
\newskip\rechtssmaller
\newskip\middensmaller

\def\dosinglesmaller#1%
  {\processaction
     [#1]
     [    \v!links=>\global\advance\linkssmaller  by \@@sllinks,
         \v!midden=>\global\advance\middensmaller by \@@slmidden,
         \v!rechts=>\global\advance\rechtssmaller by \@@slrechts,
        \s!unknown=>\global\advance\middensmaller by \commalistelement]}

\def\dosmaller[#1]%
  {\processaction
     [#1]
     [    \v!links=>\global\advance\linkssmaller  by \@@sllinks,
         \v!midden=>\global\advance\middensmaller by \@@slmidden,
         \v!rechts=>\global\advance\rechtssmaller by \@@slrechts,
        \s!unknown=>{\herhaalmetcommando[#1]\dosinglesmaller}]}

\def\complexstartsmaller[#1]%
  {\par
   \bgroup
   \global\linkssmaller=\!!zeropoint
   \global\rechtssmaller=\!!zeropoint
   \global\middensmaller=\!!zeropoint
   \processcommalistwithparameters[#1]\dosmaller
   \advance\leftskip  by \linkssmaller
   \advance\rightskip by \rechtssmaller
   \advance\leftskip  by \middensmaller
   \advance\rightskip by \middensmaller}

\def\simplestartsmaller%
  {\startsmaller[\v!midden]}

\definecomplexorsimple\startsmaller

\def\stopsmaller%
  {\par % else skips forgotten
   \egroup}

\def\stelsmallerin%
  {\dodoubleargument\getparameters[\??sl]}

%I n=Boxen
%I c=\definieerhbox,\cbox,\lbox,\rbox,\sbox
%I
%I Het is mogelijk een tekst in een blok met een vaste
%I omvang te zetten. Dit is vergelijkbaar met het opmaken
%I van een tabel.
%I
%I   \hbox?{tekst}       (horizontaal blok)
%I
%I De box wordt eerst gedefinieerd met:
%I
%I   \definieerhbox[?][maat]
%I
%I Er kan een links, rechts of midden uitgelijnde \vbox worden
%I gezet met de commando:
%I
%I   \lbox{tekst\\tekst\\tekst} of \lbox to <maat>{...}
%I   \rbox{tekst\\tekst\\tekst} of \rbox to <maat>{...}
%I   \cbox{tekst\\tekst\\tekst} of \cbox to <maat>{...}
%I
%I Het commando \\ forceert een overgang naar een nieuwe regel.
%I
%I Een (hoge) box kan een gedwongen hoogte gelijk aan die
%I van een strut krijgen met:
%I
%I   \sbox{box}

\def\dodefinieerhbox[#1][#2]%
  {\setvalue{hbox#1}##1%
     {\hbox to #2{\begstrut##1\endstrut\hss}}}

\def\definieerhbox%
  {\dodoubleargument\dodefinieerhbox}

\def\lrcbox#1#2#%
  {\vbox#2\bgroup
   \let\\=\endgraf
   \forgetall#1\let\next=}

\def\lbox%
  {\lrcbox\raggedleft}

\def\rbox%
  {\lrcbox\raggedright}

\def\cbox%
  {\lrcbox\raggedcenter}

\def\dosetraggedvbox#1%
  {\processaction
     [#1]
     [  \v!links=>\def\raggedbox{\lbox},
       \v!rechts=>\def\raggedbox{\rbox},
       \v!midden=>\def\raggedbox{\cbox},
          \v!nee=>\def\raggedbox{\vbox\bgroup\raggedright\let\next=},
      \s!default=>\def\raggedbox{\vbox},
      \s!unknown=>\def\raggedbox{\vbox}]}

\def\dosetraggedhbox#1%
  {\processaction
     [#1]
     [  \v!links=>\let\raggedbox\regellinks,
       \v!rechts=>\let\raggedbox\regelrechts,
       \v!midden=>\let\raggedbox\regelmidden,
      \s!default=>\let\raggedbox\hbox,
      \s!unknown=>\let\raggedbox\hbox]}

\def\dosetraggedcommand#1% ook ruim,rechts en zo
  {\processaction
     [#1]
     [  \v!links=>\def\raggedcommand{\raggedleft},
       \v!rechts=>\def\raggedcommand{\raggedright},
       \v!midden=>\def\raggedcommand{\raggedcenter},
          \v!nee=>\def\raggedcommand{\raggedright},
%      \v!normaal=>\let\raggedcommand\relax,
      \s!default=>\def\raggedcommand{\raggedcenter},
      \s!unknown=>\let\raggedcommand\relax]}

%I n=Blokken
%I c=\stelplaatsblokkenin,\stelblokkopjesin
%I c=\definieerplaatsblok,\stelplaatsblokin
%I c=\reserveer,\leeg,\plaats,\volledigelijstmet,\plaatslijstmet
%I
%I Figuren, tabellen, grafieken enz. kunnen in de tekst
%I worden geplaatst met het commando:
%I
%I   \plaats<bloknaam>[voorkeur][referentie]{titel}{blok}
%I
%I Als voorkeur kan worden opgegeven:
%I
%I   hier         bij voorkeur op deze plaats in de tekst
%I   forceer      per se op deze plaats in de tekst
%I   pagina       op een nieuwe pagina
%I   boven        bovenaan de huidige pagina
%I   onder        onderaan de huidige pagina
%I
%I   links        links in de paragraaf
%I   rechts       rechts in de paragraaf
%I
%I   inlinker     in linker marge (gelijke hoogte)
%I   inrechter    in rechter marge (gelijke hoogte)
%I   inmarge      in linker/rechter marge (gelijke hoogte)
%I   marge        in de marge
%P
%I Als er op de huidige bladzijde geen plaats is, dan wordt
%I standaard de figuur verplaatst (eerste vier opties) en/of
%I wordt overgegaan naar een nieuwe bladzijde (laatste twee
%I opties.
%I
%I Men kan plaatsen afdwingen door het trefwoord altijd
%I mee te geven: \plaats[hier,altijd][]{}{}. Er zijn dan
%I twee runs nodig, omdat de nummering van de blokken moet
%I worden aangepast.
%I
%I Als in plaats van een titel 'geen' wordt meegegeven, wordt
%I geen titel geplaatst.
%I
%I Als het blok nog onbekend is, kan in plaats van het blok
%I een van de volgende commando's worden meegegeven:
%I
%I   \leeg<bloknaam>
%I   \lege<bloknaam>
%P
%I Het is mogelijk ruimte voor een blok te reserveren:
%I
%I   \reserveer<bloknaam>[hoogte=,breedte=,kader=][voorkeur]
%I     [referentie]{titel}
%I
%I Beide commando's kunnen ook gegeven worden zonder [],
%I dus in de vorm
%I
%I   \plaats<bloknaam>{titel}{blok}
%I   \reserveer<bloknaam>{titel}
%I
%I Ten behoeve van een consistente verwijzing wordt het
%I commando:
%I
%I   \in<bloknaam>[referentie]
%I
%I gedefinieerd. Dit levert in de tekst op:
%I
%I   'in <bloknaam> <nummer>'
%P
%I Blokken kunnen worden gedefinieerd met het commando:
%I
%I   \definieerplaatsblok[blok][blokken]
%I
%I Hierna zijn de volgende commando's beschikbaar:
%I
%I   \plaatsblok[plaats][referentie]{titel}{blok}
%I   \reserveerblok[afmetingen][plaats][referentie]{titel}
%I   \leegblok
%I
%I Het is mogelijk een en ander in te stellen met het
%I commando:
%I
%I   \stelplaatsblokin[blok][hoogte=,breedte=,kader=,
%I     bovenkader=,onderkader=,linkerkader=,rechterkader=,
%I     paginaovergangen=]
%I
%I De hoogte en breedte hebben betrekking op de te reserveren
%I ruimte.
%P
%I Naast de eerder genoemde commando's zijn nog beschikbaar:
%I
%I   \plaatslijstmetblokken
%I   \volledigelijstmetblokken
%I
%I en een (extra) commando om tekst naast een blok (hier met
%I de naam 'blok') te plaatsen:
%I
%I   \startbloktekst[plaats][referentie]{kop}{blok}
%I     ...
%I   \stopbloktekst
%I
%I Mogelijke plaatsen zijn 'links', 'rechts', 'hoog', 'laag' en
%I 'midden'. Ook is een combinatie van deze instellingen
%I mogelijk, bijvoorbeeld [links,hoog]. De instelling 'offset'
%I resulteert in een verschuiving van 1 regel.
%P
%I Blokken die tussen de tekst staan kunnen links, rechts of in
%I het midden worden uitgelijnd. De plaats wordt ingesteld met:
%I
%I   \stelplaatsblokkenin[plaats=,breedte=,kader=,bovenkader=,
%I     onderkader=,linkerkader=,rechterkader=,offset=,voorwit=,
%I     nawit=,marge=]
%I
%I De genummerde kopjes bij blokken kunnen worden ingesteld
%I met:
%I
%I   \stelblokkopjesin[plaats=,voor=,tussen=,na=,letter=,
%I      kopletter=,breedte=,nummer=,uitlijnen=]
%I
%I waarbij als plaats kan worden meegegeven: 'boven', 'onder',
%I 'geen', 'hoog', 'laag' of 'midden'. Als breedte kan 'passend'
%I of 'max' worden meegegeven. De parameter nummer kan 'ja' of
%I 'nee' zijn. Als breedte=max, dan wordt het kopje over de
%I hele breedte geplaatst. In dat geval kan uitlijnen worden
%I ingesteld: 'links', 'midden' of 'rechts'.
%P
%I Als er geen plaats is, worden plaatsblokken tijdelijk
%I achtergehouden. De opgespaarde blokken worden op de
%I volgende bladzijde(n) geplaatst. Dit plaatsen is te
%I beinvloeden met:
%I
%I   \stelplaatsblokkenin[nboven=,nonder=,nregels=]
%I
%I Standaard worden maximaal 2 blokken bovenaan de
%I bladzijde geplaatst en 0 blokken onder. Er wordt overgegaan
%I op een nieuwe bladzijde als het aantal regels groter is
%I dan 4. Deze waarden kunnen worden ingesteld.
%P
%I Kopjes boven lijsten en labels voor nummers kunnen worden
%I ingesteld met de elders beschreven commando's:
%I
%I   \stellabeltekstin[label=...]
%I   \stelkoptekstin[tekst=...]
%I
%I Standaard zijn deze ingesteld op de opgegeven namen.

\def\stelplaatsblokkenin%
  {\dodoubleargument\getparameters[\??bk]}

\def\stelblokkopjesin%
  {\dodoubleargument\getparameters[\??kj]}%

\def\dostelplaatsblokin[#1][#2]%
  {\getparameters[\??fl#1][#2]}

\def\stelplaatsblokin%
  {\dodoubleargument\dostelplaatsblokin}

\def\dostelblokkopjein[#1][#2]%
  {\getparameters[\??kj#1][#2]}

\def\stelblokkopjein%
  {\dodoubleargument\dostelblokkopjein}

\def\doleegblok#1%
  {\localframed
      [\??fl#1][\c!kader=\v!aan]%
      {\getmessage{\m!floatblocks}{12}}}

\def\docomplexplaatsblok[#1][#2][#3]#4%
  {\flushfootnotes
   \ifmargeblokken
     \doifinset{\v!marge}{#2}
       {\bgroup
        \everypar{\egroup\the\everypar}%
        \hsize=\@@mbbreedte}%
   \fi
   \global\insidefloattrue
   \dowithnextbox
     {\docompletefloat
        {#1}{#3}{#1}{#2}{#1}{#4}
        {\box\nextbox}}%
   \vbox}

\def\docomplexstarttekstblok[#1][#2][#3]%
  {\flushfootnotes
   \flushsidefloats % hoort eigenlijk niet hier
   \docomplexplaatsblok[#1][\v!tekst,#2,\v!links][#3]}

\def\docomplexreserveerblok[#1][#2][#3][#4]#5%
  {\getvalue{\e!plaats#1}[#3][#4]{#5}{\localframed[\??fl#1][#2]{#1}}}

\def\docomplexstartreserveertekstblok[#1][#2][#3][#4]%
  {\flushsidefloats % hoort eigenlijk niet hier
   \docomplexreserveerblok[#1][#2][\v!tekst,#3,\v!links][#4]}

\def\dodefinieerplaatsblok[#1][#2]%        #1=naam  #2=meervoud
  {\presetlocalframed[\??fl#1]%
   \stelplaatsblokin
     [#1]
     [\c!breedte=15\korpsgrootte,
      \c!hoogte=10\korpsgrootte,
      \c!kader=\@@bkkader,
      \c!straal=\@@bkstraal,
      \c!hoek=\@@bkhoek,
      \c!plaats=\@@bkplaats,
      \c!achtergrond=\@@bkachtergrond,
      \c!achtergrondraster=\@@bkachtergrondraster,
      \c!achtergrondkleur=\@@bkachtergrondkleur,
      \c!achtergrondoffset=\@@bkachtergrondoffset,
      \c!bovenkader=\@@bkbovenkader,
      \c!onderkader=\@@bkonderkader,
      \c!linkerkader=\@@bklinkerkader,
      \c!rechterkader=\@@bkrechterkader,
      \c!kaderoffset=\@@bkkaderoffset,
      \c!paginaovergangen=]%
   \stelblokkopjein
     [#1]
     [\c!plaats=\@@kjplaats,
      %\c!voor=\@@kjvoor,
      \c!tussen=\@@kjtussen,
      %\c!na=\@@kjna,
      \c!breedte=\@@kjbreedte,
      \c!kopletter=\@@kjkopletter,
      \c!letter=\@@kjletter,
      \c!kleur=\@@kjkleur,
      \c!uitlijnen=\@@kjuitlijnen,
      \c!nummer=\@@kjnummer,
      \c!wijze=\@@kjwijze,
      \c!blokwijze=\@@kjblokwijze,
      \c!sectienummer=\@@kjsectienummer,
      \c!conversie=\@@kjconversie]%
   \doorlabelen
     [#1]
     [\c!tekst=#1,
      \c!plaats=\v!intekst,
      \c!wijze=\getvalue{\??kj#1\c!wijze},
      \c!blokwijze=\getvalue{\??kj#1\c!blokwijze},
      \c!sectienummer=\getvalue{\??kj#1\c!sectienummer},
      \c!conversie=\getvalue{\??kj#1\c!conversie}]%
   \presetlabeltext[#1=\Word{#1}~]%
   \presetheadtext[#2=\Word{#2}]%
   \definieerlijst[#1]%
   \setvalue{\e!plaats\e!lijstmet#2}%
     {\dodoubleempty\doplaatslijst[#1]}%
   \setvalue{\e!volledige\e!lijstmet#2}%
     {\dotripleempty\dodovolledigelijst[#1][#2]}%
   \setvalue{\e!plaats#1}%
     {\dotripleempty\docomplexplaatsblok[#1]}%
   \setvalue{\e!reserveer#1}%
     {\doquadrupleempty\docomplexreserveerblok[#1]}%
   \setvalue{\e!start#1\e!tekst}%
     {\dotripleempty\docomplexstarttekstblok[#1]}%
   \setvalue{\e!stop#1\e!tekst}%
     {\dostoptextfloat}%
   \setvalue{\e!start\e!reserveer#1\e!tekst}%
     {\doquadrupleempty\docomplexstartreserveertekstblok[#1]}%
   \setvalue{\e!stop\e!reserveer#1\e!tekst}%
     {\dostoptextfloat}%
   \setvalue{\e!lege#1}%
     {\doleegblok{#1}}%
   \setvalue{\e!leeg#1}%
     {\doleegblok{#1}}}

\def\definieerplaatsblok%
  {\dodoubleargument\dodefinieerplaatsblok}

% De onderstaande  macro's ondersteunen het zetten van tekst
% rond figuren. De macro's zijn ontworpen door Daniel Comenetz
% en gepubliceerd in TUGBoat Volume 14 (1993), No. 1: Anchored
% Figures at Either Margin. De macro's zijn slechts op enkele
% punten door mij aangepast.

% afhankelijke variabelen
%
% \overgap    vervangen door   \floatsidetopskip
% \sidegap    vervangen door   \floatsideskip
% \undergap   vervangen door   \floatsidebottomskip
%
% \prskp      vervangen door   \tussenwit

% toegevoegde macro's/aanroepen
%
% \logsidefloat       : loginformatie
% \flushsidefloats    : nodig voor koppen

% recente wijzigingen:
%
% namen aangepast: \float... enz. i.p.v. \pic

% Pas op: \EveryPar{\EveryPar{}\margetitel{whatever}}
% \plaatsfiguur[links]{}{} moet goed gaan. In dat geval
% begint de tekst terecht wat lager.

\newdimen\sidefloatheight      % includes the topskip
\newdimen\sidefloatwidth
\newdimen\sidefloathsize
\newdimen\sidefloatvsize       \def\nofloatvsize{-1pt }

\newbox\floatbottom

\newif\ifrightfloat
\newif\ifmarginfloat
\newif\ifroomforfloat
\newif\iffloatshort
\newif\iffloatflag
\newif\iffloatrighteqo
\newif\iffloatlefteqo

\let\floatrighteqo=\eqno
\let\floatleftleqo=\leqno

% Watch it even more! In inner, gaat't mis omdat daar
% pagetotal enz niet zijn aangepast. Inner kan overigens niet
% betrouwbaar worden getest!

% NOT TOEVOEGEN: \the\everytrace

\everypar    ={\flushfootnotes
               \ifinner\else\checksidefloat\fi
               \checkindentation
               \flushmargincontents
               \flushcomments}
\neverypar   ={}
\everydisplay={\flushfootnotes
               \adjustsidefloatdisplaylines}

\def\flushsidefloats%
  {\par
   \!!heighta=\sidefloatvsize
   \advance\!!heighta by -\pagetotal
   \ifdim\!!heighta>\!!zeropoint
     \witruimte % nog checken op interferentie
     \kern\!!heighta
   \fi
   \global\sidefloatvsize=\nofloatvsize
   \global\floatflagfalse}

\def\flushsidefloatsafterpar%
  {\xdef\oldpagetotal{\the\pagetotal}%
   \gdef\checksidefloat%
     {\dochecksidefloat
      \ifdim\oldpagetotal=\pagetotal \else
        \xdef\checksidefloat{\dochecksidefloat}%
        \flushsidefloats
      \fi}}

\let\logsidefloat=\relax

\def\pushpenalties%
  {\widowpenalty=1
   \clubpenalty=2
   \brokenpenalty=1
   \let\pushpenalties=\relax
   \edef\poppenalties%
     {\widowpenalty=\the\widowpenalty
      \clubpenalty=\the\clubpenalty
      \brokenpenalty=\the\brokenpenalty}}

\let\poppenalties=\relax

\def\restorepenalties%
  {\ifnum\outputpenalty=\!!tenthousand\relax
   \else
     \penalty\outputpenalty
   \fi}

\def\sidefloatoutput%
  {\iffloatshort
     \unvbox\normalpagebox
     \setbox\floatbottom=\lastbox
     \ifdim\wd\floatbottom>\sidefloathsize
       \penalty-201
       \box\floatbottom
     \else
       \ifvoid\floatbottom
       \else
         \restoreleftindent
         \ifdim\wd\floatbottom<\sidefloathsize
           \parskip=\!!zeropoint
           %\noindent
           \vadjust{\penalty-1}%
           \iffloatlefteqo
             \global\floatlefteqofalse
           \else
             \global\advance\sidefloathsize by -\wd\floatbottom
             \iffloatrighteqo
               \global\floatrighteqofalse
             \else
               \global\divide\sidefloathsize by 2
             \fi
             \hskip\sidefloathsize
           \fi
         \fi
         \box\floatbottom
         \restorepenalties
       \fi
     \fi
     \global\holdinginserts=0
     \global\floatshortfalse
   \else
     \finaloutput\unvbox\normalpagebox
     \global\sidefloatvsize=\nofloatvsize
     \poppenalties
   \fi}

\def\restoreleftindent%
  {\ifrightfloat
   \else
     \parskip=\!!zeropoint
     \noindent
     \vadjust{\penalty-1}%
     \hskip\sidefloatwidth
   \fi}

\def\eqno%
  {\iffloatshort
     \global\floatrighteqotrue
   \fi
   \floatrighteqo}

\def\leftmarginfloat#1%
  {\global\rightfloatfalse\marginfloattrue\putsidefloat{#1}}

\def\rightmarginfloat#1%
  {\global\rightfloattrue\marginfloattrue\putsidefloat{#1}}

\def\leftfloat#1%
  {\global\rightfloatfalse\marginfloatfalse\putsidefloat{#1}}

\def\rightfloat#1%
  {\global\rightfloattrue\marginfloatfalse\putsidefloat{#1}}

\def\putsidefloat#1%
  {\par
   \witruimte
   \previoussidefloat
   \stallsidefloat
   \setbox\floatbox=\hbox{\vbox{\vskip\sidefloattopoffset#1}}
   \measuresidefloat
   \ifroomforfloat
     \setsidefloat
   \else
     \tosssidefloat
     \measuresidefloat
     \stallsidefloat
     \setsidefloat
   \fi}

\def\progresssidefloat%
  {\!!heighta=\sidefloatvsize
   \iffloatflag
     \advance\!!heighta by -\dimen3
     \global\floatflagfalse
   \else
     \advance\!!heighta by -\pagetotal
   \fi}

\def\tosssidefloat%
  {\vfill\eject}

\def\measuresidefloat%
  {\global\floatflagtrue
   \dimen3=\pagetotal
   \ifmarginfloat
     \global\sidefloatwidth=\!!zeropoint
   \else
     \global\sidefloatwidth=\wd\floatbox
     \global\advance\sidefloatwidth by \floatsideskip
   \fi
   \global\sidefloathsize=\hsize
   \global\advance\sidefloathsize by -\sidefloatwidth
   \global\sidefloatheight=\ht\floatbox
\global\advance\sidefloatheight by \dp\floatbox
   \global\advance\sidefloatheight by \sidefloattopskip
   \global\sidefloatvsize=\sidefloatheight
   \global\advance\sidefloatvsize by \dimen3
   \dimen0=\sidefloatvsize
%   \advance\dimen0 by -\baselineskip
%\ifgridsnapping
%  \advance\dimen0 by .5\openlineheight % \vsize slightly too large
%\fi
   \ifdim\dimen0>.99\pagegoal          \relax
     \roomforfloatfalse
   \else
     \dimen0=\pagegoal
     \advance\dimen0 by -\sidefloatvsize
     \ifdim\dimen0<\sidefloatbottomskip
       \global\advance\sidefloatvsize by \dimen0
       \global\floatshorttrue
       \pushpenalties
       \global\holdinginserts=1
     \else
       \global\advance\sidefloatvsize by \sidefloatbottomskip
       \global\floatshortfalse
     \fi
     \roomforfloattrue
   \fi}

\def\setsidefloat%
  {\vbox{\strut}\vskip-\lineheight
   \kern\sidefloattopskip
   \edef\presidefloatdepth{\the\prevdepth}%
   \nointerlineskip
   \bgroup
   \everypar={}%
   \parskip=\!!zeropoint
   \logsidefloat
   \ifrightfloat
     \hfill
     \ifmarginfloat
       \rlap{\hskip\rechtermargeafstand\unhbox\floatbox}%
     \else
       \unhbox\floatbox
     \fi
   \else
     \noindent
     \ifmarginfloat
       \llap{\unhbox\floatbox\hskip\linkermargeafstand}%
     \else
       \unhbox\floatbox
     \fi
     \hfill
   \fi
   \egroup
   \par
   \kern-\sidefloatheight
   \penalty10001
   \normalbaselines
   \prevdepth=\presidefloatdepth
   %\noindent
   \resetsidefloatparagraph
   \ignorespaces}

\newcount\sidefloatparagraph

\def\iffirstsidefloatparagraph%
  {\ifnum\sidefloatparagraph=1\relax}

\def\setsidefloatparagraph%
  {\global\advance\sidefloatparagraph by 1\relax}

\def\resetsidefloatparagraph%
  {\global\sidefloatparagraph=0\relax}

\def\dochecksidefloat%
  {\progresssidefloat
   \ifdim\!!heighta>\!!zeropoint
     \advance\!!heighta by \sidefloatbottomskip
     \!!counta=\!!heighta
     \divide\!!counta by \baselineskip
     \ifnum\!!counta>0
       \ifrightfloat
         \hangindent=-\sidefloatwidth
       \else
         \hangindent=\sidefloatwidth
       \fi
       \hangafter=-\!!counta
     \fi
     \setsidefloatparagraph
   \else
     \resetsidefloatparagraph
   \fi
   \parskip=\tussenwit}

\def\checksidefloat%
  {\dochecksidefloat}

\def\doadjustsidefloatdisplaylines%
  {\par
   \vskip-\parskip
   \noindent
   \ignorespaces}

\def\adjustsidefloatdisplaylines%
  {\aftergroup\doadjustsidefloatdisplaylines}

\def\previoussidefloat%
  {\progresssidefloat
   \ifdim\!!heighta>\!!zeropoint \relax
     \iffloatshort
       \global\floatshortfalse
       \tosssidefloat
     \else
       \kern\!!heighta
     \fi
   \fi}

\def\stallsidefloat%
  {\!!counta=\pageshrink
   \divide\!!counta by \baselineskip
   \advance\!!counta by 1
   \parskip=\!!zeropoint
   \dorecurse{\!!counta}{\line{}}
   \kern-\!!counta\baselineskip
   \penalty0\relax}

% De onderstaande macro's zijn verantwoordelijk voor het plaatsen
% van floats. De macro's moeten nog worden aangepast en
% uitgebreid:
%
% -  nofloatpermitted : top, bot en mid counters en geen topins
%    als reeds midfloat of botfloat
%
% -  links, rechts, midden als niet hangend

\newif\ifsomefloatwaiting     \somefloatwaitingfalse
\newif\ifroomforfloat         \roomforfloattrue
\newif\ifnofloatpermitted     \nofloatpermittedfalse
\newif\iffloatsonpage         \floatsonpagefalse

\newcount\totalnoffloats      \totalnoffloats=0
\newcount\savednoffloats      \savednoffloats=0
\newcount\noffloatinserts     \noffloatinserts=0

\newbox\floatlist

\newinsert\botins

\skip\botins=\!!zeropoint
\count\botins=\!!thousand
\dimen\botins=\maxdimen

\newdimen\topinserted
\topinserted=\!!zeropoint

\newdimen\botinserted
\botinserted=\!!zeropoint

\newif\ifflushingfloats
\flushingfloatsfalse

\newbox\floattext

\newdimen\floattextwidth
\newdimen\floattextheight

\newbox\floatbox

\newdimen\floatwidth
\newdimen\floatheight

% Er wordt bij \v!altijd als dat nodig is hernummerd.
% Daarbij wordt gebruik gemaakt van de opgeslagen nummers en
% volgorde.

\definetwopasslist{\s!float}

\def\dofloatreference%
  {\doglobal\increment\numberedfloat
   \edef\dodofloatreference%
     {\writeutilitycommand%
        {\twopassentry%
           {\s!float}%
           {\numberedfloat}%
           {\hetnummer}}}%
   \dodofloatreference}

\def\redofloatorder#1%
  {\doglobal\increment\nofplacedfloats\relax
   \gettwopassdata{\s!float}%
   \iftwopassdatafound
     \doifnot{\hetnummer}{\twopassdata}
       {\edef\oldhetnummer{\hetnummer}%
        \xdef\hetnummer{\twopassdata}%
        \showmessage
          {\m!floatblocks}{1}
          {\nofplacedfloats,#1 \oldhetnummer,\hetnummer}}%
   \fi}

% In \dofloatinfomessage wordt {{ }} gebruikt omdat anders
% binnen \startuitstellen...\stopuitstellen geen goede
% melding in de marge volgt: \ifinner is dan namelijk true.

\def\dofloatinfomessage#1#2#3%
  {\bgroup
   \showmessage{\m!floatblocks}{#2}{#3}%
   \@EA\floatinfo\@EA#1\@EA{\currentmessagetext}%
   \egroup}

\def\dosavefloatinfo%
  {\dofloatinfomessage{>}{2}{\the\totalnoffloats}}

\def\dofloatflushedinfo%
  {\bgroup
   \!!counta=\totalnoffloats
   \advance\!!counta by -\savednoffloats
   \dofloatinfomessage{<}{3}{\the\!!counta}%
   \egroup}

\def\doinsertfloatinfo%
  {\dofloatinfomessage{<}{4}{\the\totalnoffloats}}

% ook voetnoten saven

\def\dosavefloat%
  {\global\setbox\floatlist=\vbox
     {\nointerlineskip
      \box\floatbox
      \unvbox\floatlist}%
   \global\advance\savednoffloats by 1
   \global\somefloatwaitingtrue
   \dosavefloatinfo
   \nonoindentation}

\def\doresavefloat%
  {\global\setbox\floatlist=\vbox
     {\nointerlineskip
      \unvbox\floatlist
      \box\floatbox}%
   \global\advance\savednoffloats by 1
   \global\somefloatwaitingtrue}

\def\doreversesavefloat%
  {\global\setbox\floatlist=\vbox
     {\nointerlineskip
      \unvbox\floatlist
      \box\floatbox}%
   \global\advance\savednoffloats by 1
   \global\somefloatwaitingtrue
   \dosavefloatinfo}

\def\checkwaitingfloats#1%
  {\ifsomefloatwaiting
     \doifinsetelse{\v!altijd}{#1}
       {\showmessage{\m!floatblocks}{5}{}}
       {\doflushfloats}%
   \fi}

\def\doflushfloats%
  {\global\floatsonpagefalse
   \global\flushingfloatstrue
   \ifsomefloatwaiting
     \par
     \ifvmode\prevdepth=\maxdimen\fi % prevents whitespace
     \dodoflushfloats
   \fi
   \global\savednoffloats=0
   \global\somefloatwaitingfalse
   \global\flushingfloatsfalse}

\def\dodoflushfloats% moet nog beter: als precies passend, niet onder baseline
  {\ifsomefloatwaiting
     \bgroup % \box\floatbox can be in use!
     \dogetfloat
     %\forgetall % NJET!
     \witruimte
     \blanko[\@@bkvoorwit]
     \flushfloatbox
     %\ifnum\savednoffloats>1 % REMOVED
     %\else
       \blanko[\@@bknawit]
     %\fi
     \egroup
     \dofloatflushedinfo
     \expandafter\dodoflushfloats
   \fi}

\newbox\globalscratchbox

\def\dogetfloat%
  {\ifsomefloatwaiting
     \global\setbox\floatlist=\vbox
       {\unvbox\floatlist
        \global\setbox\globalscratchbox=\lastbox}%
     \setbox\floatbox=\box\globalscratchbox % local !
     \global\advance\savednoffloats by -1\relax
     \ifnum\savednoffloats=0
       \global\somefloatwaitingfalse
     \fi
   \else
     \global\savednoffloats=0
     \global\setbox\floatbox=\box\voidb@x
   \fi}

\def\dotopfloat%
  {\ifdim\topinserted=\!!zeropoint\relax
     \topofinserttrue
   \else
     \topofinsertfalse
   \fi
   \global\advance\topinserted by \ht\floatbox
   \global\advance\topinserted by \dp\floatbox
   \global\advance\topinserted by \floatbottomskip
   \insert\topins
     {\forgetall
      \iftopofinsert
        \kern-\lineskip\par\prevdepth=\maxdimen
      \else
        %\blanko[-\@@bknawit,\@@bkvoorwit]% inserts can't look back
        \betweenfloatblanko
      \fi
      \flushfloatbox
      \blanko[\@@bknawit]}%
   \doinsertfloatinfo}

% The number of topinserts also influences the float order,
% in this respect that when a moved float does not fit, but a
% next one does, it is indeed placed. Take for instance a
% sequence of 20 floats, large and small, where a large one
% migrates and the next smaller one is inserted.

% \loop ...\repeat doesn't work here, but why?
%
% \def\dosettopinserts%
%   {\ifsomefloatwaiting
%      \noffloatinserts=0\relax
%      \loop
%        \ifnum\noffloatinserts<\noftopfloats
%        ....
%      \repeat
%    \fi}
%
% so:

\def\dodosettopinserts%
  {\ifnum\noffloatinserts<\noftopfloats
     \dogetfloat
     \ifdim\topinserted=\!!zeropoint\relax
       \topofinserttrue
     \else
       \topofinsertfalse
     \fi
     \global\advance\topinserted by \ht\floatbox
     \global\advance\topinserted by \dp\floatbox
     \global\advance\topinserted by \floatbottomskip\relax
     \ifdim\topinserted<\teksthoogte\relax
       \xdef\totaltopinserted{\the\topinserted}%
       \insert\topins
         {\forgetall
          \iftopofinsert
            \kern-\lineskip\par\prevdepth=\maxdimen
          \else
            %\blanko[-\@@bknawit,\@@bkvoorwit]% inserts can't look back
            \betweenfloatblanko
          \fi
          \flushfloatbox
          \blanko[\@@bknawit]}%
       \ifsomefloatwaiting
         \advance\noffloatinserts by 1
       \else
         \noffloatinserts=\noftopfloats\relax
       \fi
       \dofloatflushedinfo
     \else
       \doresavefloat
       \noffloatinserts=\noftopfloats\relax
     \fi
   \else
     \ifsomefloatwaiting
       \showmessage{\m!floatblocks}{6}{\the\noftopfloats}%
     \fi
     \let\dodosettopinserts=\relax
   \fi
   \dodosettopinserts}

\def\dosettopinserts%
  {\bgroup
   \ifsomefloatwaiting
     \noffloatinserts=0
     \let\totaltopinserted=\!!zeropoint
     \dodosettopinserts
     \ifnum\@@bknonder=0
       \ifnum\@@bknregels>0
         \ifdim\totaltopinserted>\!!zeropoint\relax
           \dimen0=\lineheight
           \dimen0=\@@bknregels\dimen0
           \advance\dimen0 by \totaltopinserted\relax
           \ifdim\dimen0>\teksthoogte
             \showmessage{\m!floatblocks}{8}{\@@bknregels}%
             \vfilll\eject
           \fi
         \fi
       \fi
     \fi
   \fi
   \egroup}

\def\dodosetbotinserts%
  {\ifnum\noffloatinserts<\nofbotfloats\relax
     \dogetfloat
     \global\advance\botinserted by \ht\floatbox\relax
     \global\advance\botinserted by \dp\floatbox\relax
     \global\advance\botinserted by \floattopskip\relax
     \ifdim\botinserted<\pagegoal\relax
       \insert\botins
         {\forgetall
          \blanko[\@@bkvoorwit]%
          \flushfloatbox}%
       \ifsomefloatwaiting
         \advance\noffloatinserts by 1
       \else
         \noffloatinserts=\nofbotfloats
       \fi
       \dofloatflushedinfo
     \else
       \doresavefloat
       \noffloatinserts=\nofbotfloats\relax
     \fi
     \global\nofloatpermittedtrue % vgl topfloats s!
   \else
     \ifsomefloatwaiting
       \showmessage{\m!floatblocks}{7}{\the\nofbotfloats}%
     \fi
     \let\dodosetbotinserts=\relax
   \fi
   \dodosetbotinserts}

\def\dosetbotinserts%
  {\bgroup
   \ifsomefloatwaiting
     \noffloatinserts=0
     \dodosetbotinserts
   \fi
   \egroup}

\def\dobotfloat%
  {\global\advance\botinserted by \ht\floatbox
   \global\advance\botinserted by \dp\floatbox
   \global\advance\botinserted by \floattopskip
   \insert\botins
     {\forgetall
      \blanko[\@@bkvoorwit]%
      \flushfloatbox}%
   %\global\nofloatpermittedtrue
   \doinsertfloatinfo}

\def\dosetbothinserts%
  {\ifflushingfloats
     \global\topinserted=\!!zeropoint\relax
     \global\botinserted=\!!zeropoint\relax
   \else
     \global\topinserted=\!!zeropoint\relax
     \dosettopinserts
     \global\botinserted=\topinserted\relax
     \dosetbotinserts
   \fi}

\def\dotopinsertions%
  {\ifvoid\topins\else
     \ifgridsnapping
       %\topsnaptogrid{\box\topins}
       \box\topins % already snapped
     \else
       \unvbox\topins
     \fi
   \fi
   \global\topinserted=\!!zeropoint\relax}

\def\dobotinsertions%
  {\ifvoid\botins\else
     \ifgridsnapping
       \snaptogrid\hbox{\box\botins}
     \else
       \unvbox\botins
     \fi
   \fi
   \global\botinserted=\!!zeropoint\relax
   \global\nofloatpermittedfalse}

\newif\iftopofinsert
\newif\iftestfloatbox %\testfloatboxtrue

%\def\flushfloatbox% nog verder doorvoeren en meer info in marge
%  {\iftestfloatbox
%     \ruledhbox{\box\floatbox}%
%   \else
%     \box\floatbox
%   \fi}

% \testfloatboxtrue
%
% testfloatbox gaat mis, niet in midden, dus elders

\def\flushfloatbox% nog verder doorvoeren en meer info in marge
  {\snaptogrid\hbox{\iftestfloatbox\ruledhbox\fi{\box\floatbox}}}

% beter de laatste skip buiten de \insert uitvoeren,
% bovendien bij volle flush onder baseline.

\def\betweenfloatblanko% assumes that \@@bknawit is present
  {\bgroup
   \setbox0=\vbox{\strut\blanko[\@@bkvoorwit]\strut}%
   \setbox2=\vbox{\strut\blanko[\@@bknawit]\strut}%
   \ifdim\ht0>\ht2
     \blanko[-\@@bknawit,\@@bkvoorwit]
   \fi
   \egroup}

\def\doroomfloat%
  {\ifnofloatpermitted
     \global\roomforfloatfalse
   \else
     \dimen0=\pagetotal
     \advance\dimen0 by \ht\floatbox
     \advance\dimen0 by \dp\floatbox
     \advance\dimen0 by \floattopskip
     \advance\dimen0 by -\pageshrink  % toegevoegd
%\ifgridsnapping
%  \advance\dimen0 by .5\openlineheight % \vsize slightly too large
%\fi
     \ifdim\dimen0>\pagegoal
       \global\roomforfloatfalse
     \else
       \global\roomforfloattrue
     \fi
   \fi}

\def\doexecfloat% spacing between two successive must be better
  {\baselinecorrection
   \witruimte
   \blanko[\@@bkvoorwit]%
   \flushfloatbox
   \blanko[\@@bknawit]%
   \doinsertfloatinfo}

\def\somefixdfloat[#1]%
  {\doroomfloat
   \ifroomforfloat\else
     \goodbreak
   \fi
   \showmessage{\m!floatblocks}{9}{}%
   \doexecfloat}

\def\somesidefloat[#1]%  links, rechts     NOG TESTEN EN AANPASSEN
  {\ifbinnenkolommen
     \someelsefloat[\v!hier]%
   \else
     \checkwaitingfloats{#1}%
     \def\logsidefloat%
       {\doinsertfloatinfo}%
     \setbox\floatbox=\vbox{\box\floatbox}%
     \wd\floatbox=\floatwidth
     \processfirstactioninset
       [#1]
       [     \v!links=>\leftfloat{\box\floatbox},
            \v!rechts=>\rightfloat{\box\floatbox},
          \v!inlinker=>\leftmarginfloat{\box\floatbox},
         \v!inrechter=>\rightmarginfloat{\box\floatbox},
           \v!inmarge=>{\doinmargenormal\leftmarginfloat\rightmarginfloat[]{\box\floatbox}}]%
     \doifinset{\v!lang}{#1}
       {\flushsidefloatsafterpar}%
   \fi}

\def\sometextfloat[#1]%  lang, links, rechts, hoog, midden, laag, offset
  {\checkwaitingfloats{#1}%
   \def\dostoptextfloat{\dodostoptextfloat[#1]}%
   \global\floattextwidth=\hsize
   \global\floatwidth=\wd\floatbox
   \global\floatheight=\ht\floatbox % forget about the depth
   \global\advance\floattextwidth by -\floatwidth
   \global\advance\floattextwidth by -\@@bkmarge\relax % was \tfskipsize
   \doifinsetelse{\v!lang}{#1}
     {\floattextheight=\pagegoal
      \advance\floattextheight by -\pagetotal
      \advance\floattextheight by -\bigskipamount     % lelijk
      \ifdim\floattextheight>\teksthoogte
        \floattextheight=\teksthoogte
      \fi
      \boxmaxdepth=\!!zeropoint\relax            % toegevoegd
      \ifdim\floattextheight<\floatheight
        \floattextheight=\floatheight
      \fi
      \setbox\floattext=\vbox to \floattextheight}
     {\setbox\floattext=\vbox}%
   \bgroup
   \blanko[\v!blokkeer]
   \hsize\floattextwidth
   \ignorespaces}

\def\dodostoptextfloat[#1]%
  {\egroup
   \doifnotinset{\v!lang}{#1}%
     {\ifdim\ht\floattext<\floatheight
        \floattextheight=\floatheight
      \else
        \floattextheight=\ht\floattext
      \fi}%
   \setbox\floatbox=\vbox to \floattextheight
     {\hsize\floatwidth
      \doifinsetelse{\v!beide}{#1}%
        {\doifinsetelse{\v!laag}{#1}
           {\vfill\box\floatbox}
           {\doifinsetelse{\v!midden}{#1}
              {\vfill\box\floatbox\vfill}
              {\box\floatbox\vfill}}}
        {\box\floatbox\vfill}}%
    \setbox\floattext=\vbox to \floattextheight
     {\hsize\floattextwidth
      \doifinsetelse{\v!laag}{#1}
        {\vfill
         \box\floattext
         \doifinset{\c!offset}{#1}{\witruimte\blanko}}
        {\doifinsetelse{\v!midden}{#1}
           {\vfill
            \box\floattext
            \vfill}
           {\doifinset{\v!offset}{#1}{\witruimte\blanko}%
            \box\floattext
            \vfill}}}%
   \doifinsetelse{\v!rechts}{#1}%
     {\setbox\floatbox=\hbox to \hsize
        {\box\floattext
         \hfill
         \box\floatbox}}
     {\setbox\floatbox=\hbox to \hsize
        {\box\floatbox
         \hfill
         \box\floattext}}%
   \baselinecorrection
   \witruimte
   \blanko[\@@bkvoorwit]%
   \doifnotinset{\v!lang}{#1}%
     {\dp\floatbox=\openstrutdepth}% dp\strutbox}%      % toegevoegd
   \box\floatbox
   \blanko[\@@bknawit]%
   \doinsertfloatinfo}

\def\somefacefloat[#1]%  links, rechts, midden, hoog, midden, laag
  {\checkwaitingfloats{#1}%
   \startnaast\box\floatbox\stopnaast
   \doinsertfloatinfo}

\def\somepagefloat[#1]%  links, rechts, midden, hoog, midden, laag
  {\checkwaitingfloats{#1}%
   \vbox to \teksthoogte
     {\doifnotinset{\v!hoog}{#1}{\vfill}%
      \box\floatbox
      \doifnotinset{\v!laag}{#1}{\vfill}}%
   \doinsertfloatinfo
   \pagina}                      % toegevoegd

\def\someelsefloat[#1]%
  {\doifinsetelse{\v!hier}{#1}
     {\doifinsetelse{\v!altijd}{#1}
        {\pagina[\v!voorkeur]%
         \doroomfloat
         \ifroomforfloat
           \doexecfloat
         \else
           \showmessage{\m!floatblocks}{9}{}%
           \doreversesavefloat
         \fi}
        {\ifsomefloatwaiting
           \dosavefloat
         \else
           \pagina[\v!voorkeur]%
           \doroomfloat
           \ifroomforfloat
             \doexecfloat
           \else
             \dosavefloat
           \fi
         \fi}}
     {\doifinsetelse{\v!altijd}{#1}
        {\doroomfloat
         \ifroomforfloat
           \processallactionsinset
             [#1]
             [   \v!boven=>\dotopfloat,
                 \v!onder=>\dobotfloat,
               \s!default=>\doexecfloat]%
         \else
           \showmessage{\m!floatblocks}{9}{}%
           \doreversesavefloat
         \fi}
        {\doroomfloat
         \ifroomforfloat
           \processallactionsinset
             [#1]
             [  \v!boven=>\dotopfloat,
                \v!onder=>\dobotfloat,
              \s!default=>\doexecfloat]%
         \else
           \dosavefloat
         \fi}}}

% De onderstaande macro wordt gebruikt bij de macros
% voor het plaatsen van tabellen en figuren (klopt niet
% meer).
%
% \dofloat         {plaats} {label1} {label2} {kader}
%
% \docompletefloat {nummer} {referentie} {lijst}
%                  {plaats} {label1} {label2} {inhoud}
%
% \box\floatbox    inhoud+referentie
%
% \do???float#1    #1 = boxnummer
%
% \ifinsidefloat   wordt \true gezet voor \docompletefloat en \false
%                  na float plaatsen; kan worden gebruikt om in
%                  andere commando's witruimte te onderdrukken

\newdimen\floattopskip          \floattopskip=12pt
\newdimen\floatbottomskip       \floatbottomskip=12pt
\newdimen\floatsideskip         \floatsideskip=12pt

\newdimen\sidefloattopskip      \sidefloattopskip=\floattopskip
\newdimen\sidefloatbottomskip   \sidefloatbottomskip=\floatbottomskip
\def\sidefloattopoffset         {\openstrutdepth} % {\dp\strutbox}

\newcount\noftopfloats          \noftopfloats=2
\newcount\nofbotfloats          \nofbotfloats=0

\def\calculatefloatskips%
  {{\def\calculatefloatskips##1##2%
      {\doifelsenothing{##2}
         {\global##1=\!!zeropoint}
         {\doifelse{##2}{\v!geen}
            {\global##1=\!!zeropoint}
            {\setbox0=\vbox{\witruimte\@EA\blanko\@EA[##2]}%
             \global##1=\ht0}}}%
    \calculatefloatskips\floattopskip\@@bkvoorwit
    \calculatefloatskips\floatbottomskip\@@bknawit
    \calculatefloatskips\sidefloattopskip\@@bkzijvoorwit
    \calculatefloatskips\sidefloatbottomskip\@@bkzijnawit
    \def\sidefloattopoffset{\openstrutdepth}% {\dp\strutbox}%
    \global\floatsideskip=\@@bkmarge\relax
    \global\noftopfloats=\@@bknboven\relax
    \global\nofbotfloats=\@@bknonder\relax}}

\newif\ifinsidefloat

\def\floatcaptionsuffix{} % an optional suffix
\def\floatcaptionnumber{} % a logical counter

\def\dosetfloatcaption#1#2#3%
  {\def\dofloattekst%
     {{\doattributes{\??kj#1}\c!letter\c!kleur{#3}}}%
   \doifelsevalue{\??kj#1\c!nummer}{\v!ja}
     {\def\dofloatnummer%
        {{\xdef\floatcaptionnumber{#1}%
          \hbox{\doattributes{\??kj#1}\c!kopletter\c!kopkleur
             {\strut#2\floatcaptionsuffix}}}%
          \ConvertToConstant\doifnot{#3}{}
            {\tfskip
             \emergencystretch=.5em}}}
     {\let\dofloatnummer=\empty}}

\def\putborderedfloat#1\in#2\\%
  {\setbox#2=\vbox
     {\localframed
        [\??fl#1]
        [\c!breedte=\@@bkbreedte,
         \c!hoogte=\@@bkhoogte,
         \c!plaats=\v!normaal,
         \c!offset=\@@bkoffset]%
        {\box\floatbox}}}

\newbox\captionbox

\def\putcompletecaption#1#2#3#4%
  {\noindent
   \xdef\floatcaptionnumber{#1}%
   \doattributes{\??kj#1}\c!letter\c!kleur
     {\doifvalue{\??kj#1\c!nummer}{\v!ja}
        {\hbox{\doattributes{\??kj#1}\c!kopletter\c!kopkleur{\strut#2\floatcaptionsuffix}}%
         \ConvertToConstant\doifnot{#3}{}
           {\ifcase#4\relax
              \tfskip\emergencystretch=.5em
            \else
              \ifx\@@kjkjtussen\empty\else\unskip\@@kjkjtussen\fi
            \fi}}%
      \begstrut#3\endstrut\endgraf}}

\def\dosetpagfloat#1#2#3#4% \copy wegwerken 
  {\bgroup
   \forgetall
   \postponefootnotes
   \mindermeldingen
  %\showcomposition
   \putborderedfloat#4\in4\\%
   \def\locatefloat%
     {\doregelplaats\@@flflplaats}%
   \ConvertToConstant\doifelse{#3}{\v!geen}
     {\global\setbox\floatbox=\vbox
        {\locatefloat{\box4}}}  % pas op, nog wd groter dan hsize
     {\setbox2=\hbox  
        {\footnotesenabledfalse\putcompletecaption{#4}{#2}{#3}{0}}%
      \doifinsetelse{\@@kjkjplaats}{\v!hoog,\v!midden,\v!laag}
        {\dimen0=\hsize
         \advance\dimen0 by -\wd4\relax
         \advance\dimen0 by -\@@bkmarge\relax % \was tfskipsize\relax
         \ifdim\wd2>\dimen0\relax
           \dimen2=1.3\dimen0\relax
           \ifdim\wd2<\dimen2\relax
             \dimen0=0.8\dimen0\relax
           \fi
         \fi
         \setbox2=\vbox
           {\forgetall
            \hsize=\dimen0\relax
            \raggedright
            \putcompletecaption{#4}{#2}{#3}{1}}}
        {\doifelse{\@@kjkjbreedte}{\v!max}
           {\dosetraggedvbox{\@@kjkjuitlijnen}%
            \setbox2=\raggedbox
              {\hsize\wd4\relax
               \putcompletecaption{#4}{#2}{#3}{0}}}
           {\ifdim\wd2>\wd4\relax
              \doifelse{\@@kjkjbreedte}{\v!passend}
                {\ifdim\wd4<15\korpsgrootte\relax
                   \dimen0=15\korpsgrootte\relax
                 \else
                   \dimen0=\wd4\relax
                 \fi
                 \ifdim\wd4>\hsize
                   \setbox0=\vbox
                     {\forgetall
                      \hsize=1.0\wd4
                      \footnotesenabledfalse
                      \putcompletecaption{#4}{#2}{#3}{0}}%
                   \ifdim\ht0>\lineheight\relax
                     \setbox2=\vbox
                       {\forgetall
                        \hsize=0.9\wd4
                        \putcompletecaption{#4}{#2}{#3}{0}}%
                   \else
                     \setbox0=\vbox
                       {\forgetall
                        \hsize=1.0\wd4
                        \putcompletecaption{#4}{#2}{#3}{0}}%
                   \fi
                 \else
                   \setbox0=\vbox
                     {\forgetall
                      \dimen2=1.5\dimen0\relax
                      \ifdim\dimen2<\hsize
                        \hsize=\dimen2\relax
                      \fi
                      \footnotesenabledfalse
                      \putcompletecaption{#4}{#2}{#3}{0}}%
                   \ifdim\ht0>\lineheight\relax
                     \setbox2=\vbox
                       {\forgetall
                        \dimen2=1.2\dimen0\relax
                        \ifdim\dimen2<\hsize
                          \hsize=\dimen2\relax
                        \fi
                        \putcompletecaption{#4}{#2}{#3}{0}}%
                   \else
                     \setbox0=\vbox
                       {\forgetall
                        \dimen2=1.5\dimen0\relax
                        \ifdim\dimen2<\hsize
                          \hsize=\dimen2\relax
                        \fi
                        \putcompletecaption{#4}{#2}{#3}{0}}%
                   \fi
                 \fi}
                {\dosetraggedvbox{\@@kjkjuitlijnen}%
                 \setbox2=\raggedbox
                   {\hsize\@@kjkjbreedte
                    \putcompletecaption{#4}{#2}{#3}{0}}}%
              \fi}}%
      \global\setbox\floatbox=\vbox
        {\forgetall
         \processaction
           [\@@kjkjplaats]
           [ \v!boven=>\locatefloat{\copy2}%
                       \endgraf\@@kjkjtussen
                       \locatefloat{\copy4},
             \v!onder=>\locatefloat{\copy4}%
                       \endgraf\@@kjkjtussen
                       \locatefloat{\copy2},
              \v!hoog=>\locatefloat
                         {\doifelse{\@@flflplaats}{\v!links}
                            {\copy4
                             \tfskip
                             \vbox to\ht4{\@@kjkjtussen\copy2\vfill}}
                            {\vbox to\ht4{\@@kjkjtussen\copy2\vfill}%
                             \tfskip
                             \copy4}},
              \v!laag=>\locatefloat
                         {\doifelse{\@@flflplaats}{\v!links}
                            {\copy4
                             \tfskip
                             \vbox to\ht4
                               {\vfill\copy2\@@kjkjtussen}}
                            {\vbox to\ht4
                               {\vfill\copy2\@@kjkjtussen}%
                             \tfskip
                             \copy4}},
            \v!midden=>\locatefloat
                         {\doifelse{\@@flflplaats}{\v!links}
                            {\copy4
                             \tfskip
                             \vbox to\ht4{\vfill\copy2\vfill}}
                            {\vbox to\ht4{\vfill\copy2\vfill}%
                             \tfskip
                             \copy4}},
              \v!geen=>\locatefloat{\copy4}]}}%
   \ifdim\wd4>\hsize
     \global\setbox\floatbox=
       \hbox to \ifbinnenkolommen\wd4\else\hsize\fi
         {\hss\box\floatbox\hss}%
   \fi
   \egroup}

\def\dosetparfloat#1#2#3#4%
  {\bgroup
   \forgetall
   \postponefootnotes
   \mindermeldingen
   %\showcomposition
   \putborderedfloat#4\in4\\
   \ConvertToConstant\doifelse{#3}{\v!geen}
     {\global\setbox\floatbox=\vbox{\box4}}
     {\setbox2=\hbox
        {\forgetall\putcompletecaption{#4}{#2}{#3}{0}}%
      \doifelse{\@@kjkjbreedte}{\v!max}
        {\dosetraggedvbox{\@@kjkjuitlijnen}%
         \setbox2=\raggedbox
           {\hsize\wd4\putcompletecaption{#4}{#2}{#3}{0}}}%
        {\doifelse{\@@kjkjbreedte}{\v!passend}
           {\ifdim\wd2>\wd4\relax
              \setbox2=\vbox
                {\forgetall\hsize\wd4\putcompletecaption{#4}{#2}{#3}{0}}%
            \else
              \setbox2=\hbox to \wd4
                {\hss\box2\hss}%
            \fi}
           {\dosetraggedvbox{\@@kjkjuitlijnen}%
            \setbox2=\raggedbox
              {\hsize\wd4\putcompletecaption{#4}{#2}{#3}{0}}}}%
      \global\setbox\floatbox=\vbox
        {\processaction
           [\@@kjkjplaats]
           [ \v!boven=>\box2\endgraf\@@kjkjtussen\box4,
             \v!onder=>\box4\endgraf\@@kjkjtussen\box2,
              \v!geen=>\box4,
           \s!unknown=>\box4\endgraf\@@kjkjtussen\box2]}}%
   \egroup}

\newif\ifparfloat

\long\def\dosetfloatbox#1#2#3#4%
  {\ifvisible
     \par
     \doifcommonelse
        {#1}{\v!links,\v!rechts,\v!inlinker,\v!inrechter,\v!inmarge}
        {\global\parfloattrue}
        {\global\parfloatfalse}%
     \ifbinnenkolommen
       \global\parfloatfalse
     \fi
     \edef\@@kjkjbreedte  {\getvalue{\??kj#4\c!breedte}}%
     \def \@@kjkjtussen   {\getvalue{\??kj#4\c!tussen}}%  geen \edef
     \edef\@@kjkjplaats   {\getvalue{\??kj#4\c!plaats}}%
     \edef\@@kjkjuitlijnen{\getvalue{\??kj#4\c!uitlijnen}}%
     \edef\@@flflplaats   {\getvalue{\??fl#4\c!plaats}}%
      \ifparfloat
       \dosetparfloat{#1}{#2}{#3}{#4}%
     \else
       \dosetpagfloat{#1}{#2}{#3}{#4}%
     \fi
     \setbox\floatbox=\hbox{\black\box\floatbox}%
     \global\floatheight=\ht\floatbox
     \global\advance\floatheight by \dp\floatbox
     \global\floatwidth=\wd\floatbox
     \global\advance\totalnoffloats by 1
     \doifnotinset{\v!marge}{#1} % gaat namelijk nog fout
       {\setbox\floatbox=\vbox
          {\parindent\!!zeropoint
           \ifvoorlopig
             \inleftmargin{\framed{\infofont\the\totalnoffloats}}%
           \fi
           \box\floatbox}}%
     \wd\floatbox=\floatwidth
     \dimen0=\floatheight
     \advance\dimen0 by \lineheight
     \ifdim\dimen0<\teksthoogte
     \else
       \global\floatheight=\teksthoogte
       \global\advance\floatheight by -\lineheight
       \ht\floatbox=\floatheight
       \dp\floatbox=\!!zeropoint
       \showmessage{\m!floatblocks}{10}{\the\totalnoffloats}%
     \fi
   \fi}

\def\dogetfloatbox#1%
  {\ifvisible
     \let\next\relax % ivm eetex
     \processfirstactioninset
       [#1]
       [    \v!hier=>\def\next{\global\floatsonpagetrue\someelsefloat[#1]},
         \v!forceer=>\def\next{\global\floatsonpagetrue\somefixdfloat[#1]},
           \v!links=>\def\next{\global\floatsonpagetrue\somesidefloat[#1]\presetindentation},
          \v!rechts=>\def\next{\global\floatsonpagetrue\somesidefloat[#1]},
           \v!tekst=>\def\next{\global\floatsonpagetrue\sometextfloat[#1]},
           \v!boven=>\def\next{\someelsefloat[#1]\nonoindentation}, % !
           \v!onder=>\def\next{\global\floatsonpagetrue\someelsefloat[#1]},
           \v!marge=>\def\next{\somenextfloat[#1]\nonoindentation}, % !
          \v!pagina=>\def\next{\global\floatsonpagetrue\somepagefloat[#1]},
           \v!naast=>\def\next{\global\floatsonpagetrue\somefacefloat[#1]},
         \v!inmarge=>\def\next{\global\floatsonpagetrue\somesidefloat[#1]},
        \v!inlinker=>\def\next{\global\floatsonpagetrue\somesidefloat[#1]},
       \v!inrechter=>\def\next{\global\floatsonpagetrue\somesidefloat[#1]},
         \s!default=>\def\next{\global\floatsonpagetrue\someelsefloat[\v!hier,#1]},
         \s!unknown=>\def\next{\global\floatsonpagetrue\someelsefloat[\v!hier,#1]}]%
     \next
   \fi}

\long\def\dofloat#1#2#3#4%
  {\dosetfloatbox{#1}{#2}{#3}{#4}%
   \dogetfloatbox{#1}}%

\long\def\docompletefloat#1#2#3#4#5#6#7%
  {\flushsidefloats
   \calculatefloatskips
   \bgroup
   \global\setbox\floatbox=\vbox{#7}%
   \dimen0=\ht\floatbox
   \advance\dimen0 by \dp\floatbox
   \ifdim\dimen0=\!!zeropoint\relax
     \showmessage{\m!floatblocks}{11}{}%
     \global\setbox\floatbox=\vbox{\getvalue{\e!lege#3}}%
   \fi
   \ConvertToConstant\doifelse{#6}{\v!geen}
     {\global\setbox\floatbox=\vbox
        {\unvbox\floatbox
         \vss % gets rid of the depth
         \rawpagereference{\s!flt}{#2}}%
      \egroup\dofloat{#4}{}{#6}{#1}}
     {\doglobal\convertargument#6\to\asciititle % \asciititle is global 
      \doifelsevalue{\??kj#1\c!nummer}{\v!ja}
        {\verhoognummer[#1]%
         \maakhetnummer[#1]%
         \global\setbox\floatbox=\vbox
            {\unvbox\floatbox % no \vss, keep the depth
             \dofloatreference
             \redofloatorder{#1}%
             \rawreference{\s!flt}{#2}{{\hetnummer}{\asciititle}}%
             \doschrijfnaarlijst{#3}{\hetnummer}{#6}{#3}}%
         \egroup\dofloat{#4}{\labeltexts{#5}{\hetnummer}}{#6}{#1}}
        {\global\setbox\floatbox=\vbox
           {\unvbox\floatbox % no \vss, keep the depth
            \rawreference{\s!flt}{#2}{{}{\asciititle}}}%
         \egroup\dofloat{#4}{}{#6}{#1}}}%
   \global\insidefloatfalse}

\def\plaatsvolledig#1#2#3#4%   kop, ref, tit, do
  {#1[#2]{#3}%
   #4%
   \pagina[\v!ja]}

%I n=Figuren
%I c=\plaatsfiguur,\reserveerfiguur,\startfiguurtekst
%I c=\leegfiguur,\volledigelijstmetfiguren
%I c=\plaatstabel,\reserveertabel,\starttabeltekst
%I c=\legetabel,\volledigelijstmettabellen
%I
%I Figuren en tabellen (gebruik ..tabel.. in plaats van
%I ..figuur..) kunnen in de tekst worden geplaatst met het
%I commando:
%I
%I   \plaatsfiguur[plaats][referentie]{titel}{figuur}
%I
%I Als voorkeur kan worden opgegeven 'hier', 'forceer',
%I 'pagina', 'boven', 'onder', 'links' en 'rechts'. In plaats
%I van een titel kan 'geen' worden meegegeven, in dat geval
%I wordt geen titel geplaatst. Eventueel kan in combinatie
%I met links en rechts 'lang' worden opgegeven.
%I
%I De volgorde kan worden afgedwongen met 'altijd',
%I bijvoorbeeld [hier,altijd]. In dat geval wordt bij een
%I volgende run zonodig de nummering aangepast.
%I
%I In plaats van een titel kan {geen} worden ingevuld. In
%I dat geval blijft de titel achterwege.
%P
%I Het is mogelijk ruimte voor een figuur te reserveren:
%I
%I   \reserveerfiguur[hoogte=,breedte=,kader=][voorkeur]
%I     [referentie]{titel}
%P
%I Een lijst met figuren kan worden opgeroepen met:
%I
%I   \plaatslijstmetfiguren
%I   \volledigelijstmetfiguren
%I
%I Men kan een tekst naast een figuur zetten met:
%I
%I   \startfiguurtekst[plaats][referentie]{kop}{figuur}
%I     ...
%I   \stopfiguurtekst
%I
%I Mogelijke plaatsen zijn (combinaties van) 'links', 'rechts',
%I 'hoog', 'laag' en 'midden'. Met 'offset' dwingt men een
%I verschuiving omlaag van van 1 regel af.
%I
%I Zie verder onder plaatsblokken.

%I n=Tabellen
%I
%I Zie figuren.

%I n=Intermezzo
%I
%I Zie figuren.

%I n=Grafieken
%I
%I Zie figuren.

%T n=figuur
%T m=fig
%T a=f
%T
%T \plaatsfiguur
%T    [hier]
%T    [fig:]
%T    {}
%T    {\naam{?}}
%T

\definieernummer
  [\??si]
  [\c!wijze=\v!per\v!tekst,
   \c!conversie=\@@siconversie]

\def\stelplaatsbloksplitsenin%
  {\dodoubleargument\getparameters[\??si]}

% ook (continued)

\def\dosplitsplaatsblok[#1]#2% nog dubbele refs
  {\ifbinnenkolommen         % tzt ook nog figuren splitten
     % not yet supported
   \else
     \bgroup
     \insidefloattrue
     \getparameters[\??si][#1]%
     \resetnummer[\??si]%
     \def\floatcaptionsuffix{\nummer[\??si]}%
     \TABLEcaptionheight=\@@siregels\lineheight
\def\docomplexpagina[##1]{\goodbreak}%
     \dowithnextbox
       {\forgetall
        \mindermeldingen
        \doloop
          {\setbox2\vsplit\nextbox to \lineheight
           \setbox2=\vbox{\unvbox2}
           \ifdim\ht2>\lineheight
             \verhoognummer[\??si]%
             \ifnum\ruwenummer[\??si]=1 \ifdim\ht\nextbox=\!!zeropoint
               \let\floatcaptionsuffix=\empty
             \fi\fi
             \bgroup
             #2{\unvbox2}
             \egroup
             \ifdim\ht\nextbox>\!!zeropoint
               \pagina
               \verlaagnummer[\floatcaptionnumber]%
             \fi
           \fi
           \ifdim\ht\nextbox>\!!zeropoint\else
             \expandafter\exitloop
           \fi}%
        \egroup}
     \vbox
   \fi}

\def\splitsplaatsblok%
  {\dosingleempty\dosplitsplaatsblok}

%I n=Formules
%I c=\plaatsformule,\plaatssubformule,\stelformulesin
%I
%I Formules kunnen in de tekst worden geplaatst met
%I het commando:
%I
%I   \plaatsformule[referentie]subnummer$$formule$$
%I
%I Dit commando handelt de witruimtes om de formules af en
%I plaatst nummers. Als geen nummer nodig is, en dus ook
%I geen referentie, dan moet met het commando als volgt
%I gebruiken:
%I
%I   \plaatsformule-$$...$$ of \plaatsformule[-]$$...$$
%I
%I Als het nummer niet moet worden opgehoogd, gebruikt men
%I
%I   \plaatssubformule[referentie]subnummer$$formule$$
%P
%I PAS OP:
%I
%I Binnen een aantal wiskundige commando's, zoals
%I \displaylines, moet men het nummer zelf plaatsen. Dit
%I kan gebeuren met: \formulenummer of \subformulenummer.
%I Ook hier kan een [referentie] en een {subnummer} worden
%I meegegeven.
%I
%I \plaatsformule
%I   $$\displaylines
%I       {x \hfill\formulenummer[eerste]{}\cr
%I        y \hfill\cr
%I        z \hfill\formulenummer[derde]{}\cr}
%I   $$
%P
%I De wijze waarop formules worden genummerd kan worden
%I be‹nvloed door het commando:
%I
%I   \stelformulesin[links=,rechts=,plaats=]
%I
%I De nummers kunnen links en rechts worden gezet. Standaard
%I worden de symbolen ( en ) gebruikt.
%I
%I Tussen twee formules kan witruimte worden geforceerd met
%I het commando:
%I
%I   \blanko[formule]

\abovedisplayskip      = \!!zeropoint\relax
\abovedisplayshortskip = \!!zeropoint\relax   % evt. 0pt minus 3pt
\belowdisplayskip      = \!!zeropoint\relax
\belowdisplayshortskip = \!!zeropoint\relax   % evt. 0pt minus 3pt

\predisplaypenalty     = 0
\postdisplaypenalty    = 0  % -5000 gaat mis, zie penalty bij \paragraaf

\doorlabelen
  [\v!formule]
  [\c!tekst=\v!formule,
   \c!wijze=\@@fmwijze,
   \c!blokwijze=\@@fmblokwijze,
   \c!plaats=\v!intekst]

\def\stelformulesin%
  {\dodoubleargument\getparameters[\??fm]}

%%

\newconditional\handleformulanumber
\newconditional\incrementformulanumber

\def\dododoformulenummer#1#2#3#4% (#1,#2)=outer(ref,sub) (#3,#4)=inner(ref,sub)
  {\hbox\bgroup
   \ifconditional\handleformulanumber
     \ifconditional\incrementformulanumber
       \verhoognummer[\v!formule]%
     \fi
     \maakhetnummer[\v!formule]%
     \setbox0=\hbox{\ignorespaces#2\unskip}%
     \ifdim\wd0>\!!zeropoint
       \edef\hetsubnummer{#2}%
     \else
       \let\hetsubnummer\empty
     \fi
     \doifsomething{#1}{\rawreference{\s!for}{#1}{\hetnummer\hetsubnummer}}%
     \setbox0=\hbox{\ignorespaces#4\unskip}%
     \ifdim\wd0>\!!zeropoint
       \edef\hetsubnummer{#4}%
     \fi
     \doifsomething{#3}{\rawreference{\s!for}{#3}{\hetnummer\hetsubnummer}}%
     \rm\strut\@@fmlinks
     \ignorespaces\hetnummer\ignorespaces\hetsubnummer\unskip
     \@@fmrechts
   \fi
   \egroup}

\def\dodoformulenummer[#1][#2][#3]%
  {\doquadruplegroupempty\dododoformulenummer{#1}{#2}{#3}}

\def\doformulenummer%
  {\dotripleempty\dodoformulenummer}

%

\letvalue{\e!start\e!formule}=\undefined
\letvalue{\e!stop \e!formule}=\undefined

%\def\dodoplaatsstartformule#1[#2]#3\startformule#4\stopformule%
%  {\dodoplaatsformule#1[#2]#3$$#4$$}

\expanded
  {\def\noexpand\dodoplaatsstartformule##1[##2]##3\csname\e!start\e!formule\endcsname##4\csname\e!stop\e!formule\endcsname%
     {\noexpand\dodoplaatsformule##1[##2]##3$$##4$$}}

\setvalue{\e!start\e!formule}{\dostartformula}
\setvalue{\e!stop \e!formule}{\dostopformula}

\def\dostartformula%
  {\dowithnextbox
     {\scratchskip=\ifdim\tussenwit>\!!zeropoint\tussenwit\else\blankoskip\fi
      \startregelcorrectie[\the\scratchskip]
        \box\nextbox
      \stopregelcorrectie}
   \vbox\bgroup
     \forgetall
     \abovedisplayskip\!!zeropoint
     \belowdisplayskip\!!zeropoint
     \abovedisplayshortskip\!!zeropoint
     \belowdisplayshortskip\!!zeropoint
\vbox{\strut}\vskip-2\lineheight % Why 2 and not 1?
     $$\def\dostopformula{$$\egroup}}

\def\plaatsformule%
  {\settrue\incrementformulanumber
   \dodoubleempty\doplaatsformule}

\def\plaatssubformule%
  {\setfalse\incrementformulanumber
   \dodoubleempty\doplaatsformule}

\def\doplaatsformule[#1][#2]% #2 = dummy, gobbles spaces
  {\def\redoplaatsformule%
     {\ifx\next\bgroup
        \expandafter\xdoplaatsformule
      \else
        \expandafter\ydoplaatsformule
      \fi[#1]}%
   \futurelet\next\redoplaatsformule}

\long\def\xdoplaatsformule[#1]#2#3% #3 gobbles spaces
  {\def\redoplaatsformule%
     {\expandafter\ifx\csname\e!start\e!formule\endcsname\next
        \expandafter\dodoplaatsstartformule
      \else
        \expandafter\dodoplaatsformule
      \fi[#1]{#2}}%
   \futurelet\next\redoplaatsformule#3}

\long\def\ydoplaatsformule[#1]#2% #3 gobbles spaces
  {\def\redoplaatsformule%
     {\expandafter\ifx\csname\e!start\e!formule\endcsname\next
        \expandafter\dodoplaatsstartformule
      \else
        \expandafter\dodoplaatsformule
      \fi[#1]}%
   \futurelet\next\redoplaatsformule#2}

\def\dodoplaatsformule[#1]#2$$#3$$%
  {\begingroup
   \setdisplayskips
   \doifelse{#1}{-}
     {\setfalse\handleformulanumber}
     {\doifelse{#2}{-}
        {\setfalse\handleformulanumber}
        {\settrue\handleformulanumber}}%
   \ifconditional\handleformulanumber
     \def\formulenummer%
       {\global\let\doeqno\empty
        \global\let\doleqno\empty
       %\global\let\formulenummer\doformulenummer ???
        \doformulenummer[#1][#2]}%
     \def\subformulenummer%
       {\setfalse\incrementformulanumber
        \formulenummer}%
     \gdef\doleqno{\leqno{\doformulenummer[#1][#2][]{}}}%
     \gdef\doeqno {\eqno {\doformulenummer[#1][#2][]{}}}%
     \doifelse{\@@fmplaats}{\v!links}
       {\dostartformula#3\doleqno\dostopformula}
       {\dostartformula#3\doeqno \dostopformula}%
   \else
     \def\formulenummer{\doformulenummer[#1][#2]}%
     \let\subformulenummer\doformulenummer
     \dostartformula#3\dostopformula
   \fi
   \par
   \ignorespaces
   \endgroup}

%I n=Naast
%I c=\startnaast,\stelnaastplaatsenin
%I
%I Experiment:
%I
%I \startnaast
%I ...
%I \stopnaast
%I
%I \stelnaastplaatsenin[status=]
%I

% \newbox\facingbox
% \newbox\facingpage
%
% \newdimen\facingboxsize
% \newdimen\facingpagetotal
%
% \facingpagetotal=\!!zeropoint
%
% \newif\iffacingpages \facingpagesfalse
%
% \def\shipoutfacingpage%
%   {\iffacingpages
%      \setbox\facingpage=\vbox to \zethoogte
%        {\kern\hoofdhoogte
%         \kern\ht\topins           % ?
%         \kern\dp\topins           % ?
%         \kern\dp\strutbox         % checken
%         \box\facingpage
%         \vfill}%
%      \myshipout{\buildpagebody\box\facingpage}%
%    \fi
%    \global\setbox\facingpage=\box\voidb@x
%    \global\facingpagetotal=\!!zeropoint\relax}
%
% \def\flushfacingpage%
%   {\penalty-\!!tenthousand
%    \global\facingpagetotal=\facingboxsize
%    \setbox\facingpage=\vbox{\box\facingbox}}
%
% \def\startnaast#1\stopnaast%
%   {\iffacingpages
%      \setbox\facingbox=\vbox
%        {\hsize=\zetbreedte\relax
%         #1}%
%      \global\facingboxsize=\ht\facingbox
%      \global\advance\facingboxsize by \dp\facingbox
%      \ifdim\pagetotal<\facingpagetotal
%        \dimen2=\facingpagetotal
%        \advance\dimen2 by -\pagetotal
%        \vskip\dimen2\relax
%      \else
%        \dimen2=\!!zeropoint\relax
%      \fi
%      \dimen0=\pagetotal
%      \advance\dimen0 by \facingboxsize
%      \ifdim\dimen0>\pagegoal
%        \flushfacingpage
%      \else
%        \global\advance\facingpagetotal by \facingboxsize
%        \ifdim\facingpagetotal>\pagegoal
%          \flushfacingpage
%        \else
%          \setbox\facingpage=\vbox
%            {\offinterlineskip
%             \mindermeldingen
%             \ht\facingpage=\!!zeropoint
%             \ifdim\pagetotal=\topskip
%               \vskip-\topskip
%             \fi
%             \box\facingpage
%             \advance\dimen2 by \pagetotal
%             \vskip\dimen2\relax
%             \ifdim\facingpagetotal>\facingboxsize
%               \vskip\tussenwit
%             \fi
%             \box\facingbox}%
%        \fi
%      \fi
%    \fi}
%
% \def\dostelnaastplaatsenin[#1]%
%   {\getparameters[\??np][#1]%
%    \doifelse{\@@npstatus}{\v!start}
%      {\global\facingpagestrue}
%      {\global\facingpagesfalse}}
%
% \def\stelnaastplaatsenin%
%   {\dosingleargument\dostelnaastplaatsenin}
%
% \def\naastpagina%
%   {\shipoutfacingpage}
%
% \def\facefloat%               redefined
%   {\startnaast\box\floatbox\stopnaast}

\newbox\facingbox
\newbox\facingpage

\newif\iffacingpages \facingpagesfalse

\def\shipoutfacingpage%
  {\iffacingpages
     \ifnum\realpageno>1
       \bgroup
       \pagebodyornamentsfalse
       \setbox\facingpage=\vbox to \zethoogte
         {\unvbox\facingpage\vfil}%
       \myshipout{\buildpagebody\box\facingpage}%
       \egroup
     \else
       \global\setbox\facingpage=\box\voidb@x
     \fi
   \fi}

\def\naastpagina%
  {\shipoutfacingpage}

\def\facefloat%               redefined
  {\startnaast\box\floatbox\stopnaast}

\def\startnaast% beter: \dowithnextbox
  {\iffacingpages
     \global\setbox\facingbox=\vbox
       \bgroup
       \hsize=\zetbreedte
   \else
     \def\next{\gobbleuntil\stopnaast}%
     \expandafter\next
   \fi}

\def\stopnaast%
  {\egroup
   \global\setbox\facingpage=\vbox
     {\ifvoid\facingpage
        \vskip\openstrutdepth % \dp\strutbox
      \else
        \unvbox\facingpage
      \fi
      \box\facingbox
      \blanko}}

\def\dostelnaastplaatsenin[#1]%
  {\getparameters[\??np][#1]%
   \doifelse{\@@npstatus}{\v!start}
     {\global\facingpagestrue}
     {\global\facingpagesfalse}}

\def\stelnaastplaatsenin%
  {\dosingleargument\dostelnaastplaatsenin}

%I n=Achtergronden
%I c=\stelachtergrondenin
%I
%I Achter de tekst kan een achtergrond worden geplaatst.
%I Voor de afzonderlijke elementen van een tekst wordt een
%I achtergrond gedefinieerd met het commando:
%I
%I   \stelachtergrondenin
%I    [boven,hoofd,tekst,voet,onder]
%I    [linkerrand,rechterrand,linkermarge,reachtermarge,tekst]
%I    [achtergrond=,kleur=,raster=]
%I
%I Voor de hele bladzijde gebruiken we:
%I
%I   \stelachtergrondenin
%I    [pagina]
%I    [achtergrond=,kleur=,raster=]
%P
%I Het is mogelijk elk blok iets ruimer om de tekst te
%I plaatsen met:
%I
%I   \stelachtergrondenin
%I    [pagina]
%I    [offset=,diepte=]
%I
%I Een offset van .25\korpsgrootte en een diepte van
%I .5\korpsgrootte voldoen aardig.
%I
%I Er kunnen ronde hoeken worden gezet met:
%I
%I   \stelachtergrondenin
%I    [pagina]
%I    [hoek=,straal=]
%I
%I Hierbij kan voor hoek de instelling rond of recht worden
%I meegegeven en voor straal een dimensie.

% Don't use \@@mawhatevercommand directly, use \getvalue instead.

\newif\ifnewbackground
\newif\ifsomebackground

\newbox\leftbackground
\newbox\rightbackground

% \getvalue{\??ma#1\c!commando} is obsolete; replaced by overlay  
%
% \def\doaddpagebackground#1#2%
%   {\doifvaluesomething{\??ma#1\c!achtergrond}
%      {\setbox2=\vbox
%         {\offinterlineskip
%          \localframed
%            [\??ma#1]
%            [\c!breedte=\papierbreedte,\c!hoogte=\papierhoogte]%, \c!offset=\v!overlay]
%            {\getvalue{\??ma#1\c!commando}}}%
%       \wd2=\!!zeropoint
%       \dp2=\!!zeropoint
%       \setbox#2=\vbox
%         {\hbox{\box2\box#2}}}}

%\def\doaddpagebackground#1#2% 
%  {\doifvaluesomething{\??ma#1\c!achtergrond}
%     {\edef\setpagebackgrounddepth%
%        {\dp#2=\the\dp#2}%
%      \setbox#2=\vbox\localframed
%        [\??ma#1]
%        [\c!strut=\v!nee,\c!breedte=\papierbreedte,\c!hoogte=\papierhoogte]
%        {\dp#2=\!!zeropoint\box#2}%
%      \setpagebackgrounddepth}}

\def\ifsomebackgroundfound#1%
  {\edef\!!stringe{\??ma#1}%
   \doifelsevaluenothing{\!!stringe\c!achtergrond}
         {\doifelsevalue{\!!stringe\c!kader       }\v!aan\!!doneatrue
         {\doifelsevalue{\!!stringe\c!linkerkader }\v!aan\!!doneatrue
         {\doifelsevalue{\!!stringe\c!rechterkader}\v!aan\!!doneatrue
         {\doifelsevalue{\!!stringe\c!bovenkader  }\v!aan\!!doneatrue
         {\doifelsevalue{\!!stringe\c!onderkader  }\v!aan\!!doneatrue
                                                         \!!doneafalse}}}}}
                                                         \!!doneatrue
   \if!!donea}

\def\doaddpagebackground#1#2% 
  {\doifelsevaluenothing{\??ma#1\c!achtergrond}
     {\doifelsevaluenothing{\??ma#1\c!kader}
        {\donefalse}
        {\donetrue}}
     {\donetrue}%
   \ifdone
     \edef\setpagebackgrounddepth%
       {\dp#2=\the\dp#2}%
     \setbox#2=\vbox\localframed
       [\??ma#1]
       [\c!strut=\v!nee,\c!breedte=\papierbreedte,\c!hoogte=\papierhoogte]
       {\dp#2=\!!zeropoint\box#2}%
     \setpagebackgrounddepth
   \fi}

\def\addpagebackground#1%
  {\doifbothsidesoverruled
     \doaddpagebackground{\v!rechterpagina}{#1}%
   \orsideone
     \doaddpagebackground{\v!rechterpagina}{#1}%
   \orsidetwo
     \doaddpagebackground{\v!linkerpagina}{#1}%
   \od
   \doaddpagebackground{\v!pagina}{#1}}

\let\pagebackgroundhoffset = \!!zeropoint
\let\pagebackgroundvoffset = \!!zeropoint
\let\pagebackgrounddepth   = \!!zeropoint

% #1 = breedte
% #2 = hoogte
% #3 = pos
% #4 = pos

\def\dododopagebodybackground#1#2#3#4%
  {\ifsomebackgroundfound{#3#4}%
     \localframed
       [\??ma#3#4]
       [\c!breedte=#1,\c!hoogte=#2,\c!offset=\v!overlay]
       {\getvalue{\??ma#3#4\c!commando}}%
   \else
     \hskip#1%
   \fi}

\def\dodopagebodybackground#1#2%
  {\setbox0=\vbox to #2
     \bgroup\hbox\bgroup
       \swapmargins
       \goleftonpage
       \dododopagebodybackground\linkerrandbreedte#2#1\v!linkerrand
       \hskip\linkerrandafstand
       \hskip\pageseparation
       \dododopagebodybackground\linkermargebreedte#2#1\v!linkermarge
       \hskip\linkermargeafstand
       \dododopagebodybackground\zetbreedte#2#1\v!tekst
       \hskip\rechtermargeafstand
       \dododopagebodybackground\rechtermargebreedte#2#1\v!rechtermarge
       \hskip\pageseparation
       \hskip\rechterrandafstand
       \dododopagebodybackground\rechterrandbreedte#2#1\v!rechterrand
     \egroup\egroup
   \wd0=\!!zeropoint\relax
   \box0\relax}

\def\setbackgroundbox#1#2%
  {\global\setbox#1=\vbox
     {\offinterlineskip
      \mindermeldingen
      \calculatereducedvsizes
      #2\relax
      \vskip-\bovenhoogte
      \vskip-\bovenafstand
      \dodopagebodybackground\v!boven\bovenhoogte
      \vskip\bovenafstand
      \dodopagebodybackground\v!hoofd\hoofdhoogte
      \vskip\hoofdafstand
      \dodopagebodybackground\v!tekst\teksthoogte
      \vskip\voetafstand
      \dodopagebodybackground\v!voet\voethoogte
      \vskip\onderafstand
      \dodopagebodybackground\v!onder\onderhoogte
      \vfilll}%
  \smashbox#1}

\def\setbackgroundboxes%
  {\ifsomebackground\ifnewbackground
     \showmessage{\m!layouts}{8}{}%
     \docheckbackgrounddefinitions
     \setbackgroundbox\leftbackground\relax
     \ifdubbelzijdig
       \setbackgroundbox\rightbackground\doswapmargins
     \fi
    %\global\newbackgroundfalse
     \doifnot{\@@mastatus}{\v!herhaal}{\global\newbackgroundfalse}%
     \doifelsevaluenothing{\??ma\v!tekst\v!tekst\c!achtergrond}
       {\global\let\pagebackgroundhoffset=\!!zeropoint
        \global\let\pagebackgroundvoffset=\!!zeropoint
        \global\let\pagebackgrounddepth  =\!!zeropoint}
       {\bgroup
        \dimen0=\getvalue{\??ma\v!pagina\c!offset}%
        \doifnothing
          {\getvalue{\??ma\v!boven\v!tekst\c!achtergrond}%
           \getvalue{\??ma\v!onder\v!tekst\c!achtergrond}}
          {\xdef\pagebackgroundhoffset{\the\dimen0}}%
        \doifnothing
          {\getvalue{\??ma\v!tekst\v!rechterrand\c!achtergrond}%
           \getvalue{\??ma\v!tekst\v!linkerrand \c!achtergrond}}
          {\xdef\pagebackgroundvoffset{\the\dimen0}%
           \dimen0=\getvalue{\??ma\v!pagina\c!diepte}%
           \xdef\pagebackgrounddepth{\the\dimen0}}%
        \egroup}%
   \fi\fi}

\def\getbackgroundbox%
  {\ifsomebackground
     \setbackgroundboxes
     \startinteractie
     \doifmarginswapelse
       {\copy\leftbackground}
       {\copy\rightbackground}%
     \stopinteractie
   \fi}

% saves us hundreds of unused hash entries if not needed

\def\docheckbackgrounddefinitions% allocates about 1000 hash-entries
  {\doifdefined{\??ma\v!pagina\c!achtergrond}% skip first pass
     {\def\dodocommando##1##2%
        {\copylocalframed[\??ma##1##2][\??ma\v!pagina]%
         \getparameters[\??ma##1##2]
           [\c!achtergrond=,\c!kader=,\c!kleur=,\c!raster=,
            \c!onderkader=,\c!bovenkader=,\c!linkerkader=,\c!rechterkader=]%
         \copyparameters
           [\??ma##1##2\c!kader][\??ma##1##2]
           [\c!kleur,\c!raster]%
         \copyparameters
           [\??ma##1##2\c!achtergrond][\??ma##1##2]
           [\c!kleur,\c!raster]}%
      \def\docommando##1%
        {\dodocommando##1\v!linkerrand   \dodocommando##1\v!linkermarge
         \dodocommando##1\v!tekst
         \dodocommando##1\v!rechtermarge \dodocommando##1\v!rechterrand}%
      \docommando\v!boven \docommando\v!hoofd
      \docommando\v!tekst
      \docommando\v!voet  \docommando\v!onder
      \def\docheckbackgrounddefinitions%
        {\global\somebackgroundtrue}}}

% \def\dostelachtergrondenin[#1][#2][#3]%
%   {\ifthirdargument
%      \docheckbackgrounddefinitions
%      \def\docommando##1%
%        {\doifinsetelse{##1}{\v!pagina,\v!linkerpagina,\v!rechterpagina}
%           {\getparameters[\??ma##1][#3]%
%            \dosetpageseparation}
%           {\def\dodocommando####1%
%              {\getparameters[\??ma##1####1][#3]}
%            \processcommalist[#2]\dodocommando}}%
%      \processcommalist[#1]\docommando
%    \else\ifsecondargument
%      \docheckbackgrounddefinitions
%      \doifcommonelse{#1}{\v!pagina,\v!linkerpagina,\v!rechterpagina}
%        {\def\docommando##1%
%           {\getparameters[\??ma##1][#2]}%
%         \processcommalist[#1]\docommando
%         \dosetpageseparation}
%        {\dostelachtergrondenin
%           [#1]
%           [\v!linkerrand,\v!linkermarge,\v!tekst,\v!rechtermarge,\v!rechterrand]
%           [#2]}%
%    \else\iffirstargument
%      \getparameters[\??ma][#1]%
%    \fi\fi\fi
%    \doifelse{\@@mastatus}{\v!stop}
%      {\global\newbackgroundfalse}
%      {\global\newbackgroundtrue}}

\def\dostelachtergrondenin[#1][#2][#3]%
  {\ifthirdargument
     \docheckbackgrounddefinitions
     \def\docommando##1%
       {\doifinsetelse{##1}{\v!papier,\v!pagina,\v!linkerpagina,\v!rechterpagina}
          {\getparameters[\??ma##1][#3]%
           \dosetpageseparation}
          {\def\dodocommando####1%
             {\getparameters[\??ma##1####1][#3]}%
           \processcommalist[#2]\dodocommando}}%
     \processcommalist[#1]\docommando
   \else\ifsecondargument
     \docheckbackgrounddefinitions
     \doifcommonelse{#1}{\v!papier,\v!pagina,\v!linkerpagina,\v!rechterpagina}
       {\def\docommando##1%
          {\getparameters[\??ma##1][#2]}%
        \processcommalist[#1]\docommando
        \dosetpageseparation}
       {\dostelachtergrondenin
          [#1]
          [\v!linkerrand,\v!linkermarge,\v!tekst,\v!rechtermarge,\v!rechterrand]
          [#2]}%
   \else\iffirstargument
     \getparameters[\??ma][#1]%
   \fi\fi\fi
   \doifelse{\@@mastatus}{\v!stop}
     {\global\newbackgroundfalse}
     {\global\newbackgroundtrue}}
 
\def\stelachtergrondenin%
  {\dotripleempty\dostelachtergrondenin}

% a lot of setups, including short ones

\presetlocalframed [\??ma\v!papier] 
\presetlocalframed [\??ma\v!pagina]
\presetlocalframed [\??ma\v!linkerpagina]
\presetlocalframed [\??ma\v!rechterpagina]

\copyparameters
  [\??ma\v!papier\c!kader][\??ma\v!pagina]
  [\c!offset,\c!diepte,\c!straal,\c!hoek,\c!kleur,\c!raster]

\copyparameters
  [\??ma\v!papier\c!achtergrond][\??ma\v!pagina]
  [\c!offset,\c!diepte,\c!straal,\c!hoek,\c!kleur,\c!raster]

\copyparameters
  [\??ma\v!pagina\c!kader][\??ma\v!pagina]
  [\c!offset,\c!diepte,\c!straal,\c!hoek,\c!kleur,\c!raster]

\copyparameters
  [\??ma\v!pagina\c!achtergrond][\??ma\v!pagina]
  [\c!offset,\c!diepte,\c!straal,\c!hoek,\c!kleur,\c!raster]

\copyparameters
  [\??ma\v!linkerpagina\c!kader][\??ma\v!linkerpagina]
  [\c!offset,\c!diepte,\c!straal,\c!hoek,\c!kleur,\c!raster]

\copyparameters
  [\??ma\v!linkerpagina\c!achtergrond][\??ma\v!linkerpagina]
  [\c!offset,\c!diepte,\c!straal,\c!hoek,\c!kleur,\c!raster]

\copyparameters
  [\??ma\v!rechterpagina\c!kader][\??ma\v!rechterpagina]
  [\c!offset,\c!diepte,\c!straal,\c!hoek,\c!kleur,\c!raster]

\copyparameters
  [\??ma\v!rechterpagina\c!achtergrond][\??ma\v!rechterpagina]
  [\c!offset,\c!diepte,\c!straal,\c!hoek,\c!kleur,\c!raster]

\def\@@pageseparation {6pt}
\def\pageseparation   {0pt}

\def\paginascheiding  {\pageseparation}

\def\dosetpageseparation%
  {\let\pageseparation=\!!zeropoint
   \let\showpageseparation=\relax
   \processaction
     [\getvalue{\??ma\v!pagina\c!scheider}]
     [   \v!ruim=>\let\pageseparation=\@@pageseparation
                  \let\showpageseparation=\showloosepageseparation,
      \v!passend=>\let\pageseparation=\@@pageseparation
                  \let\showpageseparation=\showtightpageseparation]}

\def\showloosepageseparation%
  {\ifdim\pageseparation>\!!zeropoint\relax
     \bgroup
     \setbox0=\hbox
       {\vrule
          \!!width\pageseparation
          \!!depth\papierhoogte
          \!!height\papierhoogte}%
     \ht0=\!!zeropoint
     \dp0=\!!zeropoint
     \box0
     \egroup
   \fi}

\def\showtightpageseparation%
  {\ifdim\pageseparation>\!!zeropoint\relax
     \bgroup
     \dimen0=\teksthoogte
     \advance\dimen0 by \kopwit
     \doifsometextlineelse{\v!hoofd}
       {\advance\dimen0 by \hoofdhoogte
        \advance\dimen0 by \hoofdafstand}
       {}%
     \dimen2=\papierhoogte
     \advance\dimen2 by -\dimen0
%\advance\dimen0 by -1cm % nog eens optie
%\advance\dimen2 by -1cm % nog eens optie
     \setbox0=\hbox
       {\vrule
          \!!width\pageseparation
          \!!depth\dimen2
          \!!height\dimen0}%
     \ht0=\!!zeropoint
     \dp0=\!!zeropoint
     \box0
     \egroup
   \fi}

%I n=File-management
%I c=\starttekst,\startprojekt,\startonderdeel,\startprodukt
%I c=\startomgeving,\startdeelomgeving
%I
%I Een eenvoudige tekst wordt gestart en gestopt met de
%I commando's:
%I
%I   \starttekst
%I   \stoptekst
%P
%I Het is mogelijk een projektstructuur op te zetten. Per
%I projekt wordt een file aangemaakt waarin de volgende
%I commando's voorkomen:
%I
%I   \startprojekt naam
%I   \stopprojekt
%I
%I Als deze file in TeX wordt geladen, dan worden alle
%I produkten achter elkaar gezet.
%I
%I Een produkt wordt gedefinieerd met:
%I
%I   \startprodukt naam
%I   \stopprodukt
%I
%I Deze file kan zelfstandig door TeX worden gehaald.
%P
%I Een omgeving wordt gedefinieerd door:
%I
%I   \startomgeving naam
%I   \stopomgeving
%I
%I Een onderdeel wordt gedefinieerd door:
%I
%I   \startonderdeel naam
%I   \stoponderdeel
%I
%I Files worden eerst gezocht op het actuele gebied. Als een
%I file niet aanwezig is wordt op de 'roots' gezocht.
%I
%I Een onderdeel kan zelfstandig door TeX worden gehaald.
%P
%I Binnen een projekt, produkt, omgeving of onderdeel komen
%I de volgende instellingen voor (tussen haakjes=facultatief):
%I
%I                     projekt  omgeving produkt  onderdeel
%I
%I   \projekt naam                           *        *
%I   \omgeving naam      (*)      (*)       (*)      (*)
%I   \produkt naam        *
%I   \onderdeel naam                        (*)      (*)
%I
%I Binnen een omgeving kunnen deelomgevingen worden gedefinieerd
%I die alleen voor bepaalde produkten, onderdelen enz. gelden.
%I
%I   \startdeelomgeving[naam,...,naam]
%I     commando's
%I   \stopdeelomgeving
%P
%I Het programma TeXEdit doorzoekt bij het aanmaken van een
%I file-menu de hele tekst op de genoemde commando's. Bij een
%I lange tekst kan dit misschien 'te' lang duren. Met het
%I commando:
%I
%I   \geenfilesmeer
%I
%I kan worden aangegeven dat er geen structuurcommando's meer
%I volgen.
%I
%I Ten behoeve van TeXUtil moet in plaats van het commando
%I \input het commando \verwerkfile{naam} worden gebruikt.
%P
%I Als men standaard een en ander wil instellen, dan kan men
%I dit doen in de file 'cont-sys.tex'. Deze file wordt direkt
%I na het opstarten geladen cq. uitgevoerd. Daarnaast wordt,
%I indien aanwezig, de file 'cont-new.tex' geladen.

%T n=starttekst
%T m=sta
%T a=x
%T
%T \starttekst
%T
%T ?
%T
%T \stoptekst

\def\currentproject     {}
\def\currentproduct     {}
\def\currentenvironment {}
\def\currentcomponent   {}

\def\loadedfiles        {}
\def\processedfiles     {}

\let\geenfilesmeer=\relax

\newcounter\textlevel
\newcounter\fileprocesslevel

\setvalue{\c!file::0}{\jobname}

\def\processedfile%
  {\getvalue{\c!file::\fileprocesslevel}}

%\def\processfile#1%
%  {\doglobal\increment\fileprocesslevel
%   \setxvalue{\c!file::\fileprocesslevel}{#1}%
%   \@EA\doglobal\@EA\addtocommalist\@EA{#1}\processedfiles
%   \readlocfile{#1}{}{}
%   \doglobal\decrement\fileprocesslevel}

\def\processlocalfile#1#2%
  {\doglobal\increment\fileprocesslevel
   \setxvalue{\c!file::\fileprocesslevel}{#2}%
   \@EA\doglobal\@EA\addtocommalist\@EA{#2}\processedfiles
   #1{#2}{}{}% #1=\readlocfile|\readsetfile{dir} #2=filename
   \doglobal\decrement\fileprocesslevel}

\def\processfile#1%
  {\ifx\allinputpaths\empty
     \processlocalfile{\readlocfile}{#1}{}%
   \else
     \let\filepath\empty
     \def\docommando##1%
       {\doiffileelse{\pathplusfile{##1}{#1}}
          {\donetrue\def\filepath{##1}}
          {\donefalse}%
        \ifdone\expandafter\quitcommalist\fi}%
     \processcommacommand[.,\allinputpaths]\docommando
     \ifx\filepath\empty
       \processlocalfile{\readlocfile         }{#1}% fall back ../../..
     \else
       \processlocalfile{\readsetfile\filepath}{#1}% file found
     \fi
   \fi}

\let\allinputpaths\empty

\def\usepath[#1]%
  {\def\docommando##1%
     {\doifelse{##1}{\v!reset}
        {\let\allinputpaths\empty}
        {\addtocommalist{##1}\allinputpaths}}%
   \processcommalist[#1]\docommando}

\def\registreerfileinfo[#1#2]#3%
  {\writestatus{\m!systems}{#1#2 file #3 at line \the\inputlineno}%
   \immediatewriteutility{f #1 {#3}}}

\doifundefined{preloadfonts}    {\let\preloadfonts=\relax}
\doifundefined{preloadspecials} {\let\preloadspecials=\relax}

\def\loadsystemfiles%
  {\readsysfile{\f!newfilename}
     {\showmessage{\m!systems}{2}{\f!newfilename}}{}%
   \readsysfile{\f!oldfilename}
     {\showmessage{\m!systems}{2}{\f!oldfilename}}{}%
   \readsysfile{\f!filfilename}
     {\showmessage{\m!systems}{2}{\f!filfilename}}{}%
   \readsysfile{\f!sysfilename}
     {\showmessage{\m!systems}{2}{\f!sysfilename}}{}}

% test \@@svgebied

\def\loadallsystemfiles#1%
  {\ifx\@@svgebied\empty
     \readsysfile{#1}{\showmessage{\m!systems}{2}{#1}}{}%
   \else
     \def\doloadsystemfile##1%
       {\readsetfile{##1}{#1}{\showmessage{\m!systems}{2}{#1}}{}}%
     \processcommacommand[\@@svgebied]\doloadsystemfile
   \fi}

\def\loadsystemfiles%
  {\readsysfile{\f!newfilename}
     {\showmessage{\m!systems}{2}{\f!newfilename}}{}%
   \readsysfile{\f!oldfilename}
     {\showmessage{\m!systems}{2}{\f!oldfilename}}{}%
   \loadallsystemfiles\f!filfilename
   \loadallsystemfiles\f!sysfilename}

%D Loading of \type {cont-usr.tex} and \type {cont-exe.tex} 
%D (the one generated by texexec). 

\def\loaduserspecifications
  {\readsysfile{\f!usrfilename}
     {\showmessage{\m!systems}{2}{\f!usrfilename}}{}%
   \readjobfile{\f!fmtfilename}
     {\showmessage{\m!systems}{2}{\f!fmtfilename}}{}}

%D We don't want multiple jobfiles to interfere. 

\bgroup
\catcode`\%=\@@other
\xdef\texcommentsymbol{%}
\egroup

%\def\loadoptionfile% tzt \unlinkfile 
%  {\readjobfile{\f!optfilename}
%     {\showmessage{\m!systems}{2}{\f!optfilename}}%
%     {}%
%   \doiffileelse{\f!optfilename}
%     {\immediate\openout\scratchwrite=\f!optfilename
%      \immediate\write\scratchwrite{\texcommentsymbol\space see backup copy}%
%      \immediate\closeout\scratchwrite}
%     {}}

\def\loadoptionfile% 
  {\readjobfile{\jobname.\f!optionextension}
     {\showmessage{\m!systems}{2}{\jobname.\f!optionextension}}%
     {}}

% \newevery \everyjob \EveryJob
% \appendtoks ... \to \everyjob

\prependtoks \showcontextbanner \to \everyjob

\appendtoks  \loadsystemfiles   \to \everyjob
\appendtoks  \preloadfonts      \to \everyjob
\appendtoks  \settopskip        \to \everyjob
\appendtoks  \preloadlanguages  \to \everyjob
\appendtoks  \preloadspecials   \to \everyjob
\appendtoks  \openspecialfile   \to \everyjob
\appendtoks  \checkutilityfile  \to \everyjob
\appendtoks  \openutilities     \to \everyjob
\appendtoks  \loadoptionfile    \to \everyjob
\appendtoks  \loadtwopassdata   \to \everyjob
\appendtoks  \setupfootnotes    \to \everyjob % eigenlijk ergens anders
                                              % hangt af van korps
\appendtoks \pagina[\v!laatste] \pagina
            \ifarrangingpages\poparrangedpages\fi \to \everybye

\appendtoks \registreerfileinfo[end]{\jobname}    \to \everybye
\appendtoks \stopcopyingblocks                    \to \everybye
\appendtoks \closeutilities                       \to \everybye
\appendtoks \closespecialfile                     \to \everybye

\appendtoks \checkreferences \to \everystarttext % nieuw 4-12-1999 

\def\doateverystarttext%
  {\the\everystarttext
   \global\let\doateverystarttext\relax}

\def\starttekst%
  {\doateverystarttext
   \ifnum\textlevel=0\relax
    \registreerfileinfo[begin]{\jobname}%
    \startcopyingblocks
   \fi
   \doglobal\increment\textlevel\relax}

\def\stoptekst%
  {\doglobal\decrement\textlevel\relax
   \ifnum\textlevel>0 \else
     \the\everystoptext
     \the\everybye
     \expandafter\normalend
   \fi}

\let\normalend=\end

\def\end%
  {\ifnum\textlevel>0 \else
     \the\everybye
     \expandafter\normalend
   \fi}

\def\doexecutefileonce#1%
  {\beforesplitstring#1\at.\to\currentfile
   \ExpandBothAfter\doifnotinset{\currentfile}{\loadedfiles}%
     {\ExpandFirstAfter\addtocommalist{\currentfile}\loadedfiles
      \doexecutefile{#1}}}

\def\doexecutefile#1%
  {\registreerfileinfo[begin]{#1}
   \processfile{#1}%
   \registreerfileinfo[end]{#1}}

\def\donotexecutefile#1%
  {}

\def\verwerkfile#1 %
  {\doexecutefile{#1}}

\def\omgeving #1 % at outermost level only
  {\def\startomgeving ##1 {}%
   \let\stopomgeving=\relax
   \startreadingfile
   \readlocfile{#1}{}{}%
   \stopreadingfile}

\newcounter\filelevel

\def\!!donextlevel#1#2#3#4#5#6\\%
  {\beforesplitstring#6\at.\to#1
   \ifnum\filelevel=0\relax
     \starttekst
     \def\projekt   ##1 {#2{##1}}%
     \def\omgeving  ##1 {#3{##1}}%
     \def\produkt   ##1 {#4{##1}}%
     \def\onderdeel ##1 {#5{##1}}%
   \fi
   \increment\filelevel\relax
   \ExpandFirstAfter\addtocommalist{#1}\loadedfiles}

%\def\doprevlevel%
%  {\ifnum\filelevel=1\relax
%     \let\next=\stoptekst
%   \else
%     \decrement\filelevel\relax
%     \let\next=\endinput
%   \fi
%   \next}

\def\doprevlevel%
  {\ifnum\filelevel=1
     \expandafter\stoptekst
   \else
     \decrement\filelevel\relax
     \expandafter\endinput
   \fi}

\def\startprojekt #1 %
  {\!!donextlevel\currentproject
     \donotexecutefile\doexecutefileonce
     \doexecutefileonce\doexecutefile#1\\}

\def\stopprojekt%
  {\doprevlevel}

\def\startprodukt #1 %
  {\doateverystarttext
   \!!donextlevel\currentproduct
     \doexecutefileonce\doexecutefileonce
     \donotexecutefile\doexecutefile#1\\}

\def\stopprodukt%
  {\doprevlevel}

\def\startonderdeel #1 %
  {\doateverystarttext
   \!!donextlevel\currentcomponent
     \doexecutefileonce\doexecutefileonce
     \donotexecutefile\doexecutefile#1\\}

\def\stoponderdeel%
  {\doprevlevel}

\def\startomgeving #1 %
  {\!!donextlevel\currentenvironment
     \donotexecutefile\doexecutefileonce
     \donotexecutefile\donotexecutefile#1\\}

\def\stopomgeving%
  {\doprevlevel}

\long\def\skipdeelomgeving#1\stopdeelomgeving%
  {}

\def\startdeelomgeving[#1]%
  {\def\partialenvironments{}%
   \def\docommando##1%
     {\beforesplitstring##1\at.\to\someevironment
      \ExpandFirstAfter\addtocommalist{\someevironment}\partialenvironments}%
   \processcommalist[#1]\docommando
   \ExpandBothAfter\doifcommonelse
       {\currentproject,\currentproduct,
        \currentcomponent,\currentenvironment}
       {\partialenvironments}
     {\let\stopdeelomgeving=\relax
      \let\next=\relax}
     {\let\next=\skipdeelomgeving}%
   \next}

\def\startproduct{\startprodukt}
\def\stopproduct {\stopprodukt}
\def\startproject{\startprojekt}
\def\stopproject {\stopprojekt}

\def\project{\projekt}
\def\product{\produkt}

\def\deelomgeving #1 %
  {\doexecutefileonce{#1}}

\expanded
  {\long\noexpand\def\csname\e!start\e!instellingen\endcsname##1 ##2\csname\e!stop\e!instellingen\endcsname%
     {\noexpand\long\noexpand\setvalue{\??su##1}{##2}}}

\long\def\startsetups#1 #2\stopsetups% for international purposes
  {\long\setvalue{\??su#1}{#2}}

\def\dodosetups#1%
  {\getvalue{\??su#1}}

\def\dosetups[#1]%
  {\iffirstargument
     \dodosetups{#1}%
   \else
     \expandafter\dodosetups
   \fi}

\def\setups%
  {\dosingleargument\dosetups}

\newif\ifvoorlopig
\voorlopigfalse

\newif\ifconcept
\conceptfalse

\def\infofont%
  {\getvalue{7pttttf}}

\edef\utilityversion{1998.07.07} % was: 1996.03.15  % status variables
\edef\utilityversion{1998.12.20} % was: 1998.07.07  % index attributes

\def\doplaatsversieaanduiding#1#2%
  {\doifsomething{#2}
     {\@EA\convertargument#2\to\ascii
      \ #1: \ascii\
      \!!doneatrue}}

\def\plaatsversieaanduiding% nog engels maken
  {\ifvoorlopig
     \vskip\!!sixpoint
     \hbox to \zetbreedte
       {\infofont
        \getmessage\m!systems{27}: \currentdate\
        \doplaatsversieaanduiding{Project}\currentproject
        \doplaatsversieaanduiding{Produkt}\currentproduct
        \doplaatsversieaanduiding{Onderdeel}\currentcomponent
        \if!!donea\else\ File: \jobname\fi
        \hss\reportpagedimensions}%
   \fi
   \ifconcept
     \vskip\!!sixpoint
     \hbox to \zetbreedte
       {\infofont
        Concept: \currentdate
        \hss\reportpagedimensions}%
   \fi}

% tot hier

\def\doversie[#1]%
  {\voorlopigfalse
   \conceptfalse
   \overfullrule=\!!zeropoint
   \processaction
     [#1]
     [\v!voorlopig=>\voorlopigtrue
                    \overfullrule=5pt,
        \v!concept=>\concepttrue]}

\def\versie%
  {\dosingleargument\doversie}

% this will be inserts some day

\newbox\referentieinfobox
\newbox\registerinfobox
\newbox\floatinfobox

\def\dotestinfo#1#2#3%
  {\ifvoorlopig\ifinpagebody\else
     \begingroup
       \convertargument#3\to\ascii
       \xdef\extratestinfo%
         {#2 \ascii}%
       \gdef\totaltestinfo%
         {\global\setbox#1=\vbox
            {\unvbox#1\relax
             \hbox
               {\infofont
                \strut
                \expandafter\doboundtext\expandafter
                   {\extratestinfo}
                   {12em}
                   {..}%
                \quad}}}%
     \endgroup
     \ifinner
       \aftergroup\totaltestinfo
     \else
       \totaltestinfo
     \fi
   \fi\fi}

\def\referentieinfo%
 {\dotestinfo\referentieinfobox}

\def\registerinfo%
 {\dotestinfo\registerinfobox}

\def\floatinfo%
 {\dotestinfo\floatinfobox}

\def\plaatstestinfo%
  {\setbox0=\vbox to \teksthoogte
     {\forgetall
      \infofont
      \hsize10em
      \ifvoid\floatinfobox\else
        \strut \getmessage\m!systems{24}
        \vskip\!!sixpoint
        \unvbox\floatinfobox
        \vskip\!!twelvepoint
      \fi
      \ifvoid\referentieinfobox\else
        \strut \getmessage\m!systems{25}
        \vskip\!!sixpoint
        \unvbox\referentieinfobox
        \vskip\!!twelvepoint
      \fi
      \ifvoid\registerinfobox\else
        \strut \getmessage\m!systems{26}
        \vskip\!!sixpoint
        \unvbox\registerinfobox
      \fi
      \vss}%
   \wd0=\!!zeropoint
   \box0\relax}

%I n=Commando's
%I c=\definieer,\naam
%I c=\gebruikcommandos
%I
%I Het is mogelijk eigen commando's te definieren met behulp
%I van het commando:
%I
%I   \definieer[aantal argumenten]\commando{betekenis}
%I
%I Een argument kan worden opgeroepen door een # gevolgd
%I een nummer, bijvoorbeeld #2.
%I
%I   \definieer\test{ziezo}                  \ziezo
%I   \definieer[1]\test{ziezo #1}            \ziezo{}
%I   \definieer[2]\test{ziezo #1 en #2}      \ziezo{}{}
%P
%I In commandonamen mogen alleen karakters voorkomen. Mocht
%I onverhoopt een cijfer nodig zijn, dan kunnen dergelijke
%I commando's worden opgeroepen met:
%I
%I   \naam{}
%I
%I In een aantal gevallen, bijvoorbeeld bij het wegschrijven
%I naar lijsten, worden commando's \noexpand-ed. Dit is
%I bijvoorbeeld het geval bij synoniemen en sorteren, als
%I het criterium ongelijk is aan 'alles'. Dergelijke (zelf)
%I gedefinieerde commando's dienen eerst te worden
%I geactiveerd met :
%I
%I   \gebruikcommandos{\commando}
%I
%I Er mogen meerdere commando's tegelijk worden opgegeven:
%I
%I   \gebruikcommandos{\alfa,\beta,gamma}
%I
%I waarbij de \ facultatief is. Er wordt niets gezet!

% \docommando kan niet worden gebruikt omdat deze macro
%  soms lokaal wordt gebruikt

% te zijner tijd:
%
% \definevariable {pc}  % ProtectedCommand
%
% \def\executeprotected#1%
%   {\csname\??pc\string#1\endcsname}
%
% \def\defineprotected#1#2%
%   {\expandafter\def\csname\??pc\string#2\endcsname}
%
% \def\defineunprotected#1%
%   {\def#1}
%
% \def\doprotected%
%   {\ifx\next\define
%      \let\next=\defineprotected
%    \else
%      \let\next=\executeprotected
%    \fi
%    \next}
%
% \def\unexpanded%
%   {\futurelet\next\doprotected}
%
% \unexpanded\define\ziezo{ziezo}
%
% \unexpanded\ziezo

\def\complexdefinieer[#1]#2#3%
  {\ifx#2\undefined
   \else
     \showmessage{\m!systems}{4}{\string#2}%
   \fi
   \ifcase0#1\def#2{#3}%
   \or\def#2##1{#3}%
   \or\def#2##1##2{#3}%
   \or\def#2##1##2##3{#3}%
   \or\def#2##1##2##3##4{#3}%
   \or\def#2##1##2##3##4##5{#3}%
   \or\def#2##1##2##3##4##5##6{#3}%
   \or\def#2##1##2##3##4##5##6##7{#3}%
   \or\def#2##1##2##3##4##5##6##7##8{#3}%
   \or\def#2##1##2##3##4##5##6##7##8##9{#3}%
   \else\def#2{#3}%
   \fi}

\definecomplexorsimpleempty\definieer

\unexpanded\def\naam#1%
  {\getvalue{#1}}

\def\gebruikcommandos#1%
  {\bgroup
   \def\docommando##1%
     {\setbox0=\hbox{\getvalue{\string##1}##1}}%
   \processcommalist[#1]\docommando
   \egroup}

%I n=Groeperen
%I c=\start,\definieerstartstop
%I
%I Met behulp van de volgende commando's kan de werking van
%I andere commando's worden beperkt:
%I
%I   \start[label]
%I   \stop[label]
%I
%I Men is vrij in de keuze van het commentaar. Het gebruik
%I van deze commando's komt overeen met het gebruiken van {}.
%P
%I Er kunnen \start-\stop-paren worden gedefinieerd en
%I ingesteld met:
%I
%I   \definieerstartstop[label][voor=,na=,commandos=,
%I     letter=]
%I
%I De aan 'voor' en 'na' toegekende commando's worden voor
%I \start en na \stop uitgevoerd; de aan 'commando'
%I toegekende commando's direct na \start.
%I
%I Naast het \start-\stop-paar is ook het verkorte commando
%I beschikbaar:
%I
%I   \label{tekst}

\def\complexstart[#1]{\bgroup\getvalue{\e!start#1}}
\def\complexstop [#1]{\getvalue{\e!stop #1}\egroup}

\def\simplestart{\bgroup}
\def\simplestop {\egroup}

\definecomplexorsimple\start
\definecomplexorsimple\stop

\def\dodefinieerstartstop[#1][#2]%
  {\getparameters
     [\??be#1]
     [\c!voor=,
      \c!na=,
      \c!commandos=,
      \c!letter=,
      #2]%
%   \setvalue{\e!stel#1\e!in}[##1]%
%     {\dodoubleargument\getparameters[\??be##1]}%
   \unexpanded\setvalue{#1}%
     {\groupedcommand
        {\getvalue{\??be#1\c!commandos}%
         \dostartattributes{\??be#1}\c!letter\c!kleur}
        {\dostopattributes}}%
   \setvalue{\e!start#1}%
     {\getvalue{\??be#1\c!voor}%
      \bgroup
      \getvalue{\??be#1\c!commandos}%
      \dostartattributes{\??be#1}\c!letter\c!kleur{}}%
   \setvalue{\e!stop#1}%
     {\dostopattributes
      \egroup
      \getvalue{\??be#1\c!na}}}

\def\definieerstartstop%
  {\dodoubleargument\dodefinieerstartstop}

\def\stelstartstopin[#1]%
  {\dodoubleargument\getparameters[\??be#1]}

% gejat van Knuth (zie \copyright, p356)

\def\omcirkeld#1%
  {{\ooalign{\hfil\raise0.07ex\hbox{{\tfx#1}}\hfil\crcr\mathhexbox20D}}}

\def\copyright
  {\omcirkeld{c}}

%I n=Systeem
%I c=\stelsysteemin
%I
%I Systeemvariabelen kunnen worden ingesteld met het
%I commando:
%I
%I   \stelsysteemin[resolutie=,korps=]
%I
%I Aan 'resolutie' dient het aantal dpi (300).

\def\dosetupsystem[#1]%
  {\getparameters[\??sv][#1]%
   \setuprandomize[\@@svwillekeur]%
   \beforesplitstring\@@svresolutie\at dpi\to\@@svresolutie
   \let\outputresolution=\@@svresolutie}

\def\setupsystem%
  {\dosingleargument\dosetupsystem}

\def\setuprandomize[#1]%
  {\doifsomething{#1}
     {\bgroup
      \setrandomseed{-1}%
      \processaction
        [#1]
        [  \v!klein=>\divide\time  900, % 15   taco vragen hoe
          \v!middel=>\divide\time 1800, % 30   time werkt; nodig voor 
           \v!groot=>\divide\time 3600, % 60   random pos deadlock
         \v!normaal=>,
         \s!default=>,
         \s!unknown=>\time=#1]%    
      \nextrandom   
      \egroup}}

% Default-instellingen (verborgen)

\resetutilities

% Uitgestelde instellingen

\def\dooutput{\sidefloatoutput}           % redefinition of \dooutput

% Default-instellingen (zichtbaar)

\setupsystem
  [\c!gebied=,
   \c!resolutie=300dpi,
   \c!willekeur=,
   \c!korps=\normalizedlocalbodyfontsize] % of iets anders

% Pas op:
%
% Omdat er geen fonts geladen zijn kunnen we bij de maten geen
% em's gebruiken. Bij afstanden is dit geen probleem, omdat
% deze pas een rol spelen als er al een font geladen is.

\stellayoutin
  [             \c!kopwit=.08417508418\papierhoogte,  % .08333  2.5cm
                %\c!boven=.03367003367\papierhoogte,  % .03331  1.0cm
                 \c!boven=\!!zeropoint,
          \c!bovenafstand=\!!zeropoint,
                 \c!hoofd=.06734006734\papierhoogte,  % .06667  2.0cm
          \c!hoofdafstand=\!!zeropoint,
                \c!hoogte=.84175084175\papierhoogte,  % .83333 25.0cm
           \c!voetafstand=\@@lyhoofdafstand,
                  \c!voet=.06734006734\papierhoogte,  % .06667  2.0cm
          \c!onderafstand=\@@lybovenafstand,
                 \c!onder=\!!zeropoint,
                \c!rugwit=.11904761905\papierbreedte, %         2.5cm
                 %\c!rand=.14285714286\papierbreedte, %         3.0cm
                  \c!rand=\!!zeropoint,
           \c!randafstand=\@@lymargeafstand,
                %\c!marge=\@@lyrugwit,
                %\c!marge=.07888078409\papierbreedte, % rugwit-2*afstand
                 \c!marge=.12649983170\papierbreedte, % snijwit-2*afstand
          \c!margeafstand=.02008341748\papierbreedte, %        12.0pt
            \c!linkerrand=\@@lyrand,
     \c!linkerrandafstand=\@@lyrandafstand,
           \c!linkermarge=\@@lymarge,
    \c!linkermargeafstand=\@@lymargeafstand,
               \c!breedte=.71428571429\papierbreedte, %        15.0cm
   \c!rechtermargeafstand=\@@lymargeafstand,
          \c!rechtermarge=\@@lymarge,
    \c!rechterrandafstand=\@@lyrandafstand,
           \c!rechterrand=\@@lyrand,
             \c!kopoffset=\!!zeropoint,
             \c!rugoffset=\!!zeropoint,
                \c!letter=,
             \c!markering=\v!uit,
                \c!plaats=\v!enkelzijdig,
                \c!schaal=1,
                    \c!nx=1,
                    \c!ny=1,
                    \c!dx=\!!zeropoint,
                    \c!dy=\!!zeropoint,
                  \c!grid=\v!nee,
                \c!regels=]

% instellingen hierop terugvallen, bijvoorbeeld de volgende:

\definieerpapierformaat [A0] [\c!breedte=841mm, \c!hoogte=1189mm]
\definieerpapierformaat [A1] [\c!breedte=594mm, \c!hoogte=841mm]
\definieerpapierformaat [A2] [\c!breedte=420mm, \c!hoogte=594mm]
\definieerpapierformaat [A3] [\c!breedte=297mm, \c!hoogte=420mm]
\definieerpapierformaat [A4] [\c!breedte=210mm, \c!hoogte=297mm]
\definieerpapierformaat [A5] [\c!breedte=148mm, \c!hoogte=210mm]
\definieerpapierformaat [A6] [\c!breedte=105mm, \c!hoogte=148mm]
\definieerpapierformaat [A7] [\c!breedte=74mm,  \c!hoogte=105mm]
\definieerpapierformaat [A8] [\c!breedte=52mm,  \c!hoogte=74mm]
\definieerpapierformaat [A9] [\c!breedte=37mm,  \c!hoogte=52mm]

\definieerpapierformaat [B0] [\c!breedte=1000mm,\c!hoogte=1414mm]
\definieerpapierformaat [B1] [\c!breedte=707mm, \c!hoogte=1000mm]
\definieerpapierformaat [B2] [\c!breedte=500mm, \c!hoogte=707mm]
\definieerpapierformaat [B3] [\c!breedte=354mm, \c!hoogte=500mm]
\definieerpapierformaat [B4] [\c!breedte=250mm, \c!hoogte=354mm]
\definieerpapierformaat [B5] [\c!breedte=177mm, \c!hoogte=250mm]
\definieerpapierformaat [B6] [\c!breedte=125mm, \c!hoogte=177mm]
\definieerpapierformaat [B7] [\c!breedte=88mm,  \c!hoogte=125mm]
\definieerpapierformaat [B8] [\c!breedte=63mm,  \c!hoogte=88mm]
\definieerpapierformaat [B9] [\c!breedte=44mm,  \c!hoogte=63mm]

\definieerpapierformaat [C0] [\c!breedte=917mm, \c!hoogte=1297mm]
\definieerpapierformaat [C1] [\c!breedte=649mm, \c!hoogte=917mm]
\definieerpapierformaat [C2] [\c!breedte=459mm, \c!hoogte=649mm]
\definieerpapierformaat [C3] [\c!breedte=324mm, \c!hoogte=459mm]
\definieerpapierformaat [C4] [\c!breedte=229mm, \c!hoogte=324mm]
\definieerpapierformaat [C5] [\c!breedte=162mm, \c!hoogte=229mm]
\definieerpapierformaat [C6] [\c!breedte=115mm, \c!hoogte=162mm]
\definieerpapierformaat [C7] [\c!breedte=81mm,  \c!hoogte=115mm]
\definieerpapierformaat [C8] [\c!breedte=57mm,  \c!hoogte=81mm]
\definieerpapierformaat [C9] [\c!breedte=40mm,  \c!hoogte=57mm]

\definieerpapierformaat [S3] [\c!breedte=300pt, \c!hoogte=225pt]
\definieerpapierformaat [S4] [\c!breedte=400pt, \c!hoogte=300pt]
\definieerpapierformaat [S5] [\c!breedte=500pt, \c!hoogte=375pt]
\definieerpapierformaat [S6] [\c!breedte=600pt, \c!hoogte=450pt]

\definieerpapierformaat [CD] [\c!breedte=120mm, \c!hoogte=120mm]

\definieerpapierformaat [letter]    [\c!breedte=8.5in,  \c!hoogte=11in]
\definieerpapierformaat [legal]     [\c!breedte=8.5in,  \c!hoogte=14in]
\definieerpapierformaat [folio]     [\c!breedte=8.5in,  \c!hoogte=13in]
\definieerpapierformaat [executive] [\c!breedte=7.25in, \c!hoogte=10.5in]

\definieerpapierformaat [envelope 9]  [\c!breedte=8.88in, \c!hoogte=3.88in]
\definieerpapierformaat [envelope 10] [\c!breedte=9.5in,  \c!hoogte=4.13in]
\definieerpapierformaat [envelope 11] [\c!breedte=10.38in,\c!hoogte=4.5in]
\definieerpapierformaat [envelope 12] [\c!breedte=11.0in, \c!hoogte=4.75in]
\definieerpapierformaat [envelope 14] [\c!breedte=11.5in, \c!hoogte=5.0in]
\definieerpapierformaat [monarch]     [\c!breedte=7.5in,  \c!hoogte=3.88in]
\definieerpapierformaat [check]       [\c!breedte=8.58in, \c!hoogte=3.88in]
\definieerpapierformaat [DL]          [\c!breedte=220mm,  \c!hoogte=110mm]

% Let op: na \stellayoutin (omdat dit wordt aangeroepen).

\stelpapierformaatin
  [A4][A4]

\stelpapierformaatin
  [\c!boven=,
   \c!onder=\vss,
   \c!links=,
   \c!rechts=\hss]

\stelinterliniein
  [\c!hoogte=.72,
   \c!diepte=.28,
   \c!boven=1.0,
   \c!onder=0.4,
   \c!regel=2.8ex]

\stelkolommenin
  [\c!n=2,
   \c!commando=,
   \c!richting=\v!rechts,
   \c!lijn=\v!uit,
   \c!tolerantie=\v!soepel,
   \c!afstand=1.5\korpsgrootte, % influenced by switching
   \c!hoogte=,
   \c!balanceren=\v!ja,
   \c!uitlijnen=\v!tekst,
   \c!blanko={\v!regel,\v!vast},
   \c!optie=,
   \c!lijndikte=\linewidth,
   \c!offset=.5\korpsgrootte]

\stelhoofdtekstenin [\v!tekst] [] []
\stelhoofdtekstenin [\v!marge] [] []
\stelhoofdtekstenin [\v!rand]  [] []

\stelvoettekstenin  [\v!tekst] [] []
\stelvoettekstenin  [\v!marge] [] []
\stelvoettekstenin  [\v!rand]  [] []

\stelteksttekstenin [\v!tekst] [] []
\stelteksttekstenin [\v!marge] [] []
\stelteksttekstenin [\v!rand]  [] []

\stelondertekstenin [\v!tekst] [] []
\stelondertekstenin [\v!marge] [] []
\stelondertekstenin [\v!rand]  [] []

\stelboventekstenin [\v!tekst] [] []
\stelboventekstenin [\v!marge] [] []
\stelboventekstenin [\v!rand]  [] []

\stelhoofdin [\c!status=\v!normaal,\c!voor=,\c!na=]
\stelvoetin  [\c!status=\v!normaal,\c!voor=,\c!na=]
\steltekstin [\c!status=\v!normaal,\c!voor=,\c!na=]
\stelbovenin [\c!status=\v!normaal,\c!voor=,\c!na=]
\stelonderin [\c!status=\v!normaal,\c!voor=,\c!na=]

\stelhoofdin              [\c!na=\vss]
\steltekstin [\c!voor=\vss,\c!na=\vss]
\stelvoetin  [\c!voor=\vss]

\stelbovenin [\c!voor=\vss,\c!na=\vss]
\stelonderin [\c!voor=\vss,\c!na=\vss]

\stelhoofdin
  [\v!tekst]
  [\c!strut=\v!ja,
   \c!letter=,
   \c!kleur=,
   \c!linkertekst=,
   \c!middentekst=,
   \c!rechtertekst=,
   \c!kantlijntekst=,
   \c!margetekst=,
   \c!linkerletter=\getvalue{\??tk\v!hoofd\v!tekst\c!letter},
   \c!rechterletter=\getvalue{\??tk\v!hoofd\v!tekst\c!letter},
   \c!linkerkleur=\getvalue{\??tk\v!hoofd\v!tekst\c!kleur},
   \c!rechterkleur=\getvalue{\??tk\v!hoofd\v!tekst\c!kleur},
   \c!breedte=,
   \c!linkerbreedte=\getvalue{\??tk\v!hoofd\v!tekst\c!breedte},
   \c!rechterbreedte=\getvalue{\??tk\v!hoofd\v!tekst\c!breedte}]

\stelhoofdin
  [\v!marge]
  [\c!letter=,
   \c!kleur=,
   \c!linkertekst=,
   \c!middentekst=,
   \c!rechtertekst=,
   \c!kantlijntekst=,
   \c!margetekst=,
   \c!linkerletter=\getvalue{\??tk\v!hoofd\v!marge\c!letter},
   \c!rechterletter=\getvalue{\??tk\v!hoofd\v!marge\c!letter},
   \c!linkerkleur=\getvalue{\??tk\v!hoofd\v!marge\c!kleur},
   \c!rechterkleur=\getvalue{\??tk\v!hoofd\v!marge\c!kleur},
   \c!breedte=,
   \c!linkerbreedte=\getvalue{\??tk\v!hoofd\v!marge\c!breedte},
   \c!rechterbreedte=\getvalue{\??tk\v!hoofd\v!marge\c!breedte}]

\stelhoofdin
  [\v!rand]
  [\c!letter=,
   \c!kleur=,
   \c!linkertekst=,
   \c!middentekst=,
   \c!rechtertekst=,
   \c!kantlijntekst=,
   \c!margetekst=,
   \c!linkerletter=\getvalue{\??tk\v!hoofd\v!rand\c!letter},
   \c!rechterletter=\getvalue{\??tk\v!hoofd\v!rand\c!letter},
   \c!linkerkleur=\getvalue{\??tk\v!hoofd\v!rand\c!kleur},
   \c!rechterkleur=\getvalue{\??tk\v!hoofd\v!rand\c!kleur},
   \c!breedte=,
   \c!linkerbreedte=\getvalue{\??tk\v!hoofd\v!rand\c!breedte},
   \c!rechterbreedte=\getvalue{\??tk\v!hoofd\v!rand\c!breedte}]

\stelvoetin
  [\v!tekst]
  [\c!strut=\v!ja,
   \c!letter=,
   \c!kleur=,
   \c!linkertekst=,
   \c!middentekst=,
   \c!rechtertekst=,
   \c!kantlijntekst=,
   \c!margetekst=,
   \c!linkerletter=\getvalue{\??tk\v!voet\v!tekst\c!letter},
   \c!rechterletter=\getvalue{\??tk\v!voet\v!tekst\c!letter},
   \c!linkerkleur=\getvalue{\??tk\v!voet\v!tekst\c!kleur},
   \c!rechterkleur=\getvalue{\??tk\v!voet\v!tekst\c!kleur},
   \c!breedte=,
   \c!linkerbreedte=\getvalue{\??tk\v!voet\v!tekst\c!breedte},
   \c!rechterbreedte=\getvalue{\??tk\v!voet\v!tekst\c!breedte}]

\stelvoetin
  [\v!marge]
  [\c!letter=,
   \c!kleur=,
   \c!linkertekst=,
   \c!middentekst=,
   \c!rechtertekst=,
   \c!kantlijntekst=,
   \c!margetekst=,
   \c!linkerletter=\getvalue{\??tk\v!voet\v!marge\c!letter},
   \c!rechterletter=\getvalue{\??tk\v!voet\v!marge\c!letter},
   \c!linkerkleur=\getvalue{\??tk\v!voet\v!marge\c!kleur},
   \c!rechterkleur=\getvalue{\??tk\v!voet\v!marge\c!kleur},
   \c!breedte=,
   \c!linkerbreedte=\getvalue{\??tk\v!voet\v!marge\c!breedte},
   \c!rechterbreedte=\getvalue{\??tk\v!voet\v!marge\c!breedte}]

\stelvoetin
  [\v!rand]
  [\c!letter=,
   \c!kleur=,
   \c!linkertekst=,
   \c!middentekst=,
   \c!rechtertekst=,
   \c!kantlijntekst=,
   \c!margetekst=,
   \c!linkerletter=\getvalue{\??tk\v!voet\v!rand\c!letter},
   \c!rechterletter=\getvalue{\??tk\v!voet\v!rand\c!letter},
   \c!linkerkleur=\getvalue{\??tk\v!voet\v!rand\c!kleur},
   \c!rechterkleur=\getvalue{\??tk\v!voet\v!rand\c!kleur},
   \c!breedte=,
   \c!linkerbreedte=\getvalue{\??tk\v!voet\v!rand\c!breedte},
   \c!rechterbreedte=\getvalue{\??tk\v!voet\v!rand\c!breedte}]

\stelbovenin
  [\v!tekst]
  [\c!letter=,
   \c!kleur=,
   \c!linkertekst=,
   \c!middentekst=,
   \c!rechtertekst=,
   \c!kantlijntekst=,
   \c!margetekst=,
   \c!linkerletter=\getvalue{\??tk\v!boven\v!tekst\c!letter},
   \c!rechterletter=\getvalue{\??tk\v!boven\v!tekst\c!letter},
   \c!linkerkleur=\getvalue{\??tk\v!boven\v!tekst\c!kleur},
   \c!rechterkleur=\getvalue{\??tk\v!boven\v!tekst\c!kleur},
   \c!breedte=,
   \c!linkerbreedte=\getvalue{\??tk\v!boven\v!tekst\c!breedte},
   \c!rechterbreedte=\getvalue{\??tk\v!boven\v!tekst\c!breedte}]

\stelbovenin
  [\v!marge]
  [\c!letter=,
   \c!kleur=,
   \c!linkertekst=,
   \c!middentekst=,
   \c!rechtertekst=,
   \c!kantlijntekst=,
   \c!margetekst=,
   \c!linkerletter=\getvalue{\??tk\v!boven\v!marge\c!letter},
   \c!rechterletter=\getvalue{\??tk\v!boven\v!marge\c!letter},
   \c!linkerkleur=\getvalue{\??tk\v!boven\v!marge\c!kleur},
   \c!rechterkleur=\getvalue{\??tk\v!boven\v!marge\c!kleur},
   \c!breedte=,
   \c!linkerbreedte=\getvalue{\??tk\v!boven\v!marge\c!breedte},
   \c!rechterbreedte=\getvalue{\??tk\v!boven\v!marge\c!breedte}]

\stelbovenin
  [\v!rand]
  [\c!letter=,
   \c!kleur=,
   \c!linkertekst=,
   \c!middentekst=,
   \c!rechtertekst=,
   \c!kantlijntekst=,
   \c!margetekst=,
   \c!linkerletter=\getvalue{\??tk\v!boven\v!rand\c!letter},
   \c!rechterletter=\getvalue{\??tk\v!boven\v!rand\c!letter},
   \c!linkerkleur=\getvalue{\??tk\v!boven\v!rand\c!kleur},
   \c!rechterkleur=\getvalue{\??tk\v!boven\v!rand\c!kleur},
   \c!breedte=,
   \c!linkerbreedte=\getvalue{\??tk\v!boven\v!rand\c!breedte},
   \c!rechterbreedte=\getvalue{\??tk\v!boven\v!rand\c!breedte}]

\stelonderin
  [\v!tekst]
  [\c!letter=,
   \c!kleur=,
   \c!linkertekst=,
   \c!middentekst=,
   \c!rechtertekst=,
   \c!kantlijntekst=,
   \c!margetekst=,
   \c!linkerletter=\getvalue{\??tk\v!onder\v!rand\c!letter},
   \c!rechterletter=\getvalue{\??tk\v!onder\v!rand\c!letter},
   \c!linkerkleur=\getvalue{\??tk\v!onder\v!rand\c!kleur},
   \c!rechterkleur=\getvalue{\??tk\v!onder\v!rand\c!kleur},
   \c!breedte=,
   \c!linkerbreedte=\getvalue{\??tk\v!onder\v!rand\c!breedte},
   \c!rechterbreedte=\getvalue{\??tk\v!onder\v!rand\c!breedte}]

\stelonderin
  [\v!marge]
  [\c!letter=,
   \c!kleur=,
   \c!linkertekst=,
   \c!middentekst=,
   \c!rechtertekst=,
   \c!kantlijntekst=,
   \c!margetekst=,
   \c!linkerletter=\getvalue{\??tk\v!onder\v!marge\c!letter},
   \c!rechterletter=\getvalue{\??tk\v!onder\v!marge\c!letter},
   \c!linkerkleur=\getvalue{\??tk\v!onder\v!marge\c!kleur},
   \c!rechterkleur=\getvalue{\??tk\v!onder\v!marge\c!kleur},
   \c!breedte=,
   \c!linkerbreedte=\getvalue{\??tk\v!onder\v!marge\c!breedte},
   \c!rechterbreedte=\getvalue{\??tk\v!onder\v!marge\c!breedte}]

\stelonderin
  [\v!rand]
  [\c!letter=,
   \c!kleur=,
   \c!linkertekst=,
   \c!middentekst=,
   \c!rechtertekst=,
   \c!kantlijntekst=,
   \c!margetekst=,
   \c!linkerletter=\getvalue{\??tk\v!onder\v!rand\c!letter},
   \c!rechterletter=\getvalue{\??tk\v!onder\v!rand\c!letter},
   \c!linkerkleur=\getvalue{\??tk\v!onder\v!rand\c!kleur},
   \c!rechterkleur=\getvalue{\??tk\v!onder\v!rand\c!kleur},
   \c!breedte=,
   \c!linkerbreedte=\getvalue{\??tk\v!onder\v!rand\c!breedte},
   \c!rechterbreedte=\getvalue{\??tk\v!onder\v!rand\c!breedte}]

\steltekstin
  [\v!tekst]
  [\c!letter=,
   \c!kleur=,
   \c!linkertekst=,
   \c!middentekst=,
   \c!rechtertekst=,
   \c!kantlijntekst=,
   \c!margetekst=,
   \c!linkerletter=\getvalue{\??tk\v!tekst\v!tekst\c!letter},
   \c!rechterletter=\getvalue{\??tk\v!tekst\v!tekst\c!letter},
   \c!linkerkleur=\getvalue{\??tk\v!tekst\v!tekst\c!kleur},
   \c!rechterkleur=\getvalue{\??tk\v!tekst\v!tekst\c!kleur},
   \c!breedte=,
   \c!linkerbreedte=\getvalue{\??tk\v!tekst\v!tekst\c!breedte},
   \c!rechterbreedte=\getvalue{\??tk\v!tekst\v!tekst\c!breedte}]

\steltekstin
  [\v!marge]
  [\c!letter=,
   \c!kleur=,
   \c!linkertekst=,
   \c!middentekst=,
   \c!rechtertekst=,
   \c!kantlijntekst=,
   \c!margetekst=,
   \c!linkerletter=\getvalue{\??tk\v!tekst\v!marge\c!letter},
   \c!rechterletter=\getvalue{\??tk\v!tekst\v!marge\c!letter},
   \c!linkerkleur=\getvalue{\??tk\v!tekst\v!marge\c!kleur},
   \c!rechterkleur=\getvalue{\??tk\v!tekst\v!marge\c!kleur},
   \c!breedte=,
   \c!linkerbreedte=\getvalue{\??tk\v!tekst\v!marge\c!breedte},
   \c!rechterbreedte=\getvalue{\??tk\v!tekst\v!marge\c!breedte}]

\steltekstin
  [\v!rand]
  [\c!letter=,
   \c!kleur=,
   \c!linkertekst=,
   \c!middentekst=,
   \c!rechtertekst=,
   \c!kantlijntekst=,
   \c!margetekst=,
   \c!linkerletter=\getvalue{\??tk\v!tekst\v!rand\c!letter},
   \c!rechterletter=\getvalue{\??tk\v!tekst\v!rand\c!letter},
   \c!linkerkleur=\getvalue{\??tk\v!tekst\v!rand\c!kleur},
   \c!rechterkleur=\getvalue{\??tk\v!tekst\v!rand\c!kleur},
   \c!breedte=,
   \c!linkerbreedte=\getvalue{\??tk\v!tekst\v!rand\c!breedte},
   \c!rechterbreedte=\getvalue{\??tk\v!tekst\v!rand\c!breedte}]

\stelblankoin
  [\v!standaard,
   \v!groot]

\definieerblanko[\v!default] [\currentblanko]
\definieerblanko[\v!voor]    [\v!default]
\definieerblanko[\v!tussen]  [\v!default]
\definieerblanko[\v!na]      [\v!voor]

% doen?

\def\@@blankovoor  {\blanko[\v!voor]}   %
\def\@@blankotussen{\blanko[\v!tussen]} %  scheelt 5 tokens == >20 bytes
\def\@@blankona    {\blanko[\v!na]}     %

\stelblokkopjesin
  [\c!plaats=\v!onder,
   \c!voor=\blanko,
   \c!tussen={\blanko[\v!middel]},
   \c!na=\blanko,
   \c!breedte=\v!passend,
   \c!kopletter=\v!vet,
   \c!letter=\v!normaal,
   \c!kleur=,
   \c!uitlijnen=,
   \c!nummer=\v!ja,
   \c!wijze=\@@nrwijze,
   \c!blokwijze=\@@nrblokwijze,
   \c!sectienummer=\@@nrsectienummer,
   \c!conversie=\v!cijfers]

\stelplaatsblokkenin
  [\c!plaats=\v!midden,
   \c!breedte=\v!passend,
   \c!hoogte=\v!passend,
   \c!offset=\v!overlay,
   \c!kader=\v!uit,
   \c!straal=.5\korpsgrootte,
   \c!hoek=\v!recht,
   \c!achtergrond=,
   \c!achtergrondraster=\@@rsraster,
   \c!achtergrondkleur=,
   \c!achtergrondoffset=\!!zeropoint,
   \c!bovenkader=,
   \c!onderkader=,
   \c!linkerkader=,
   \c!rechterkader=,
   \c!kaderoffset=\!!zeropoint,
   \c!voor=,
   \c!na=,
   \c!voorwit=\v!groot,
   \c!nawit=\v!groot,
   \c!zijvoorwit=\@@bkvoorwit,
   \c!zijnawit=\@@bknawit,
   \c!marge=1em,
   \c!nboven=2,
   \c!nonder=0,
   \c!nregels=4]

\stelplaatsbloksplitsenin
  [\c!conversie=\v!letter, % \v!romeins
   \c!regels=3]

\stelwitruimtein
  [\v!geen]

\inspringen
  [\v!nooit]

\stelinspringenin
  [\v!geen]

\stelformulesin
  [\c!wijze=\@@nrwijze,
   \c!blokwijze=,
   \c!sectienummer=\@@nrsectienummer,
   \c!plaats=\v!rechts,
   \c!links=(,
   \c!rechts=)]

\stelreferentielijstin
  [\c!letter=\v!normaal]

\stelinmargein
  [\c!letter=\v!vet,
   \c!kleur=,
   \c!plaats=\v!beide,
   \c!uitlijnen=\v!binnen,
   \c!voor=,
   \c!na=]

\stelinmargein
  [\v!links]
  [\c!plaats=\v!links]
%  \c!uitlijnen=\v!links] % njet

\stelinmargein
  [\v!rechts]
  [\c!plaats=\v!rechts]
%  \c!uitlijnen=\v!rechts] % njet

\versie
  [\v!definitief]

\stelpaginanummerin
  [\c!nummer=1]

\stelsubpaginanummerin
  [\c!wijze=\v!per\v!deel,
   \c!status=\v!stop]

\stelsmallerin
  [\c!links=1.5em,
   \c!rechts=1.5em,
   \c!midden=1.5em]

\stelregelnummerenin
  [\c!conversie=\v!cijfers,
   \c!start=1,
   \c!stap=1,
   \c!plaats=\v!inmarge,
   \c!letter=,
   \c!kleur=,
   \c!breedte=2em,
   \c!prefix=,
   \c!refereren=\v!aan]

\definieeropmaak
  [\v!standaard]
  [\c!breedte=\zetbreedte,
   \c!hoogte=\teksthoogte,
   \c!voffset=\!!zeropoint,
   \c!hoffset=\!!zeropoint,
   \c!pagina=\v!rechts,
   \c!dubbelzijdig=\v!leeg]

\stelpositionerenin
  [\c!eenheid=\s!cm,
   \c!factor=1,
   \c!schaal=1,
   \c!xstap=\v!absoluut,
   \c!ystap=\v!absoluut,
   \c!offset=\v!ja,
   \c!xoffset=\!!zeropoint,
   \c!yoffset=\!!zeropoint]

\stelregelsin
  [\c!voor=\blanko,
   \c!na=\blanko,
   \c!tussen=\blanko,
   \c!inspringen=\v!nee]

\stelkoppeltekenin
  [\c!teken=\compoundhyphen]

\stelnaastplaatsenin
  [\c!status=\v!stop]

\steltolerantiein
  [\v!horizontaal,\v!zeerstreng]

\steltolerantiein
  [\v!vertikaal,\v!streng]

\steluitlijnenin
  [\v!onder,
   \v!breedte]

\stelspatieringin
  [\v!opelkaar]

\definieerplaatsblok
  [\v!figuur]
  [\v!figuren]

\definieerplaatsblok
  [\v!tabel]
  [\v!tabellen]

\stelplaatsblokin
  [\v!tabel]
  [\c!kader=\v!uit]

\definieerplaatsblok
  [\v!intermezzo]
  [\v!intermezzos]

\definieerplaatsblok
  [\v!grafiek]
  [\v!grafieken]

\stelmargeblokkenin
  [\c!status=\v!start,
   \c!plaats=\v!inmarge,
   \c!breedte=\rechtermargebreedte,
   \c!letter=,
   \c!kleur=,
   \c!uitlijnen=,
   \c!links=,
   \c!rechts=,
   \c!boven=,
   \c!tussen=\blanko,
   \c!onder=\vfill,
   \c!voor=,
   \c!na=]

\stelachtergrondenin
  [\c!status=\c!start]

\stelachtergrondenin
  [\v!papier,\v!pagina,\v!linkerpagina,\v!rechterpagina]
  [\c!kader=\v!uit,
   \c!straal=.5\korpsgrootte,
   \c!hoek=\v!recht,
   \c!achtergrond=,
   \c!raster=\@@rsraster,
   \c!kleur=,
   \c!kaderoffset=\getvalue{\??ma\v!pagina\c!offset},
   \c!achtergrondoffset=\getvalue{\??ma\v!pagina\c!offset},
   \c!offset=\!!zeropoint,
   \c!diepte=\!!zeropoint,
   \c!scheider=\v!nee]

\def\documentstyle%
  {\showmessage{\m!systems}{3}{}
   \stoptekst}

\protect \endinput
