\startonderdeel co-nl-21

\projekt manual
\produkt context

% hier ook aandacht voor \tbox, \bbox etc !!!!!!!!!! 

\hoofdstuk[positioneren]{Positioneren}
\index{positioneren}
\macro{\tex{positioneer}}
\macro{\tex{stelpositionerenin}}
\macro{\tex{startpositioneren}}

{\em nog niet herzien}

\stoponderdeel 

\paragraaf{Inleiding}

Hieronder worden enkele manieren besproken om teksten ten 
opzichte van elkaar te positioneren. Hoewel het meer voor de 
hand ligt schema's in daartoe ontworpen pakketten aan te 
maken, kunnen eenvoudige schema's beter met \TEX\ worden 
gemaakt. Er zijn overigens speciale macropakketten voor 
figuren beschikbaar, zoals \PICTEX, terwijl ook veel te 
bereiken is met tabellen.  

\paragraaf{Blokken stapelen}
\index{omlijnde blokken}

We kunnen \type{\omlijnd} gebruiken om teksten ten opzichte
van elkaar te positioneren. We maken daartoe gebruik van de
mogelijkheid het kader uit te zetten. In het voorbeeld
hieronder gebruiken we twee keer \type{\omlijnd} met het
kader uit om de blokjes in het midden te krijgen. 

\startbuffer[voorb-1]
\vbox
  {\omlijnd[breedte=2cm,hoogte=1.0cm,kader=aan]
     {\omlijnd[breedte=1.0cm,hoogte=1.0cm,kader=aan]{3}}
   \omlijnd[breedte=2cm,hoogte=1.5cm,kader=aan]
     {\omlijnd[breedte=1.5cm,hoogte=1.5cm,kader=aan]{2}}
   \omlijnd[breedte=2cm,hoogte=2cm,kader=aan]{1}}
\stopbuffer

\startbuffer[voorb-2]
\vbox
  {\omlijnd[breedte=2cm,hoogte=1.0cm,offset=geen,kader=aan]
     {\omlijnd[breedte=1.0cm,hoogte=1.0cm,kader=aan]{3}}
   \omlijnd[breedte=2cm,hoogte=1.5cm,offset=geen,kader=aan]
     {\omlijnd[breedte=1.5cm,hoogte=1.5cm,kader=aan]{2}}
   \omlijnd[breedte=2cm,hoogte=2cm,kader=aan]{1}}
\stopbuffer

\startbuffer[voorb-3]
\vbox
  {\omlijnd[breedte=2cm,hoogte=1.0cm,offset=geen,kader=uit]
     {\omlijnd[breedte=1.0cm,hoogte=1.0cm,kader=aan]{3}}%
   \omlijnd[breedte=2cm,hoogte=1.5cm,offset=geen,kader=uit]
     {\omlijnd[breedte=1.5cm,hoogte=1.5cm,kader=aan]{2}}%
   \omlijnd[breedte=2cm,hoogte=2cm,kader=aan]{1}}
\stopbuffer

\startbuffer[voorb-4]
\vbox
  {\omlijnd[breedte=2cm,hoogte=1.0cm,offset=overlay,kader=uit]
     {\omlijnd[breedte=1.0cm,hoogte=1.0cm,kader=aan]{3}}%
   \omlijnd[breedte=2cm,hoogte=1.5cm,offset=overlay,kader=uit]
     {\omlijnd[breedte=1.5cm,hoogte=1.5cm,kader=aan]{2}}%
   \omlijnd[breedte=2cm,hoogte=2cm,kader=aan]{1}}
\stopbuffer

\startbuffer[voorb-5]
\vbox
  {\omlijnd[breedte=2cm,hoogte=1.0cm,offset=overlay,kader=uit]
     {\leavevmode
      \omlijnd[breedte=1.0cm,hoogte=1.0cm,kader=aan]{3}}%
   \omlijnd[breedte=2cm,hoogte=1.5cm,offset=overlay,kader=uit]
     {\leavevmode
      \omlijnd[breedte=1.5cm,hoogte=1.5cm,kader=aan]{2}}%
   \omlijnd[breedte=2cm,hoogte=2cm,kader=aan]{1}}
\stopbuffer

\startbuffer[voorb-6]
\vbox
  {\offinterlineskip
   \omlijnd[breedte=2cm,hoogte=1.0cm,offset=overlay,kader=uit]
     {\leavevmode
      \omlijnd[breedte=1.0cm,hoogte=1.0cm,kader=aan]{3}}%
   \omlijnd[breedte=2cm,hoogte=1.5cm,offset=overlay,kader=uit]
     {\leavevmode
      \omlijnd[breedte=1.5cm,hoogte=1.5cm,kader=aan]{2}}%
   \omlijnd[breedte=2cm,hoogte=2cm,kader=aan]{1}}
\stopbuffer

