> 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/21-how-does-expandafter-work-tex-uses-temporary-token-lists.md).

# Hvordan virker \expandafter: TeX bruger midlertidige tokenlister

[Del 1](/latex/da/dybtgaende-artikler/19-how-does-expandafter-work-an-introduction-to-tex-tokens.md) [Del 2](/latex/da/dybtgaende-artikler/22-how-does-expandafter-work-the-meaning-of-expansion.md) [Del 3](/latex/da/dybtgaende-artikler/21-how-does-expandafter-work-tex-uses-temporary-token-lists.md) [Del 4](/latex/da/dybtgaende-artikler/20-how-does-expandafter-work-from-basic-principles-to-exploring-tex-s-source-code.md) [Del 5](/latex/da/dybtgaende-artikler/17-how-does-expandafter-work-a-detailed-macro-case-study.md) [Del 6](/latex/da/dybtgaende-artikler/18-how-does-expandafter-work-a-detailed-study-of-consecutive-expandafter-commands.md)

## Ekspansion og interne tokenlister

Indtil nu har vi undersøgt tokens, tokenlister og de grundlæggende principper bag TeX’s begreb om ekspansion. I dette afsnit vil vi bruge TeX-primitive `\jobname` til at introducere et vigtigt aspekt af ekspansionsbehandling: TeX’s brug af *midlertidige tokenlister*—som er en *fundamentale* aspekt af, hvordan `\expandafter` fungerer, som vi vil se senere i denne artikelserie.

`\jobname` er en udvidelig TeX-primitive, hvis ekspansion genererer en række tegntokens, som repræsenterer navnet på den primære input `.tex` fil. Forestil dig for eksempel, at vi havde følgende tekst som en del af en `.tex` fil kaldet `mycode.tex`:

```
    Navnet på min fil er \jobname .tex %Bemærk mellemrummet efter \jobname
```

Dette ville blive sat som

```
    Navnet på min fil er mycode.tex
```

Når vi bruger `\jobname` kommandoen, bliver de resulterende satte tegn ikke læst fra din fysiske `.tex` fil, så hvor kommer de fra: hvor gemmer/læser TeX de tokens? Usynligt for brugeren (dvs. dybt inde i selve TeX) er ekspansionsprocessen for `\jobname` opretter en midlertidig tokenliste, der er bygget af rækken af tegntokens, som repræsenterer navnet på din fil. Når først `\jobname` har oprettet den tokenliste, “flytter” TeX midlertidigt sit blik væk fra sin nuværende inputkilde (her vores `.tex` fil) for at læse tokens (tegntokens) fra den midlertidige tokenliste. Når TeX har brug for endnu et inputtoken, læser det sit næste token fra den interne liste og fortsætter med at gøre det, indtil det når slutningen af listen; på det tidspunkt genoptager TeX læsningen af tokens fra sin tidligere inputkilde, som her ville være tekst læst fra vores `.tex` inputfil.

Som vist i det følgende diagram genoptager TeX læsningen af `.tex` inputfilen på det nøjagtige sted, hvor det stoppede efter behandlingen af `\jobname`—efter at have læst mellemrumstegnet, men før det har læst “.”-tegnet. Punktummet (.) venter i praksis på at blive læst fra TeX’s inputbuffer—et lille område af TeX’s hukommelse, der er designet til at indeholde en tekstlinje læst fra `.tex` filen—TeX læser og behandler din `.tex` fil én linje ad gangen; det læser ikke hele filen ind i hukommelsen.

Når du studerer følgende grafik, så læs nedefra og arbejd opefter for at følge procesforløbet.

![Sådan ekspanderer TeX \jobname](/files/f486b1db18f260ace909ee32d358287b73dc1727)

