\startonderdeel co-nl-15

\projekt manual
\produkt context

\start

\steltabellenin
  [VL=middel,
   HL=middel]

\hoofdstuk[tabellen]{Tabellen en tabulatie}

\paragraaf{Inleiding}

Er zijn in \CONTEXT\ twee manieren om tabellen te maken.
Welk alternatief men kiest hangt vooral af van de wijze
waarop een tabel deel uitmaakt van de tekst en de
complexiteit van een tabel.

Oorspronkelijk kende \CONTEXT\ slechts een alternatief:
tabellen gebaseerd op het flexibele, rubuuste en complete
macropakket \TABLE. De belangrijkste toevoegingen aan dit
pakket zijn consistente spati\"ering, kleur en het splitsen
van tabellen. Dit alternatief is bijzonder krachtig als het
gaat om tabellen met veel korte tekst.

Zodra men complete paragrafen tekst in een tabel wil
opnemen, wordt dit mechanisme wat minder plezierig, omdat
men dan handmatig de breedte van de cellen moet vaststellen.
Aanvullend is daarom een tabulatie omgeving beschikbaar.
Deze biedt vooralsnog weinig mogelijkheid tot franje, zoals
kaders, maar is wel in staat automatisch de beschikbare
ruimte te verdelen. Bovendien kunnen naast elkaar paragrafen
worden opgenomen, die bovendien afbreekbaar zijn over de
paginagrens. 

Beide mechanismen worden hier beschreven. Omdat de wijze van
defini\"eren van een tabel niet wezenlijk verschilt, kan men
zonder veel inspanning het type tabel veranderen. Veel
voorbeelden zijn dan ook van toepassing op beide varianten.

\paragraaf{Tabellen}
\index{tabellen}
\macro{\tex{starttabel}}
\macro{\tex{steltabellenin}}

In (Plain) \TEX\ zijn enkele mogelijkheden aanwezig om
tabellen te construeren, bijvoorbeeld

\startbuffer
\settabs 4\columns
\+ leentje & leerde & lotje & lopen     \cr
\+ langs   & de     & lange & lindelaan \cr
\stopbuffer

\startvoorbeeld
\typebuffer
\stopvoorbeeld

ofwel:

\witruimte

\startrealiteit
\haalbuffer
\stoprealiteit

Dit soort commando's is gebaseerd op het \type {\halign}
mechanisme. Meestal werkt men met macropakketten die rond
dit mechanisme zijn ontwikkeld. Binnen \CONTEXT\ maken we
gebruik van \TABLE\ van M.~Wichura. Hoewel dit macropakket
in principe af en compleet is, is toch besloten om een, zij
het beperkte, laag rond dit pakket te schrijven. De
belangrijkste reden hiervoor lag in de wens en noodzaak een
consequente spati\"ering bij gebruikers af te dwingen, dit
echter wel met behoud van de volledige functionaliteit van
\TABLE. {Van de binnen \TABLE\ beschikbare commando's
is een aparte handleiding beschikbaar.} 

Hoewel we over het huidige tabel mechanisme niets te klagen
hebben, zal op termijn een wat flexibeler (maar wel
compatible) mechanisme worden ontwikkeld, dit met het oog op
een integratie van \METAPOST\ functionaliteit. 

\plaatstabel
  [hier][tab:bevolking]
  {De bevolkingsaanwas in de loop der jaren.}