\plaatsfiguur
  {Zes maal drie gestapelde blokken.}
  \startcombinatie[6]
    {\haalbuffer[voorb-1]} {}
    {\haalbuffer[voorb-2]} {}
    {\haalbuffer[voorb-3]} {}
    {\haalbuffer[voorb-4]} {}
    {\haalbuffer[voorb-5]} {}
    {\haalbuffer[voorb-6]} {}
  \stopcombinatie

We gebruiken een \type{\omlijnd} binnen een \type{\omlijnd}.
Dit heeft als voordeel dat we, zolang de kaders nog
zichtbaar zijn, we aardig inzicht hebben in het proces. Zo
zien we bij de eerste toren dat er standaard een
\type{\strut} wordt geplaatst. Bovendien is sprake van een
offset. 

\startvoorbeeld 
\typebuffer[voorb-1] 
\stopvoorbeeld 

In de tweede toren zijn zowel de offset als de \type{\strut} 
onderdrukt. Omdat er niet bewust wordt overgegaan in \TEX's 
horizontale mode, worden de binnenste blokken niet in het 
midden geplaatst. 

\startvoorbeeld 
\typebuffer[voorb-2] 
\stopvoorbeeld 

Bij de derde toren hebben we wat kaders weggelaten. We zien 
nu dat er tussen de torens wat witruimte zit, \TEX\ plaatst 
namelijk automatisch een \type{\lineskip}. Bovendien staan de
blokken niet exact boven elkaar, omdat er nog een denkbeeldig
kader omheen zit. 

\startvoorbeeld 
\typebuffer[voorb-3] 
\stopvoorbeeld 

We kunnen dit denkbeeldige kader verwijderen door aan
\type{\omlijnd} de instelling \type{offset=overlay} mee te 
geven. 

\startvoorbeeld 
\typebuffer[voorb-4] 
\stopvoorbeeld 

De verplaatsing naar het midden wordt gerealiseerd met
\type{\leavevmode}. Als we alleen tekst hebben, dan is dit
niet expliciet nodig, \type{\omlijnd} levert echter een
\type{\vbox}. 

\startvoorbeeld 
\typebuffer[voorb-5] 
\stopvoorbeeld 

Tot slot blokkeren we het plaatsen van \type{\lineskip} en 
krijgen de figuur zoals we die wensen. 

\startvoorbeeld 
\typebuffer[voorb-6] 
\stopvoorbeeld 

\startbuffer[voorb-1]
\def\blok#1{\omlijnd[breedte=3em]{\kap{#1}}}
\def\pijl#1{\omlijnd[breedte=3em,kader=uit]{$#1$}}

\def\linblok{\pijl{\longleftarrow}}    % Pijl naar links
\def\recblok{\pijl{\longrightarrow}}   % Pijl naar rechts
\def\omlblok{\pijl{\downarrow}}        % Pijl omlaag
\def\omhblok{\pijl{\uparrow}}          % Pijl omhoog

\def\leeblok{\pijl{}}                  % Leeg blok 

\def\lboblok{\blok{lto}}  % Lager Technisch Onderwijs
\def\mboblok{\blok{mto}}  % Middelbaar Technisch Onderwijs
\def\hboblok{\blok{hto}}  % Hoger Technisch Onderwijs
\def\wtoblok{\blok{wto}}  % Wetenschappelijk Technisch Onderwijs
\stopbuffer

\startbuffer[voorb-2]
\def\doorstroomschema%
  {\hbox{\lboblok\recblok\mboblok\recblok\hboblok\recblok\wtoblok}}
   
\def\instroomschema%
  {\hbox{\omlblok\leeblok\omlblok\leeblok\omlblok\leeblok\omlblok}%
   \blanko[middel]%
   \hbox{\lboblok\leeblok\mboblok\leeblok\hboblok\leeblok\wtoblok}%
   \blanko[middel]%
   \hbox{\omlblok\leeblok\omlblok\leeblok\omlblok\leeblok\omlblok}}

\def\stroomschema%
  {\hbox{\omlblok\leeblok\omlblok\leeblok\omlblok\leeblok\omlblok}%
   \blanko[middel]%
   \hbox{\lboblok\recblok\mboblok\recblok\hboblok\recblok\wtoblok}%
   \blanko[middel]%
   \hbox{\omlblok\leeblok\omlblok\leeblok\omlblok\leeblok\omlblok}}
\stopbuffer

\startbuffer[voorb-3]
\plaatsfiguur
  {Instroming in het technisch onderwijs.}
  {\instroomschema}

\plaatsfiguur
  {Doorstroming in het technisch onderwijs.}
  {\doorstroomschema}

\plaatsfiguur
  {In- en doorstroming in het technisch onderwijs.}
  {\stroomschema}
\stopbuffer

