> 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/flere-emner/19-how-tex-macros-actually-work-part-1.md).

# Sådan virker TeX-makroer egentlig: Del 1

[Del 1](/latex/da/flere-emner/19-how-tex-macros-actually-work-part-1.md) [Del 2](/latex/da/flere-emner/20-how-tex-macros-actually-work-part-2.md) [Del 3](/latex/da/flere-emner/21-how-tex-macros-actually-work-part-3.md) [Del 4](/latex/da/flere-emner/22-how-tex-macros-actually-work-part-4.md) [Del 5](/latex/da/flere-emner/23-how-tex-macros-actually-work-part-5.md) [Del 6](/latex/da/flere-emner/24-how-tex-macros-actually-work-part-6.md)

## Introduktion: Formålet med denne serie

Denne artikelserie har et ambitiøst mål: at forklare *hvordan* TeX-makroer (såsom LaTeX-kommandoer) faktisk fungerer — på det mest fundamentale niveau, inde i selve TeX-motorens software. I stedet for at basere sig *udelukkende* på en samling eksempelmakroer, der er designet til at demonstrere forskellige funktioner, specialtilfælde og adfærd i TeX, vil vi kigge ind i selve TeX for at se *hvordan* og *hvorfor* hvorfor dets makroprogrammeringsmetoder fungerer, som de gør.

For at nå vores mål er vi nødt til at begynde med at diskutere emner, der er ret lavniveauprægede, og i første omgang kan de synes noget fjerne fra opgaven med at sætte dine dokumenter. Forhåbentlig vil du efter et dybere dyk komme derfra med et fundament til at opbygge en bedre forståelse, som i sidste ende vil spare dig en masse tid og måske også mindske frustrationen.

### TeX-programmeringssproget: Kender du følelsen?

Det er ikke urimeligt at beskrive TeX-programmeringssproget som noget dunkel, fordi det er det — i hvert fald efter standarderne for de fleste gængse programmeringssprog, der bruges i dag. Når du begynder din rejse for at lære mere om TeX/LaTeX, især hvis du vil skrive ikke-trivielle makroer, støder du hurtigt på begreber som kategorikoder, tokens/tokenisering og “ekspansion” af kommandoer eller makroer. Denne strøm af begreber er sandsynligvis ret fremmed, og det kan måske få dig til at føle dig forvirret og til tider en smule frustreret, da vejen til succes ikke altid bliver hjulpet på vej af nogle af TeX/LaTeX’s næsten uigennemtrængelige fejlmeddelelser.

## Så hvor begynder vi? Med kategorikoder.

