> 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/da/dybtgaende-artikler/01-a-new-series-of-articles-tex-tokens-and-related-concepts-but-why-and-how.md).

# En ny artikelserie: TeX-tokens og relaterede begreber—men hvorfor (og hvordan)?

Denne indledende artikel har til formål at forklare, hvorfor denne serie blev skrevet, hvad jeg håber at opnå, og at give baggrundsinformation om de teknikker, der bruges til at udforske TeX-tokens gennem observation af en TeX-motors indre virkemåde. Denne artikelside er også designet til at indeholde links til alle artikler i serien og vil blive opdateret, så disse links tilføjes, efterhånden som hver ny artikel udgives.

### Links til artiklerne

Hver artikel vil indeholde et sæt links til andre artikler i denne serie.

* [Hvad er en “TeX-token”?](/latex/da/dybtgaende-artikler/53-what-is-a-tex-token.md)
* [Hvad er en “TeX-tokenliste”?](/latex/da/dybtgaende-artikler/54-what-is-a-tex-token-list.md)

## Baggrund for denne artikelserie

Motivationen til at skrive denne serie artikler opstod gennem læsning af materiale om TeX, som forklarede mange af TeX’s aktiviteter gennem begrebet “tokens” sammen med TeX’s “tokeniseringsproces”, “tokenlister” og beslægtede begreber som “makroudvidelse” og “udvidelige kommandoer”. Hver gang jeg stødte på TeX-relaterede forklaringer formuleret i termer af “TeX-tokens”, blev det samme spørgsmål ved med at dukke op: Hvad præcist, *er* en TeX-token? Jeg var nødt til at finde ud af det.

Omfanget og indholdet af den første artikel, [Hvad er en “TeX-token”?](/latex/da/dybtgaende-artikler/53-what-is-a-tex-token.md), er af sin natur ret “tæt på metallet”, som programmører ville sige, og der er ingen tvivl om, at “TeX-tokens” kunne klassificeres som et ret esoterisk emne at skrive om: så hvorfor overhovedet gøre det? I sidste ende tager man et standpunkt — eller måske et spring i tro — om, at andre mennesker måske også har grublet over det samme emne, og at der er plads til en eller to artikler til at udfylde nogle huller. Mit mål er at give nogle nyttige baggrundsforklaringer, som kan supplere andet materiale, du måske læser, og som forhåbentlig kan hjælpe med bedre at forstå nogle centrale begreber, som opstår, når du lærer om TeX og udforsker makroer og programmering.

Det er klart, at vi inden for blogartiklers rammer kun kan kradse i overfladen — det er simpelthen ikke praktisk at forsøge at forklare alle væsentlige emner eller at dykke ned i de mest uklare vande. Nødvendigvis vil jeg springe en del detaljer over og gå den fine linje mellem overforenkling og at presse analogierne til bristepunktet.

“Skriv artikler, du selv ville have ønsket at læse” er en nyttig rettesnor og en, jeg har gjort mit bedste for at følge, mens jeg skrev denne serie.

## Når spørgsmålet er stillet, hvad så?

Den umiddelbare udfordring var klar: hvordan finder man ud af noget om TeX-tokens, når sådanne detaljer (om tokens, tokenisering osv.) er begravet dybt i softwarekoden i TeX-motorer — man skal egentlig ikke bekymre sig om det, medmindre man naturligvis faktisk er interesseret i netop de detaljer.