\startbuffer[voorb-4]
\plaatsfiguur
  {In- en doorstroming in het technisch onderwijs.}
  {\bgroup
   \stelomlijndin[breedte=3em]%
   \hbox
     {\omlijnd[kader=uit]{$\downarrow$}%
      \omlijnd[kader=uit]{}%
      \omlijnd[kader=uit]{$\downarrow$}%
      \omlijnd[kader=uit]{}%
      \omlijnd[kader=uit]{$\downarrow$}%
      \omlijnd[kader=uit]{}%
      \omlijnd[kader=uit]{$\downarrow$}}
   \blanko[middel]
   \hbox
     {\omlijnd[kader=aan]{\kap{lto}}%
      \omlijnd[kader=uit]{$\longrightarrow$}%
      \omlijnd[kader=aan]{\kap{mto}}%
      \omlijnd[kader=uit]{$\longrightarrow$}%
      \omlijnd[kader=aan]{\kap{hto}}%
      \omlijnd[kader=uit]{$\longrightarrow$}%
      \omlijnd[kader=aan]{\kap{wto}}}
   \blanko[middel]
   \hbox
     {\omlijnd[kader=uit]{$\downarrow$}%
      \omlijnd[kader=uit]{}%
      \omlijnd[kader=uit]{$\downarrow$}%
      \omlijnd[kader=uit]{}%
      \omlijnd[kader=uit]{$\downarrow$}%
      \omlijnd[kader=uit]{}%
      \omlijnd[kader=uit]{$\downarrow$}}
   \egroup}
\stopbuffer

Nu een wat ingewikkelder voorbeeld. Stel dat we een
doorstroomschema willen opstellen van opleidingen. We kunnen
dit schema in een keer defini\"eren, we kunnen het ook
stapsgewijs doen. In het eerste geval krijgen we een op zich
overzichtelijke, maar wel wat omvangrijke definitie. 

We stellen eerst de breedte in. Om te voorkomen dat deze
breedte voor de hele tekst geldt, gebruiken we \type{\bgroup}
en \type{\egroup}. Het procentteken voorkomt dat er 
ongewenste spaties worden gezet.

\startvoorbeeld
\typebuffer[voorb-4]
\stopvoorbeeld

In dit voorbeeld zorgt de \type{\hbox} ervoor dat de hokjes
naast elkaar komen te staan. Het inzicht in wat er precies
gebeurt, kan worden vergroot door \type{uit} te vervangen
door \type{aan}. 

Het verdient echter de voorkeur zo'n figuur stapsgewijs 
op te bouwen, niet in de laatste plaats omdat we dan de 
componenten ook elders kunnen gebruiken. Eerst defini\"eren 
we wat hulpmacro's:

\startvoorbeeld
\typebuffer[voorb-1]
\stopvoorbeeld

Vervolgens stellen we uit deze componenten wat grotere 
gehelen samen, die we later tot een of meer figuren 
combineren. 

\startvoorbeeld
\typebuffer[voorb-2]
\stopvoorbeeld

We hebben nu drie figuren tot onze beschikking die we als 
volgt kunnen oproepen:

\startvoorbeeld
\typebuffer[voorb-3]
\stopvoorbeeld

\start
\haalbuffer[voorb-1]
\haalbuffer[voorb-2]
\haalbuffer[voorb-3]
\stop

Als we slechts een laag nodig hebben, kunnen we ook uit de
voeten met het commando \type{\inlijnd}: 

\startbuffer
\hbox
  {\inlijnd{\kap{lto}}~$\longrightarrow$~%
   \inlijnd{\kap{mto}}~$\longrightarrow$~%
   \inlijnd{\kap{hto}}~$\longrightarrow$~%
   \inlijnd{\kap{wto}}}
\stopbuffer

\startvoorbeeld
\typebuffer
\stopvoorbeeld

Dit wordt:

\startregelcorrectie
\haalbuffer
\stopregelcorrectie

Als we figuren met lijnen in de tekst opnemen zonder gebruik
te maken van een \type{\plaats...}||commando, moeten we
gebruik maken van de volgende constructie: 

\startvoorbeeld
\starttypen
\startregelcorrectie
..... figuur .....
\stopregelcorrectie
\stoptypen
\stopvoorbeeld

\startbuffer
\def\pdskip{\hskip0.25cm}
\def\pdnext{\vskip0.25cm}

\def\pdblok#1#2#3{\omlijnd[breedte=#1,hoogte=#2]{#3}}        
\def\pdkapblok#1#2#3{\omlijnd[breedte=#1,hoogte=#2]{\kap{#3}}} 
\def\pdtopblok{\omlijnd[breedte=2.45cm,hoogte=ruim]{SIA}}
\def\pdblokgroot#1{\pdkapblok{6.50cm}{3.00cm}{#1}}
\def\pdblokmiddel#1{\pdkapblok{6.50cm}{2.00cm}{#1}}
\def\pdblokklein#1{\pdkapblok{6.50cm}{1.00cm}{#1}}
\def\pdbloksmalhoog#1{\pdkapblok{1.4375cm}{3.00cm}{#1}}
\def\pdbloksmallaag#1{\pdkapblok{1.4375cm}{1.50cm}{#1}}
\def\pdbloksmalvol#1{\pdblok{2.00cm}{3.5cm}{#1}}%
\def\pdblokbreed#1#2{\pdblok{13.25cm}{#1}{#2}}

