\startonderdeel co-nl-08

\projekt manual
\produkt cont-nl

\hoofdstuk[afbreken,talen]{Taalspecifieke zaken}

\paragraaf{Inleiding}

Iedere taal heeft zijn eigen regels voor het afbreken van
woorden, het weergeven van verbindingsstreepjes, het omgaan
met samengestelde woorden, het gebruik van accenten, enz.

Van nature is \TEX\ erg engels geori\"enteerd, hoewel in
\TEX\ versie~3 wat meer mogelijkheden beschikbaar kwamen
voor het (gelijktijdig) ondersteunen van meerdere talen. Er
kan veilig worden geconcludeerd dat voor talen met veel
accenten, soms zelfs met meerdere per \citeer {karakter}, de
invoer en er vaak ingewikkelder uitziet, dan bijvoorbeeld
voor engels.

Een en ander wordt nog gecompliceerd door het feit dat een
specifieke invoer niet per se \'e\'en||op||\'e\'en
overeenkomt met de positionering van glyphs in een font. We
stonden daar al bij stil in \in {paragraaf}[encoding]. Het
is daarom erg belangrijk de juiste keuzes voor de fontmatrix
en de invoer encoding te maken, hoewel die in veel gevallen
zich de afgelopen jaren al redelijk hebben
uitgekristalliseerd. De lezer is gewaarschuwd.

\paragraaf{Automatisch afbreken}
\index{talen}
\index{afbreken}
\macro{\tex{taal}}
\macro{\tex{nl}}
\macro{\tex{en}}
\macro{\tex{fr}}
\macro{\tex{de}}
\macro{\tex{sp}}

Er kunnen verschillende afbreekregels worden gehanteerd,
afhankelijk van de taal waarin wordt geschreven,
bijvoorbeeld: nederlands (\type {\nl}), engels (\type
{\en}), duits (\type {\de}) en frans (\type {\fr}). Een taal
wordt ingesteld met het commando: \voetnoot {Ga in geval van
twijfel na of de afbreekpatronen inderdaad zijn opgenomen in
de \type{fmt}||file. De beschikbaarheid hangt mede af van de
capaciteit van de gebruikte \TEX||versie.}

\toonsetup{taal}

Hiernaast zijn ook de onderstaande korte commando's
beschikbaar, al dan niet te gebruiken binnen accolades:

\startvoorbeeld
\starttypen
\nl  \en  \de  \fr  \sp  \uk  \pl  \cz  ...
\stoptypen
\stopvoorbeeld

Het commando \type{\taal[nl]} komt dus overeen met
\type{\nl}, waarbij het eerste commando wat duidelijker is.
Omdat de mogelijke lijst met twee||letterige codes vrij groot
is, is de kans op conflicten met bestaande commando's vrij
groot, neem bijvoorbeeld \type {\it}, de afkorting voor
italiaans en het commando voor {\it italic}. Om die reden
wordt, wanneer er een potentieel conflict is, geen commando
aangemaakt. We gebruiken dan hoofdletters. In de nog te
bespreken commando's kan men overigens nog wel de twee
letterige code gebruiken.

Er kan op ieder moment in de tekst worden overgegaan op een
andere taal. In het onderstaande voorbeeld wordt bijvoorbeeld
heen en weer gesprongen tussen nederlands en frans.

\startvoorbeeld
\typebuffer[messian]
\stopvoorbeeld

Het blijkt niet echt nodig te zijn hier te wisselen van taal,
omdat we niet over de regelgrens gaan:

\startkolommen[n=4,lijn=aan]
\haalbuffer[messian]
\stopkolommen

Woorden als perestrojka en glasnost worden in de regel goed
afgebroken, het zijn immers in Nederland gebezigde russische
termen. Mocht onverhoopt een afbreking niet op de juiste
manier plaatsvinden, dan kan het afbreekpatroon worden
vastgelegd met het \TEX||commando:

\startvoorbeeld
\starttypen
\hyphenation{<<af-kor-ting>>}
\stoptypen
\stopvoorbeeld

Ook in een tekst kan worden aangegeven waar afbreken is
toegestaan: op de gewenste plaats kan het commando \type{\-}
worden toegevoegd: \type{toege}\type{\-}\type{staan}.

\paragraaf{Definities en instellingen}
\macro{\tex{installeertaal}}
\macro{\tex{steltaalin}}

