\startonderdeel co-nl-03

\projekt manual
\produkt cont-nl

\hoofdstuk[documenten]{Documenten}

\paragraaf{Inleiding}

Waarom gaat men \TEX\ gebruiken? De een komt bij \TEX\
terecht omdat hij of zij wiskundig zetwerk moet leveren, een
ander valt voor de charme van scheiding tussen inhoud en
opmaak. Weer een ander ziet voordelen in de
programmeerbaarheid en natuurlijk kan ook in kwaliteit een
argument voor gebruik van \TEX\ worden gevonden. 

Men loopt bij \TEX\ niet snel aan tegen capaciteitproblemen.
Het zetten van omvangrijke documenten van vele honderden
pagina's is dan ook bij uitstek een klusje voor \CONTEXT.
Bij het coderen van een document dient men als het even
mogelijk is verder te kijken dan het huidige document.
Wellicht zal het document dat nu voor drukken op papier
wordt gezet, over enige tijd elektronisch beschikbaar moeten
komen. Of misschien dat naast de volledige versie van 700
pagina's er een korte versie met pakweg 200 pagina's moet
komen. Een zo groot mogelijke scheiding van vorm en inhoud
enerzijds en een acceptabele redundantie in structuur
anderzijds staan vaak al garant voor dergelijk hergebruik. 

Een systeem als \CONTEXT\ is bedoeld om het leven
gemakkelijker te maken. Bij het coderen van een document kan
al gauw de indruk ontstaan dat \citaat {dit of dat toch
eenvoudiger zou moeten kunnen}. Vaak is dat ook zo en het
antwoord is in veel gevallen te vinden in deze handleiding,
zij het soms tussen de regels. Ook kost het wat tijd om te
leren denken in structuur en inhoud, zeker als men gewend is
aan het werken met muisgestuurde opmaaksystemen. In dit
hoofdstuk staan we daarom nader stil bij de structuur
waarbinnen een document of collectie documenten kan worden
opgezet. 

\paragraaf[startstop]{Starten en stoppen}
\index{starten}
\index{stoppen}
\index{structuur}
\macro{\tex{starttekst}}

Als een tekst een zelfstandig document is, dan gebruiken we
de volgende commando's om het begin en eind van zo'n tekst te
markeren: 

\startvoorbeeld
\starttypen
\starttekst
\stoptekst
\stoptypen
\stopvoorbeeld

Het eerste commando voert een aantal noodzakelijke
initialisaties uit en het laatste commando vertelt \TEX\ dat
er geen commando's meer volgen en dat de tekst wordt
afgesloten. Als dit commando wordt weggelaten toont \TEX, na
het verwerken van de file, een~$*$ (sterretje). \TEX\
verwacht dan een commando, bijvoorbeeld \type{\end}. 

Hoewel dit niet verplicht is, raden we aan instellingen op
te nemen voor het \type{\starttekst}||commando. Op deze manier
kan een slimme tekstverwerker vaststellen welke instellingen
moeten worden meegenomen als slechts een deel van het
document wordt verwerkt. Tekst en instellingen na het
\type{\stoptekst}||commando worden niet gebruikt. 

Hieronder is een voorbeeld gegeven van een zeer eenvoudige
opmaak.

\startvoorbeeld
\starttypen
\starttekst

\onderwerp{Klinkers en medeklinkers}

Als we het Nederlands op Arabische wijze zouden spellen, konden we alleen 
uit de context afleiden of bs stond voor bas, baas, bes, bis, ibis, bos, 
boos, bus, buis, abuis of base en of pn pan, pen, peen, pin, puin, poen, 
apen, iepen of open betekende. Paradoxaal genoeg zouden de meeste 
spellingsruzies dan onmogelijk zijn, want die hangen nu eenmaal vooral 
samen met het willen schrijven van klinkers en tweeklanken.

\blanko

{\bf G.C. Molewijk, Spellingsverandering van zin naar onzin (1992).}

\stoptekst
\stoptypen
\stopvoorbeeld

De commando's \type{\starttekst...\stoptekst} mogen worden
genest. Binnen een tekst mag een file worden geladen die
zelf ook een \type{\starttekst} en \type{\stoptekst} bevat. 

\paragraaf[structuur]{Structuur}
\index{structuur}
\index{produkten}
\index{projecten}
\index{omgevingen}
\index{onderdelen}
\macro{\tex{startproject}}
\macro{\tex{startprodukt}}
\macro{\tex{startomgeving}}
\macro{\tex{startdeelomgeving}}
\macro{\tex{startonderdeel}}
\macro{\tex{project}}
\macro{\tex{produkt}}
\macro{\tex{omgeving}}
\macro{\tex{onderdeel}}

