> 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/meer-onderwerpen/20-how-tex-macros-actually-work-part-2.md).

# Hoe TeX-macro's echt werken: Deel 2

[Deel 1](/latex/nl/meer-onderwerpen/19-how-tex-macros-actually-work-part-1.md) [Deel 2](/latex/nl/meer-onderwerpen/20-how-tex-macros-actually-work-part-2.md) [Deel 3](/latex/nl/meer-onderwerpen/21-how-tex-macros-actually-work-part-3.md) [Deel 4](/latex/nl/meer-onderwerpen/22-how-tex-macros-actually-work-part-4.md) [Deel 5](/latex/nl/meer-onderwerpen/23-how-tex-macros-actually-work-part-5.md) [Deel 6](/latex/nl/meer-onderwerpen/24-how-tex-macros-actually-work-part-6.md)

## Inleiding: Een verhaal in beelden

Zoals opgemerkt in Deel 1 moet TeX elk teken in uw `.tex` bestand “lezen”, en dat leesproces wordt nauwkeuriger aangeduid als *scannen*. Traditioneel wordt TeX’s invoerverwerking (scannen) vergeleken met TeX dat “ogen” heeft om de invoer waar te nemen, dus we nemen die beproefde analogie over in de onderstaande afbeeldingen.

### Afbeelding 1: De ogen zijn klaar

We nemen aan dat TeX enige invoer heeft ontvangen van een `.tex` bestand en op het punt staat onze tekenreeks te verwerken `Hello World \jobname` die in een alinea tekst is opgenomen. Het zal elk teken om de beurt controleren en de categoriecode ervan onderzoeken.

![De ogen van TeX klaar om een regel tekst te scannen](/files/ac60370ddd22d4d0cffb3d0135690ecb2b9ba233)

### Afbeelding 2: Verwerking van categoriecodes

In de volgende afbeelding zien we in hoofdlijnen (met verdere details hieronder) hoe TeX reageert op verschillende categoriecodes. Merk op dat er in totaal 16 categoriecodes zijn, maar om het eenvoudig te houden tonen we slechts drie: 11, 10 en 0. Andere tekencodes worden belangrijk tijdens TeX’s zetprocessen, zoals het opbouwen van tabellen, het zetten van wiskunde en het herkennen van macroparameters.

![TeX die op verschillende categoriecodes reageert](/files/505b5872fcb09bcd195b4c8e1c954baf42b9c691)

#### Toelichting bij Afbeelding 2

Hier bekijken we TeX terwijl het tekens leest (scant) die deel uitmaken van een alinea tekst. TeX inspecteert elk teken, controleert de categoriecode en neemt de passende actie op basis van de categoriecode en TeX’s “modus” (een status op basis van wat het momenteel doet).

* **(groene ogen)** TeX zal zien dat elk van die tekens categoriecode 11 (“letter”) heeft en zal die tekens doorgeven voor het zetten als onderdeel van de alinea die het aan het opbouwen is. TeX geeft echter niet alleen de tekencode door (gebruikt die niet alleen), maar gebruikt in plaats daarvan het paar getallen (tekencode, categoriecode) om een samengestelde gehele waarde te berekenen die een *tekentoken* (zie hieronder) wordt genoemd. Zodra dat tekentoken is geproduceerd, komt het in TeX’s interne zetprocessen/-algoritmen terecht.
* **(blauwe ogen)** TeX ziet een spatiekarakter (ASCII 32) met categoriecode 10 (“spaties”) — merk op dat, zoals besproken, het heel goed mogelijk is dat de categoriecode van een spatie (ASCII 32), of van welk teken dan ook, al vóórdat het door TeX wordt ingelezen, naar een andere waarde is veranderd.