TeX-motorer hører til en softwareklasse kaldet [kompilatorer](https://en.wikipedia.org/wiki/Compiler): programmer, som tager en fil skrevet i et *kilde-* sprog og *kompilerer* (transformerer) den til en outputfil skrevet i et *mål-* sprog. Mere specifikt er TeX en *dokumentkompilator*. For TeX-motorer (kompilatorer) er inputfilen skrevet i TeX-sætningssproget, og målet er en outputfil skrevet i et andet “sprog” såsom [DVI](https://en.wikipedia.org/wiki/Device_independent_file_format) eller PDF—selvom vi er lidt løse i vores forståelse af “sprog”.

Lad os se nærmere på kilde-, eller input-, “sproget”, der bruges til at skrive din TeX-fil. En `.tex` fil er i sidste ende én lang sekvens af tegn (inklusive linjeskifttegn): bestående af tekst, der skal sættes, afbrudt med `\`, `}`, `$`, `[` og alle mulige slags tegn, som kan forekomme i et tilsyneladende næsten uendeligt antal kombinationer. Enhver, der ikke bruger TeX/LaTeX, kan se på en typisk `.tex` fil og tilgives for at opfatte den som en temmelig forvirrende sammenblanding af tegn med lidt, om overhovedet nogen, synlig filstruktur. LaTeX-makropakken er bestemt med til i nogen grad at “pålægge” en vis grundlæggende struktur på en .tex-inputfil. Men mellem `\begin{document}` og `\end{document}` er det op til dokumentforfatteren, hvad der kommer derind. Hvis du ser på `.tex` filer skrevet med Knuths oprindelige Plain TeX-makropakke, vil du se, at dokumentstrukturen næsten helt mangler.

Så generelt kan en TeX-inputfil fremstå som ret ustruktureret, en tilsyneladende vilkårlig blanding af indhold, der skal sættes, afbrudt med instruktioner (kommandoer), der styrer sætningen af dette indhold. Hvordan er det overhovedet muligt for TeX at give mening til en typisk `.tex` inputfil: at filtrere denne indkommende samling af tegn til handlingsrettede instruktioner for sætningsmotoren og indhold, der skal sættes?

### Filtrering af sammenblandingen: Sig hej til kategorikoder

Enhver menneskelig iagttager, som ikke ved noget om TeX, kunne se på en `.tex` fil og genkende bestemte tegn såsom `$` og vide, at det er tegnet for en valuta, eller se et `&` og identificere det som et og-tegn. Denne iagttager udleder en *betydning* for hvert tegn, de ser—en betydning baseret på den rolle, tegnet spiller i menneskelig kommunikation. Derudover kan de se tegn som `a`, `e`, `eller` og vide, at de klassificeres som vokaler, mens andre såsom `b`, `c` eller `d` klassificeres som konsonanter. Som mennesker har vi en slags indbygget opslagstabel (i vores hukommelse), som vi tildeler en betydning til hvert tegn, vi ser—en betydning baseret på den rolle, tegnet spiller i de sprog, vi kan kommunikere på.

For at behandle en `.tex` fil må TeX-softwaren også se på hvert tegn i dit input, og den skal også tildele en *betydning* til hvert eneste tegn, den “ser”. TeX er dog blot en softwarebaseret maskine, der arbejder med at behandle tekst—lagret som en sekvens af heltal (tegkoder) placeret i en inputfil. Som maskine må TeX programmeres med de relevante data, som fortæller den, hvordan den skal bestemme betydningen af et tegn, den “ser på”, og derefter hvad den skal gøre med det. Hvordan opnår TeX dette?

Svaret er et af disse TeX-specifikke begreber: *kategorikoder,* hvoraf der er 16, fra 0 til 15. For så vidt angår TeX, har hvert tegn, som det nogen sinde forventer at se i en `.tex` fil en såkaldt *kategorikode* forhåndstildelt. Inde i TeX-softwaren er der en slags “opslagstabel”, som oplister kategorikoden *aktuelt* tildelt til hvert tegn, som TeX kan komme til at se i en .tex-inputfil. Du bør opfatte TeX’s kategorikoder som en tildeling af en *betydning* til hvert enkelt tegn i inputstrømmen, som TeX skal undersøge (scanne).

For at sætte dit dokument må en TeX-motor læse (scanne) hvert eneste tegn, men TeX’s umiddelbare interesse er ikke de faktiske tegn (tegkoder): et tegns *kategorikode* er af større betydning, når inputtet scannes. Et tegns *aktuelle* kategorikode bestemmer *den aktuelle betydning* af det pågældende tegn *på det tidspunkt,*&#x54;eX læser det ind: den kategorikode bestemmer, hvordan TeX vil behandle/udforske hvert tegn—vi vil forklare, hvorfor vi siger “aktuel kategorikode” og “aktuel betydning”. Det er gennem kategorikoder, at TeX kan filtrere den indkommende sammenblanding af tegn for at skelne mellem tegn (indhold), der er bestemt til sætning, og tegn, som udgør instruktioner, der skal behandles—*kommandoer* som TeX skal udføre.

Følgende tabel oplister disse 16 kategorikoder: hvad de hver især betyder sammen med eksempler på tegn, der typisk tildeles hver kategori.

| **Kategorikode** | **Beskrivelse**                                                        | **Standard LATEX/TEX**                                          |
| ---------------- | ---------------------------------------------------------------------- | --------------------------------------------------------------- |
| 0                | Undvigelseskarakter—fortæller TEX at begynde at lede efter en kommando | `\`                                                             |
| 1                | Start en gruppe                                                        | {                                                               |
| 2                | Afslut en gruppe                                                       | }                                                               |
| 3                | Matematikskift—skift ind i/ud af matematiktilstand                     | $                                                               |
| 4                | Justeringstabulator                                                    | &                                                               |
| 5                | Linjeslut                                                              | ASCII-kode 13 (`\r`)                                            |
| 6                | Makroparameter                                                         | #                                                               |
| 7                | Hævet skrift—til opsætning af matematik: `$y=x^2$` $$y=x^2$$           | ˆ                                                               |
| 8                | Sænket skrift—til opsætning af matematik: `$y=x_2$` $$y=x\_2$$         | \_                                                              |
| 9                | Ignoreret tegn                                                         | ASCII 0 `<nul>`                                                 |
| 10               | Mellemrum                                                              | ASCII-koderne 32 (mellemrum) og 9 (tabulatortegn)               |
| 11               | Bogstav                                                                | A...Z, a...z, (og tusindvis af Unicode-tegn)                    |
| 12               | Andet                                                                  | 0...9 plus ,.;?" og mange andre                                 |
| 13               | Aktivt tegn                                                            | Særlig kategorikode til at oprette makroer med ét tegn, såsom ˜ |
| 14               | Kommentartegn—ignorer alt, der følger, indtil linjeslutningen          | %                                                               |
| 15               | Ugyldigt tegn, må ikke forekomme i .tex-inputfilen                     | ASCII-kode 127 (`SLET`)                                         |

Brugen af kategorikoder er TeX’s afgørende mekanisme til at filtrere det indgående tegnstrøm, så dit input kan forstås for at afgøre:

* tegn, der udgør teksten, som skal sættes;
* afgrænse indhold, der skal sættes som matematik;
* tegnsekvenser, som er navne på kommandoer, der skal behandles eller udføres;
* … og mange andre typografiske operationer.

I begyndelsen kunne du måske tro, at hvert tegns kategorikode (betydning) er en slags fast tildeling: uforanderlig og permanent indbygget i TeX-softwarens inderste grundlag, men sådan er det ikke. Som nævnt vedligeholder TeX en intern opslagstabel til at gemme oplysninger om, hvilken kategorikode der er *aktuelt* tildelt hvert tegn—vi siger helt bevidst *aktuelt tildelt* fordi kategorikoden for ethvert tegn (der endnu ikke er læst ind) kan ændres ved hjælp af en primitiv (indbygget) kommando kaldet `\catcode`. Dette giver betydelig fleksibilitet, fordi du, hvis du ønsker det, fuldstændigt kan ændre den måde, TeX vil behandle eller fortolke betydningen af ethvert tegn, der efterfølgende læses fra inputtet, hvilket giver enorme muligheder for avancerede typografiapplikationer.

Hvis du primært er interesseret i at bruge LaTeX til “at få arbejdet gjort”, er der gode chancer for, at du ikke direkte har stødt på kategorikoder, bortset måske fra fejlmeddelelser, du har set. Men vær helt rolig, kategorikoder er en central del af en TeX-motors funktion: de gør det muligt for LaTeX (og LaTeX-pakker) faktisk at udføre arbejdet med at sætte dit dokument.

Når din TeX-motor starter (“[booter op](https://en.wikipedia.org/wiki/Bootstrapping)”) vil den bruge et sæt standardtildelinger af tegn til kategorikoder, men via `\catcode` kommandoen kan disse standardindstillinger ændres af LaTeX-kernekoden (makroer) og/eller af LaTeX-pakker, du har indlæst—eller faktisk af din egen TeX-kode eller makroer. Men over tid og gennem tradition/anvendelse er visse tegn, der er tildelt bestemte kategorikoder, blevet accepteret som “standarder”, og det er bestemt ønskeligt at følge disse standarder, hvis du ønsker, at dine dokumenter skal være flytbare og let kunne deles med kolleger eller andre brugere. For eksempel er `\` tegnet tildelt kategorikode 0 for at angive begyndelsen på en TeX/LaTeX-kommando—se [tabellen ovenfor](#tbl-0).

### Læsning (scanning) af inputtet

Når TeX læser (scanner) det næste tegn fra din inputfil, er det allerførste, den gør, at se på dets kategorikode, så lad os se nærmere på, hvad der sker, når TeX læser en typisk inputlinje.

Antag, at vi har en .tex-fil, der indeholder teksten `Hello World \jobname` et sted i et afsnit. Hvis vi kigger inde i `.tex` fil ved hjælp af en [hex-editor](https://en.wikipedia.org/wiki/Hex_editor), ser vi, at tegnsekvensen `Hello World \jobname` i vores `.tex` fil blot er en række heltal, eller *tegkoder*, vist i skærmbilledet nedenfor som den hexadecimale sekvens:

`48, 65, 6C, 6C, 6F, 20, 57, 6F, 72, 6C, 64, 20, 5C, 6A, 6F, 62, 6E, 61, 6D, 65, 20`

![Hexadecimale tegkoder i en TeX-fil](/files/36e5f5eac558dc49bf932dc7ba5e34c9eb7edfb3)

Hvis vi omregner fra hexadecimal (grundtal 16) til decimal (grundtal 10), er rækken af tegkoder:

![Decimale tegkoder i en TeX-fil](/files/4af4e24a65ff82e062d9391fa66e465fa07bde97)

Vi ved også, at hvert tegn for TeX har en tilsvarende kategorikode; så baseret på [tabellen ovenfor](#tbl-0) ved vi, at følgende standardtildelinger af kategorikoder (sandsynligvis) også er i brug:

![TeX-kategorikoder](/files/19cf1b31be14b26d9ab81611561318cfbe44f7fb)

Således er hvert tegn i inputfilen for TeX repræsenteret ved *to* numeriske værdier—dets tegkode og dets kategorikode:

![Tegkoder og tilsvarende TeX-kategorikoder](/files/e60d7916bd2a36b340660a95d15362dbb1ab69eb)

På dette tidspunkt overvejer vi kun den allerførste fase i TeX’s behandling af din fil: scanning af de enkelte tegn. Så hvad gør TeX egentlig med disse par af tegkoder og kategorikoder? Når TeX har scannet et enkelt tegn og slået dets tilsvarende kategorikode op, hvordan bruger TeX så præcist denne information til at “filtrere” de indkommende tegn?

## Del 2

I del 2 ser vi nærmere på, hvordan TeX læser dit input: vi forestiller os at være TeX’s “øjne”, mens det ser på dit input, tegn for tegn.

[Del 1](/latex/da/flere-emner/19-how-tex-macros-actually-work-part-1.md) [Del 2](/latex/da/flere-emner/20-how-tex-macros-actually-work-part-2.md) [Del 3](/latex/da/flere-emner/21-how-tex-macros-actually-work-part-3.md) [Del 4](/latex/da/flere-emner/22-how-tex-macros-actually-work-part-4.md) [Del 5](/latex/da/flere-emner/23-how-tex-macros-actually-work-part-5.md) [Del 6](/latex/da/flere-emner/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/da/flere-emner/19-how-tex-macros-actually-work-part-1.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.