\def\pdblokken%
  {\bgroup
   \switchnaarkorps[6pt]%
   \hbox{\herhaal[5*{\pdtopblok\pdskip}]}%
   \egroup}

\def\pdnuance#1%
  {\bgroup
   \switchnaarkorps[6pt]%
   \doifelse{#1}{}
     {\omlijnd
        [breedte=1.80cm,hoogte=ruim,offset=0pt,kader=uit]{}}
     {\omlijnd
        [breedte=1.80cm,hoogte=ruim,offset=0pt,kader=aan]{#1}}%
   \egroup}

\def\pdnuancekop#1%
  {\bgroup
   \switchnaarkorps[6pt]%
   \omlijnd
      [breedte=1.80cm,hoogte=ruim,offset=0pt,kader=uit]{\WOORD{#1}}%
   \egroup}

\def\pdnuances#1#2#3#4#5#6#7%
  {\bgroup
   \vbox
     {\hbox{\pdnuancekop{#1}}%
      \hbox{\pdnuance{#2}}%
      \stelinterliniein[0.8]%
      \hbox{\pdnuance{#3}}%
      \hbox{\pdnuance{#4}}%
      \hbox{\pdnuance{#5}}%
      \hbox{\pdnuance{#6}}%
      \hbox{\pdnuance{#7}}}%
   \egroup}

\def\pdschemaA%
  {\hbox
     {\pdblokklein{distributie}\pdskip\pdblokklein{produktie}}}

\def\pdschemaAA%
  {\hbox
     {\pdblokmiddel{produktie}\pdskip\pdblokmiddel{distributie}}}%

\def\pdschemaB%
  {\hbox
     {\pdbloksmallaag{win}\pdskip
      \pdbloksmallaag{zui}\pdskip
      \pdbloksmallaag{ont}\pdskip
      \pdbloksmallaag{exp}\pdskip
      \pdbloksmallaag{ont}\pdskip
      \pdbloksmallaag{uit}\pdskip
      \pdbloksmallaag{exp}\pdskip
      \pdbloksmallaag{ins}}}%

\def\pdschemaBB%
  {\hbox
     {\pdbloksmalvol{\pdnuances{winning}
         {proces}{management}{exploitatie}
         {ontwerp}{onderzoek}{realisatie}}%
      \pdskip
      \pdbloksmalvol{\pdnuances{zuivering}
         {proces}{management}{exploitatie}
         {ontwerp}{onderzoek}{realisatie}}%
      \pdskip
      \pdbloksmalvol{\pdnuances{berging}
         {proces}{management}{exploitatie}
         {ontwerp}{}{realisatie}}%
      \pdskip
      \pdbloksmalvol{\pdnuances{transport}
         {proces}{}{exploitatie}
         {ontwerp}{}{realisatie}}%
      \pdskip
      \pdbloksmalvol{\pdnuances{distributie}
         {proces}{management}{exploitatie}
         {ontwerp}{onderzoek}{realisatie}}%
      \pdskip
      \pdbloksmalvol{\pdnuances{installatie}
         {proces}{}{}
         {ontwerp}{onderzoek}{}}}}

\def\pdschemaC%
  {\start
     \pdblokken
     \vskip.125cm
     \pdblokken
     \vskip.125cm
     \pdblokken
   \stop}

\def\eerstepdschema%
  {\pdschemaB
   \pdnext
   \pdschemaAA
   \pdnext
   \pdschemaA}

\def\tweedepdschema%
  {\pdschemaC
   \pdnext
   \pdschemaBB
   \pdnext
   \pdschemaAA
   \pdnext
   \pdschemaA}

\plaatsfiguur
  [hier][fig:tweede schema]
  {Het eerste voorbeeldschema.}{\eerstepdschema}
\plaatsfiguur
  [hier][fig:eerste schema]
  {Het tweede voorbeeldschema.}{\tweedepdschema}
\stopbuffer

\haalbuffer

Dat er ook ingewikkelder figuren mogelijk zijn tonen we in
de \in{figuren}[fig:eerste schema] \in{en}[fig:tweede
schema]. Dergelijke schema's zijn als men eenmaal goed is
ingevoerd in \CONTEXT\ zonder veel problemen te realiseren.
We zullen de lezer de listing van dit figuur besparen en
sluiten af met een voorbeeld dat gebruik maakt van
argumenten. 

\startbuffer[voorb-1]
\def\fopleiding#1#2%   functie-opleiding
  {\omlijnd
     [breedte=#1,
      hoogte=6em,
      uitlijnen=midden,
      offset=0pt,
      boven=,
      onder=\vfill]
     {#2}}

\def\bopleiding#1#2%   basis-opleiding
  {\omlijnd
     [breedte=#1,
      hoogte=3em,
      uitlijnen=midden,
      boven=\vfil,
      onder=\vfil]
     {#2}}

\def\vopleiding#1#2%   vervolg-opleiding
  {\omlijnd
     [breedte=#1,
      hoogte=1.75em,
      strut=nee,
      uitlijnen=midden,
      achtergrond=raster,
      kader=uit,
      boven=\vfil,
      onder=\vfil]
     {#2}}
\stopbuffer

\startbuffer[voorb-2] 
\def\SWOopleidingen%
  {\bgroup
   \switchnaarkorps[9pt]
   \stelomlijndin[uitlijnen=midden,boven=\vfil,onder=\vfil]
   \hbox
     \bgroup
     \vbox
       \bgroup
       \offinterlineskip
       \hbox
         \bgroup
         \fopleiding{5em}{\tfx specialisatie\\winning}%
         \hskip.25em%
         \fopleiding{5em}{\tfx specialisatie\\zuivering}%
         \hskip.25em%
         \fopleiding{5em}{\tfx systeem-\\ontwerp\\produktie}%
         \hskip.25em%
         \fopleiding{5em}{\tfx technisch-\\ontwerp\\produktie}%
         \hskip.25em%
         \fopleiding{5em}{\tfx proces-\\voering\\installaties}%
         \egroup
       \vskip-2em
       \hbox to 26em
         {\hss
          \vopleiding{25.5em}{\tfx verdieping winning en zuivering}%
          \hss}%
       \vskip.25em
       \vskip.25em
       \bopleiding{26em}{\tfx basisopleiding produktie}%
       \egroup 
     \hskip.5em%
     \vbox
       \bgroup
       \hbox
         \bgroup
         \fopleiding{5em}{\tfx bedrijfs-\\voering}%
         \hskip.25em%
         \fopleiding{5em}{\tfx aanleg\\en\\beheer}%
         \hskip.25em%
         \fopleiding{5em}{\tfx ontwerp}%
         \hskip.25em%
         \fopleiding{5em}{\tfx controle\\en advies\\installaties}%
         \egroup
       \vskip.25em
       \bopleiding{20.75em}{\tfx basisopleiding distributie}%
       \egroup
     \egroup
   \egroup}
\stopbuffer

\startbuffer[voorb-3]
\plaatsfiguur
  {Het functiegerichte aanbod van \kap{SWO}.}
  {\SWOopleidingen}
\stopbuffer

Eerst defi\"eren we weer wat gemeenschappelijke elementen.
Deze macro's krijgen twee argumenten mee.

\startvoorbeeld
\typebuffer[voorb-1]
\stopvoorbeeld

Ook hier definieren we de totale figuur als macro. Dit is
niet nodig, we zouden ook gebruik kunnen maken van buffers
(zie \in{paragraaf}[buffers]). 

\startvoorbeeld
\typebuffer[voorb-2]
\stopvoorbeeld

De figuur wordt vervolgens op de gebruikelijke manier 
geplaatst:

\startvoorbeeld
\typebuffer[voorb-3]
\stopvoorbeeld

\start
\haalbuffer[voorb-1]
\haalbuffer[voorb-2]
\haalbuffer[voorb-3]
\haalbuffer[voorb-1]
\stop

Een en ander zou nog wat kunnen worden vereenvoudigd, zo is
bijvoorbeeld het eerste argument van \type{\fopleiding}
steeds hetzelfde. De bovenstaande aanpak maakt echter
differentiatie in breedte mogelijk. 

\paragraaf{Assenstelsel}
\index{assenstelsel}

Er is een eenvoudig positioneer||mechanisme beschikbaar 
waarmee men teksten kan positioneren. Het basiscommando is:

\toonsetup{positioneer}

Er wordt gewerkt binnen een denkbeeldig assenstelsel met
instelbare eenheden. Het is mogelijk te schalen en er kunnen
horizontale en vertikale schaalfactoren worden gebruikt. Er
kan relatief en absoluut worden gepositioneerd. Dit alles
wordt ingesteld met: 

\toonsetup{stelpositionerenin}

Een positie wordt in principe bepaald door de meegegeven
waarde te koppelen aan de eenheid. Als de eenheid \type{cm}
is, dan staat \type{10} voor \type{10cm}. Met een schaal van
0.1 wordt dit \type{1cm}. Als daarnaast de schaalfactor~5 is
krijgen we \type{5cm}. Standaard zijn de schaal en
schaalfactoren~1. 

Een positioneeropdracht heeft geen invloed op de huidige 
positie, zoals uit het onderstaande voorbeeld blijkt. 

\startbuffer
a \positioneer(1,0){A} a a a a a a a a a a a a a a a a a a a a a a 
a a a a a a a a a a a a a a a a a a a a a a a a a a a a a
\stopbuffer

\startvoorbeeld
\typebuffer
\stopvoorbeeld

Levert:

\startrealiteit
\haalbuffer
\stoprealiteit

Wil men een figuur samenstellen die wel degelijk 'ruimte' 
inneemt, dan moet men de positioneer||commando's omringen
met:

\toonsetup{startpositioneren} 

Hieronder is een voorbeeld gegeven van een met
positioneer||opdrachten samengestelde figuur. We gebruiken
het commando \type{\def}, omdat de figuur dan op een nette
manier op verschillende plaatsen in de tekst kan worden
opgeroepen. 

\startbuffer
\def\dobbelvijf%
  {\omlijnd
     [breedte=42pt,hoogte=42pt,offset=0pt]
     {\stelpositionerenin
        [eenheid=pt,factor=12,xoffset=-11pt,yoffset=-8pt]%  
      \startpositioneren
        \positioneer(1,1){$\bullet$}%
        \positioneer(1,3){$\bullet$}%
        \positioneer(2,2){$\bullet$}%
        \positioneer(3,1){$\bullet$}%
        \positioneer(3,3){$\bullet$}%
      \stoppositioneren}}

\plaatsfiguur{En dat is vijf.}{\dobbelvijf}
\stopbuffer

\haalbuffer

De door 'trial||and||error' vastgestelde verschuiving met
\type{xoffset} en \type{yoffset} is nodig, omdat de punten
eigenlijk karakters zijn. Binnen \type{\omlijnd} is de offset
\type{0pt}, omdat we plaatsen met \type{\positioneer} en geen
actieve bijdrage verwachten van \type{\omlijnd}. We stellen 
\type{factor=12}. Dat wil zeggen dat
\type{(1,3)} eigenlijk staat voor \type{(12,36)} of, rekening
houdend met de eenheid: \type{(12pt,36pt)}. 

\startvoorbeeld
\typebuffer
\stopvoorbeeld

Hieronder wordt \type{\positioneer} gebruikt in combinatie
met \type{\omlijnd}. In dit voorbeeld is de \type{ystap}
relatief. Dat wil zeggen dat de waarde \type{2.75} in het
vijfde blok staat voor de afstand die omlaag wordt gegaan en
niet voor de positie. Dit getal is de hoogte van de eerdere
blokken (\type{2.50}), vermeerderd met de vertikale afstand
tussen de blokken. Omdat we bij het derde blok weer op
\type{0.0} willen beginnen, kunnen we de \type{xstap} niet
relatief nemen. Het voordeel van een relatieve stap omlaag
is dat we zonder veel te hoeven aanpassen een extra laag
kunnen tussenvoegen. 

Omdat we over meerdere regels werken, maken we gebruik van de
optie \type{uitlijnen}. Met \type{\\} dwingen we een
overgang naar de volgende regel af. 

\startbuffer
\def\blok#1#2#3#4#5%
  {\positioneer(#1,#2)%
     {\omlijnd
        [breedte=#3cm,hoogte=#4cm,offset=0cm,
         uitlijnen=midden,boven=\vfill,onder=\vfill]
        {#5}}}%

\def\opbouw%
  {\stelpositionerenin[ystap=relatief]%
   \startpositioneren
   \tfx
   \blok{00.00}{0.00}{02.25}{02.50}{Technisch\\Engels}
   \blok{02.50}{0.00}{02.25}{02.50}{Materiaal-\\keuze}
   \blok{05.00}{0.00}{02.25}{02.50}{Tekenen}
   \blok{07.50}{0.00}{02.25}{02.50}{Ontwerpen}
   \blok{10.00}{0.00}{02.25}{02.50}{Leiding-\\geven}
   \blok{00.00}{2.75}{12.25}{01.50}{Basisopleiding}
   \blok{00.00}{1.75}{12.25}{00.75}{Introductie--opleiding}
   \stoppositioneren}

\plaatsfiguur
  {De opbouw van de cursus.}
  {\opbouw}
\stopbuffer

\haalbuffer

\startvoorbeeld
\typebuffer
\stopvoorbeeld

Het is mogelijk een figuur samen te stellen uit andere
figuren. Een voorbeeld hiervan is te zien in
\in{figuur}[fig:viertal]. 

\startbuffer
\def\eyeblokje#1#2%
  {\omlijnd[breedte=.95\hsize,kader=#1]{#2}%
   \blanko[klein]}

\def\eyedesign#1#2%
  {\vbox
     {\omlijnd[breedte=.2\hsize,hoogte=4cm]{\vbox{#1}}%
      \omlijnd[breedte=.2\hsize,kader=uit]{\hfill$X_#2$}}}

\def\eyecatcher%
  {\eyeblokje{aan}{eye-catcher}}

\def\eyetext% 
  {\eyeblokje{uit}{tekst}}

\def\eyekeeper%
  {\eyeblokje{aan}{eye-keeper}}

\def\eyenone% 
  {\eyeblokje{uit}{}}

\def\eyedesignA%
  {\eyedesign{\eyetext\eyetext\eyenone\eyenone}{1}}

\def\eyedesignB%
  {\eyedesign{\eyecatcher\eyetext\eyetext\eyenone}{2}}

\def\eyedesignC%
  {\eyedesign{\eyetext\eyekeeper\eyetext\eyenone}{3}}

\def\eyedesignD%
  {\eyedesign{\eyecatcher\eyetext\eyekeeper\eyetext}{4}}

\def\eyedesigns%
  {\hbox
    {\eyedesignA
     \hskip1em%
     \eyedesignB
     \hskip1em%
     \eyedesignC
     \hskip1em%
     \eyedesignD}}
\stopbuffer

\haalbuffer

\plaatsfiguur
  [hier]
  [fig:viertal]
  {Het onderzoekdesign.}
  {\eyedesigns}


Het buitenste blok heeft als breedte \type{.2\hsize},
waarbij \type{\hsize} de actuele breedte (buiten het blok)
is. Het binnenste blok heeft als breedte \type{.95\hsize},
dat wil zeggen 95\% van de breedte van het buitenste blok.
Binnen blokken wordt \type{\hsize} dus automatisch
aangepast. 

Bij het opzetten van dergelijke figuren is het handig ook 
de deelfiguren beschikbaar te hebben. 

\startfiguurtekst[links,offset][]{geen}{\eyedesignD}
Deze kunnen dan te pas en te onpas worden opgeroepen, 
bijvoorbeeld met de commando's:

\starttypen
\plaatsfiguur
\stoptypen

en

\starttypen
\startfiguurtekst 
\stopfiguurtekst
\stoptypen

\stopfiguurtekst

De bovenstaande figuren zijn als volgt gedefinieerd.

\startvoorbeeld
\typebuffer
\stopvoorbeeld

De bovenstaande voorbeelden tonen aan dat we voor de
gemiddelde tekst aardig met commando's als \type{\omlijnd}
en \type{\positioneer} uit de voeten kunnen. Er is bewust
geen grafische omgeving ontwikkeld binnen \CONTEXT. Voor hen
die meer willen, is er het goed uitontwikkelde macro||pakket
\PICTEX. 

\paragraaf[roteren]{Roteren}
\index{roteren}
\index{figuren+roteren}
\index{tabellen+roteren}
\macro{\tex{roteer}}
\macro{\tex{stelroterenin}}

\TEX\ ontbeert enkele grafische primitieven die een wat meer
ervaren gebruiker graag zou zien. Zo kan \TEX\ geen schuine
lijnen en krommen tekenen en kunnen teksten niet worden
geroteerd. \TEX\ kan echter via het commando \type{\special}
aan printer||drivers opdrachten doorgeven. Dit commando is
bijvoorbeeld gebruikt om teksten interactief te maken, zoals
beschreven wordt in \in{hoofdstuk}[interactie]. 

Ook roteren is op deze manier gerealiseerd. Het commando om 
te roteren is eenvoudig: 

\toonsetup{roteer}

Het commando accepteert alleen \type{0}, \type{90},
\type{180} en \type{270} als hoeken. Tegenover deze
beperking staat dat het commando zelf op zeer eenvoudige
wijze is ge�mplementeerd. Bovendien wordt de gebruiker
lastig rekenwerk bespaard. De standaard rotatiehoek wordt
ingesteld met: 

\toonsetup{stelroterenin}

Het commando kan goed samenwerken met plaatsblokken. Het kan
namelijk tussen de titel en het blok worden geplaatst. Zo is
bijvoorbeeld \in{figuur}[fig:roteren] gerealiseerd met: 

\startvoorbeeld
\starttypen
\plaatsfiguur
  {Een geroteerd figuur.}
  \roteer
  {\naam{bor0118}}
\stoptypen
\stopvoorbeeld

\plaatsfiguur
  [][fig:roteren]
  {Een geroteerd figuur.}
  \roteer
  {\naam{bor0118}}

Ingewikkelder dingen zijn ook mogelijk. Zo kan ook een hele 
set figuren worden geroteerd. 

\startvoorbeeld
\starttypen
\plaatsfiguur
  {Een geroteerde combinatie van figuren.}
  \roteer
  {\startcombinatie[2*2]
     {\legefiguur}{eerste}
     {\legefiguur}{tweede}
     {\legefiguur}{derde}
     {\legefiguur}{vierde}
   \stopcombinatie}
\stoptypen
\stopvoorbeeld

Het verdient aanbeveling spaarzaam met roteren om te gaan.
Als het al nodig is, bijvoorbeeld bij grote tabellen, dan
kan deze tabel het beste op een aparte bladzijde worden
geplaatst, bijvoorbeeld op de volgende wijze: 

\startvoorbeeld
\starttypen
\startuitstellen
\plaatstabel
  {Een hele brede tabel.}
  \roteer
  {\starttabel[|l|l|l|l|l|l|l|l|l|l|l|l|]
   .............................................
   .............................................
   \stoptabel}
\pagina
\stopuitstellen
\stoptypen
\stopvoorbeeld

Natuurlijk kan er ook in de tekst worden geroteerd. We laten 
dit zien aan de hand van een voorbeeld.

\startbuffer 
Roteren is leuk maar ook gevaarlijk. Evenals een onzorgvuldig 
gebruik \roteer[rotatie=90]{van} achtergronden leidt tot overkill, 
kan onnodig roteren leiden \roteer[rotatie=270]{tot} onleesbare 
teksten. Waarom zou je de \roteer[rotatie=180]{wereld} op z'n kop 
zetten als dat niet nodig is? 
\stopbuffer

\startvoorbeeld 
\typebuffer
\stopvoorbeeld

Dit geeft:

\startrealiteit
\haalbuffer
\stoprealiteit
 
Het positioneren gebeurt vrij nauwkeurig, wat blijkt als we 
de bovenstaande tekst nogmaals tonen:

\startrealiteit
Roteren is leuk maar ook gevaarlijk. Evenals een
onzorgvuldig gebruik \roteer[rotatie=90,kader=aan]{van}
achtergronden leidt tot overkill, kan onnodig roteren leiden
\roteer[rotatie=270,kader=aan]{tot} onleesbare teksten.
Waarom zou je de \roteer[rotatie=180,kader=aan]{wereld} op
z'n kop zetten als dat niet nodig is? 
\stoprealiteit

Omdat \type{\roteer} gebruik maakt van \type{omlijnd}, kan 
naast \type{rotatie} ook een kader worden opgegeven, in dit 
geval dus: \type{kader=aan}.

We sluiten deze paragraaf af met wat voorbeelden van roteren,
combineren en achtergronden. 

\gebruikexternfiguur[koe][koe][breedte=3cm]

\startbuffer
\starttabel[|l|l|]
\HL
\VL test \VL test \VL\SR
\HL
\VL test \VL test \VL\FR
\VL test \VL test \VL\MR
\VL test \VL test \VL\LR
\HL
\stoptabel
\stopbuffer

\plaatsfiguur[][fig:van alles 1]{}{\achtergrond{\koe}}

We zagen reeds dat het vrij eenvoudig is om achter een
figuur of een tabel een achtergrond te plaatsen.
\in{Figuur}[fig:van alles 1] is gezet met: 

\startvoorbeeld
\starttypen
\plaatsfiguur{}{\achtergrond{\koe}}
\stoptypen
\stopvoorbeeld

waarbij met \type{\koe} een externe figuur wordt opgeroepen. 

\plaatsfiguur[][fig:van alles 2]{}
  \roteer{\achtergrond{\haalbuffer}}

Achtergronden kunnen worden gecombineerd met roteren
(\in{figuur}[fig:van alles 2]). In feite hebben we namelijk
te maken met volkomen van elkaar onafhankelijke commando's.
We moeten alleen goed op de haakjes letten: 

\startvoorbeeld
\starttypen
\plaatsfiguur{}\roteer{\achtergrond{\haalbuffer}}
\stoptypen
\stopvoorbeeld

Omwille van de overzichtelijkheid hebben we eerst de tabel
in een buffer geplaatst. Dit is aan te bevelen! 

\plaatsfiguur
  [][fig:van alles 3]{}
  \achtergrond
    \startcombinatie[2]
      {\roteer{\koe}} {een koe}
      {\haalbuffer}   {een tabel}
    \stopcombinatie

We tarten het lot en gaan combineren. \in{Figuur}[fig:van
alles 3] is als volgt tot stand gekomen: 

\startvoorbeeld
\starttypen
\plaatsfiguur{}
  \achtergrond
    \startcombinatie[2]
      {\roteer{\koe}} {een koe}
      {\haalbuffer}   {een tabel}
    \stopcombinatie
\stoptypen  
\stopvoorbeeld

Het lijkt ingewikkelder dan het is. 

\plaatsfiguur
  [][fig:van alles 4]{}
  \startcombinatie[2]
    {\roteer{\achtergrond{\koe}}} {een koe}
    {\achtergrond{\haalbuffer}}   {een tabel}
  \stopcombinatie

We besluiten in \in{figuur}[fig:van alles 4] met een variant
op het bovenstaande. Hoewel we in principe ook hierachter
weer een achtergrond kunnen plaatsen, is het de vraag of we
daar nog wat mee winnen. 

\startvoorbeeld
\starttypen
\plaatsfiguur{}
  \startcombinatie[2]
    {\roteer{\achtergrond{\bkoe}}} {een koe}
    {\achtergrond{\haalbuffer}}    {een tabel}
  \stopcombinatie
\stoptypen
\stopvoorbeeld

Overigens, omdat men aan \type{\roteer} de instellingen van
\type{omlijnd} kan meegeven, is ook op een andere manier een
achtergrond te krijgen, namelijk: 

\startvoorbeeld
\starttypen
\roteer[achtergrond=raster]{\bkoe}
\stoptypen
\stopvoorbeeld

De in de voorbeelden getoonde situaties zal men in de
praktijk niet vaak tegenkomen. Roteren moet men spaarzaam
toepassen en achtergronden kan men beter voor alle figuren
en/of tabellen tegelijk instellen. 

\message{SCHALEN EN SPIEGELEN BESCHRIJVEN}

% \setbox0=\hbox{gans}
% 
% \ruledhbox{\copy0\schaal[sx=2,sy=2]{\copy0}}
% 
% \spiegel{\ruledhbox{\copy0 \schaal{\copy0}}}
% 
% \roteer{\ruledhbox{\copy0 \schaal{\copy0}}}

\stoponderdeel