Aangezien een \TEX\ format op het moment dat het wordt
aangemaakt, de afbreekpatronen ingebakken krijgt, valt het
defini\"eren en installeren van een taal buiten het blikveld
van een gebruiker. Dat wil niet zeggen dat een gebruiker het
niet kan en mag doen, het moet alleen wel op de juiste
manier gebeuren. We laten daarom het proces zien, al is het
maar om inzicht in het mechanisme te verschaffen. Neem
bijvoorbeeld: \voetnoot {De wat vreemde naam \type
{\upperleftsinglesixquote} geeft in ieder geval aan hoe de
betreffende quote er ongeveer uitziet.}

\starttypen
\installlanguage
  [en]
  [spatiering=ruim,
   linkerzin=---,
   rechterzin=---,
   linkersubzin=---,
   rechtersubzin=---,
   linkerciteer=\upperleftsinglesixquote,
   rechterciteer=\upperrightsingleninequote,
   linkercitaat=\upperleftdoublesixquote,
   rechtercitaat=\upperrightdoubleninequote,
   datum={maand,\ ,dag,{,\ },jaar},
   default=en,
   status=stop]
\stoptypen

en:

\starttypen
\installlanguage
  [uk]
  [default=en,
   status=stop]
\stoptypen

De eerste definitie definieert de engelse taalcomponent.
Deze definitie is te vinden in de file \type {lang-ger.tex},
de germaanse talen. Talen zijn dus geordend in taalgroepen.
Dit heeft vooralsnog geen bijzondere betekenis, omdat
standaard alle beschikbare definities worden geladen.

De tweede definitie erft zijn instellingen grotendeels van
engels. Bij beide definities is \type {status} ingesteld op
\type {stop}. Dit betekent dat nog geen patronen zijn
geladen. Dat gebeurt in de files \type{cont-<<xx>>}, de taal-
en/of interface specifieke \CONTEXT\ versies. Zodra \type
{status} op start wordt gezet, wordt een patroon geladen,
iets dat alleen kan tijdens het genereren van een format.

Vooralsnog gelden enkele conventies rond de namen van files
met patronen \type {lang-xx.pat} en uitzonderingen \type
{lang-xx.hyp}. In de regel wordt een taal ge\"installeerd
onder een twee letterige code. Er zijn echter ook drie
letterige afkortingen: bijvoorbeeld \type {deo} voor deutsch
oude spelling, en \type {nlx} voor nederlands extended
characterset, ofwel 8||bit encoding.

Na het installeren is men overigens niet gebonden aan de
twee||letterige aanduidingen. Standaard zijn namelijk de
(engelse) lange equivalenten gedefinieerd:

\starttypen
\installlanguage[german][de]
\stoptypen

\showsetup{installeertaal}

\showsetup{steltaalin}

Het is overigens ook mogelijk taal synoniemen te cre\"eren,
bijvoorbeeld:

\starttypen
\installlanguage[us][en]
\stoptypen

De instellingen in de genoemde commando's hebben betrekking
op situaties zoals hieronder:

\startbuffer
\huidigedatum
|<|ziezo daar gaan we|>|
|<| |<|ziezo|>| daar gaan we|>|
|<|ziezo |<|daar|>| gaan we|>|
\citeer{ziezo daar gaan we}
\citaat{ziezo daar gaan we}
\citaat{\citeer{ziezo} daar gaan we}
\citaat{ziezo \citeer{daar} gaan we}
\stopbuffer

\typebuffer

Dit wordt:

\haalbuffer

Op \type{||} gaan we in een van de volgende paragrafen nader
in.

\paragraaf[datum]{Datum}
\index{datum}
\macro{\tex{huidigedatum}}
\macro{\tex{datum}}

De wijze waarop de datum wordt weergegeven is taalspecifiek,
vandaar dat we er in dit hoofdstuk bij stilstaan. De
systeemdatum kan, ervan uitgaande dat de klok van de
computer gelijk loopt, worden opgeroepen met:

\toonsetup{huidigedatum}

De volgorde waarin \type {dag}, \type {maand} en \type
{jaar} worden opgegeven ligt niet vast. Het patroon \type
{[dag,maand,jaar]} levert bijvoorbeeld als datum op:
\huidigedatum [dag,maand,jaar]. Als we ook nog \type
{weekdag} toevoegen, krijgen we \huidigedatum
[weekdag,dag,maand,jaar].

