\startonderdeel co-nl-16

\projekt manual
\produkt context

\hoofdstuk[formules]{Formules}

\paragraaf{Inleiding}

Waarom zouden we een speciaal hoofdstuk wijden aan formules?
De reden ligt voor de hand: een deel van de binnen \TEX\
beschikbare functionaliteit heeft betrekking op wiskundig
ge\"orienteerd zetwerk. Een van de redenen om \TEX\ te
ontwikkelen was namelijk het zetten van formules. In
\CONTEXT\ is nauwelijke iets van dit zwaartepunt terug te
vinden, wat te verklaren is uit het feit dat vanaf het begin
\CONTEXT\ is gebruikt als intrument in het ontwikkelproces
van opleidingen van uiteenlopende aard, en niet per se
wiskundig. Om die reden was er bijvoorbeeld eerder
ondersteuning voor scheikundige formules en het consistent
gebruik van eenheden dan voor wiskunde. Dit was in beginsel
immers toch al beschikbaar.

De op vakdisciplines gerichte functionaliteit is (en wordt)
ondergebracht in modules. Een module zal overigens zelden
of nooit basisfunctionaliteit leveren, die hoort immers
thuis in de kern.

Er zijn bijvoorbeeld modules voor chemie, eenheden en
flow||charts, die allen een eigen handleiding hebben.
Hetzelfde geldt voor de wiskundige module. Deze sluit voor
wat betreft functionaliteit, aan bij de door de \AMS\
ontwikkelde macros, die in de \TEX\ als goed bekend staan.
De belangrijkste uitbreidingen betreffen de instelbaarheid
en consistente spatiering. In dit hoofdstuk beperken we ons
tot de standaard beschikbare functionaliteit.