En måde at udforske svarene på disse spørgsmål er at forsøge at læse gennem TeX’s oprindelige kildekode i [`tex.web`](https://www.ctan.org/tex-archive/systems/knuth/dist/tex)—ved at køre [WEAVE](http://tug.org/texinfohtml/web2c.html#weave-invocation) for at udtrække TeX-dokumentationen — eller ved at købe et eksemplar af bogen [Computere & typografi, bind B: TeX: Programmet](https://www.amazon.co.uk/Computers-Typesetting-TEX-Program-v/dp/0201134373). Jeg købte et eksemplar af den trykte bog! Det er bestemt yderst hjælpsomt at have TeX’s kildekode udgivet i bogform, og der er naturligvis mange nyttige forklaringer hele vejen igennem. Knuths TeX er dog skrevet i Pascal, og Pascal-kildekoden er naturligvis dokumenteret ved hjælp af Knuths litterate programmeringsmetode — hvor koden præsenteres i små, mundrette bidder. Det er let at se, hvordan Knuths tilgang til dokumentation virkelig hjælper for et stykke software så komplekst som TeX, men læsning af bogen indebærer en hel del krydshenvisninger og spring frem og tilbage mellem sider.

Selv om bogen er nyttig, var den alene ikke helt tilstrækkelig for mig til at få en bedre forståelse af, hvad der sker, når TeX opretter “tokens” — det emne, jeg var særligt interesseret i. Der er kun én måde at finde ud af det på rigtigt: byg TeX-programmet, kør det på en lille TeX-fil, og se bogstaveligt talt koden blive udført, mens TeX scanner og læser inputtet. Detaljerne i at bygge TeX fra kildetekst er noget esoteriske — at konvertere Pascal til C — men der er en kort beskrivelse i næste afsnit sammen med et link til et personligt blogindlæg, der går mere i detaljer.

I modsætning til XeTeX og LuaTeX — som kan behandle tekst i UTF-8-format og understøtter Unicode-tekstkodning — er Knuths TeX en 8-bit-motor, hvilket betyder, at den antager, at inputtegn ligger i området 0 til 255. Selvom dette er en vigtig forskel, påvirker det ikke *væsentligt* vores diskussion af TeX-tokens, fordi vi dækker emner og principper, der er fælles for alle TeX-motorer: de er helt centrale for softwaren.

## Hvordan kan man studere TeX-tokens?

At udrede vejen fra inputtekst til TeX-tokens har for mig været en hel rejse — jeg bør indrømme, at varierende grader af forvirring var næsten permanente ledsagere undervejs: TeX er sådan et komplekst stykke software.

I nogle år (siden omkring 2009) har jeg rutinemæssigt kompilere den nyeste version af LuaTeX fra dens kildekode — en proces, der er ganske ligetil takket være den helt suveræne måde, hvorpå LuaTeX’s kildekode distribueres. På baggrund af den erfaring blev jeg interesseret i bedre at forstå, hvordan man bygger Knuths oprindelige TeX fra dens kildekode — en *meget* anderledes opgave, fordi TeX er skrevet ved hjælp af Knuths litterate programmeringsmetode. Den personlige bygning af TeX, på Windows men med open source-kompilere og værktøjssæt, blev udført uden for TeX Live-distributionen og er et selvstændigt projekt. Det krævede også at bygge den værktøjskæde, der skulle bruges til at konvertere `tex.web` til et C-program, som kunne kompileres og derefter køres i en debugger for at se, hvad TeX faktisk gør, mens det behandler inputtegnene.

Knuths oprindelige TeX blev brugt i stedet for pdfTeX, XeTeX eller LuaTeX, fordi jeg havde brug for en version af TeX, der lå tættest på den trykte kildekode i bogen TeX: The Program. Den bog blev første gang udgivet i 1986, og selv om TeX har gennemgået nogle opdateringer siden da, er den nyeste version af TeX (3.14159265, udgivet i januar 2014) bestemt tilstrækkeligt tæt på kildekoden i bogen.

Som en afspejling af Knuths litterate programmeringsmetode distribueres TeX’s kildekode i et tekstformat kaldet WEB: en blanding af TeX-dokumentation og Pascal-kildekode. Grundideen er, at man bruger to hjælpeprogrammer kaldet TANGLE og WEAVE, som behandler WEB-filer for enten at udtrække TeX-dokumentationen eller Pascal-kildekoden:

* [TANGLE](http://tug.org/texinfohtml/web2c.html#tangle-invocation) udtrækker Pascal-kildekoden fra en WEB-fil
* [WEAVE](http://tug.org/texinfohtml/web2c.html#weave-invocation) udtrækker TeX-dokumentationen fra WEB-filen

Men før du udtrækker Pascal-kildekoden, skal du forbehandle Knuths `tex.web` fil for at anvende en række ændringer, der gør det muligt at omdanne TeX’s Pascal-kode til C-kode ved hjælp af en proces kaldet Web2C. Dette forbehandlingstrin omtales som *anvendelse af ændringsfiler*.

Knuths oprindelige kodefil (tex.web) må ikke ændres direkte på nogen måde; i stedet anvender du ændringer ved hjælp af såkaldte ændringsfiler (filendelsen `.ch`) som indeholder de ændringer, du ønsker at anvende på den primære `.web` fil — såsom `tex.web`. Ændringsfiler flettes med Knuths oprindelige kildekode — ved hjælp af et ekstra hjælpeprogram kaldet TIE — for at oprette en fil kaldet, lad os sige, `mytex.web` som du behandler med TANGLE for at udtrække Pascal-koden til `mytex.pas`. Når du har en passende Pascal-kildefil, kan du anvende de sidste trin i Web2C-processen til at konvertere den til en C-kildekodefil, som du kan kompilere til et eksekverbart TeX-program. Hvis du vil læse om den noget snørklede Web2C-konverteringsproces, er der yderligere detaljer på denne forfatters [personlige blogside](http://www.readytext.co.uk/?p=2529).

Slutresultatet er et TeX-program, som kan køres ved hjælp af den gratis og fremragende [Eclipse-IDE til C/C++](http://www.eclipse.org/home/index.php) for at gå trin for trin gennem TeX’s kildekode (i C) og se, hvad der sker, mens den scanner dit input. Det er bestemt ikke den mest underholdende tidsfordriv, fordi C-koden er maskin-genereret og nogle steder ekstremt vanskelig at følge (TeX’s kildekode gør meget generøs brug af GOTO’er og globale variabler). Bogen TeX: The Program er stadig uvurderlig til at hjælpe med at navigere i C-koden, selv om bogen indeholder TeX’s kildekode i smukt satsede Pascal-kode.

For at runde diskussionen af, er her et eksempel på et skærmbillede, der viser TeX kørt via Eclipse-IDE’en, hvor eksekveringen er sat på pause ved funktionen `getnext()`—som er kernen i TeX’s token-genereringsprocesser.

![Skærmbillede, der viser TeX kørt via Eclipse-IDE’en](/files/a6c42a0b3e40fb49553be907b6a4e3eacfa0c7b8)

Gå trin for trin gennem TeX’s C-kildekode ved hjælp af den open source Eclipse-IDE til C/C++.

## Konklusioner og en tak

Det har bestemt været ret tidskrævende at skrive den første artikel og samle idéer til fremtidige blogindlæg i serien. Jeg er meget taknemmelig over for John Hammersley og Mary Anne Baynes hos Overleaf for deres støtte til denne idé om serien og for at give mig den tid, der var nødvendig til yderligere baggrundsresearch. Mit håb er, at denne serie artikler med succes identificerer og behandler emner af fælles interesse og viser sig at være værdifuld for dem, der læser dem.


---

# 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/da/dybtgaende-artikler/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.