Als men een kortere aanduiding wil dan kan dat ook: \type
{[dd,mm,jj]} levert \huidigedatum [dd,mm,jj], \type
{[d,m,j]} levert het wat minder duidelijke \huidigedatum
[d,m,j] en met \type {[kenmerk]} krijgt men een
kenmerkdatum: \huidigedatum [kenmerk]. Combinaties zijn ook
mogelijk. Er kunnen in de datum karakters worden opgenomen,
zo is de datum \huidigedatum [dd,--,mm,--,jj] opgeroepen
door het patroon \type {[dd,--,mm,--,jj]}.

Een willekeurige datum kan worden gezet met het commando:

\toonsetup{datum}

Het eerste (optionele) argument wordt gebruikt om de datum te
specificeren:

\startbuffer
\datum[d=10,m=3,y=1996][weekdag,dag,maand,jaar]
\stopbuffer

\startvoorbeeld
\typebuffer
\stopvoorbeeld

Als geen argument wordt gegeven, krijgen we de huidige
datum, en bij gebrek aan tweede argument, is de weergave
gelijk aan die van \type {\huidigedatum}. Het voorbeeld
resulteert in:

\startrealiteit
\haalbuffer
\stoprealiteit

Bij de conversie naar dagen wordt rekening gehouden met
schrikkeljaren. Als men echter terug in de tijd gaat, dan
wordt deze conversie soms wat onbetrouwbaar. Zo zijn in 1582
onder invloed van paus Gregorius~\Romeins{13} tussen 4 en
15~oktober zo'n 10~dagen verdwenen en is vanaf dat moment
het schrikkeljaar ingevoerd. In Engeland is men pas in 1752
overgegaan op de nieuwe wijze van datumbepaling en in
Frankrijk is als nasleep van de Franse revolutie tussen 1792
en 1806 een alternatieve telling gehanteerd met maanden van
30~dagen en weken van 10~dagen verdeeld in 10~uren van
100~minuten. In Rusland zijn tussen 1929 en 1940 weken van
vijf werk- en \'e\'en rustdag gehanteerd. Het leek ons niet
echt verstandig in \CONTEXT\ een taalafhankelijke
datumbepaling in te bouwen.

\paragraaf[labels]{Labels en koppen}
\index{labels}
\index{koppen}
\macro{\tex{hoofdtaal}}
\macro{\tex{stellabeltekstin}}
\macro{\tex{stelkoptekstin}}
\macro{\tex{labeltekst}}
\macro{\tex{koptekst}}

In een aantal gevallen plaatst \TEX\ automatisch een woord,
bijvoorbeeld het woord \citeer {figuur} onder een figuur.
Dergelijke woorden noemen we labels. Labels kunnen worden
ingesteld met het volgende commando:

\toonsetup{stellabeltekstin}

Relevante labels zijn: \type{tabel}, \type{figuur},
\type{hoofdstuk}, \type{bijlage} en vergelijkbare elementen.
Een voorbeeld van een instelling is:

\startvoorbeeld
\starttypen
\stellabeltekstin[en][hoofdstuk=Chapter ]
\stellabeltekstin[nl][hoofdstuk=Hoofdstuk ]
\stoptypen
\stopvoorbeeld

De spatie achter \type{Chapter} is essentieel, omdat anders
het hoofdstuknummer aan Chapter vast komt te staan
(Chapter1 in plaats van Chapter~1). Een labeltekst kan
worden opgevraagd met:

\toonsetup{labeltekst}

Sommige talen, zoals Chinees, maken gebruik van gesplitste
labels. Dergelijke labels worden gedefinieerd met behulp van
een commalijst, zoals \type {chapter={left,right}}.

Koppen kunnen worden ingesteld met:

\toonsetup{stelkoptekstin}

Relevante koppen zijn: \type{inhoud}, \type{tabellen},
\type{figuren}, \type{afkortingen}, \type{index} enz. Een
voorbeeld van een instelling is:

\startvoorbeeld
\starttypen
\stelkoptekstin[inhoud=Inhoudsopgave]
\stoptypen
\stopvoorbeeld

Een koptekst kan worden opgevraagd met:

\toonsetup{koptekst}

Labels en kopteksten worden in de \type{lang-<<xxx>>} files
ingesteld. Het kan beslist geen kwaad daarin eens een kijkje
te nemen.

De taal waarin op een bepaald moment wordt gezet, hoeft niet
dezelfde te zijn als die van de labels. Naast \type {\taal}
hebben we daarom:

\showsetup{hoofdtaal}