Hoe TeX tekens met categoriecode 10 (“spaties”) daadwerkelijk verwerkt, varieert afhankelijk van wanneer/waar TeX ze ziet — TeX’s huidige “modus”. Bijvoorbeeld, er zijn momenten waarop TeX ze eenvoudigweg overslaat. Hier zal TeX weten dat het een teken met categoriecode 10 heeft gedetecteerd (dat toevallig een spatie is, ASCII 32) tijdens het verwerken van alinea-tekst, zodat het dit uiteindelijk zal omzetten in zogenaamde interwoordlijm: een soort flexibele ruimte die kan uitrekken of inkrimpen.

* **(rode ogen)** Hier heeft TeX een teken waargenomen met een zeer belangrijke categoriecode: 0 (escape-teken).

Een escape-teken—*elk* teken met categoriecode 0—zegt TeX over te schakelen naar een speciale leesmodus en de daaropvolgende tekens zorgvuldig te scannen (te lezen), omdat zij de naam van een *commando*, geen tekst om te zetten. In TeX-literatuur zult u de term “command” ook zien als *controlesequentie*. Nadat TeX een escape-teken heeft gezien, controleert het de categoriecode van het teken dat volgt *direct erna*; dit komt doordat TeX twee typen commando’s herkent:

* commando’s met meerdere letters, genaamd *besturingswoorden*: het teken dat direct na het escape-teken volgt heeft categoriecode 11. Alle daaropvolgende tekens met categoriecode 11 worden beschouwd als onderdeel van de naam van een commando. TeX zal ophouden met zoeken naar tekens die deel uitmaken van een commandonaam wanneer het een teken detecteert dat *doet niet* geen categoriecode 11 hebben — zoals een spatiekarakter met categoriecode 10.
* commando’s met één letter, genaamd *controlesymbolen*: het teken dat direct na het escape-teken volgt *doet niet* heeft geen categoriecode 11.

U kunt een escape-teken zien als iets dat TeX ertoe aanzet om uit zijn gebruikelijke scan-gedrag te “ontsnappen” en voor de volgende paar tekens een andere aanpak te volgen — dit wordt aangegeven door het rood gestippelde vak dat laat zien dat TeX zal **Begin met zoeken naar een commando**.

### Afbeelding 3: Verwerking van categoriecode 11 (“letters”)

In Deel 1 van deze serie merkten we op dat elk teken dat TeX uit zijn invoer leest, wordt beschreven door twee gehele getallen:

* tekencode: een geheel getal dat de numerieke representatie van een teken definieert;
* categoriecode: een waarde van 0 tot 15 die TeX toekent aan elk teken dat in zijn invoer kan voorkomen.

TeX gebruikt deze twee informatieonderdelen in de volgende fase van zijn verwerking: het maken van tekentokens.

Afbeelding 3 breidt Afbeelding 2 uit om te laten zien wat TeX doet met deze invoertekens met categoriecode 11 (letter): het maakt *tekentokens*—gehele waarden die TeX berekent met een combinatie van de categoriecode en tekencode van dat teken.

**Opmerking**: In dit voorbeeld bespreken we alleen tekens met categoriecode 11, maar u moet weten dat TeX ook tokenwaarden maakt voor invoertekens met andere categoriecodes—behalve categoriecode 0, die nooit in een token wordt omgezet: het escape-teken fungeert eenvoudigweg als een “schakelaar” om speciale verwerking te activeren.

![TeX die tekens met categoriecode 11 verwerkt](/files/83352dd32c31021ed698e7b6de718450126c4348)

Afbeelding 5 hieronder zal laten zien wat TeX doet wanneer het een teken met categoriecode 0 (een escape-teken) ziet.

#### Toelichting bij Afbeelding 3: Verwerking van categoriecode 11 (“letter”)

Hier concentreren we ons op de **green** activiteit: wat er gebeurt wanneer TeX tekens ziet met categoriecode 11 (“letter”). Nadat TeX een teken heeft gelezen en de categoriecode ervan heeft bepaald (hier is die 11), is wat TeX daarna doet *combineren* dit paar getallen tot één geheel getal, een tekentoken genoemd: deze tokens (gehele getallen) worden doorgegeven aan de volgende fase van TeX’s interne zetalgoritmen/-verwerking. Zoals opgemerkt zal TeX ook tekentokens maken voor tekens met andere categoriecodes (dus niet 11); hier gebruiken we categoriecode 11 slechts als voorbeeld.