Med henvisning tilbage til vores diskussion om ekspansion kan vi observere, at ekspansionen af `\jobname` resulterede i, at `\jobname` kommandoen (tokenet blev *fjernet* fra inputtet og *erstattet* med tokens, der opstår fra ekspansion: den midlertidige tokenliste, der blev genereret for at holde navnet på `.tex` filen.

Udvidelige kommandoer (såsom `\jobname`) er ikke de eneste TeX-primitiver, der “hemmeligt” opretter og bruger tokenlister for at opnå deres effekt. For eksempel opretter kommandoerne `\uppercase` og `\lowercase` begge interne tokenlister for at ændre store/små bogstaver i deres argument. Når arbejdet med at ændre bogstaverne er udført, skifter TeX til at læse tegntokens fra de tokenlister, som disse kommandoer har genereret. Tokenlister er TeX’s eneste mekanisme til “token-datalagring”—bortset fra at skrive data ud til en fysisk diskfil.

### Kilder til tokens: TeX er en mester i jonglering

Når TeX behandler et typisk dokument, skal det håndtere *mange* kilder til tokens: input, der kommer fra talrige fysiske diskfiler og utallige interne tokenlister, der oprettes under behandlingen. I dette afsnit vil vi meget kort undersøge, hvordan TeX formår at “jonglere” med disse inputkilder.

Antag, at vi vil have en enkel makro, der sætter navnet på vores `.tex` fil:

```
    \def\myfile{Navnet på min fil er \jobname .tex}
```

Senere, på et tidspunkt i vores `.tex` fil kalder vi makroen `\myfile`: midlertidigt skifter TeX fra at oprette/læse tokens via tekst i din tekst (`.tex`)-fil til at læse tokens fra `\myfile` definitionen (tokenlisten), der er gemt i hukommelsen. Når TeX udfører `\myfile` makroen (behandler dens tokens), vil det opdage et token, der repræsenterer `\jobname` kommandoen, hvis ekspansion opretter endnu en midlertidig tokenliste, som TeX skal læse tokens fra. Selv i dette enkle scenarie skal TeX håndtere tre inputkilder:

1. det `.tex` tekstfilen, der indeholder `\myfile` makroen;
2. tokenlisten, der gemmer definitionen af `\myfile` makroen;
3. en tokenliste oprettet af `\jobname` kommandoen i `\myfile` makroen.

Mens TeX behandler et dokument, skifter det konstant mellem inputkilder: fysiske filer og tokenlister, så hvordan holder TeX styr på dette? Svaret er, at TeX-kerner internt vedligeholder en såkaldt [inputstak](https://en.wikipedia.org/wiki/Stack_\(abstract_data_type\)) som fungerer som en slags “hukommelse”, der gør det muligt for TeX at huske, hvad det var i gang med (hvor det læste fra), mens det skifter mellem inputkilder.

Uden at gå for meget i detaljer bruger den interne kode i TeX-kerner en global variabel kaldet `curinput` (aktuel input), som blandt andet fortæller TeX, om det aktuelt læser fra en fysisk fil eller en tokenliste. `curinput` peger også TeX til den position (i den aktuelle tokenliste eller dens tekstbuffer), hvorfra det skal hente det næste token. Hvis TeX læser fra en tokenliste `curinput` registrerer den også, hvilken type tokenliste der behandles—f.eks. listen over tokens gemt som en makro, eller om disse tokens stammer fra en anden kilde.

Når det er nødvendigt, vil `curinput` variablen blive ændret, så den peger på en ny inputkilde, og TeX’s nuværende “inputtilstand” (kilde og position) vil blive gemt i inputstakken, så TeX senere kan vende tilbage til præcis den samme position (position i en `.tex` fil eller det næste token i en tokenliste). Når den nye inputkilde er udtømt (f.eks. ingen flere tokens i tokenlisten, eller slutningen af en fil er nået), bliver den taget af stakken, og `curinput` opdateres for at sikre, at TeX vender tilbage til at hente tokens fra den forrige kilde.

## Mere dybdegående (valgfri læsning)

De følgende afsnit giver yderligere baggrundsinformation for læsere, der nyder detaljerne.

### Virkelige tokenlister

Den følgende grafik blev genereret ved hjælp af Overleafs specialbyggede version af Knuths TeX, som giver adgang til TeX’s interne data og datastrukturer. Denne illustration af en tokenliste bygger videre på den forenklede version, der blev præsenteret ovenfor, og indeholder yderligere data, såsom at vise de tegn, der genereres af `\jobname` har kategori-kode 12, ikke den sædvanlige kategori-kode 11. I dette diagram er “node” blot navnet på en enhed i hukommelseslageret, som TeX bruger.

![Inde i en TeX-tokenliste](/files/2a42d442e8a41d3d912233d91639a265d6a027c6)

### Sådan læser og behandler TeX \jobname

For fuldstændighedens skyld er her også en oversigt over TeX’s “tankeprocesser”, når det registrerer `\jobname` i vores input `.tex` fil. I denne grafik ser vi, hvordan TeX registrerer et escape-tegn (`\` med kategori-kode 0), behandler tegnsekvensen `jobname`, genererer et token og slår betydningen op af `\jobname` kommandoen, hvor TeX vil opdage, at den har en kommandokode > 100, hvilket indikerer, at det er en udvidelig kommando.

![Sådan scanner og behandler TeX \jobname](/files/1935eadb6049a4f514edefb0380696d560ee6a38)

[Del 1](/latex/da/dybtgaende-artikler/19-how-does-expandafter-work-an-introduction-to-tex-tokens.md) [Del 2](/latex/da/dybtgaende-artikler/22-how-does-expandafter-work-the-meaning-of-expansion.md) [Del 3](/latex/da/dybtgaende-artikler/21-how-does-expandafter-work-tex-uses-temporary-token-lists.md) [Del 4](/latex/da/dybtgaende-artikler/20-how-does-expandafter-work-from-basic-principles-to-exploring-tex-s-source-code.md) [Del 5](/latex/da/dybtgaende-artikler/17-how-does-expandafter-work-a-detailed-macro-case-study.md) [Del 6](/latex/da/dybtgaende-artikler/18-how-does-expandafter-work-a-detailed-study-of-consecutive-expandafter-commands.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/dybtgaende-artikler/21-how-does-expandafter-work-tex-uses-temporary-token-lists.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.