Normaal gesproken wordt een document in een taal gezet, de
hoofdtaal, bijvoorbeeld \type {\hoofdtaal[en]}. Een
tijdelijke overgang naar een andere taal wordt dan
gerealiseerd met het commando \type {\taal[nl]}, omdat dat
de labels en kopteksten ongemoeid laat. 

\paragraaf{Taal gebonden commando's}
\index{duits}

Duitstalige \TEX\ gebruikers zijn gewend \type {"e} in te
voeren en \"e gezet terug te krijgen. Deze combinatie en nog
meer twee en drietallen worden gedefinieerd in \type
{lang-ger}. Afgezien van comfort, zorgt dit mechanisme ook
voor afbreken en nauwkeurig positioneren van accenten.
Schrik niet van het volgende (deel|)|voorbeeld, want hier
worden wat macro's gebruikt die niet worden toegelicht. Dit 
soort definities vallen buiten de verantwoordelijkheid van de
gebruiker. 

\starttypen
\startlanguagespecifics[de]
  \installcompoundcharacter "a  {\moveaccent{-.1ex}\"a\midworddiscretionary}
  \installcompoundcharacter "s  {\SS}
  .....
  \installcompoundcharacter "U  {\smashaccent\"U}
  \installcompoundcharacter "Z  {SZ}
  .....
  \installcompoundcharacter "ck {\discretionary {k-}{k}{ck}}
  \installcompoundcharacter "TT {\discretionary{TT-}{T}{TT}}
  .....
  \installcompoundcharacter "`  {\handlequotation\c!leftquotation}
\stoplanguagespecifics
\stoptypen

Het commando \type {\installcompoundcharacter} zorgt ervoor
dat in geval van duits zetten, \type {"a} wordt omgezet in
{\de "a}, \type {"U} in {\de "U}, \type {"ck} op de juiste
wijze wordt afgebroken, enz.

Men kan zelf meer definities toevoegen, maar dat komt de
overdraagbaarheid van teksten niet ten goede. In een Poolse
versie van \CONTEXT\ wordt overigens een \type {/} gebruikt
in plaats van een \type {"}. 

\paragraaf{Automatisch vertalen} \index{vertalen}
\macro{\tex{vertaal}}

Het is mogelijk een tekst automatisch in de actuele taal te
laten zetten. Dit kan bijvoorbeeld handig zijn bij standaard
briefhoofden. Het onderstaande voorbeeld illustreert dit:

\toonsetup{vertaal}

\startbuffer
Afhankelijk van de actuele taal wordt de toegekende tekst gezet:
{\en this is an \vertaal [nl=voorbeeld, en=example], \nl of in goed
nederlands: \vertaal}.
\stopbuffer

\startvoorbeeld
\typebuffer
\stopvoorbeeld

De tweede aanroep \type{\vertaal} maakt gebruik van de eerder
toegekende waarden.

\startrealiteit
\haalbuffer
\stoprealiteit

\paragraaf{Samengestelde woorden}
\index{koppelteken}
\index{verbindingsstreepje}
\macro{\tex{stelkoppeltekenin}}

Lange woorden kunnen omwille van de leesbaarheid worden
opgedeeld in meerdere delen. Deze delen worden gescheiden
door een verbindingsstreepje, zoals in x||as. Dit streepje
kan worden opgegeven tussen \type {| |}, bijvoorbeeld \type
{|--|}. Als alleen \type {||} wordt gegeven, wordt het
standaard ingestelde koppelteken gebruikt. Dit koppelteken,
dat standaard is ingesteld op \type {--}, kan worden
ingesteld met het volgende commando. 

\toonsetup{stelkoppeltekenin}

Het commando kan ook worden gebruikt bij andere vormen van
koppelen. Het mechanisme is nog niet helemaal waterdicht.
Mocht het woord toch nog over de kantlijn heen gaan, dan
kunnen in het eerste deel van het woord \type{\-} worden
geplaatst, bijvoorbeeld: \type{drink\-water|(|voorziening)}. 

\plaatstabel
  {Afbreken van gecombineerde woorden.}
  {\haalbuffer[hyph-1]}

We zien dat dit commando, dat bij wijze van uitzondering
niet begint met een \texescape, meerdere doelen dient. Om te
beginnen weet \TEX\ niet goed raad met het afbreken van
gecombineerde woorden. Vaak verdient afbreken achter achter
streepje, of voor een haakje, de voorkeur. Dit commando
helpt \TEX\ bij het bepalen van het juiste punt om af te
breken. 

\stoponderdeel