\paragraaf{Basiscommando's}
\index{plaatsen+formules}
\index{overzichten+formules}
\index{nummeren+formules}
\index{formules+plaatsen}
\index{formules+overzichten}
\macro{\tex{stelformulesin}}
\macro{\tex{plaatsformule}}
\macro{\tex{plaatssubformule}}
\macro{\tex{subformulenummer}}
\macro{\tex{formulenummer}}
\macro{\tex{startformule}}

Het zetten van formules is een van de sterke kanten van
\TEX. Voor het zetten van formules zijn dan ook speciale
commando's beschikbaar. Deze commando's worden tussen enkele
of dubbele dollartekens geplaatst.

In de lopende tekst gebruiken we enkele dollartekens: \type
{$a=b^2+1/c$} wordt $a=b^2+1/c$. Tegenover deze
in||line||math is er display||math, ofwel formulewerk
omringt door witruimte. Dergelijke formules worden vaak
genummerd. De vorm en plaats van het nummer kan worden
ingesteld met het commando:

\toonsetup{stelformulesin}

Met \type{links} en \type{rechts} worden de karakters links
en rechts van het nummer ingesteld, standaard zijn dit
\type{(}~en~\type{)}.

Een (genummerde) formule wordt geplaatst met de commando's:

\toonsetup{plaatsformule}

\toonsetup{plaatssubformule}

Zowel de referentie als het subnummer zijn facultatief.
Hieronder worden enkele voorbeelden van formules gegeven. In
de marge zijn de verwijzingen weergegeven. Het met de hand
plaatsen van een formulenummer is bijvoorbeeld nodig als we
gebruik maken van tabellen, matrices en \TEX||commando's als
\type{\displaylines}. In de voorbeelden gebruiken we \type
{$$} om ruimte te sparen; we raden echter aan zo veel
mogelijk het commando \type {\startformule} te gebruiken.

\start

\def\ShowMathExample[#1]%
  {\bgroup
   \stelinmargein[plaats=links]
   \def\doShowMathExample##1{\in{##1:}[##1]\\}%
   \doifsomething{#1}
     {\margetitel{\processcommalist[#1]\doShowMathExample\unskip}}
   \typebuffer
   \haalbuffer
   \egroup}

\startbuffer
\plaatsformule          $$ a + b = c                            $$
\stopbuffer
\ShowMathExample[]

\startbuffer
\plaatsformule          $$ a + b = c                            $$
\stopbuffer
\ShowMathExample[]

\startbuffer
\plaatssubformule   {a} $$ a + b = c                            $$
\stopbuffer
\ShowMathExample[]

\startbuffer
\plaatssubformule   {b} $$ a + b = c                            $$
\stopbuffer
\ShowMathExample[]

\startbuffer
\plaatsformule   [a]    $$ a + b = c                            $$
\stopbuffer
\ShowMathExample[a]

\startbuffer
\plaatsformule   [b]    $$ a + b = c                            $$
\stopbuffer
\ShowMathExample[b]

\startbuffer
\plaatssubformule[c]{a} $$ a + b = c                            $$
\stopbuffer
\ShowMathExample[c]

\startbuffer
\plaatssubformule[d]{b} $$ a + b = c                            $$
\stopbuffer
\ShowMathExample[d]

\startbuffer
\plaatsformule          $$ a + b = c \quad \formulenummer       $$
\stopbuffer
\ShowMathExample[]

\startbuffer
\plaatsformule          $$ a + b = c \quad \formulenummer       $$
\stopbuffer
\ShowMathExample[]

\startbuffer
\plaatssubformule   {a} $$ a + b = c \quad \formulenummer       $$
\stopbuffer
\ShowMathExample[]

\startbuffer
\plaatssubformule   {b} $$ a + b = c \quad \formulenummer       $$
\stopbuffer
\ShowMathExample[]

\startbuffer
\plaatsformule   [e]    $$ a + b = c \quad \formulenummer       $$
\stopbuffer
\ShowMathExample[e]

\startbuffer
\plaatsformule   [f]    $$ a + b = c \quad \formulenummer       $$
\stopbuffer
\ShowMathExample[f]

\startbuffer
\plaatssubformule[g]{a} $$ a + b = c \quad \formulenummer       $$
\stopbuffer
\ShowMathExample[g]

\startbuffer
\plaatssubformule[h]{b} $$ a + b = c \quad \formulenummer       $$
\stopbuffer
\ShowMathExample[h]

\startbuffer
\plaatssubformule       $$ a + b = c \quad \formulenummer   {a} $$
\stopbuffer
\ShowMathExample[]

\startbuffer
\plaatssubformule       $$ a + b = c \quad \formulenummer   {b} $$
\stopbuffer
\ShowMathExample[]

\startbuffer
\plaatsformule          $$ a + b = c \quad \formulenummer[i]    $$
\stopbuffer
\ShowMathExample[i]

\startbuffer
\plaatsformule          $$ a + b = c \quad \formulenummer[j]    $$
\stopbuffer
\ShowMathExample[j]

\startbuffer
\plaatssubformule       $$ a + b = c \quad \formulenummer[k]{a} $$
\stopbuffer
\ShowMathExample[k]

\startbuffer
\plaatssubformule       $$ a + b = c \quad \formulenummer[l]{b} $$
\stopbuffer
\ShowMathExample[l]

\startbuffer
\plaatsformule   [m]    $$ a + b = c \quad \formulenummer   {a} $$
\stopbuffer
\ShowMathExample[m]

\startbuffer
\plaatsformule   [n]    $$ a + b = c \quad \formulenummer   {b} $$
\stopbuffer
\ShowMathExample[n]

\startbuffer
\plaatssubformule[o]    $$ a + b = c \quad \formulenummer   {a} $$
\stopbuffer
\ShowMathExample[o]

\startbuffer
\plaatssubformule[p]    $$ a + b = c \quad \formulenummer   {b} $$
\stopbuffer
\ShowMathExample[p]

\startbuffer
\plaatsformule   [q]    $$ a + b = c \quad \formulenummer[r]{a} $$
\stopbuffer
\ShowMathExample[q,r]

\startbuffer
\plaatsformule   [s]    $$ a + b = c \quad \formulenummer[t]{b} $$
\stopbuffer
\ShowMathExample[s,t]

\startbuffer
\plaatssubformule[u]    $$ a + b = c \quad \formulenummer[v]{a} $$
\stopbuffer
\ShowMathExample[u,v]

\startbuffer
\plaatssubformule[w]    $$ a + b = c \quad \formulenummer[x]{b} $$
\stopbuffer
\ShowMathExample[w,x]

\stop

Als we {\em geen} nummers willen, dan moeten we dat
nadrukkelijk aangeven. We doen dit door middel van
\type{[-]}:

\startbuffer
\plaatsformule[-]
  $$\displaylines
      {ab=ba\hfill\cr
       ac+bc=(a+b)c\hfill\cr}$$
\stopbuffer

\startvoorbeeld
\typebuffer
\stopvoorbeeld

Dit levert:

\haalbuffer

We hadden hier ook \type{\startformule...}\type{\stopformule}
kunnen gebruiken:

\startbuffer
\plaatsformule[-]
  \startformule
  \displaylines{ab=ba\hfill\cr ac+bc=(a+b)c\hfill\cr}
  \stopformule
\stopbuffer

\startvoorbeeld
\typebuffer
\stopvoorbeeld

Dit heeft als voordeel dat we in tekstverwerkers op
symmetrie kunnen testen. Een nadeel is, dat we niet \citeer
{in een oogopslag} aan de dollars zien dat we in de
mathematische mode zitten.

\toonsetup{startformule}

In het volgende voorbeeld zijn wel nummers opgenomen. In dit
voorbeeld is \type {[ziezo]} een referentie (verwijzing).

\startbuffer
\plaatsformule
  \startformule
    \displaylines
        {a\times b=b\times a\hfill\formulenummer\cr
         a+b=b+a\hfill\subformulenummer\cr
         ac+bc=(a+b)c\hfill\formulenummer[ziezo]{x}\cr}
  \stopformule
\stopbuffer

\startvoorbeeld
\typebuffer
\stopvoorbeeld

Gezet levert dit:

\haalbuffer

\paragraaf{Legenda's}
\index{formules+legenda's}
\macro{\tex{startgegeven}}
\macro{\tex{startlegenda}}

In geval van natuurkundige formules kan de behoefte bestaan
aan het annoteren van een formule. De onderstaande twee
commando's kunnen daarvoor worden gebruikt.

\toonsetup{startlegenda}

\toonsetup{startgegeven}

Een legenda en gegevens worden als volgt gecodeerd:

\startbuffer
\plaatsformule[for:kracht]$$F = m a$$

\startlegenda
\leg F \\kracht      \\N       \\
\leg m \\massa       \\kg      \\
\leg a \\versnelling \\m/{s^2} \\
\stoplegenda

Bereken met behulp van formule~\in[for:kracht] de
versnelling~$a$ als gegeven is dat:

\startgegeven
\geg massa  \\m \\10~kg  \\
\geg kracht \\F \\1500~N \\
\stopgegeven
\stopbuffer

\startvoorbeeld
\typebuffer
\stopvoorbeeld

Dit levert gezet:

\haalbuffer

Een combinatie is ook mogelijk:

\startbuffer
\startlegenda[twee]
\leg F \\      \\ kracht      \\ N       \\
\leg m \\   10 \\ massa       \\ kg      \\
\leg a \\ 1500 \\ versnelling \\ m/{s^2} \\
\stoplegenda
\stopbuffer

\haalbuffer

Dit is gecodeerd als:

\typebuffer

\paragraaf[eenheden]{Eenheden}
\index{overzichten+eenheden}
\index{formules+eenheden}
\index{eenheden}
\macro{\tex{eenheid}}
\macro{\tex{wiskunde}}

In de tekst kan een eenheid worden weergegeven met:

\startvoorbeeld
\starttypen
10~$\rm m^3$
\stoptypen
\stopvoorbeeld

Om een consistente opmaak te bevorderen is het commando
\type{\eenheid} beschikbaar. Dit is een voorbeeld van het
gebruik van synoniemen, zoals beschreven in
\in{paragraaf}[synoniemen].

\startvoorbeeld
\starttypen
\eenheid {vreemd} {m^3\!/s^2} {een vreemde eenheid}
\stoptypen
\stopvoorbeeld

In dit geval zorgt \type{\!} ervoor dat de~$/$ wat wordt
teruggeplaatst, dus $\rm m^3\!/s^2$ in plaats van $\rm
m^3/s^2$. In de praktijk kan men het echter stellen zonder
dit soort cryptische coderingen, omdat de eenheden||module
een beter mechanisme biedt. Deze module wordt geladen met

\starttypen
\gebruikmodule[eenheid]
\stoptypen

Hierna kan men woordelijk de eenheid intypen, bijvoorbeeld:

\starttypen
... 10 \Meter \Per \Seconde\ ...
... 33 \Kilo \Gram \Per \Square \Meter\ ...
\stoptypen

Voor meer voorbeelden en uitleg verwijzen we naar de
handleiding bij de module.

Als we wiskundige commando's gebruiken, kunnen we in de
problemen komen zodra we~\type{$} genest gebruiken. Als we
binnen de wiskundige mode een \type{$} plaatsen met als doel
in de wiskundige mode te gaan, dan sluiten we juist af.

\startvoorbeeld
\starttypen
$a $\times$ b$
\stoptypen
\stopvoorbeeld

Hier komt \TEX\ met een fout omdat \type{\times} buiten de
wiskundige mode wordt gegeven. Nu is hier nog te zien wat er
fout gaat maar wat als we het volgende doen:

\startvoorbeeld
\starttypen
\def\maal{$\times$}
$a \maal b$
\stoptypen
\stopvoorbeeld

Ogenschijnlijk lijkt dit correct, echter binnen \type{\maal}
verlaten we de wiskundige mode. We kunnen een foutmelding
voorkomen door \type{\maal} als volgt te defini\"eren:

\startvoorbeeld
\starttypen
\def\maal{\ifmmode \times \else $\times$ \fi}
\stoptypen
\stopvoorbeeld

En dit is nu precies wat het volgende commando voor ons doet:

\toonsetup{wiskunde}

Dit commando kunnen we dus genest gebruiken:

\startbuffer
\wiskunde{a\wiskunde{b\wiskunde{c\wiskunde{d\wiskunde{e}}}}}
\stopbuffer

\startvoorbeeld
\typebuffer
\stopvoorbeeld

geeft het gewenste resultaat:

\startrealiteit
\haalbuffer
\stoprealiteit

en niet:

\startbuffer
$a$b$c$d$e$
\stopbuffer

\startrealiteit
\haalbuffer
\stoprealiteit

wat we hadden gekregen met:

\startvoorbeeld
\typebuffer
\stopvoorbeeld

\paragraaf{Chemie}
\index[PPCHTEX]{\PPCHTEX}
\index{chemische formules}
\macro{ch}
\macro{startchemie}
\macro{chemie}
\macro{gebruikmodule}

We gaven in de inleiding bij dit hoofdstuk al aan dat er een
speciale module is voor chemisch zetwerk. Deze module wordt
geladen met:

\starttypen
\gebruikmodule[chemie]
\stoptypen

De eerste versie van deze module gebruikte \PICTEX\ voor
het plaatsen van tekst en het tekenen van lijnen, de
huidige versie gebruikt \METAPOST\ om te tekenen, niet
alleen omdat betere resultaten geeft, maar ook omdat de
files veel kleiner zijn.

\startbuffer
\startchemie[breedte=passend,hoogte=passend]
  \chemie
    [SIX,B,C,ADJ1,
     FIVE,ROT3,SB34,+SB2,-SB5,Z345,DR35,SR4,CRZ35,SUB1,
     ONE,OFF1,SB258,Z0,Z28]
    [C,N,C,O,O,
     CH,COOC_2H_5,COOC_2H_5]
\stopchemie
\stopbuffer

\startregelcorrectie
\haalbuffer
\stopregelcorrectie

Deze formule is gedefinieerd als:

\typebuffer

De syntax oogt wat cryptisch, maar went wel. Er is zowel een
uitgebreide handleiding beschikbaar als een collectie
voorbeelden.

Een kenmerk van chemisch zetwerk is dat de super- en
subscripts op \'e\'en lijn staan, dit in tegenstelling tot
wiskundig zetwerk, waar de plaats afhangt van onder meer de
beschikbare ruimte. Het commando \type {\chemie} houdt hier
rekening mee. Mocht men in een formule omwille van de
consistentie een tekst willen zetten als chemie |<|lin de
praktijk komt dit neer op een passende font keuze|>| dan is
daar: \type {\ch}. Dit commando heeft een argument en past
het formaat automatisch aan de omstandigheden aan: \type
{$\frac{\ch{N}}{\ch{O}}$}

\paragraaf{Wiskunde}
\index{fraktur}
\index{gothisch}
\index{calligrafie}
\index{breuken}
\macro{\tex{breuk}}
\macro{\tex{frac}}
\macro{\tex{wilijnd}}
\macro{\tex{inwilijnd}}
\macro{\tex{frak}}
\macro{\tex{goth}}
\macro{\tex{cal}}
\macro{\tex{fraktur}}
\macro{\tex{gothic}}
\macro{\tex{calligraphic}}

We beperken ons in deze handleiding tot de commando's die
standaard beschikbaar zijn. In een afzonderlijke wiskundige
module is een groot repertoir aan formules beschikbaar.

\starttypen
\gebruikmodule[wiskunde]
\stoptypen

De in deze module gedefinieerde commando's zijn in een
aparte handleiding beschreven.

Gehele in lijn met plain \TEX\ bieden we de volgende
commando's om van font te wisselen:

\starttabulatie[|l|l|l|]
\NC \type {\frak} \NC fraktur    \NC \frak ABC \NC\NR
\NC \type {\goth} \NC gotisch    \NC \goth abc \NC\NR
\NC \type {\cal}  \NC caligrafie \NC \cal  ABC \NC\NR
\stoptabulatie

Dit zijn overigens typisch fonts die bedoeld zijn voor
wiskundig zetwerk en losse karakters.

In plaats van het font commando kan men ook gebruik maken
van \type {\fraktur}, \type {\gothic} and \type
{\calligraphic}, bijvoorbeeld \type {\fraktur {TEKST}}.

Delingen komen vaak voor, vandaar dat we op verzoek het
commando \type {\frac} hebben toegvoegd: \type {$\frac{a}{b}$}
levert geheel volgens verwachting $\frac{a}{b}$. Dit commando
houdt zo goed mogelijk rekening met de omstandigheden.

Voor instructieve doeleinden kan een kadertje of achtergrond
nuttig zijn. Er is daarom een speciale versie van \type
{\omlijnd}: \type {\wilijnd}. We geven enkele voorbeelden:

\startbuffer
\startformule
  y + \wilijnd{y} + y^{2} + y^{\wilijnd{2}}
\stopformule

\startformule
  x \times \wilijnd{y} \times y^{\wilijnd{z}_{\wilijnd{z}}}
\stopformule
\stopbuffer

\typebuffer

\haalbuffer

We zien in dit voorbeeld dat de superscript~2 aan de grote
kant is. Dit kan worden voorkomen door in plaats van \type
{^} en \type {_} de commando's \type {\hoog} en \type
{\laag} te gebruiken.

\startbuffer
\startformule
  x \times \wilijnd{y} \times y\hoog{\wilijnd{z}\laag{\wilijnd{z}}}
\stopformule
\stopbuffer

\typebuffer

\haalbuffer

Wil men per se \type {^} en \type {_} gebruiken, dan kan met
het commando \type {\enablesupersub} eenzelfde effect worden
verkregen.

Om een goede spatiering te krijgen, is bij dit soort omlijnde
teksten, de \type {offset} gelijk aan \type {overlay}. De
offset is gerealiseerd door \type {frameoffset} een waarde te
geven. Vanzelfsprekend zijn ook andere instellingen mogelijk:

\startbuffer
\startformule
  x \times y\super{\wilijnd[kaderkleur=rood]{z}\laag{z}}
\stopformule
\stopbuffer

\typebuffer

\haalbuffer

Voor in||line math is het commando \type {inwilijnd}
beschikbaar.

Het is mogelijk breuken te zetten, zonder over te gaan op de
mathematische mode met het commando:

\toonsetup{breuk}

De haakjes zijn essentieel:

\startbuffer
Als \breuk{123}{456} gelijk is aan \breuk{x}{y}, dan is \breuk{y}{x}
gelijk aan \breuk{456}{123}.
\stopbuffer

\startvoorbeeld
\typebuffer
\stopvoorbeeld

levert:

\startrealiteit
\haalbuffer
\stoprealiteit

\stoponderdeel