\starttabel[|l|l|]
\HL
\VL \bf jaar \VL \bf omvang bevolking   \VL\SR
\HL
\VL 1500     \VL 0.90 \`a 1.00 miljoen  \VL\FR
\VL 1550     \VL 1.20 \`a 1.30 miljoen  \VL\MR
\VL 1600     \VL 1.40 \`a 1.60 miljoen  \VL\MR
\VL 1650     \VL 1.85 \`a 1.90 miljoen  \VL\MR
\VL 1670     \VL 0.95 miljoen           \VL\MR
\VL 1700     \VL 1.85 \`a 1.95 miljoen  \VL\MR
\VL 1730     \VL 2.12 miljoen           \VL\MR
\VL 1750     \VL 1.90 \`a 1.95 miljoen  \VL\MR
\VL 1770     \VL 2.11 miljoen           \VL\MR
\VL 1800     \VL 2.08 miljoen           \VL\MR
\VL 1820     \VL 2.20 miljoen           \VL\LR
\HL
\stoptabel

We beginnen met een voorbeeld van een eenvoudige tabel in
gewone \TABLE\ codering. De als \in {tabel} [tab:bevolking]
aangeduide tabel kan als volgt worden gedefinieerd: 

\starttypen
\BeginTable
\BeginFormat | l | l | \EndFormat
\_
| \bf jaar | \bf omvang bevolking | \\+22
\_
| 1500     | 0.90 \`a 1.00 miljoen  | \\+20
| 1550     | 1.20 \`a 1.30 miljoen  | \\+00
. ....     . ...................  . .....
| 1800     | 2.08 miljoen         | \\+00
| 1820     | 2.20 miljoen         | \\+02
\_
\EndTable
\stoptypen

Deze wijze van coderen is in onze ogen geen voorbeeld van
heldere opmaak. Bovendien wordt het bewaken van consistente
spati\"ering zo wel erg moeilijk gemaakt. Geheel in de lijn
van de andere commando's wordt daarom binnen \CONTEXT\ een
tabel omringd door \type {\start}||\type{\stop}||commando's.
Deze commando's worden gebruikt in plaats van de \TABLE\
commando's \type {\BeginTable}, \type {\EndTable}, \type
{\BeginFormat} en \type {\EndFormat}. 

\toonsetup{starttabel}

Tussen \setchars\ wordt het kolom||formaat meegegeven. Omdat
hierin vierkante haakjes kunnen voorkomen zijn de volgende
varianten ook mogelijk.

\starttypen
\starttabel[|l|l|]
\starttabel[{|l|l|}]
\starttabel{|l|l|}
\stoptypen

In \in {paragraaf} [plaatsblokken] zagen we dat het commando
\type {\plaatstabel} als laatste argument een tabel
meekrijgt. Als het commando op de bovenstaande wijze wordt
gebruikt, zijn geen accolades rond de tabel nodig.

Zoals al gezegd, verdient de spati\"ering nadere aandacht.
Hieronder is de definitie van \in {tabel} [tab:bevolking]
weergegeven.\voetnoot {Bron: Delta 2, Nederlands verleden in
vogelvlucht, de nieuwe tijd: 1500 tot 1813, S.~Groenveld en
G.J.~Schutte, Martinus Nijhoff Uitgevers, Leiden, 1992.}
Meer geavanceerde voorbeelden zijn te vinden in de
handleiding bij \TABLE. 

\startvoorbeeld
\starttypen
\plaatstabel
  [hier][tab:bevolking]
  {De bevolkingsaanwas in de loop der jaren.}
  \starttabel[|l|l|]
    \HL
    \VL \bf jaar \VL \bf omvang bevolking   \VL\SR
    \HL
    \VL 1500     \VL 0.90 \`a 1.00 miljoen  \VL\FR
    \VL 1550     \VL 1.20 \`a 1.30 miljoen  \VL\MR
    ... ....     ... ...................    ......
    \VL 1800     \VL 2.08 miljoen           \VL\MR
    \VL 1820     \VL 2.20 miljoen           \VL\LR
    \HL
  \stoptabel
\stoptypen
\stopvoorbeeld

In het bovenstaande voorbeeld staan \type {\HL} en \type
{\VL} voor een Horizontal Line en een Vertical Line. De
overige commando's staan voor: Seperate Row, First Row, Mid
Row en Last Row.

De verschillende commando's zijn in principe gelijkwaardig
aan de door \TABLE\ actief gemaakte karakters \type {|} en
\type {"}, het spati\"eringscommando \type {\\} en het
lijncommando \type {\-}.

Als in de specificatie instellingen als \type {s0} worden
meegegeven moet men zonodig een ruimere layout gebruiken als
hierboven, bijvoorbeeld:

\starttypen
\starttabel[s0 |l|l|]
\stoptypen

In dit geval sluiten we een getal af met een spatie. Hoewel
de handleiding van \TABLE\ er voldoende biedt, volgen hier
toch nog enkele voorbeelden. Als een tabel niet wordt
omlijnd (\type {\VL}), dan moet in de setup eventueel
ongewenste witruimte worden onderdrukt. 

\start 

\stelplaatsblokin[figuur][achtergrond=raster]
 
\startbuffer
\starttabel[|l|l|]
\NC eerste \NC tweede \NC \SR
\HL
\NC alfa   \NC beta   \NC \FR
\NC een    \NC twee   \NC \LR
\stoptabel
\stopbuffer

\voorbeeldtabel

\startbuffer
\starttabel[s0 | c s1 | c s0 |]
\NC eerste \NC tweede \NC \SR
\HL
\NC alfa   \NC beta   \NC \FR
\NC een    \NC twee   \NC \LR
\stoptabel
\stopbuffer

\voorbeeldtabel

\startbuffer
\starttabel[o0 | c | c o0 |]
\NC eerste \NC tweede \NC \SR
\HL
\NC alfa   \NC beta   \NC \FR
\NC een    \NC twee   \NC \LR
\stoptabel
\stopbuffer

\voorbeeldtabel

\stop

Een veel voorkomend soort tabel is de volgende:

\startbuffer
\starttabel[ s0 | l w(9cm) | r s0 | l | ]
\NC eerste gewicht (vol blikje)  \NC 151,2 g \NC            \NC\FR
\NC tweede gewicht (leeg blikje) \NC  35,6 g \NC            \NC\LR
\NC                              \NC \-      \NC~\Smash{--} \NC\NR
\NC afgevuld gewicht             \NC 115,6 g \NC            \NC\SR
\stoptabel
\stopbuffer

\haalbuffer

Deze is als volgt gezet. 

\startvoorbeeld
\typebuffer
\stopvoorbeeld

Een of meer kenmerken van tabellen kunnen worden ingesteld
met:

\toonsetup{steltabellenin}

De instellingen \type {HL} en \type {VL} hebben betrekking op
de dikte van de lijnen. De tabellen in deze handleiding zijn
gezet met \type {VL=geen} en \type {HL=middel}.

\startbuffer
\starttabel[|c|c|]
\HL
\VL eerste \VL tweede \VL\SR
\HL
\VL eerste \VL tweede \VL\FR
\VL eerste \VL tweede \VL\LR
\HL
\stoptabel
\stopbuffer

\plaatsfiguur
  {De verschillende lijndiktes bij tabellen.}
\startcombinatie[3*1]
  {\steltabellenin[HL=klein]\haalbuffer}  {\type{HL=klein}}
  {\steltabellenin[HL=middel]\haalbuffer} {\type{HL=middel}}
  {\steltabellenin[HL=groot]\haalbuffer}  {\type{HL=groot}}
\stopcombinatie

Met behulp van \type{commandos} kunnen bepaalde instellingen
van \TABLE\ zelf worden meegegeven, bijvoorbeeld:

\starttypen
\steltabellenin[commandos=\Expand]
\stoptypen

Dit geeft een tabel met een breedte \type {\hsize}.

De instellingen \type {afstand} en \type {korps} hebben
betrekking op de eerder genoemde commando's \type {\SR},
\type {\FR}, \type {\MR} en \type {\LR}.

\def\toontabel[#1]%
  {\def\dotoontabel[##1]%
     {\hbox to .25\hsize
        {\hss
         \steltabellenin[korps=#1,afstand=##1]%
         \starttabel[|c|c|]
         \HL
         \VL \TWO{\type{#1 - ##1}} \VL\SR
         \HL
         \VL \TeX \VL \TeX         \VL\FR
         \VL \TeX \VL \TeX         \VL\MR
         \VL \TeX \VL \TeX         \VL\LR
         \HL
         \stoptabel
         \hss}}%
   \leavevmode\hbox
      {\dotoontabel[groot]%
       \dotoontabel[middel]%
       \dotoontabel[klein]%
       \dotoontabel[geen]}}

\toontabel[10pt]

\toontabel[9pt]

\toontabel[8pt]

Er zijn naast de reeds genoemde nog enkele andere commando's
beschikbaar. In het volgende voorbeeld staat \type {\DL}
voor Division Line, \type {\DC} voor Division Column en
\type {\DR} voor Division Row, terwijl met \type {\NC} naar
de Next Column wordt gesprongen. Naast het laatstgenoemde
commando kennen we nog \type {\NR} wat staat voor Next Row.

\startbuffer
\starttabel[|c|c|c|]
\HL
\VL alfa  \NC beta  \NC gamma \VL\SR
\DC       \DL       \DC          \DR
\VL beta  \VL gamma \VL alfa  \VL\SR
\DC       \DL       \DC          \DR
\VL gamma \NC alfa  \NC beta  \VL\SR
\HL
\stoptabel
\stopbuffer

\voorbeeldtabel

Het commando \type {\DC} betreft standaard een kolom en komt
overeen met \TABLE's commando \type {\=}. Willen we een lijn
trekken over meerdere kolommen, dan kunnen we dat opgeven op
de hieronder getoonde wijze.

\startbuffer
\starttabel[|c|c|c|]
\HL
\VL \LOW{low} \VL \TWO{n/m} \VL\SR
\DC           \DL[2]           \DR
\VL           \VL n \VL m   \VL\SR
\HL
\VL alfa      \VL 1 \VL a   \VL\FR
\VL alfa      \VL 2 \VL b   \VL\MR
\VL alfa      \VL 3 \VL c   \VL\LR
\HL
\stoptabel
\stopbuffer

\voorbeeldtabel

In plaats van \type {\TWO} hadden we ook het \TABLE||commando
\type {\use2} kunnen gebruiken. In verband met de spati\"ering
kunnen we echter \type {\LOW} niet altijd straffeloos
vervangen door \type {\lower}. 

We tonen nog een voorbeeld van het gebruik van \type {\DL}:

\startbuffer
\starttabel[|l|c|c|]
\DC      \DL[2]                   \DR
\NC      \VL Annalies \VL Debby   \VL\SR \HL
\VL Ton  \VL $\star$  \VL         \VL\SR \HL
\VL Kees \VL          \VL $\star$ \VL\SR \HL
\stoptabel
\stopbuffer

\voorbeeldtabel

In \in {tabel} [tab:tabelcommandos] zijn de commando's voor
spati\"ering en lijnen nog eens samengevat.

\startbuffer[tab-1]
\starttabel[|l|l|]
\HL
\VL \bf commando  \VL \bf betekenis   \VL\SR
\HL
\VL \type{\FR}    \VL First Row       \VL\FR
\VL \type{\LR}    \VL Last Row        \VL\MR
\VL \type{\MR}    \VL Mid Row         \VL\MR
\VL \type{\SR}    \VL Separate Row    \VL\MR
\VL \type{\NR}    \VL No Row          \VL\MR
\VL               \VL                 \VL\MR
\VL \type{\AR}    \VL Auto Row        \VL\LR
\HL
\stoptabel
\stopbuffer

\startbuffer[tab-2]
\starttabel[|l|l|]
\HL
\VL \bf commando           \VL \bf betekenis   \VL\SR
\HL
\VL \type{\NC}             \VL Next Column     \VL\FR
\VL \type{\FC}             \VL First Column    \VL\MR
\VL \type{\MC}             \VL Mid Column      \VL\MR
\VL \type{\LC}             \VL Last Column     \VL\MR
\VL                        \VL                 \VL\MR
\VL \type{\LOW}\arg{tekst} \VL Low Text        \VL\MR
\VL                        \VL                 \VL\LR
\HL
\stoptabel
\stopbuffer

\startbuffer[tab-3]
\starttabel[|l|l|]
\HL
\VL \bf commando  \VL \bf betekenis   \VL\SR
\HL
\VL \type{\HL}    \VL Horizontal Line \VL\FR
\VL \type{\VL}    \VL Vertical Line   \VL\MR
\VL               \VL                 \VL\MR
\VL \type{\DL}    \VL Division Line   \VL\MR
\VL \type{\DL[n]} \VL Division Line n \VL\MR
\VL \type{\DC}    \VL Division Column \VL\MR
\VL \type{\DR}    \VL Division Row    \VL\LR
\HL
\stoptabel
\stopbuffer

\plaatstabel
  [hier][tab:tabelcommandos]
  {Tabel||commando's.}
  \startcombinatie[3*1]
    {\haalbuffer[tab-1]} {}
    {\haalbuffer[tab-2]} {}
    {\haalbuffer[tab-3]} {}
  \stopcombinatie

Men kan zich afvragen of het handmatig bepalen van de
spati\"ering nu wel zo wenselijk is. Enerzijds is er een
kans op fouten en anderzijds zou \TEX\ het zelf moeten
kunnen uitzoeken. Beiden zijn waar, zij het dat een
waterdicht automatisme niet geheel te realiseren is. De
commando's \type {\SR}, \type {\FR} enz. zijn voornamelijk
een gevolg van het ontbreken van een afdoende mechanisme in
\TABLE\ zelf. Als een soort bonus op deze consistentie 
afdwingende commando's biedt \CONTEXT\ het commando \type 
{\AR}.  

\startbuffer
\starttabel[|||||||||]
\NC tremulant    \NC regaal      \NC sexquialtera \NC gemshoorn    \NC
    roerfluit    \NC splitsfluit \NC fluitgedekt  \NC              \NC \AR
\NC voila di gmb \NC siflet      \NC woudfluit    \NC holpyp       \NC
    octaav       \NC quinta      \NC viola        \NC hoofd-borst  \NC \AR
\NC              \NC cornet      \NC trompet      \NC fagot        \NC
    vlakfluit    \NC holpyp      \NC subbas       \NC hoofd-boven  \NC \AR
\NC vox humana   \NC trompet     \NC mixtuur      \NC ruyschpyp    \NC
    octaav       \NC roerfluit   \NC quintadena   \NC hoofd-rug    \NC \AR
\NC tremulant    \NC schalmey    \NC cimbal       \NC sexquialtera \NC
    fluit        \NC octaav      \NC roerfluit    \NC pedaal-hoofd \NC \AR
\stoptabel
\stopbuffer

\plaatstabel
  [hier][tab:registers]
  {Registers aan de baskant het Schnitke orgel te Zwolle.}
  {\externfiguur[buffer][breedte=\tekstbreedte]}

In \in {tabel} [tab:registers] is gebruik gemaakt van \type 
{\AR}. Deze tabel is gedefinieerd als: 

\startvoorbeeld
\typebuffer
\stopvoorbeeld

Dit mechanisme werkt natuurlijk ook met lijnen (deze tabel 
bevat de voetmaten en koppels bij \in {tabel} [tab:registers]):

\startbuffer
\starttabel[|||||||||B|]
\HL
\NC\bf8\NC\bf7\NC\bf6\NC\bf5\NC\bf4\NC\bf3\NC\bf2\NC\bf1\NC   \NC\AR
\HL 
\NC    \NC  8 \NC    \NC  2 \NC  4 \NC  3 \NC  8 \NC    \NC A \NC\AR
\NC  8 \NC  1+\NC  2 \NC  4 \NC  4 \NC  6 \NC  8 \NC HZ \NC B \NC\AR
\NC    \NC  2 \NC  8 \NC 32 \NC  2 \NC  8 \NC 16 \NC HB \NC C \NC\AR
\NC  8 \NC 16 \NC    \NC  2 \NC  4 \NC  8 \NC 16 \NC HR \NC D \NC\AR
\NC    \NC  8 \NC    \NC    \NC  4 \NC  4 \NC  8 \NC PH \NC E \NC\AR
\HL
\stoptabel
\stopbuffer

\startvoorbeeld
\typebuffer
\stopvoorbeeld

De commando's \type {\FC}, \type {\MC} en \type {\LC} zijn 
op dit moment equivalent aan \type {\NC}, maar kunnen in de 
toekomst aanvullende functionaliteit vertonen. 

\plaatstabel
  [hier][tab:voetmaten]
  {Voetmaten van de registers aan de baskant van het Schnitke 
   orgel te Zwolle.}
  {\haalbuffer}

\paragraaf{Kleurgebruik in tabellen}
\index{kleurgebruik+kolommen}

Hoewel de achterliggende macro's wellicht wat ingewikkeld
ogen, is het mechanisme niet zo lastig. 

\startopsomming[n,opelkaar]
\som  trek een dikke horizontale lijn
\som  spring vertikaal terug
\som  plaats de tekstregel
\stopopsomming

De hoogte en diepte van de lijn dienen gelijk te zijn aan
die van de tekstregel, die, zoals we zagen, nauwkeurig
vastligt. We hoeven ons (gelukkig) niet te bekommeren om de
breedte van de regel, omdat \TEX\ dat zelf uitzoekt. De
benodigde commando's vallen daarbij terug op \type
{\noalign}. 

De commando's om achtergronden in grijs of kleur te plaatsen
lijken op de eerder beschreven commando's om Division Lines
te tekenen (zie \in{tabel}[tab:gekleurde cellen]).

\plaatstabel
  [hier][tab:gekleurde cellen]
  {De tabel||commando's om cellen te accentueren.}
\starttabel[|l|l|]
\HL
\VL \bf commando                    \VL \bf betekenis     \VL\SR
\HL
\VL \type{\BL}                      \VL Background Line   \VL\FR
\VL \type{\BL[n,type,specificatie]} \VL Background Line n \VL\MR
\VL \type{\BC}                      \VL Background Column \VL\MR
\VL \type{\BR}                      \VL Background Row    \VL\MR
\VL \type{\CL[specificatie]}        \VL Color Line        \VL\MR
\VL \type{\RL[specificatie]}        \VL Raster Line       \VL\LR
\HL
\stoptabel

In de onderstaande voorbeelden is het gebruik van deze
commando's getoond. De regels waarin de achtergronden
worden gespecificeerd, gaan {\em vooraf} aan de regels met
tekst. Let op: net als bij \type {\DL} geldt ook hier dat
het commando automatisch naar de volgende kolom gaat.
Gebruik dus niet meer \type {\BC}'s als nodig.

Met \type {\BR} roept men een laatste specificatie op. Dit
commando wordt gevolgd door commando's als \type {\SR} en
\type {\FR}, die de hoogte van de (nog volgende) tekstlijn
aangeven.

Mogelijke achtergronden zijn \type {color} en \type {raster}.
Als men de achtergrond specificeert, dan kan naast het type
een raster of kleur worden opgegeven. Als geen kolom wordt
opgegeven wordt uitgegaan van 1~kolom. Eerst wat eenvoudige
voorbeelden.

\startbuffer
\starttabel[|c|c|]
\BC      \BL         \SR
\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

\voorbeeldtabel

Met \type {\BC} gaan we naar kolom~1. Met \type {\BL} gaan we
naar kolom twee, waar we een achtergrond laten aanbrengen.Tot
slot delen we met \type {\SR} mee dat de achtergrondlijn
betrekking heeft op een (nog volgende) Separate Row.  Daarbij
wordt ook de ruimte tussen de kolommen meegenomen.

De omgekeerde variant ziet er als volgt uit. Bedenk steeds
dat men met \type {\BL} naar een volgende kolom springt.

\startbuffer
\starttabel[|c|c|]
\BL                  \SR
\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

\voorbeeldtabel

Twee of meer cellen naast elkaar van een achtergrond
voorzien gaat als volgt:

\startbuffer
\starttabel[|c|c|]
\BL[2]               \SR
\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

\voorbeeldtabel

Bij wat bredere tabellen voorkomt een nette setup al snel
heel wat problemen.

\startbuffer
\starttabel[|c|c|c|]
\BL[3]                        \SR
\HL
\VL test \VL test \VL test \VL\SR
\HL
\VL test \VL test \VL test \VL\FR
\VL test \VL test \VL test \VL\MR
\VL test \VL test \VL test \VL\LR
\HL
\stoptabel
\stopbuffer

\voorbeeldtabel

\startbuffer
\starttabel[|c|c|c|]
\BC      \BL[2]               \SR
\HL
\VL test \VL test \VL test \VL\SR
\HL
\VL test \VL test \VL test \VL\FR
\VL test \VL test \VL test \VL\MR
\VL test \VL test \VL test \VL\LR
\HL
\stoptabel
\stopbuffer

\voorbeeldtabel

\startbuffer
\starttabel[|c|c|c|]
\BC      \BC      \BL         \SR
\HL
\VL test \VL test \VL test \VL\SR
\HL
\VL test \VL test \VL test \VL\FR
\VL test \VL test \VL test \VL\MR
\VL test \VL test \VL test \VL\LR
\HL
\stoptabel
\stopbuffer

\voorbeeldtabel

\startbuffer
\starttabel[|c|c|c|]
\BC      \BL                  \SR
\HL
\VL test \VL test \VL test \VL\SR
\HL
\VL test \VL test \VL test \VL\FR
\VL test \VL test \VL test \VL\MR
\VL test \VL test \VL test \VL\LR
\HL
\stoptabel
\stopbuffer

\voorbeeldtabel

In het onderstaande voorbeeld lijkt een \type {\BC} te
mankeren. Bedenk ook hier dat met \type {\BL} al naar de
volgende kolom wordt gegaan.

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

\voorbeeldtabel

\startbuffer
\starttabel[|c|c|c|]
\BC      \BL                  \SR
\HL
\VL test \VL test \VL test \VL\SR
\HL
                           \BR\FR
\VL test \VL test \VL test \VL\FR
                           \BR\MR
\VL test \VL test \VL test \VL\MR
                           \BR\LR
\VL test \VL test \VL test \VL\LR
\HL
\stoptabel
\stopbuffer

\voorbeeldtabel

Omdat \type {\SR} een regel afsluit hoeven in de resterende
kolommen geen \type {\BC}'s te worden opgenomen.

Tot slot wat voorbeelden van nog bredere tabellen. We zien
dat in de laatste twee voorbeelden slechts weinig commando's
nodig zijn om een rij te kleuren.

\startbuffer
\starttabel[|c|c|c|c|]
\BC    \BL[r,0.7]    \BL[r,0.9] \SR
\HL
\VL aa \VL bb \VL cc \VL dd  \VL\SR
\HL
                             \BR\FR
\VL aa \VL bb \VL cc \VL dd  \VL\FR
                             \BR\MR
\VL aa \VL bb \VL cc \VL dd  \VL\MR
                             \BR\LR
\VL aa \VL bb \VL cc \VL dd  \VL\LR
\HL
\stoptabel
\stopbuffer

\voorbeeldtabel

Met \type {\BR} roepen we de meest recente specificatie op.
We hoeven dus niet opnieuw aan te geven welke kolommen van
een achtergrond worden voorzien. Wel moet de spati\"ering
worden opgegeven.

De eerste regel in het bovenstaande voorbeeld had ook korter
gekund, namelijk:

\starttypen
\BC \RL[0.7] \RL[0.9] \SR
\stoptypen

In een tabel kunnen zowel rasters als kleuren worden
gebruikt. Rasters kunnen ook in termen van kleur worden
gedefinieerd. Een raster met een gradatie (grijswaarde)
$Gr=.9$ komt overeen met een kleur met de \kap
{rgb}||waarden $r=g=b=.9$. Vaak kan men dan ook volstaan met
alleen kleuren, waaronder enkele grijswaarden.

\startbuffer
\starttabel[|c|c|c|c|]
\BC    \BL[r,0.8]    \BL[c,rood] \SR
\HL
\VL aa \VL bb \VL cc \VL dd   \VL\SR
\HL
                              \BR\FR
\VL aa \VL bb \VL cc \VL dd   \VL\FR
                              \BR\MR
\VL aa \VL bb \VL cc \VL dd   \VL\MR
                              \BR\LR
\VL aa \VL bb \VL cc \VL dd   \VL\LR
\HL
\stoptabel
\stopbuffer

\voorbeeldtabel

We zien dat bij \type {\BL} een nadere aanduiding van de
achtergrond \type {r} of \type {c} wordt meegegeven. Het was
ook goed gegaan met \type {raster} of \type {color}. Kleuren
en rasters mogen door elkaar worden gebruikt.

Het is mogelijk een hele rij van een achtergrond te voorzien
met \type {\RL} en \type {\CL}, zonder nummers mee te geven.

\startbuffer
\starttabel[|c|c|c|c|]
                            \RL\FR
\VL aa \VL bb \VL cc \VL dd \VL\FR
\VL aa \VL bb \VL cc \VL dd \VL\MR
                            \RL\MR
\VL aa \VL bb \VL cc \VL dd \VL\MR
\VL aa \VL bb \VL cc \VL dd \VL\LR
\stoptabel
\stopbuffer

\voorbeeldtabel

\startbuffer
\starttabel[|c|c|c|c|]
\CL[groen]\FR
\VL aa \VL bb \VL cc \VL dd \VL\FR
\VL aa \VL bb \VL cc \VL dd \VL\MR
\VL aa \VL bb \VL cc \VL dd \VL\MR
\VL aa \VL bb \VL cc \VL dd \VL\LR
\stoptabel
\stopbuffer

\voorbeeldtabel

De volgende (aanroepen van) commando's zijn equivalent:

\starttypen
\BL[c,...]  \BL[color,...]   \COLOR[...]
\BL[r,...]  \BL[raster,...]  \RASTER[...]
\stoptypen

De oplettende lezer zal zijn opgevallen dat ook als geen
specificatie is meegegeven cellen van een achtergrond worden
voorzien. Deze standaardachtergronden zijn in te stellen
met:

\starttypen
\steltabellenin
  [achtergrondkleur=,
   achtergrondraster=,
   achtergrond=]
\stoptypen

Hierbij kan de parameter \type {achtergrond} de waarde \type
{kleur} of \type {raster} krijgen. De defaultwaarde is \type
{raster}. Als \type {achtergrondkleur} kan de naam van een
kleur worden meegegeven en als \type {achtergrondraster} een
getal tussen~0 en~1. 

Helaas blijkt het mechanisme dat de lijnen plaatst niet
altijd even nauwkeurig te werken. Of de oorzaak hiervan bij
mij, bij \TEX\ of bij de \kap {DVI}||drivers ligt is mij nog
onduidelijk. Het is belangrijk dat de Horizontal Rules
(\type {\HL}) worden geplaatst {\em nadat} de achtergrond is
geplaatst. Anders wordt de achtergrond voorgrond en
verdwijnt (een deel van) de lijn. De eerdere voorbeelden
illustreren hoe het moet; het onderstaande voorbeeld geeft
aan hoe het {\em niet} moet.

\startbuffer
\starttabel[|c|c|c|c|]
\BC    \BL[c,groen]  \BL[c,rood] \SR
\HL
\VL aa \VL bb \VL cc \VL dd   \VL\SR
                              \BR\FR
\HL
\VL aa \VL bb \VL cc \VL dd   \VL\FR
                              \BR\MR
\VL aa \VL bb \VL cc \VL dd   \VL\MR
                              \BR\LR
\VL aa \VL bb \VL cc \VL dd   \VL\LR
\HL
\stoptabel
\stopbuffer

\voorbeeldtabel

In de getoonde voorbeelden zien we nergens twee gekleurde
kolommen naast elkaar. Dit kan namelijk niet, althans, niet
zonder ingewikkelde constructies. Een mogelijke oplossing is
het introduceren van dummy||kolommen:

\startbuffer
\starttabel[|c||c||c|]
\BL[c,groen] \BL[c,rood]         \FR
\NC aa    \NC\NC bb \NC\NC cc \NC\FR
                              \BR\MR
\NC aa    \NC\NC bb \NC\NC cc \NC\MR
                              \BR\LR
\NC aa    \NC\NC bb \NC\NC cc \NC\LR
\stoptabel
\stopbuffer

\voorbeeldtabel

We zien dat de afstand tussen de kolommen wat groter is dan
wellicht gewenst. Dit is op te lossen door de
\TABLE||variabelen \type {\InterColumn...} aan te passen. Van
een alternatieve aanpak, namelijk achter de schermen gebruik
maken van \type {\-} in plaats van \type {\=} is afgezien,
omdat dit minder mooie tabellen oplevert.

Experimenteren staat vrij. De onderstaande tabel toont dat
we kunnen smokkelen met de spati\"ering. In dit geval moeten
wel alle tekstregels worden afgesloten met een \type {\SR}.

\startbuffer
\starttabel[|c|c|c|]
\BL[c,groen] \BL[c,rood] \MR
\NC aa  \NC bb \NC cc \NC\SR
                      \BR\MR
\NC aa  \NC bb \NC cc \NC\SR
                      \BR\MR
\NC aa  \NC bb \NC cc \NC\SR
\stoptabel
\stopbuffer

\voorbeeldtabel

We zien hier echter wat extra tekst opduiken. Deze is te
onderdrukken door het commando \type {\tracetablesfalse} te
geven. Standaard worden namelijk inconsistenties netjes 
gemeld.  

Naast de binnen \TABLE\ standaard beschikbare Format Keys is
de Format Key \type {K} beschikbaar, wat resulteert in het
zetten van een kolom in kapitalen (\type {\kap}). Als
aanvulling op \type {n} en \type {N} zijn \type {q} en \type
{Q} beschikbaar. Dit commando, dat bedoeld is om kolommen
met gebroken getallen uit te lijnen, werkt met komma's in
plaats van punten.

\startvoorbeeld
\starttypen
\starttabel[{| l k | q[3,4] | Q[2,1] | c |}]
.......
\stoptabel
\stoptypen
\stopvoorbeeld

Ook hier gebruiken we een extra set \argchars\ om
problemen te voorkomen. Voor nadere uitleg over het gebruik
van dergelijke keys verwijzen we naar de handleiding bij
\TABLE.

\paragraaf{Gelijksoortige tabellen}

Het in een tekst integreren van honderden tabellen is voor
\TEX\ nauwelijks een probleem. Het defini\"eren ervan is
echter een hele klus. Wanneer tabellen erg op elkaar lijken,
ligt het voor de hand gemeenschappelijke elementen slechts
eenmalig te defini\"eren. Het volgende voorbeeld illustreert 
op welke wijze dit binnen \CONTEXT\ kan. Eerst defini\"eren 
we de tabelvorm 

\startbuffer[vorm]
\definieertabelvorm[demo][|r|l|]
\stopbuffer

\typebuffer[vorm]

\haalbuffer[vorm]

Deze vorm, met de naam \type {demo}, kunnen we vervolgens 
gebruiken in:

\startbuffer
\starttabel[demo]
\VL links \VL rechts \VL\AR
\VL boven \VL onder  \VL\AR
\stoptabel
\stopbuffer

\voorbeeldtabel

en 

\startbuffer
\starttabel[demo]
\VL voor \VL achter \VL\AR
\VL op   \VL onder  \VL\AR
\stoptabel
\stopbuffer

\voorbeeldtabel

We kunnen zo'n vorm herdefini\"eren. Naast de vorm zelf, 
kunnen we ook aangeven hoe de kop en staart van een tabel er 
uitziet.  

\startbuffer[vorm]
\definieertabelvorm[demo][|r|l|][demo kop][demo staart]
\stopbuffer

\typebuffer[vorm]

\haalbuffer[vorm]

De kop en staart defini\"eren we apart: 

\startbuffer[vorm]
\starttabelkop[demo kop]
\HL   \VL zie \VL zo \VL\AR   \HL 
\stoptabelkop 

\starttabelstaart[demo staart]
\HL 
\stoptabelstaart
\stopbuffer

\typebuffer[vorm]

\haalbuffer[vorm]

De eerder gedefinieerde tabel ziet er nu als volgt uit: 

\voorbeeldtabel

De kern van dit mechanisme wordt dus gevormd door: 

\toonsetup{definieertabelvorm}

\paragraaf{Het splitsen van tabellen}

De titel van deze paragraaf zegt het al: tabellen zijn te 
splitsen. Hoewel het achterliggende mechanisme niet echt 
eenvoudig is en zeker niet 100\% waterdicht, zijn heel 
acceptabele resultaten te behalen. Een tabel zal zich indien 
nodig over meerdere bladzijden verdelen als met in plaats van
\type {\starttabel} het meervoud gebruikt. 

\toonsetup{starttabellen}

De bijbehorende kop en staart regels worden gedefinieerd met 
het in de vorige paragraaf al ge\"introduceerde kop en staart
mechanisme. 

\startvoorbeeld
\starttypen
\starttabelkop 
  ...
\stoptabelkop

\starttabelstaart
  ...
\stoptabelstaart
\stoptypen
\stopvoorbeeld

Natuurlijk kan men ook benoemde kop en staart definities 
gebruiken, dit in combinatie met een eerder gedefinieerde 
tabelvorm. 

Vaak zal men de gesplitste tabel van een nummer willen 
voorzien. Het volgende commando zorgt daarvoor. 

\toonsetup{splitsplaatsblok}

Stel dat we de volgende splitsbare tabel hebben gedefinieerd:

\startbuffer
\startbuffer
\starttabelkop
\HL \VL grieks \VL latijns \VL\AR \HL
\stoptabelkop

\starttabelstaart
\HL
\stoptabelstaart

\starttabellen[|mc|c|]
\VL \alpha \VL a \VL\AR
\VL \beta  \VL b \VL\AR
    ...        . 
\VL \zeta  \VL z \VL\AR
\stoptabellen
\stopbuffer
\stopbuffer

\typebuffer

Omdat we de tabel in een buffer hebben opgeslagen, kunnen we 
de tabel op de volgende manier, zonodig gesplitst, plaatsen:

\starttypen 
\splitsplaatsblok
  {\plaatstabel[hier][tab:demo]{Een demo tabel.}}
  {\haalbuffer}
\stoptypen

Eventueel kunnen instellingen als eerste, optioneel argument
worden meegegeven. Een van de instellingen is \type {regels},
dat wil zeggen de te reserveren ruimte voor een ondertitel en
spati\"ering. Standaard heeft deze variabele de waarde~3. 

\toonsetup{stelplaatsblokkensplitsenin}

De instelling \type {conversie} suggereert dat een getal in 
het geding is en dat klopt ook. Elke afgesplitste tabel 
krijgt automatisch een subnummer, waarvan de representatie 
wordt bepaald door \type {conversie}. 

\paragraaf{Tabulatie}

We zijn aangeland bij het tweede mechanisme, dat we, om
misverstanden te voorkomen, aanduiden met tabulatie. We
zullen zien dat de definitie van een tabulatie niet veel
verschilt van die van een de eerder beschreven tabellen.

In een tekst kan tabellarische informatie deel uitmaken van
de lopende tekst, dat wil zeggen dat de plaats vast staat.
Dit in tegenstelling tot de vorige paragrafen, waar de
tabellen weliswaar een voorkeurplaats hebben, maar bij
gebrek aan ruimte zich mogen verplaatsen. De tabulatie
commando's zijn in eerste instantie bedoeld voor tabellen die
deel uitmaken van de lopende tekst. Hoewel beiden mechanismen
door elkaar kunnen worden gebruikt is enige consistentie in
het gebruik aan te bevelen, al is het alleen maar omdat de
spati\"ering binnen de tabellen verschilt.

Waar de tabelcommando's een laag vormen rond \TABLE, zijn de
tabulatie commando's geschreven voor \CONTEXT. Het tabulatie
mechanisme gebruikt waar mogelijk dezelfde wijze van
defini\"eren als het eerder beschreven mechanisme. Ook
binnen tabulaties worden kolommen gescheiden door \type
{\NC} en rijen afgesloten met een \type {\NR}. 

\startbuffer
\starttabulatie[|l|c|r|]
\NC ditjes en datjes \NC links en rechts \NC hier en daar \NC \NR
\NC zus en zo        \NC op en neer      \NC hot naar her \NC \NR
\stoptabulatie
\stopbuffer

\typebuffer

\haalbuffer

De drie commando's \type {l}, \type {c} en \type {r} staan
voor:

\starttabulatie[|lT|p|]
\NC l \NC links uitlijnen  \NC \NR
\NC c \NC centreren        \NC \NR
\NC r \NC rechts uitlijnen \NC \NR
\stoptabulatie

Er zijn ook spatieer commando's. Deze hebben betrekking op
zowel een||regelige cellen als op paragrafen.

\starttabulatie[|lT|p|]
\NC i\sl n \NC spati\"ering links  \NC \NR
\NC j\sl n \NC spati\"ering rechts \NC \NR
\NC k\sl n \NC spati\"ering rondom \NC \NR
\stoptabulatie

De vermenigvuldigingsfactor {\ttsl n} wordt toegepast op de
eenheid van spatiering; deze is standaard ingesteld op .5em
(zie \type {\steltabulatiein}).

\startbuffer
\starttabulatie[|l|k2c|r|]
\NC ditjes en datjes \NC links en rechts \NC hier en daar \NC \NR
\NC zus en zo        \NC op en neer      \NC hot naar her \NC \NR
\stoptabulatie
\stopbuffer

\typebuffer

\haalbuffer

De breedte van een kolom wordt ingesteld met:

\startbuffer
\starttabulatie[|lw(4cm)|w(4cm)l|r|]
\NC ditjes en datjes \NC links en rechts \NC hier en daar \NC \NR
\NC zus en zo        \NC op en neer      \NC hot naar her \NC \NR
\stoptabulatie
\stopbuffer

\typebuffer

\haalbuffer

De belangrijkste reden om het tabulatiemechanisme te
schrijven lag in de wens om meerdere paragrafen naast elkaar
in tabelvorm te zetten. Een randvoorwaarde daarbij was dat de
volle zetbreedte moest kunnen worden gebruikt. Deze optie
wordt ondersteund met:

\starttabulatie[|lT|p|]
\NC w({\sl d}) \NC 1 regel,   vaste breedte    \NC \NR
\NC p({\sl d}) \NC paragraaf, vaste breedte    \NC \NR
\NC p          \NC paragraaf, maximale breedte \NC \NR
\stoptabulatie

In het volgende voorbeeld heeft de eerste kolom een regel
met onbekende breedte. De tweede kolom bevat een links
uitgelijnde paragraaf met een breedte van 4cm. De derde
kolom is een 2cm breed en bevat wederom een regel. De
laatste kolom is een paragraaf en neemt de rest van de
breedte.

\starttypen
\starttabulatie[|l|p(4cm)l|w(2cm)|p|]
...
\stoptabulatie
\stoptypen

Een vierkoloms tabel met paragrafen wordt gespecificeerd als:

\starttypen
\starttabulatie[|p|p|p|p|]
...
\stoptabulatie
\stoptypen

In plaats van in elke cel een font in te stellen, kunnen we
voor elke kolom het font instellen. In de volgende tabel is
de definitie \type {[|lT|p|]}.

\starttabulatie[|lT|p|]
\NC B \NC \bf boldface (vet)    \NC \NR
\NC I \NC \it italic            \NC \NR
\NC R \NC \sl roman             \NC \NR
\NC S \NC \sl slanted  (schuin) \NC \NR
\NC T \NC \tt teletype          \NC \NR
\stoptabulatie

Wiskunde is mogelijk met:

\starttabulatie[|lT|p|]
\NC m \NC in||line wiskunde \NC \NR
\NC M \NC display  wiskunde \NC \NR
\stoptabulatie

Met het \type {f} kunnen we willekeurige font instellingen
defini\"eren, zoals \type {f\bs}. Daarnaast zijn er nog de
commando's:

\starttabulatie[|lT|p|]
\NC f\tex{commando} \NC font specificatie                 \NC \NR
\NC b\arg{..}       \NC plaats \type{..} voor de ingang   \NC \NR
\NC a\arg{..}       \NC plaats \type{..} achter de ingang \NC \NR
\NC h\tex{commando} \NC doe \tex{commando} met de ingang  \NC \NR
\stoptabulatie

Het \type{h}||commando (hook) staat allerlei geintjes toe,
zoals:

\startbuffer
\starttabulatie[|w(2cm)h\inlijnd|b{(}a{)}|p|]
\HC {Lelijk} \NC is dit, nietwaar? \NC zei hij.          \NC \NR
\HC {Mooi}   \NC maar zinloos      \NC zou ik zo zeggen. \NC \NR
\stoptabulatie
\stopbuffer

\typebuffer

Omdat we \type {\inlijnd} gebruiken blijft het kader netjes
binnen de regel. Het commando wordt alleen toegepast op
cellen die worden voorafgegaan door \type {\HC}. De \arg{}
zijn belangrijk, omdat \type {\inlijnd} deze verwacht.

\haalbuffer

We kunnen \type {h} gebruiken voor uiteenlopende
toepassingen, zoals:

\startbuffer
\def\Streepje#1{\blokje[breedte=#1em]}
\starttabulatie[|l|lh\Streepje|]
\HL
\NC \bf item \NC \bf aantal \NC \NR
\HL
\NC figuren  \HC  {5}       \NC \NR
\NC tabellen \HC  {8}       \NC \NR
\NC formules \HC {12}       \NC \NR
\HL
\stoptabulatie
\stopbuffer

\haalbuffer

Alle drie de cellen worden hier bewerkt. Vergeet niet de
\arg{} in de kolom met aantallen! 

\typebuffer

tot nu toe gebruikten we \type {\NC} om naar een volgende
kolom te gaan. Een alternatief is het commando \type {\EQ},
dat een kolom scheider plaatst.

\startbuffer
\starttabulatie
\NC =||teken    \EQ men kan de scheider instellen door aan de variabele 
                    \type {EQ} een andere waarde toe te kennen \NC \NR
\NC :||karakter \EQ standaard wordt een dubbele punt gebruikt, maar een 
                    gelijk teken mistaat ook niet \NC \NR
\stoptabulatie
\stopbuffer

\typebuffer

Dit ziet er gezet uit als:

\haalbuffer

Tot nu toe zagen we \type {\NC} voor normale ingangen, \type
{\EQ} voor ingangen gescheiden door een teken, en \type
{\HC} for ingangen waarop een commando wordt losgelaten. Er
is ook nog \type {\HQ} voor een ingang met scheider en
commando. Wanneer men helemaal niets wil doen, zelfs geen
formattering, dan komen \type {\RC} and \type {\RQ} in
aanmerking.

\startbuffer
\starttabulatie[|*{4}{cBh\type|}]
\NC     scheider \NC normaal \NC ruw   \NC commando \NC \NR
\RC \bf ja       \HC {\EQ}   \HC {\RQ} \HC {\HQ}    \NC \NR
\RC \bf nee      \HC {\NC}   \HC {\RC} \HC {\HC}    \NC \NR
\stoptabulatie
\stopbuffer

\haalbuffer

Deze kleine tabel toons alle drie de alternatieven. We
hebben hier een tabel met 4~gecentreerde kolommen, {\bf vet}
of \type {type}, waarvan twee cellen een andere uitlijning
hebben. De tabel is gecodeerd als:

\typebuffer

Het gelijk||teken, of wat ook maar is ingesteld, kan ook
worden geforceerd door het \type {e}~commando in de definitie.

\starttabulatie[|lT|p|]
\NC e \NC plaats een symbool voor de volgende kolom \NC \NR
\stoptabulatie

Wanneer we meerdere kolommen hebben met gelijke definities,
dan kunnen we tijd en ruimte besparen door ze te combineren.
We moeten er dan wel op letten dat het aantal~\type{|}'s
klopt.

\startbuffer
\starttabulatie[|*{6}{k1pc|}]
\NC ditjes en datjes \NC links en rechts \NC hier en daar
\NC zus en zo        \NC op en neer      \NC hot naar her \NC \NR
\stoptabulatie
\stopbuffer

\typebuffer

We hebben hier $1+6\times1=7$ keer een \type{|}.

\haalbuffer

Een beter voorbeeld van het automatisch berekenen van de
breedte van een cel is het volgende.

\startbuffer
\starttabulatie[|l|p|]
\NC tabellen  \NC We gebruiken \type {\starttabel} wanneer we zelfstandige 
                  tabellen zetten, waarvan de plaats niet bij voorbaat 
                  vaststaat en die min of meer los staan van de lopende 
                  tekst. \NC \NR
\NC tabulatie \NC Het commando \type {\starttabulatie} daarentegen is 
                  bedoeld voor tabellen die deel uitmaken van de lopende 
                  tekst. Met name het automatisch berekenen van de breedte 
                  van cellen is handig. \NC \NR
\stoptabulatie
\stopbuffer

\haalbuffer

Deze tabulatie is ingevoerd als:

\typebuffer

Wanneer geen definitie wordt meegegeven, wordt uitgegaan van 
\type{[|l|p|]}. Een meer algemene manier om het steeds weer 
intypen van definities te voorkomen is het gebruik van 
zogenaamde tabelomgevingen, zoals:

\startbuffer
\definieertabulatie[Drie][|lB|lS|p|]

\startDrie
\NC een \NC twee \NC drie vier vijf zes zeven acht negen tien elf twaalf 
                     dertien veertien vijftien en zo kunnen we nog even 
                     doorgaan \NC \NR
\stopDrie
\stopbuffer

\typebuffer

\haalbuffer

De tot nu toe beschreven tabulatie commando's kunnen we
samenvatten met: 

\toonsetup{definieertabulatie}

Het eerste argument benoemt de tabulatie. Het tweede
argument is optioneel en geeft aan met welke andere
tabulatie een assosiatie bestaat; we geven hiervan verderop
een voorbeeld. Het laatste argument definieert de cellen. 

\toonsetup{starttabulatie}

Hier definieert het eerste argument de cellen, en het
optionele tweede argument eventuele instellingen. 

\toonsetup{steltabulatiein}

Het optionele argument geeft aan om welke gerelateerde
tabulatie het gaat. Als we \type {inspringen} op \type {ja}
zetten, zal de breedte van de tabel zich aanpassen aan de
huidige inspringing. Als we bezig zijn met smaller zetten,
dan worden de linker en rechter marge altijd gehonoreerd. De
in te stellen \type {eenheid} betreft de spatieer
commando's~\type {i}, \type {j} en~\type {k}. De commando's
toegekend aan \type {binnen} worden uitgevoerd vlak voor de
eerste rij wordt gezet en zijn geldig binnen de hele
tabulatie. 

De mogelijkheid tot het omlijnen van tabulaties zijn
beperkt. Men kan horizontale lijnen toevoegen met \type
{\HL}. Dit commando regelt zelf de spati\"ering, zoals het
volgende, engelstalige voorbeeld laat zien: 

\startbuffer
\starttabulatie[|l|p|]
\HL
\NC small  \NC They say, small is beautiful.            \NC \NR
\HL
\NC medium \NC It seems that the medium is the message. \NC \NR
\HL
\NC large  \NC Large T||shirts are always sold out.     \NC \NR
\HL
\stoptabulatie
\stopbuffer

\typebuffer

Wanneer een pagina wordt afgebroken midden in een tabel, dan
wordt een horizontale regel automatisch herhaald. Men kan
zonodig zelf de spati\"ering afdwingen met \type {\FL},
\type {\ML} and \type {\LL}, wat staat voor {\em first},
{\em middle} en {\em last line}. 

\haalbuffer

De spatiering rond lijnen is standaard gerelateerd aan de 
diepte van een regel. 

\starttypen 
\steltabulatiein[afstand={diepte,middel}]
\stoptypen

Er zijn verschillende manieren om deze instelling aan te 
passen, zoals:

\starttypen 
\steltabulatiein[afstand=geen]    
\steltabulatiein[afstand=groot]   
\steltabulatiein[afstand={blanko,klein}] 
\steltabulatiein[afstand={1ex,middel}] 
\steltabulatiein[afstand=1cm] 
\stoptypen

Hoewel een tabulatie primair is bedoeld voor gebruik in de
lopende tekst, kan ze ook worden toegepast in een
plaatsblok. In dat geval wordt de spatiering rond een
tabulatie onderdrukt. In de lopende tekst wordt echter zo
goed als mogelijk is rekening gehouden met de huidige
witruimte en actuele breedte van de zetspiegel. 

\startbuffer
\starttabulatie
\NC Zie je wel? \NC Zoals we mogen verwachten, wordt de breedte van de 
                    paragraaf cellen netjes aan de breedte van de tekst 
                    aangepast. \NC \NR
\stoptabulatie
\stopbuffer

\startopsomming

\som  Dit betekent dat een tabulatie binnen een opsomming de 
      marges van deze opsomming gehoorzaamd. 

\haalbuffer

\som  Dit tabelletje is gecodeerd als:

\typebuffer

\stopopsomming

We kunnen tabulaties gebruiken en zelfs misbruiken om
speciale effecten te bewerkstelligen. Omgekeerd, zijn veel
standaard beschikbare effecten goed te combineren met
tabulaties. Het volgende, ietwat bizarre, voorbeeld
illustreert dit. 

\startbuffer
\starttabulatie[|p(2cm)|p(4cm)|p|]
\NC \startopsomming[n,opelkaar]
    \som eerste \som tweede \som derde
    \stopopsomming
\NC \startopsomming[opelkaar][items=5,breedte=4em,afstand=.5em]
    \its dit of dat \its zus of zo \its hier of daar
    \stopopsomming
\NC \startopsomming[g,opelkaar,ruim]
    \som alpha \som beta \som gamma
    \stopopsomming
\NC\NR
\stoptabulatie
\stopbuffer

\haalbuffer

In dit soort situaties kunnen we het best de opsommingen het 
trefwoord \type {opelkaar} meegeven. 

\typebuffer

Omdat een tabel eerst wordt ingelezen, zijn er wat
beperkingen aan de inhoud. Technisch gezien betreft de
beperking macro's die gebruik maken van \type {\catcode}
aanpassingen. Gelukkig komt dit in allerdaagse toepassingen
zelden voor; zoals wel meer beperkingen, zijn deze het meest
voelbaar als we bezig zijn \TEX\ invoer in \TEX\ te zetten. 

Bij het bespreken van tabellen in de eerder paragrafen zagen 
we reeds een financi\"ele tabel. Dit soort tabellen kan het 
best worden gezet met de tabulatie commando's. 

\startbuffer
\starttabulatie[|l|r|]
\NC niet zo veel  \NC             1.220  \NC \NR
\NC heel wat meer \NC             5.186  \NC \NR
\NC bij elkaar    \NC \overstreep{6.406} \NC \NR
\stoptabulatie
\stopbuffer

\haalbuffer

Deze tabel is ingetypt als:

\typebuffer

Zodra we met getallen werken, krijgen we te maken met
uiteenlopende vormen van uitlijnen, en soms met enig
handwerk. We kunnen, net als in tabellen, gebruik maken
van~\type {~}, zij het dat in dit geval we dat expliciet
moeten aangeven. Dit komt omdat we in tabulaties de~\type
{~} binnen paragrafen willen kunnen blijven gebruiken voor
een onbreekbare spatie. 

\starttypen
\starttabulatie[|l|~c|]
\NC zo veel  \NC ~12 \NC \NR
\NC is zeker \NC 185 \NC \NR
\stoptabulatie
\stoptypen

We keren terug bij het defini\"eren van categori\"en
tabulaties. Een toepassing van deze optie is te vinden in de
commando's die legenda's bij formules afhandelen. 

\starttypen
\definieertabulatie [legenda]        [|emj1|i1|mR|]
\definieertabulatie [legenda] [twee] [|emj1|emk1|i1|mR|]
\steltabulatiein    [legenda]        [eenheid=.75em,EQ={=}]
\stoptypen

Na deze definities, die standaard in \CONTEXT\ al hebben 
plaatsvonden, kunnen we zeggen:

\startbuffer
\startlegenda
\NC w \NC de breedte van een box \NC pt \NR
\NC h \NC de hoogte  van een box \NC pt \NR
\NC d \NC de diepte  van een box \NC pt \NR
\stoplegenda
\stopbuffer

\typebuffer

Deze eenvoudige legenda ziet er gezet als volgt uit:

\haalbuffer

Een extra ingang is mogelijk als we het trefwoord \type
{twee} meegeven: 

\startbuffer
\startlegenda[twee]
\NC w \NC width  \NC de breedte van een box \NC pt \NR
\NC h \NC height \NC de hoogte  van een box \NC pt \NR
\NC d \NC depth  \NC de diepte  van een box \NC pt \NR
\stoplegenda
\stopbuffer

\typebuffer

Deze gerelateerde tabulatie erft de instellingen van het
origineel. Natuurlijk hadden we ook \type
{\startlegendatwee} kunnen defini\"eren, maar de huidige
definitie is conform de al wat langer beschikbare
functionaliteit. 

\haalbuffer

Op gelijke wijze zijn de commando's gedefinieerd die gegevens
zetten.

\starttypen
\definieertabulatie [gegeven] [|R|ecmj1|i1mR|]
\steltabulatiein    [gegeven] [eenheid=.75em,EQ={=}]
\stoptypen

De eerste kolom wordt in roman gezet en de volgende kolom
wordt van de eerste gescheiden door een gelijk teken. Deze
tweede kolom is gecentreerd en wordt in wiskundige modus
gezet. Bovendien wordt die kolom wat ruimer gespatieerd. De
laatste kolom wordt eveneens gezet in wiskundige modus, maar
daarbinnen schakelen we over op roman. Hier voegen we vooraf
wat extra wit toe. 

\startbuffer
\startgegeven
\NC width  \NC w \NC 48pt \NR
\NC height \NC h \NC  9pt \NR
\NC depth  \NC d \NC  3pt \NR
\stopgegeven
\stopbuffer

\typebuffer

Levert:

\haalbuffer

In werkelijkheid kennen we ook wat toe aan \type {binnen}, 
waardoor in de praktijk specificaties mogelijk zijn als:

\starttypen
\startgegeven
\\ width  \\ w \\ 48pt \\
\\ height \\ h \\  9pt \\
\\ depth  \\ d \\  3pt \\
\stopgegeven
\stoptypen

Tot slot nog een voorbeeld van het automatisch berekenen van
de breedte van een paragraaf. Dit commando toont tevens dat
|<|en we zagen dit al in enkele van de bovenstaande
voorbeelden|>| de laatste \type {\NC} redundant is. 

\startbuffer
\starttabulatie[|Bl|p|Bl|]
\NC Read Me \NC \input tufte \NC Edward Tufte \NR
\stoptabulatie
\stopbuffer

\typebuffer

\haalbuffer

Zoals gezegd, zorgt \CONTEXT\ ervoor dat een tabulatie niet
op een ongelukkige plaats wordt afgebroken. Als we \type
{\tracetabulatetrue} instellen, dan worden ter controle
rode lijnen getrokken op plaatsen waar afbreken wordt
geblokkeerd. 

\startverbergen 

% IN ENGELSE VERSIE: 

\startbuffer 
\starttabulatie[|c|p|p|]
\NC \bf Alpha \NC \bf Beta    \NC \bf Gamma              \NC\NR
\NC 1         \NC right indeed    \NC definitely wrong   \NC\NR
\NC 2         \NC \thinrules[n=3] \NC \thinrules[n=3]    \NC\NR
\NC 3         \NC oh yes          \NC simply no          \NC\NR
\NC 4         \NC very true       \NC as false as can be \NC\NR
\NC 5         \NC \thinrules[n=5] \NC \thinrules[n=5]    \NC\NR
\NC 6         \NC \thinrules[n=3] \NC \thinrules[n=4]    \NC\NR
\stoptabulatie
\stopbuffer 

\typebuffer {\tracetabulatetrue\haalbuffer}

\startbuffer 
\starttabulatie[|c|p|p|]
\NC \bf Alpha \NC \bf Beta        \NC \bf Gamma          \NC\NR
\NC 1         \NC right indeed    \NC definitely wrong   \NC\NR
\NC 2         \NC oh yes          \NC simply no          \NC\NR
\NC 3         \NC very true       \NC as false as can be \NC\NR
\NC 4         \NC the whole truth \NC but the truth      \NC\NR
\stoptabulatie
\stopbuffer 

\typebuffer {\tracetabulatetrue\haalbuffer}

\stopverbergen


\startbuffer 
\starttabulatie[|c|p|p|]
\NC \bf Alfa \NC \bf Beta            \NC \bf Gamma             \NC\NR
\NC 1        \NC dat klopt inderdaad \NC dat is zeker fout     \NC\NR
\NC 2        \NC \dunnelijnen[n=3]   \NC \dunnelijnen[n=3]     \NC\NR
\NC 3        \NC jazeker             \NC welnee                \NC\NR
\NC 4        \NC zeer juist          \NC zo fout als maar kan  \NC\NR
\NC 5        \NC \dunnelijnen[n=5]   \NC \dunnelijnen[n=5]     \NC\NR
\NC 6        \NC \dunnelijnen[n=3]   \NC \dunnelijnen[n=4]     \NC\NR
\stoptabulatie
\stopbuffer 

\typebuffer {\tracetabulatetrue\haalbuffer}

\startbuffer 
\starttabulatie[|c|p|p|]
\NC \bf Alfa \NC \bf Beta              \NC \bf Gamma             \NC\NR
\NC 1        \NC dat klopt inderdaad   \NC dat is zeker fout     \NC\NR
\NC 2        \NC o ja                  \NC welnee                \NC\NR
\NC 3        \NC zeer juist            \NC zo fout als maar kan  \NC\NR
\NC 4        \NC de volledige waarheid \NC beslist niet waar     \NC\NR
\stoptabulatie
\stopbuffer 

\typebuffer {\tracetabulatetrue\haalbuffer}

\paragraaf{Buffers en schalen}

Met name grote tabellen gecombineerd met de plaatsblok 
commando's kunnen verwarrende aanblik vormen in het 
brondocument. De volgende oplossing werkwijze is daarom aan 
te bevelen. 

\startvoorbeeld
\starttypen
\startbuffer
  ... tabel ... 
\stopbuffer

\plaatstabel{Een titel.}{\haalbuffer}
\stoptypen
\stopvoorbeeld

Op deze manier houden we het overzicht. Een bijkomend
voordeel is dat we op deze manier tabellen kunnen
manipuleren (zie \in {paragraaf} [tex figuren]). Een te
brede tabel is bijvoorbeeld (terug) te schalen naar de
zetbreedte. Uitgaande van een tabel in de buffer kunnen we 
stellen:

\startvoorbeeld
\starttypen
\plaatstabel
  {Precies passend.}
  {\externfiguur[buffer][breedte=\tekstbreedte]}
\stoptypen
\stopvoorbeeld

Standaard is figuur \type {buffer} gedefinieerd als de
standaard buffer. \in {Tabel} [tab:registers] is zo
geplaatst. 

\paragraaf{Opmerkingen}

Binnen \TABLE\ heeft het vertikale streepje (bar) een
speciale betekenis heeft, net als de dubbele quote. Omdat we
binnen \CONTEXT\ \type {||} gebruiken voor gecombineerde
woorden en andere woord gebonden truukjes, en omdat de
duitstalige gebruikers de \type {"} graag als intelligente
umlaut trigger zien, ligt een conflict voor de hand. Om die 
reden houden beide karakters binnen tabellen hun normale 
betekenis. Wil men ze toch gebruiken, dan kan men met het 
volgende commando aangeven dat de \type {|} en \type {"} zich
conform \TABLE\ moeten gedragen. Een afrader. 

\startvoorbeeld
\starttypen 
\ObeyTableBarAndQuote 
\stoptypen
\stopvoorbeeld

\stop

\stoponderdeel

\paragraaf{Opmerkingen}

Het kan voorkomen dat een (omvangrijke) tabel meerdere malen
wordt gebruikt, echter in steeds iets andere vorm. Eenmaal
bekend met de sterke kanten van \TEX, waaronder het kunnen
defini\"eren van commando's, zal in dat geval de vraag
opkomen of men kan volstaan met een definitie. Dat kan. Stel
dat we de volgende tabel hebben gedefinieerd.

\startbuffer
\startbuffer[tabel]
\ifton\starttabel[|l|l|l|]\else\starttabel[|l|l|]\fi
\HL
\ifhans \VL hans \VL hans \ifton \VL hans \fi         \VL\FR \fi
        \VL test \VL test \ifton \VL ton  \fi \ifhans \VL\MR
                                              \else   \VL\FR \fi
        \VL test \VL test \ifton \VL ton  \fi         \VL\MR
        \VL test \VL test \ifton \VL ton  \fi         \VL\LR
\HL
\stoptabel
\stopbuffer
\stopbuffer

\startvoorbeeld
\typebuffer
\stopvoorbeeld

In de file(s) waarin we deze tabel oproepen kunnen we deze
tabel als volgt oproepen:

\startvoorbeeld
\starttypen
\newif\ifton
\newif\ifhans

\plaatstabel {eerste variant} {\haalbuffer[tabel]}
\plaatstabel {tweede variant} {\tontrue\haalbuffer[tabel]}
\plaatstabel {derde variant}  {\hanstrue\haalbuffer[tabel]}
\plaatstabel {vierde variant} {\tontrue\hanstrue\haalbuffer[tabel]}
\stoptypen
\stopvoorbeeld

In het onderstaande overzicht geven we deze vier
alternatieven naast elkaar weer.

\newif\ifton
\newif\ifhans

\startregelcorrectie
\startcombinatie[4]
  {\haalbuffer\haalbuffer[tabel]}
    {\strut}
  {\tontrue\haalbuffer\haalbuffer[tabel]}
    {\tex{tontrue}}
  {\hanstrue\haalbuffer\haalbuffer[tabel]}
    {\tex{hanstrue}}
  {\hanstrue\tontrue\haalbuffer\haalbuffer[tabel]}
    {\tex{tontrue}\endgraf\tex{hanstrue}}
\stopcombinatie
\stopregelcorrectie

Met name bij wat meer gecompliceerde tabellen kan de behoefte
bestaan een setup slechts eenmaal te hoeven defini\"eren. In
deze behoefte is voorzien.

\startvoorbeeld
\starttypen
\def\standaardsetup%
  {\starttabel[|c|c|c|c|]}

\starttabel[standaardsetup]
.....
\stoptabel
\stoptypen
\stopvoorbeeld

We herhalen dus \type {\starttabel}! Dit maakt het mogelijk
kopregels te defini\"eren, bijvoorbeeld

\startvoorbeeld
\starttypen
\def\standaardsetup%
  {\starttabel[|c|c|c|c|]
   \HL
   \NC a \NC b \NC c \NC d \NC\SR
   \HL}

\starttabel[standaardsetup]
.....
\HL
\stoptabel
\stoptypen
\stopvoorbeeld

\stop

\stoponderdeel