Elk tekentoken (een geheel getal) koppelt een invoerteken blijvend aan de categoriecode die aan dat teken is toegekend **op het moment dat het door TeX werd gescand (ingelezen)**: dat feit is van cruciaal belang om het gedrag van TeX/LaTeX-macro’s te begrijpen. Uiteraard zal TeX tijdens verdere verwerking soms een tekentoken moeten opsplitsen om te bepalen welk (tekencode, categoriecode)-paar is gebruikt om dat token samen te stellen. Zodra een teken echter door TeX’s invoer- (scan)proces is ingelezen, leidt de door TeX berekende tekentokenwaarde ertoe dat dat teken wordt *permanent* gekoppeld aan de categoriecode die eraan is toegekend *op het moment dat het werd ingelezen*.

**Tekentokens berekenen**

TeX-engines gebruiken een eenvoudige formule om een tekentoken te berekenen, $$T$$, uit een teken met categoriecode $$C$$ en tekencode $$A$$:

$$T = \text{constant} \times C + A$$

8-bits-engines, zoals pdfTeX, gebruiken:

$$T = 256\times C + A$$

Unicodebewuste engines, zoals XeTeX of LuaTeX, moeten een andere formule gebruiken omdat tekencodes onder Unicode veel groter kunnen zijn dan het maximum van 255 in de oudere 8-bits ASCII-coderingswereld. XeTeX gebruikt bijvoorbeeld:

$$T= 2^{21}\times C + A \hskip5mm \text{(where } A \text{ is a Unicode character code value)}$$

Nogmaals, het is de moeite waard op te merken dat tekens met categoriecode 0 niet worden omgezet in tekentokens: categoriecode 0 heeft een heel speciale plaats in TeX’s invoerfiltering en wordt uitsluitend gebruikt als een “schakelaar” om TeX in een speciale scanmodus van de volgende paar tekens te zetten. Afbeelding 5 behandelt dit.

### Afbeelding 4: Verwerking van categoriecode 10 (“spatie”)

De manier waarop TeX tekens met categoriecode 10 (“spatie”) behandelt, hangt af van waar TeX op dat moment mee bezig is wanneer het binnen de invoer een teken met categoriecode 10 detecteert. In ons voorbeeld voert TeX gewone alinea-verwerking uit en zal het spatiekarakter met categoriecode 10 worden omgezet in interwoordlijm.

![TeX die tekens met categoriecode 10 verwerkt](/files/12a80d4eada43ff28546cfcea7cb7be21306dda2)

