> For the complete documentation index, see [llms.txt](https://overleaf-pro.ayaka.space/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://overleaf-pro.ayaka.space/latex/nl/diepgaande-artikelen/01-a-new-series-of-articles-tex-tokens-and-related-concepts-but-why-and-how.md).

# Een nieuwe artikelreeks: TeX-tokens en gerelateerde concepten—maar waarom (en hoe)?

Dit inleidende artikel heeft tot doel uit te leggen waarom deze reeks is geschreven, wat ik hoop te bereiken en achtergrondinformatie te geven over de technieken die worden gebruikt om TeX-tokens te onderzoeken door de innerlijke werking van een TeX-engine te observeren. Deze artikelpagina is ook bedoeld om de links naar alle artikelen in de reeks te bevatten en zal worden bijgewerkt zodat die links worden verstrekt telkens wanneer een nieuw artikel wordt gepubliceerd.

### Links naar de artikelen

Elk artikel zal een reeks links naar andere artikelen in deze reeks bevatten.

* [Wat is een “TeX-token”?](/latex/nl/diepgaande-artikelen/53-what-is-a-tex-token.md)
* [Wat is een “TeX-tokenlijst”?](/latex/nl/diepgaande-artikelen/54-what-is-a-tex-token-list.md)

## Achtergrond bij deze artikelreeks

De motivatie om deze reeks artikelen te schrijven ontstond door het lezen van materiaal over TeX, waarin veel van TeX’ activiteiten werden uitgelegd via het concept “tokens”, samen met TeX’ “tokenisatieproces”, “tokenlijsten” en verwante concepten zoals “macro-expansie” en “uitbreidbare opdrachten”. Telkens wanneer ik TeX-gerelateerde verklaringen tegenkwam die in termen van “TeX-tokens” waren geformuleerd, bleef dezelfde vraag bij me opkomen: wat, precies, *is* een TeX-token? Ik moest het uitzoeken.

De reikwijdte en inhoud van het eerste artikel, [Wat is een “TeX-token”?](/latex/nl/diepgaande-artikelen/53-what-is-a-tex-token.md), is, van nature, behoorlijk “dicht bij de hardware”, zoals programmeurs zouden zeggen, en er is geen twijfel over mogelijk dat “TeX-tokens” geclassificeerd kunnen worden als een behoorlijk esoterisch onderwerp om over te schrijven: waarom zou je je er dan mee bezighouden? Uiteindelijk neem je een standpunt in — of misschien een sprong in het diepe — dat andere mensen misschien ook met hetzelfde onderwerp hebben geworsteld en dat er ruimte is voor een of twee artikelen om enkele gaten op te vullen. Mijn doel is om een aantal nuttige achtergrondverklaringen te geven die andere materialen die je misschien leest kunnen aanvullen en die hopelijk kunnen helpen om enkele kernconcepten beter te begrijpen die naar voren komen terwijl je TeX leert kennen en macro’s en programmeren verkent.

Het is duidelijk dat we binnen de grenzen van blogartikelen slechts aan de oppervlakte kunnen krabben — het is gewoon niet praktisch om alle relevante onderwerpen uit te leggen of de donkerste wateren te verkennen. Noodzakelijkerwijs laat ik veel details weg en bewandel ik het dunne koord tussen al te sterke vereenvoudiging en het doortrekken van analogieën tot het breekpunt.

“Schrijf artikelen die je zelf graag had willen lezen” is een nuttige richtlijn, en een die ik hard heb geprobeerd toe te passen terwijl ik deze reeks schreef.

## Nu de vraag gesteld is, wat dan?

De onmiddellijke uitdaging was duidelijk: hoe kom je meer te weten over TeX-tokens, aangezien zulke details (over tokens, tokenisatie enz.) diep verborgen zitten in de softwarecode van TeX-engines — je hoort je daar eigenlijk niet druk om te maken, tenzij je natuurlijk juist in die details geïnteresseerd bent.

Een manier om deze vragen te verkennen en te beantwoorden is om te proberen door TeX’ oorspronkelijke broncode in [`tex.web`](https://www.ctan.org/tex-archive/systems/knuth/dist/tex)te lezen — door [WEAVE](http://tug.org/texinfohtml/web2c.html#weave-invocation) te draaien om de TeX-documentatie te extraheren — of door een exemplaar van het boek te kopen [Computers & Typesetting, Volume B: TeX: The Program](https://www.amazon.co.uk/Computers-Typesetting-TEX-Program-v/dp/0201134373). Ik heb een exemplaar van het gedrukte boek gekocht! Het is zeker buitengewoon nuttig dat TeX’ broncode in boekvorm is gepubliceerd en er staan natuurlijk veel nuttige verklaringen verspreid door het hele boek. Knuths TeX is echter geschreven in Pascal en vanzelfsprekend wordt de Pascal-broncode gedocumenteerd met behulp van Knuths literaire programmeermethodologie — waarbij de code in kleine hapklare brokken wordt gepresenteerd. Het is gemakkelijk te waarderen hoe Knuths benadering van documentatie echt helpt bij software die zo complex is als TeX, maar het lezen van het boek vereist wel behoorlijk wat kruisverwijzingen en heen-en-weer bladeren.

Hoewel behulpzaam, was het boek alleen voor mij niet helemaal voldoende om beter te begrijpen wat er gebeurt wanneer TeX “tokens” aanmaakt — het onderwerp waarin ik vooral geïnteresseerd was. Er is maar één manier om het echt te ontdekken: bouw het TeX-programma, voer het uit op een klein TeX-bestand en kijk letterlijk hoe de code wordt uitgevoerd terwijl TeX de invoer scant en leest. De details van het bouwen van TeX uit broncode zijn enigszins arcane — Pascal naar C omzetten — maar in de volgende sectie staat een korte beschrijving, samen met een link naar een persoonlijke blogpost waarin het uitgebreider wordt besproken.

In tegenstelling tot XeTeX en LuaTeX — die tekst in UTF-8-formaat kunnen verwerken en Unicode-tekstcodering ondersteunen — is Knuths TeX een 8-bits engine, wat betekent dat ervan wordt uitgegaan dat invoertekens in het bereik 0 tot 255 liggen. Hoewel dit een belangrijk onderscheid is, heeft het niet *materieel* invloed op onze bespreking van TeX-tokens, omdat we onderwerpen en principes behandelen die gemeenschappelijk zijn voor alle TeX-engines: ze vormen de kern van de software.

## Hoe kun je TeX-tokens bestuderen?

Het uitpluizen van de route van invoertekst naar TeX-tokens is voor mij een hele reis geweest — ik moet bekennen dat wisselende graden van verwarring onderweg semi-permanente metgezellen waren: TeX is zulke complexe software.

Gedurende enkele jaren (sinds ongeveer 2009) compileer ik routinematig de nieuwste versie van LuaTeX vanuit de broncode — een proces dat heel eenvoudig is dankzij de absoluut uitstekende manier waarop de broncode van LuaTeX wordt verspreid. Op basis van die ervaring raakte ik geïnteresseerd om beter te begrijpen hoe je Knuths oorspronkelijke TeX uit zijn broncode bouwt — een *zeer* ander voorstel, omdat TeX geschreven is met behulp van Knuths literaire programmeermethodologie. Die persoonlijke bouw van TeX, op Windows maar met open-sourcecompilers en -toolsets, werd buiten de TeX Live-distributie om uitgevoerd en is een zelfstandig project. Het vereiste ook het bouwen van de toolchain die nodig is om `tex.web` om te zetten in een C-programma dat vervolgens gecompileerd en daarna in een debugger uitgevoerd kon worden om te zien wat TeX daadwerkelijk doet terwijl het de invoertekens verwerkt.

Knuths oorspronkelijke TeX werd gebruikt in plaats van pdfTeX, XeTeX of LuaTeX omdat ik een versie van TeX nodig had die het dichtst bij de gedrukte broncode in het boek TeX: The Program lag. Dat boek werd voor het eerst gepubliceerd in 1986 en hoewel TeX sindsdien enkele updates heeft ondergaan, ligt de nieuwste versie van TeX (3.14159265, uitgebracht in januari 2014) zeker voldoende dicht bij de broncode in het boek.

Als weerspiegeling van Knuths literaire programmeermethodologie wordt TeX’ broncode verspreid in een tekstformaat genaamd WEB: een mengeling van TeX-documentatie en Pascal-broncode. Het basisidee is dat je twee hulpprogramma’s gebruikt, TANGLE en WEAVE genaamd, die WEB-bestanden verwerken om óf de TeX-documentatie óf de Pascal-broncode te extraheren:

* [TANGLE](http://tug.org/texinfohtml/web2c.html#tangle-invocation) extraheert de Pascal-broncode uit een WEB-bestand
* [WEAVE](http://tug.org/texinfohtml/web2c.html#weave-invocation) extraheert de TeX-documentatie uit het WEB-bestand

Voordat je echter de Pascal-broncode extraheert, moet je Knuths `tex.web` bestand voorbewerken om een aantal wijzigingen toe te passen die het mogelijk maken om TeX’ Pascal-code via een proces genaamd Web2C om te zetten naar C-code. Deze voorbewerkingsstap wordt aangeduid als *het toepassen van wijzigingsbestanden*.

Knuths oorspronkelijke codebestand (tex.web) mag op geen enkele manier rechtstreeks worden gewijzigd; in plaats daarvan pas je wijzigingen toe met behulp van zogenaamde wijzigingsbestanden (extensie `.ch`) die de wijzigingen bevatten die je op het hoofd- `.web` bestand wilt toepassen — zoals `tex.web`. Wijzigingsbestanden worden samengevoegd met Knuths oorspronkelijke broncode — met behulp van een extra hulpprogramma genaamd TIE — om een bestand te maken dat bijvoorbeeld `mytex.web` heet, dat je met TANGLE verwerkt om de Pascal-code te extraheren naar `mytex.pas`. Zodra je een geschikt Pascal-bronbestand hebt, kun je de laatste stappen in het Web2C-proces toepassen om het om te zetten in een C-broncodebestand dat je kunt compileren tot een uitvoerbaar TeX-programma. Als je wilt lezen over het nogal omslachtige Web2C-conversieproces, zijn er meer details op de [persoonlijke blogs van deze auteur](http://www.readytext.co.uk/?p=2529).

Het eindresultaat is een TeX-programma dat kan worden uitgevoerd met de gratis en uitstekende [Eclipse IDE voor C/C++](http://www.eclipse.org/home/index.php) om stap voor stap door TeX’ broncode (in C) te gaan en te zien wat er gebeurt terwijl het door je invoer scrolt. Het is zeker niet het meest vermakelijke tijdverdrijf, omdat de C-code machinegegenereerd is en op sommige plaatsen uiterst moeilijk te volgen is (TeX’ broncode maakt zeer royaal gebruik van GOTOs en globale variabelen). Het boek TeX: The Program blijft van onschatbare waarde om door de C-broncode te navigeren, ook al bevat het boek TeX’ broncode in prachtig opgemaakte Pascal-code.

Om de discussie af te ronden, hier een voorbeeld-screenshot waarop TeX wordt uitgevoerd via de Eclipse IDE met de uitvoering gepauzeerd bij de functie `getnext()`— die de kern vormt van TeX’ processen voor token-generatie.

![Screenshot waarop TeX wordt uitgevoerd via de Eclipse IDE](/files/a2a192556ef325cb2c5164ce39354592ea669f7d)

Stap voor stap door TeX’ C-broncode gaan met behulp van de open-source Eclipse IDE voor C/C++.

## Conclusies en dankwoord

Het schrijven van het eerste artikel en het samenstellen van ideeën voor toekomstige blogposts in de reeks heeft zeker behoorlijk wat tijd gekost. Ik ben John Hammersley en Mary Anne Baynes bij Overleaf enorm dankbaar voor hun steun aan dit idee voor een reeks en voor het toestaan dat ik de tijd kon nemen die nodig was voor aanvullend achtergrondonderzoek. Ik hoop dat deze reeks artikelen onderwerpen van algemeen belang succesvol identificeert en aanpakt, en van waarde blijkt te zijn voor degenen die ze lezen.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://overleaf-pro.ayaka.space/latex/nl/diepgaande-artikelen/01-a-new-series-of-articles-tex-tokens-and-related-concepts-but-why-and-how.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
