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

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

[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: En historie i billeder

Som nævnt i del 1 må TeX “læse” hvert tegn i din `.tex` fil, og denne læseproces omtales mere korrekt som *scanning*. Traditionelt sammenlignes TeX’s inputbehandling (scanning) med, at TeX har “øjne” til at observere inputtet, så vi vil bruge den hævdvundne analogi i illustrationerne nedenfor.

### Grafik 1: Øjnene er klar

Vi antager, at TeX har fået noget input fra en `.tex` fil og er ved at behandle vores streng af tegn `Hello World \jobname` i et afsnit tekst. Det vil kontrollere hvert tegn efter tur og undersøge dets kategorikode.

![TeX's øjne klar til at scanne en tekstlinje](/files/6157a800a9bbfa309d1be03f3cf111d03f7f0355)

### Grafik 2: Behandling af kategorikoder

I den næste grafik ser vi i overblik (med yderligere detaljer nedenfor), hvordan TeX reagerer på flere forskellige kategorikoder. Der er i alt 16 kategorikoder, men for enkelheds skyld viser vi kun brugen af tre: 11, 10 og 0. Andre tegnkoder bliver vigtige under TeX’s satsningsprocesser, såsom konstruktion af tabeller, satsning af matematik og genkendelse af makroparametre.

![TeX, der reagerer på flere forskellige kategorikoder](/files/3039b268317b0622d7afec32cd6dac02d7f392b4)

#### Noter til grafik 2

Her betragter vi TeX, mens det læser (scanner) tegn, der indgår i et afsnit tekst. TeX inspicerer hvert tegn, tjekker dets kategorikode og udfører den passende handling baseret på kategorikoden og TeX’s “mode” (en status baseret på, hvad det i øjeblikket gør).

* **(grønne øjne)** TeX vil se, at hvert af disse tegn har kategorikode 11 (“bogstav”) og vil sende disse tegn videre til satsning som en del af det afsnit, det er ved at bygge op. TeX sender dog ikke (bruger) kun tegnkoden videre, men bruger i stedet parret af tal (tegnkode, kategorikode) til at beregne en sammensat heltalsværdi kaldet en *tegntoken* (se nedenfor). Når først dette tegntoken er dannet, indgår det i TeX’s indre satsningsprocesser/-algoritmer.
* **(blå øjne)** TeX ser et mellemrumstegn (ASCII 32) med kategorikode 10 (“mellemrum”)—bemærk, at som nævnt er det helt muligt, at kategorikoden for et mellemrum (ASCII 32), eller et hvilket som helst tegn, er blevet ændret til en anden værdi—før TeX læser det ind.

Hvordan TeX faktisk behandler tegn med kategorikode 10 (“mellemrum”) varierer afhængigt af, hvornår/hvor TeX ser det—TeX’s aktuelle “mode”. For eksempel er der tidspunkter, hvor TeX blot vil springe dem over. Her vil TeX vide, at det har registreret et tegn med kategorikode 10 (som tilfældigvis er et mellemrum, ASCII 32), mens det behandler afsnitstekst, så det vil til sidst omdanne det til såkaldt interword glue: en slags fleksibelt mellemrum, der kan udvides eller trækkes sammen.

* **(røde øjne)** Her har TeX observeret et tegn, som har en meget vigtig kategorikode: 0 (escape-tegn).

Et escape-tegn—*ethvert* tegn med kategorikode 0—fortæller TeX at skifte til en særlig læsemodus og omhyggeligt scanne (læse) de efterfølgende tegn, fordi de identificerer navnet på en *kommando*, ikke tekst, der skal satses. I TeX-litteraturen vil du også se udtrykket “command” omtalt som *kontrolsekvens*. Efter at have set et escape-tegn tjekker TeX kategorikoden for det tegn, der følger *umiddelbart efter det*; dette skyldes, at TeX genkender to typer kommandoer:

* kommandoer med flere bogstaver kaldet *kontrolord*: tegnet umiddelbart efter escape-tegnet har kategorikode 11. Alle efterfølgende tegn med kategorikode 11 betragtes som en del af navnet på en kommando ( *ikke* ikke har kategorikode 11—såsom et mellemrumstegn med kategorikode 10.
* kommandoer med et enkelt bogstav kaldet *kontrolsymboler*: tegnet umiddelbart efter escape-tegnet *ikke* har kategorikode 11.

Du kan tænke på et escape-tegn som noget, der får TeX til at “undvige” ud af sin sædvanlige scanningsadfærd og anlægge en anden tilgang til de næste få tegn—dette er angivet af den røde stiplede boks, der viser, at TeX vil **Begynd at scanne efter en kommando**.

### Grafik 3: Behandling af kategorikode 11 (“bogstaver”)

I del 1 af denne serie bemærkede vi, at hvert tegn, TeX læser fra sit input, beskrives af to heltal:

* tegnkode: et heltal, der definerer den numeriske repræsentation af et tegn;
* kategorikode: en værdi fra 0 til 15, som TeX tildeler hvert tegn, der kan forekomme i dets input.

TeX bruger disse to oplysninger i næste trin af sin behandling: at skabe tegntokens.

Grafik 3 udvider Grafik 2 for at vise, hvad TeX gør med disse inputtegn med kategorikode 11 (bogstav): det skaber *tegntokens*—heltalsværdier, som TeX beregner ved at kombinere dette tegns kategorikode og tegnkode.

**Bemærk**: I dette eksempel taler vi kun om tegn med kategorikode 11, men du skal være opmærksom på, at TeX også opretter tokenværdier for inputtegn, der har andre kategorikoder—bortset fra kategorikode 0, som aldrig bliver til et token: escape-tegnet fungerer blot som en “kontakt”, der udløser særlig behandling.

![TeX behandler tegn med kategorikode 11](/files/9f1d9947690cdc38c9fa3130f470281b6de97c89)

Grafik 5 nedenfor viser, hvad TeX gør, når det ser et tegn med kategorikode 0 (et escape-tegn).

#### Noter til Grafik 3: Behandling af kategorikode 11 (“bogstav”)

Her vil vi fokusere på **green** aktiviteten: hvad der sker, når TeX ser tegn, som har kategorikode 11 (“bogstav”). Når TeX har læst et tegn og fastslået dets kategorikode (her er det 11), er det næste, TeX gør, at *kombinere* dette par af tal til et enkelt heltal kaldet et tegntoken: disse tokens (heltal) sendes videre til næste trin i TeX’s indre satsningsalgoritmer/-behandling. Som nævnt vil TeX også oprette tegntokens for tegn med andre kategorikoder (dvs. ikke 11); her bruger vi blot kategorikode 11 som et eksempel.

Hvert tegntoken (et heltal) forbinder permanent et inputtegn med den kategorikode, der blev tildelt dette tegn **på det tidspunkt, hvor det blev scannet (læst ind) af TeX**: det er af afgørende betydning for at forstå TeX/LaTeX-makros opførsel. Selvfølgelig vil TeX under videre behandling nogle gange være nødt til at opdele et tegntoken for at afgøre, hvilket par (tegnkode, kategorikode) der blev brugt til at konstruere tokenet. Men når et tegn først er læst ind af TeX’s input- (scannings-)proces, medfører den tegntokenværdi, som TeX beregner, at dette tegn bliver *permanent* knyttet til den kategorikode, der blev tildelt det *på det tidspunkt, det blev læst ind*.

**Beregning af tegntokens**

TeX-motorer bruger en simpel formel til at beregne et tegntoken, $$T$$, fra et tegn med kategorikode $$C$$ og tegnkode $$A$$:

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

8-bit-motorer, såsom pdfTeX, bruger:

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

Unicode-bevidste motorer, såsom XeTeX eller LuaTeX, er nødt til at bruge en anden formel, fordi tegnkoder under Unicode kan være meget større end maksimum på 255 i den ældre verden med 8-bit ASCII-kodning. XeTeX bruger for eksempel:

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

Endnu en gang er det værd at bemærke, at tegn med kategorikode 0 ikke omdannes til tegntokens: kategorikode 0 har en helt særlig plads i TeX’s inputfiltrering og bruges udelukkende som en “kontakt” til at få TeX til at skifte til en særlig tilstand, hvor det scanner de næste få tegn. Grafik 5 behandler dette.

### Grafik 4: Behandling af kategorikode 10 (“mellemrum”)

TeX’s håndtering af tegn med kategorikode 10 (“mellemrum”) afhænger af, hvad TeX i øjeblikket arbejder på, når det registrerer et tegn med kategorikode 10 i inputtet. I vores eksempel udfører TeX rutinemæssig afsnitsbehandling, og mellemrumstegnet, med kategorikode 10, vil blive omdannet til interword glue.

![TeX behandler tegn med kategorikode 10](/files/c2f5339036b5242c4cb3f21c6543561427ec98cb)

TeX’s håndtering af mellemrum kan virke ret idiosynkratisk, men et godt overblik kan findes i kapitel 1 og 2 af [TeX by Topic](http://www.eijkhout.net/texbytopic/texbytopic.html) af Victor Eijkhout—du kan [downloade en gratis PDF-kopi](https://bitbucket.org/VictorEijkhout/tex-by-topic) via hans hjemmeside.

For eksempel, når TeX ser et tegn med kategorikode 10, er der tidspunkter, hvor TeX vil:

* springe alle dem over—f.eks. når TeX er i vertikal mode;
* omdanne flere mellemrums-tegn til ét enkelt mellemrums-tegn—og springe ekstra mellemrum over, såsom når et afsnit behandles;
* opsuge dem—f.eks. ved at opsuge et enkelt mellemrum efter et kommandonavn;

Bemærk også, at der er tidspunkter, hvor TeX også vil *generere* mellemrum—ved at omdanne tegn ved linjeslut til et mellemrum. Adfærden/behandlingen af mellemrumstegn (ethvert tegn med kategorikode 10) er en af TeX’s “idiosynkrasier”: det tager tid/praksis at blive fortrolig med (og komfortabel med) dette aspekt af TeX.

### Grafik 5a: Behandling af kategorikode 0 (et “escape-tegn”)

I denne grafik har TeX behandlet alle tegn frem til `\` tegnet, som har kategorikode 0: “escape-tegnet”—vi vil bruge en yderligere serie af grafik til at vise, hvordan TeX behandler et escape-tegn og identificerer navnet på en kommando.

![TeX behandler tegn med kategorikode 0](/files/eef20f0449bb30bad6396f20f1b99f403f64520b)

### Grafik 5b: Leder efter et kommandonavn

I denne grafik ser vi ind i den rødstiplede boks-sektion (**Begynd at scanne efter en kommando**) for at se, hvad TeX gør, efter at det har set et escape-tegn.

![TeX leder efter et kommandonavn](/files/2f95c796e81abbea39e33b193a8b2f92532e6745)

**Noter til Grafik 5b**

* Når først escape-tegnet er genkendt, har det gjort sit arbejde: det fungerede som en kontakt og deltager ikke i yderligere behandling—nærmere bestemt bliver det **ikke** omdannet til et tegntoken.
* For nemheds skyld gentager vi nogle detaljer nævnt tidligere. Efter at have set et escape-tegn tjekker TeX kategorikoden for det tegn, der følger *umiddelbart efter det*; dette skyldes, at TeX genkender to typer kommandoer:
* * kommandoer med flere bogstaver kaldet *kontrolord*: tegnet umiddelbart efter escape-tegnet har kategorikode 11. Alle efterfølgende tegn med kategorikode 11 betragtes som en del af navnet på en kommando (*kontrolord*). TeX holder op med at lede efter tegn, der indgår i et kommandonavn, når det registrerer et tegn, der *ikke* ikke har kategorikode 11—såsom et mellemrumstegn med kategorikode 10.
  * kommandoer med et enkelt bogstav kaldet *kontrolsymboler*: tegnet umiddelbart efter escape-tegnet *ikke* har kategorikode 11.
* I vores eksempel er det første tegn efter `\` er en `j` (kategorikode 11), hvilket fortæller TeX, at det skal lede efter en kommando, der er en (potentiel) flerbogstavssekvens af tegn med kategorikode 11.
* TeX fortsætter med at kontrollere, om der er flere tegn med kategorikode 11. Så snart det registrerer et tegn med en anden kategorikode, såsom et mellemrum med kategorikode 10, ved TeX, at det har nået slutningen af kommandonavnet. Bare for at understrege pointen: her var det et mellemrumstegn (kategorikode 10), der “afsluttede” kommandoens slutning, men det kunne have været et hvilket som helst tegn, der **ikke** har kategorikode 11.

## Del 3

I del 3 fortsætter vi fra Grafik 5b for at afslutte denne del af historien—hvordan TeX identificerer en kommando—og går videre til, hvad det gør næste gang. Vi ser også nærmere på nogle interne aspekter af TeX’s behandling—dele af dette kan springes over ved første læsning, medmindre du virkelig nyder detaljerne.

[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/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.