De manier waarop TeX spaties behandelt kan nogal eigenzinnig lijken, maar een goed overzicht is te vinden in hoofdstuk 1 en 2 van [TeX by Topic](http://www.eijkhout.net/texbytopic/texbytopic.html) van Victor Eijkhout — u kunt [een gratis PDF-kopie downloaden](https://bitbucket.org/VictorEijkhout/tex-by-topic) via zijn website.

Wanneer TeX bijvoorbeeld een teken met categoriecode 10 ziet, zijn er momenten waarop TeX:

* ze allemaal overslaat (negeert) — bijvoorbeeld wanneer TeX in verticale modus staat;
* meerdere spaties omzet in één enkele spatie — waarbij extra spaties worden overgeslagen, bijvoorbeeld bij het verwerken van een alinea;
* ze absorbeert — bijvoorbeeld één spatie na een commandonaam absorberen;

Merk ook op dat er momenten zijn waarop TeX ook *genereert* spaties—door regeleindetekens om te zetten in een spatie. Het gedrag/de behandeling van spatiekarakters (elk teken met categoriecode 10) is een van TeX’s “eigenheden”: het kost tijd/oefening om vertrouwd (comfortabel) te raken met dit aspect van TeX.

### Afbeelding 5a: Verwerking van categoriecode 0 (een “escape-teken”)

In deze afbeelding heeft TeX alle tekens verwerkt tot aan het `\` teken, dat categoriecode 0 heeft: het “escape-teken” — we gebruiken nog een reeks afbeeldingen om te laten zien hoe TeX een escape-teken verwerkt en de naam van een commando identificeert.

![TeX die tekens met categoriecode 0 verwerkt](/files/53d27c8fad5363e121efa95fb6220d6db4df6e87)

### Afbeelding 5b: Zoeken naar een commandonaam

In deze afbeelding kijken we in het rood gestippelde vakgedeelte (**Begin met zoeken naar een commando**) om te zien wat TeX doet nadat het een escape-teken heeft gezien.

![TeX die zoekt naar een commandonaam](/files/6b04eb8d47bdb3b08c8f82a8f2260e083e0168b3)

**Toelichting bij Afbeelding 5b**

* Zodra het escape-teken is herkend, heeft het zijn werk gedaan: het fungeerde als schakelaar en neemt niet meer deel aan verdere verwerking — specifiek wordt het **niet** omgezet in een tekentoken.
* Voor het gemak herhalen we enkele eerder genoemde details. Nadat TeX een escape-teken heeft gezien, controleert het de categoriecode van het teken dat volgt *direct erna*; dit komt doordat TeX twee typen commando’s herkent:
* * commando’s met meerdere letters, genaamd *besturingswoorden*: het teken dat direct na het escape-teken volgt heeft categoriecode 11. Alle daaropvolgende tekens met categoriecode 11 worden beschouwd als deel van de naam van een commando (*besturingswoord*). TeX zal ophouden met zoeken naar tekens die deel uitmaken van een commandonaam wanneer het een teken detecteert dat *doet niet* geen categoriecode 11 hebben — zoals een spatiekarakter met categoriecode 10.
  * commando’s met één letter, genaamd *controlesymbolen*: het teken dat direct na het escape-teken volgt *doet niet* heeft geen categoriecode 11.
* In ons voorbeeld is het eerste teken na het `\` is een `j` (categoriecode 11), wat TeX vertelt te zoeken naar een commando dat (mogelijk) een reeks tekens met meerdere letters en categoriecode 11 is.
* TeX blijft controleren op meer tekens met categoriecode 11. Zodra het een teken met een andere categoriecode detecteert, zoals een spatie met categoriecode 10, weet TeX dat het het einde van de commandonaam heeft bereikt. Om dit te benadrukken: hier was het een spatiekarakter (categoriecode 10) dat het einde van het commando “beëindigde”, maar het had elk teken kunnen zijn dat **niet** heeft geen categoriecode 11.

## Deel 3

In Deel 3 gaan we verder vanaf Afbeelding 5b om dit deel van het verhaal af te ronden — hoe TeX een commando identificeert — en gaan we door met wat het daarna doet. We kijken ook dieper naar enkele interne aspecten van TeX’s verwerking — waarvan delen bij een eerste lezing kunnen worden overgeslagen, tenzij u echt van de details houdt.

[Deel 1](/latex/nl/meer-onderwerpen/19-how-tex-macros-actually-work-part-1.md) [Deel 2](/latex/nl/meer-onderwerpen/20-how-tex-macros-actually-work-part-2.md) [Deel 3](/latex/nl/meer-onderwerpen/21-how-tex-macros-actually-work-part-3.md) [Deel 4](/latex/nl/meer-onderwerpen/22-how-tex-macros-actually-work-part-4.md) [Deel 5](/latex/nl/meer-onderwerpen/23-how-tex-macros-actually-work-part-5.md) [Deel 6](/latex/nl/meer-onderwerpen/24-how-tex-macros-actually-work-part-6.md)


---

# 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/meer-onderwerpen/20-how-tex-macros-actually-work-part-2.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.
