> 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/05-an-introduction-to-endlinechar-how-tex-reads-lines-from-text-files.md).

# Een introductie tot \endlinechar: hoe TeX regels uit tekstbestanden leest

Als mensen geven we er de voorkeur aan om tekstbestanden regel voor regel te bekijken en te bewerken. Zodra we denken dat een regel tekst lang genoeg is, drukken we op “enter” (in de teksteditor) om het einde van die regel aan te geven. Achter de schermen zal je teksteditor dat interpreteren als de instructie om een [regeleindeteken](https://en.wikipedia.org/wiki/Newline) toe te voegen op het punt waar je besluit een regel af te breken.

Maar helaas is het niet zo simpel: het probleem is dat verschillende besturingssystemen verschillende ideeën hebben over wat een regeleindeteken is. Om het nog erger te maken, behandelt Windows regeleindetekens anders, afhankelijk van of een bestand wordt geopend in de zogenoemde [*binaire modus* of *tekstmodus*](https://docs.microsoft.com/en-us/cpp/c-runtime-library/text-and-binary-mode-file-i-o?view=vs-2017). Het gevolg is dat, afhankelijk van het hostbesturingssysteem, regels in een tekstbestand kunnen eindigen met verschillende combinaties van tekens, genaamd *regelterugloop* (ASCII/Unicode-teken 13) en *regelvoeding* (ASCII/Unicode-teken 10): aangeduid met `\r` en `\n` respectievelijk.

Duidelijk is dat TeX, om systeemonafhankelijk te zijn, een manier nodig heeft om om te gaan met de eigenaardigheden die worden geïntroduceerd door de verschillende tekens die worden gebruikt om een regel binnen tekstbestanden die het moet lezen en verwerken af te sluiten.

### TeX’ invoerbuffer

Het zal je misschien verbazen, of juist niet, om te horen dat TeX-engines (waaronder LuaTeX en XeTeX) invoerbestanden regel voor regel lezen: ze lezen niet het hele tekstbestand in het geheugen. Hoewel de meeste tekstbestanden die door TeX-engines worden verwerkt minuscuul zijn vergeleken met het beschikbare geheugen op moderne apparaten, wordt elke regel in het bestand afzonderlijk gelezen en opgeslagen in een kleine interne buffer. Maar natuurlijk heeft TeX’ proces van het lezen en opslaan van een regel nog enkele extra bijzonderheden.

## “Ik doe het op mijn manier” — TeX’ \endlinechar-opdracht

Wanneer TeX nog een regel tekst uit een invoerbestand leest, voert het twee “huishoudelijke taken” uit:

* het verwijdert eventuele afsluitende regeleindetekens (\r of \n) die aan het einde van de regel worden gevonden — d.w\.z. het verwijdert alle regeleinden die werden toegevoegd toen het tekstbestand oorspronkelijk naar schijf werd opgeslagen;
* het verwijdert ook alle spatiekarakters aan het einde van de regel.

Deze twee processen gebeuren voordat TeX daadwerkelijk begint met het scannen van de tekens in de regel zelf: beschouw ze als een vorm van “huishoudelijk werk” ter voorbereiding op de volgende verwerkingsstap (scannen). Dus, tijdens deze eerste fase van het lezen van de regel heeft TeX alle platformafhankelijke regeleinden (en eventuele witruimte aan het einde) verwijderd: hoe weet (detecteert) TeX dan waar die regel eindigt? TeX heeft nog een ander “trucje” achter de hand: de `\endlinechar` commando.

Om het probleem van platformafhankelijke regeleindetekens te vermijden, introduceert TeX het concept van `\endlinechar`, een door de gebruiker definieerbare parameter die TeX gebruikt om zijn eigen regeleindeteken helemaal aan het einde van een tekstregel in te voegen die het net uit een bestand heeft gelezen. Merk opnieuw op dat dit gebeurt voordat TeX daadwerkelijk begint met het scannen van de tekens — het is de laatste stap in TeX’ “huishoudelijke taken” voordat het klaar is om te beginnen met het lezen (scannen) van de daadwerkelijke tekens in de regel.

TeX zal de waarde gebruiken die is opgeslagen in `\endlinechar` om zijn eigen afsluitteken van het regeleinde toe te voegen als, en alleen als, `\endlinechar` goed is gedefinieerd — in Knuths TeX betekent dat dat het een waarde moet hebben die >-1 en < 256 is. Meestal, `\endlinechar` wordt de waarde 13 toegekend: het carriage return-teken — meestal aangeduid met `\r` in programmeerliteratuur.

Maar als je `\endlinechar=-1` ergens in je invoer schrijft, dan zal de *volgende keer* dat TeX een regel tekst uit een bestand leest, *niet* geen extra afsluitteken aan het einde van een regel toevoegen. Daardoor zal je invoer worden behandeld als één lange doorlopende tekenreeks totdat je `\endlinechar` herstelt naar een passende waarde — meestal 13 (`\r`):

```latex
\endlinechar=13
```

Een van TeX’ 16 categoriecodes (waarde 5) is gereserveerd om het teken “einde van regel” aan te geven, wat meestal het teken is dat `\endlinechar` \endlinechar `\endlinechar` invoegt — dat wordt ingevoegd als (en alleen als) de waarde van

## Samenvatting van de verwerking van het regeleinde

Hoewel deze details vrij laag-niveau zijn, zullen ze interessant zijn voor iedereen die wil ontdekken hoe je macro’s schrijft die het lezen van tekstregels verwerken.

1. Wanneer TeX een regel uit je bestand leest, zal het eerst alle tekens aan het einde van de regel verwijderen (`\r` en `\n`) die door je teksteditor zijn toegevoegd toen het bestand werd opgeslagen. Daarnaast:

* verwijdert TeX ook eventuele spaties aan het einde van de regel;
* TeX *doet niet* tabtekens aan het einde verwijderen (ASCII-tekencode 9).

**Terzijde**: Een van de broncodebestanden van LuaTeX, het bestand dat code bevat om deze verwijdering van spaties uit te voeren, bevat de volgende opmerking:

> (Geciteerd in het bestand `luatex.c`) “David Fuchs vermeldt dat deze \[spatie]verwijdering werd gedaan om de draagbaarheid van TeX-documenten te waarborgen, gezien het opvullen met spaties op vaste-record-"regels" op sommige systemen uit die tijd, bijvoorbeeld IBM VM/CMS en OS/360.”

3. Na stap (1) voegt TeX een extra teken in waarvan de waarde is opgeslagen in \endlinechar (mits dat geschikt is gedefinieerd: >-1 en < 256)
4. \endlinechar wordt meestal ingesteld op de waarde 13 (`\r`), wat betekent dat het teken dat in stap (2) wordt toegevoegd meestal teken 13 is (`\r`) — maar je kunt \endlinechar natuurlijk op een andere waarde instellen om speciale effecten te bereiken via macroprogrammering.
5. Wanneer de routines voor het scannen van invoer het teken `\r` (tekencode 13) aan het einde van zijn interne buffer detecteren, zal TeX, zoals gebruikelijk, de categoriecode ervan controleren om te beslissen wat ermee te doen.
6. Teken 13 *gewoonlijk* heeft categoriecodewaarde 5 (“einde van regel”), tenzij de categoriecode natuurlijk is gewijzigd — sommige macro’s maken het regeleindeteken actief om geavanceerde verwerking uit te voeren.
7. Afhankelijk van TeX’ interne toestand (in feite wat het aan het doen is) kan TeX dat het regeleindeteken (meestal `\r`, categoriecode 5) veranderen in een spatiekarakter — zo worden regeleindetekens spaties.
8. Merk ook op dat TeX tekens met categoriecode 5 gebruikt om te detecteren wanneer het een lege regel heeft gelezen en een `\par` token.

De volgende afbeelding geeft een visuele samenvatting van stappen (1) en (2): het verwijderen van regeleindetekens en spatiekarakters aan het einde en het invoegen van `\endlinechar` klaar voor de taak van het scannen van de invoer.

![Hoe TeX \endlinechar gebruikt](/files/0f91ef3473fe40152f3c1c22a27ef9421ff263a7)


---

# 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/05-an-introduction-to-endlinechar-how-tex-reads-lines-from-text-files.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.