In deze paragraaf gaan we nader in op de mogelijkheid het
beheer van teksten te structureren. Lezers die slechts een
beperkt aantal teksten per jaar produceren kunnen de rest
van deze paragraaf rustig overslaan. Voor eenvoudige, losse
teksten kan men namelijk volstaan met de opzet: 

\starttypen
\omgeving ditjes 
\omgeving datjes 

\starttekst
... ditjes en datjes ... 
\stoptekst
\stoptypen

Als echter een tekst deel uitmaakt van een groter geheel,
kan men overwegen een project||geori\"enteerde structuur op te
zetten. Hierbij gelden de volgende uitgangspunten:

\startopsomming

\som  Samenhangende teksten moeten in hun samenhang kunnen
      worden onderhouden. Een dergelijk geheel noemen we een
      {\em project}.

\som  Op overstijgend niveau moeten layout||kenmerken kunnen
      worden vastgelegd. Hiervoor wordt de term {\em
      omgeving} gereserveerd.

\som  Samenhangende teksten in een project noemen we
      {\em produkten}.

\som  Een produkt moet kunnen worden opgedeeld in, eventueel
      met andere produkten te delen, {\em onderdelen}.
      Bovendien moeten deze onderdelen zelfstandig kunnen
      worden verwerkt en eventueel onderscheiden in een 
      tekstverwerker.

\stopopsomming

Een {\em project}, {\em omgeving}, {\em produkt} en {\em
onderdeel} worden gestart en gestopt met een van de volgende
commando's:

\toonsetup{startproject}
\toonsetup{startprodukt}
\toonsetup{startomgeving}
\toonsetup{startonderdeel}

V��r een \type{\start}||\type{\stop}||paar kunnen eventueel
commando's worden opgenomen. Als een file niet op het
actuele gebied staat, wordt op lagere niveaus gezocht. Dit
maakt het mogelijk een of meer omgevingen te gebruiken voor
meerdere, op directories geordende, files. 

\plaatstabel
  [hier][tab:structuurcommandos]
  {Structuur||commando's.}
\starttabel[|l|c|c|c|c|]
\HL
\VL \bf commando  \VL 
    \bf project   \VL 
    \bf omgeving  \VL 
    \bf produkt   \VL 
    \bf onderdeel \VL\SR
\HL
\VL \type{\project <<naam>>} 
    \VL           \VL        \VL  \yes  \VL  \yes  \VL\FR
\VL \type{\omgeving <<naam>>}  
    \VL    [\yes] \VL [\yes] \VL [\yes] \VL [\yes] \VL\MR
\VL \type{\produkt <<naam>>}   
    \VL     \yes  \VL        \VL        \VL [\yes] \VL\MR
\VL \type{\onderdeel <<naam>>} 
    \VL           \VL        \VL [\yes] \VL [\yes] \VL\LR
\HL
\stoptabel
          
Om produkten en onderdelen min of meer als zelfstandig
geheel te kunnen behandelen, worden de bovenstaande
commando's gebruikt. In \in{tabel}[tab:structuurcommandos]
zijn de met \yes\ gemarkeerde commando's verplicht en de
met [\yes] aangegeven commando's facultatief. V\'o\'or de
\type{\stop}||commando's wordt de inhoudelijke tekst
geplaatst. 

\startbuffer
\startproject alles

\omgeving layout

\produkt  docent
\produkt  cursist
\produkt  stramien

\stopproject
\stopbuffer

\startfiguurtekst[links,offset]{geen}
  \startMiniFile
    \typebuffer
  \stopMiniFile
  Hiernaast is een voorbeeld opgenomen van een project||file. 
\stopfiguurtekst

\startbuffer
\startprodukt docent

\project   alles

\onderdeel docent1
\onderdeel docent2

\stopprodukt
\stopbuffer

\startfiguurtekst[links,offset]{geen}
  \startMiniFile
    \typebuffer
  \stopMiniFile
  Het produkt \type{docent.tex} (een docenthandleiding)
  kan bijvoorbeeld zijn gedefinieerd als hiernaast. 
\stopfiguurtekst

\startbuffer
\startonderdeel docent2

\project alles
\produkt docent

... tekst ...  

\stoponderdeel
\stopbuffer

\startfiguurtekst[links,offset]{geen}
  \startMiniFile
    \typebuffer
  \stopMiniFile
  Links zien we het bijbehorende onderdeel.
\stopfiguurtekst

Het is mogelijk alle vier structurerende elementen
afzonderlijk te verwerken (zetten). Verwerking ligt echter
alleen voor de hand bij {\em produkten} en {\em onderdelen},
omdat daarin de te zetten teksten zijn opgenomen. Een
projectfile bevat in principe alleen een lijst met produkten
en omgevingen. Bij het verwerken van een projectfile vormen
alle produkten een document. Dit zal zelden de bedoeling
zijn. Deze handleiding is opgezet als project: ieder deel is
een produkt en ieder hoofdstuk van een deel is een
onderdeel. Er is een omgeving, die in de projectfile wordt
aangeroepen. 

Schematisch kan de samenhang tussen files als volgt worden
weergegeven:

\plaatsfiguur
  {Een uitgebreide projectopzet.}
  {\FLOWchart[opzet-3]}

\plaatsfiguur
  {Een opzet met alleen produkten.}
  {\FLOWchart[opzet-2]}

\plaatsfiguur
  {Een opzet met alleen een onderdeel.}
  {\FLOWchart[opzet-1]}

De bovenstaande structuur biedt alleen voordelen bij veel
samenhangende teksten, bijvoorbeeld opleidingsmateriaal. In veel gevallen kan men prima uit de
voeten met \type{\starttekst} en \type{\stoptekst},
eventueel in combinatie met \type{\input} of
\type{\omgeving} voor in andere files ondergebrachte tekst
en/of commando's. 

Het verdient voorkeur alle gemeenschappelijke instellingen in
��n omgeving onder te brengen. Als een onderdeel of produkt
echter een afwijkende vormgeving of afwijkende commando's
kent, dan kunnen {\em deelomgevingen} worden gedefinieerd:

\startvoorbeeld
\starttypen
\startdeelomgeving[<<namen>>]
... instellingen ...
\stopdeelomgeving
\stoptypen
\stopvoorbeeld

Een deelomgeving kan worden opgenomen in een omgeving||file
of in een aparte file. In het laatste geval kan de
deelomgeving worden geladen met het commando: 

\startvoorbeeld
\starttypen
\deelomgeving <<naam>>
\stoptypen
\stopvoorbeeld

Hieronder is een voorbeeld gegeven van een opzet.

\startbuffer
\startproject demos

\omgeving omgeving
\produkt  voorbeeld

\stopproject
\stopbuffer

\startfiguurtekst[links,offset]{geen}
  \startMiniFile
    \typebuffer
  \stopMiniFile
  file: \type{demos.tex} 
  \blanko
  In deze file wordt vastgelegd uit welke produkten het project
  bestaat. Daarnaast worden eventuele omgevingen gedefinieerd.
\stopfiguurtekst

\startbuffer
\startomgeving omgeving

\stelwitruimtein[groot]

\stelvoettekstenin[deel][hoofdstuk]

\stopomgeving
\stopbuffer

\startfiguurtekst[links,offset]{geen}
  \startMiniFile
    \typebuffer
  \stopMiniFile
  file: \type{omgeving.tex} 
  \blanko
  In de omgeving vinden de instellingen plaats die betrekking
  hebben op alle produkten. Eventueel kunnen meerdere
  omgevingen worden gemaakt of binnen deze omgeving
  deelomgevingen per produkt worden gedefinieerd.
\stopfiguurtekst

\startbuffer
\startprodukt voorbeeld

\project demos

\startinleidingen
  \volledigeinhoud
\stopinleidingen

\starthoofdteksten
  \onderdeel eerste
  \onderdeel tweede
\stophoofdteksten

\startuitleidingen
  \volledigeindex
\stopuitleidingen

\stopprodukt
\stopbuffer

\startfiguurtekst[links,offset]{geen}
  \startMiniFile
    \typebuffer
  \stopMiniFile
  file: \type{voorbeeld.tex} 
  \blanko
  In deze produkt||file wordt de structuur van het produkt
  vastgelegd. Omdat inhoudsopgaven en indexen met slechts
  enkele commando's kunnen worden opgeroepen, maken we
  hiervoor geen aparte files aan. 
\stopfiguurtekst

\startbuffer
\startonderdeel eerste

\deel{Een}           

\volledigeinhoud

\hoofdstuk{Eerste}   

..... tekst .....

\hoofdstuk{Tweede}   

..... tekst .....

\volledigeindex

\stoponderdeel
\stopbuffer

\startfiguurtekst[links,offset]{geen}
  \startMiniFile
    \typebuffer
  \stopMiniFile
  file: \type{eerste.tex} 
  \blanko
  In de onderdelen van een produkt plaatsen we de tekst,
  figuren enz. Hier kunnen we ook eventuele inhoudsopgaven
  en indexen per produkt defini\"eren. Er is niets op tegen
  onderdelen verder onder te verdelen. 
\stopfiguurtekst

\startbuffer
\startonderdeel tweede

\deel{Twee}            

\volledigeinhoud

\hoofdstuk{Alfa}       

..... tekst .....

\hoofdstuk{Beta}       

..... tekst .....

\volledigeindex

\stoponderdeel
\stopbuffer

\startfiguurtekst[links,offset]{geen}
  \startMiniFile
    \typebuffer
  \stopMiniFile
  file: \type{tweede.tex} 
  \blanko
  Het produkt bestaat in dit geval dus uit meerdere
  onderdelen. We hadden een deel ook als produkt kunnen
  defini\"eren en de hoofdstukken als onderdelen. Het
  onderscheid tussen produkten en onderdelen kan per
  toepassing verschillen. 
\stopfiguurtekst

De files \type{eerste.tex}, \type{tweede.tex} en
\type{voorbeeld.tex} kunnen afzonderlijk worden verwerkt.
Zolang er nog maar ��n produkt in dit project zit, kan ook
\type{project.tex} worden verwerkt. De omgeving kan apart
worden verwerkt (getest) maar levert geen output.

\paragraaf[directories]{Directories}
\index{files+directories}
\index{directories}

Veel \TEX\ implementaties doorzoeken een hele directory
structuur als ze de opgegeven file niet aantreffen op het
werkgebied. Dit kost niet alleen tijd, maar kan ook
verwarrend zijn, zeker als een verkeerde file wordt geladen. 

Om die reden hanteert \CONTEXT\ een eigen zoekmethode. In
grote lijnen komt het er op neer dat altijd eerst op het
werkgebied wordt gezocht, dat eventueel tot drie gebieden
onder het werkgebied wordt gekeken, dat zonodig het
figurengebied wordt bezocht, en dat in een enkel geval op 
alle gebieden die de betreffende implementatie kan vinden 
wordt gezocht.

Dit betekent dat men bijvoorbeeld omgevingen een of meer 
gebieden lager in de hierarchie kan zetten, wat soms handig 
is als men files heeft geordend op afzonderlijke gebieden, 
bijvoorbeeld:

\starttypen
/texfiles/cursus/layout.tex
/texfiles/cursus/docent/handleiding.tex
/texfiles/cursus/cursist/cursusmap.tex
/texfiles/cursus/vanalles/sheets.tex
\stoptypen

In de drie laatste files kan men met \type{\omgeving
layout.tex} de betreffende layout file laden, zonder bang te
hoeven zijn dat \TEX\ een elders in de structuur aanwezige
file met dezelfde naam laadt. 

Het is dus mogelijk files in verschillende directories te 
plaatsen. als een project goed is opgezet, kan men de losse 
componenten verwerken. De belangrijkste randvoorwaarde is dat
de projectfile en de eventuele omgevingen moeten kunnen 
worden gevonden.

\paragraaf[versie]{Versies}
\index{testen}
\index{verwijzingen+controleren}
\index{index+controleren}
\macro{\tex{versie}}

Het is mogelijk een voorlopige versie te genereren van een
tekst. In dat geval wordt informatie in de tekst opgenomen met
betrekking tot referenties en zetfouten. Het te gebruiken
commando luidt:

\toonsetup{versie}

Standaard wordt een definitieve versie uitgedraaid. Het
uitdraaien van een voorlopige versie heeft alleen zin als er
controles moeten worden uitgevoerd ten aanzien van het
zetwerk en de verwijzingen. In geval van een concept, wordt
onderaan iedere bladzijde vermeld dat het een concept
betreft. 

De meldingen in de marge worden aangemaakt tijdens het zetten
van een bladzijde. Omdat \TEX\ altijd wat verder vooruit 
kijkt, kunnen meldingen te vroeg komen. 

\paragraaf[modes]{Modes}
\index{selectief zetten}
\index{modes}
\index{stijlen}
\index{specials}
\index{uitvoerformaat}
\index[texexec+mode]{\TEXEXEC+mode}
\macro{\tex{steluitvoerin}}
\macro{\tex{startmode}}
\macro{\tex{startnotmode}}
\macro{\tex{enablemode}}
\macro{\tex{disablemode}}
\macro{\tex{doifmodeelse}}
\macro{\tex{doifmode}}
\macro{\tex{doifnotmode}}

De uitvoer van \TEX\ kan \DVI\ of \PDF\ zijn. Een document
kan voor papier of scherm worden vormgegeven, de laatste met
aanvullende functionaliteit. Van eenzelfde document kunnen
meerdere versies worden gegenereerd, verschillend in omvang
en vormgeving. Kortom: uit een bron kunnen meerdere produkten
worden afgeleid. 

Het verwerken van een file komt in de praktijk neer op het
opstarten van \TEX\ waarbij de filenaam wordt meegegeven van
de te verwerken file. Stel dat standaard \DVI\ uitvoer wordt
gegenereerd. Omschakelen naar \PDF\ kan door in de file zelf
of in een configuratiefile aan te geven dat een andere
uitvoer gewenst is, maar echt comfortabel is dat niet:

\starttypen
\steluitvoerin[pdftex]
\stoptypen

voor directe \PDF\ uitvoer, of in geval van de indirecte weg:

\starttypen
\steluitvoerin[dvips,acrobat]
\stoptypen

Gelukkig is er \TEXEXEC. Dit \PERL\ script voorziet \CONTEXT\
van een zogenaamde command||line||interface. Willen we \PDF\ 
in plaats van \DVI, dan roepen we gewoon \TEXEXEC\ aan met:

\starttypen
texexec  --pdf  filenaam
\stoptypen

Er zijn nog meer opties, zoals het maken van A5||boekjes;
meer hierover is te vinden in de handleiding bij \TEXEXEC. 
Bij een optie staan we hier wat langer stil: modes. 

\starttypen
texexec  --pdf  --mode=scherm  filenaam
\stoptypen

De idee hierachter is dat binnen een stijldefinitie, op elk 
moment kan worden opgevraagd in welke mode het document wordt
verwerkt. Men kan bijvoorbeeld in een layoutdefinitie de 
volgende regels opnemen:

\starttypen
\startmode[scherm]
  \stelinteractiein[status=start] 
  \stelkleurenin[status=start]
\stopmode
\stoptypen

en wellicht:

\starttypen
\startnotmode[scherm]
  \stelkleurenin[status=start,conversie=altijd]
\stopnotmode
\stoptypen

Men kan ook een serie modes opgeven. Naast deze twee mode
commando's zijn er nog wat meer primaire macros beschikbaar. 
Uitgaande van de mode \type{scherm} kunnen we bijvoorbeeld 
zeggen: 

\starttypen
\doifmodeelse {scherm} {doe dit} {en niet dat}
\doifmode     {scherm} {doe iets}
\doifnotmode  {scherm} {doe wat anders}
\stoptypen

Een mode kan worden ge(de)activeerd met:

\starttypen
\enablemode[scherm]
\disablemode[scherm]
\stoptypen

Ook hier kan men meerdere modes meegeven, bijvoorbeeld: 

\starttypen
\enablemode[papier,A4]
\stoptypen  

De kracht van \TEXEXEC\ is echter dat men het activeren niet
in de file zelf doet, maar daarbuiten. Net als bij het
kiezen van het uitvoerformaat, geldt hier: hoe neutraler de
broncode, des te beter! 

Om het ontwikkelen van algemene stijlen te vergemakkelijken, 
biedt \CONTEXT\ zelf ook modes aan. Op dit moment zijn dat:

\starttabulatie[|lT|p|]
\NC *lijst      \NC de lijst waarom met zojuist vroeg is geplaatst     \NC \NR 
\NC *register   \NC het register waarom met zojuist vroeg is geplaatst \NC \NR 
\NC *interactie \NC interactie (hyperlinks enz) zijn beschikbaar       \NC \NR 
\NC *sectieblok \NC het genoemde sectieblok in actief                  \NC \NR
\stoptabulatie

Systeem modes worden voorafgenaan door een \type {*}, zodat
ze niet conflicteren met gebruikers modes. Een voorbeeld van
een sectieblok mode is \type {*inleiding}. Een voorbeeld van
het gebruik van een systeem mode is: 

\starttypen
\startmode[*interactie] 
  \setuppapersize[S6][S6]
\stopmode
\stoptypen

\stoponderdeel
