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

# Hvordan fungerer \expandafter: TeX bruker midlertidige tokenlister

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

## Ekspansjon og interne tokenlister

Hittil har vi utforsket tokener, tokenlister og kjerneprinsippene bak TeX’ konsept om ekspansjon. I denne delen skal vi bruke TeX-primitive `\jobname` for å introdusere et viktig aspekt ved ekspansjonsbehandling: TeXs bruk av *midlertidige tokenlister*—som er et *grunnleggende* aspekt av hvordan `\expandafter` fungerer, slik vi skal se senere i denne artikkelserien.

`\jobname` er en utvidbar TeX-primitive hvis ekspansjon genererer en serie tegn-tokener som representerer navnet på hovedinndata `.tex` filen. For eksempel, anta at vi hadde følgende tekst som en del av en `.tex` fil kalt `mycode.tex`:

```
    Navnet på filen min er \\jobname .tex %Merk mellomrommet etter \\jobname
```

Dette ville blitt satt som

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

Når vi bruker `\jobname` kommandoen, leses ikke de resulterende tegnene fra den fysiske `.tex` filen din, så hvor kommer de fra: hvor lagrer/leser TeX disse tokenene? Usynlig for brukeren (dvs. dypt inne i selve TeX) skaper ekspansjonsprosessen for `\jobname` en midlertidig tokenliste konstruert fra serien av tegn-tokener som representerer navnet på filen din. Når `\jobname` har opprettet den tokenlisten, «flytter» TeX midlertidig «blikket» bort fra den nåværende inndatakilden sin (her, vår `.tex` filen) for å lese tokener (tegn-tokener) fra den midlertidige tokenlisten. Når TeX trenger et nytt inndatatoken, vil den lese neste token fra den interne listen og fortsetter å gjøre det til den når slutten av listen; på det punktet gjenopptar TeX lesing av tokener fra den forrige inndatakilden, som her ville være tekst lest fra vår `.tex` inndatafil.

Som vist i det følgende diagrammet, gjenopptar TeX lesingen av `.tex` inndatafilen på nøyaktig det stedet den stoppet etter å ha behandlet `\jobname`—etter å ha lest mellomromstegnet, men før det leser «.»-tegnet. Punktumet (.) venter i praksis på å bli lest fra TeXs inndatabuffer—et lite område i TeXs minne som er laget for å holde en linje med tekst lest fra `.tex` filen—TeX leser og behandler `.tex` filen din én linje om gangen; den leser ikke hele filen inn i minnet.

Når du studerer følgende grafikk, les fra bunnen og arbeid oppover for å følge prosessflyten.

![Hvordan TeX ekspanderer \\\jobname](/files/d105243094f592807993f74aade143ce4aac9685)

Når vi går tilbake til diskusjonen vår om ekspansjon, kan vi observere at ekspansjonen av `\jobname` resulterte i at `\jobname` kommandoen (tokenet) ble *fjernet* fra inndataen og *erstattet* med tokener som oppstår fra ekspansjon: den midlertidige tokenlisten som genereres for å holde navnet på `.tex` filen.

Utvidbare kommandoer (slik som `\jobname`) er ikke de eneste TeX-primitivene som «i all hemmelighet» oppretter og bruker tokenlister for å oppnå effekten sin. For eksempel oppretter kommandoene `\uppercase` og `\\lowercase` begge interne tokenlister for å endre store/små bokstaver i argumentet sitt. Når arbeidet med å endre store/små bokstaver er gjort, bytter TeX til å lese tegn-tokener fra tokenlistene som genereres av disse kommandoene. Tokenlister er TeXs eneste mekanisme for «token-datalagring»—bortsett fra å skrive data ut til en fysisk diskfil.

### Kilder til tokener: TeX er en mester i å sjonglere

Når TeX behandler et typisk dokument, må det håndtere *mange* kilder til tokener: inndata som kommer fra tallrike fysiske diskfiler og utallige interne tokenlister som opprettes under behandlingen. I denne delen skal vi svært kort utforske hvordan TeX klarer å «sjonglere» med disse inndatakildene.

Anta at vi vil ha en enkel makro som setter navnet på `.tex` fil:

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

Senere, på et tidspunkt i vår `.tex` fil kaller vi makroen `\\myfile`: midlertidig bytter TeX fra å opprette/lese tokener via tekst i teksten din (`.tex`) fil til å lese tokener fra `\\myfile` definisjonen (tokenlisten) som er lagret i minnet. Når TeX utfører `\\myfile` makroen (behandler tokenene) vil den oppdage et token som representerer `\jobname` kommandoen, hvis ekspansjon oppretter enda en, midlertidig tokenliste som TeX må lese tokener fra. Selv i dette enkle scenariet må TeX håndtere tre inndatakilder:

1. den `.tex` tekstfilen som inneholder `\\myfile` makroen;
2. tokenlisten som lagrer definisjonen av `\\myfile` makroen;
3. en tokenliste opprettet av `\jobname` kommandoen i `\\myfile` makroen.

Mens TeX behandler et dokument bytter det konstant mellom inndatakilder: fysiske filer og tokenlister, så hvordan holder TeX styr på dette? Svaret er at interne TeX-motorer opprettholder en såkalt [inndatastakk](https://en.wikipedia.org/wiki/Stack_\(abstract_data_type\)) som fungerer som en slags «hukommelse» som lar TeX huske hva det holdt på med (hvor det leste fra) mens det bytter mellom inndatakilder.

Uten å gå for langt inn i detaljene bruker den interne koden i TeX-motorer en global variabel kalt `curinput` (nåværende inndata) som blant annet forteller TeX om den for øyeblikket leser fra en fysisk fil eller en tokenliste. `curinput` peker også TeX til stedet (i den nåværende tokenlisten eller tekstbufferen) derfra det skal hente neste token. Hvis TeX leser fra en tokenliste `curinput` registrerer også hva slags tokenliste som behandles—f.eks. listen over tokener lagret som en makro, eller om disse tokenene oppsto fra en annen kilde.

Når det er nødvendig, vil `curinput` variabelen bli endret for å peke på en ny inndatakilde, og TeXs nåværende «inntdatatilstand» (kilde og plassering) vil bli lagret i inndatastakken slik at TeX senere kan returnere til akkurat det stedet (posisjon i en `.tex` fil eller neste token i en tokenliste). Når den nye inndatakilden er oppbrukt (f.eks. ingen flere tokener i tokenlisten eller slutten av en fil er nådd), blir den tatt av stakken, og `curinput` oppdateres for å sikre at TeX går tilbake til å hente tokener fra den forrige kilden.

## Å gå dypere (valgfri lesning)

De følgende avsnittene gir ytterligere bakgrunnsinformasjon for lesere som liker detaljene.

### Ekte tokenlister

Følgende grafikk ble generert ved hjelp av Overleafs egendefinerte bygg av Knuths TeX, som gir tilgang til TeXs interne data og datastrukturer. Denne illustrasjonen av en tokenliste bygger på den forenklede versjonen presentert ovenfor og inkluderer tilleggsdata, som å vise tegnene generert av `\jobname` har kategorikode 12, ikke den vanlige kategorikoden 11. I dette diagrammet er «node» bare navnet gitt til en enhet for minnelagring som brukes av TeX.

![Inne i en TeX-tokenliste](/files/8dbfa3bdedc778063aec3dc7f31402156dbde4b6)

### Hvordan TeX leser og behandler \\\jobname

For fullstendighetens skyld er her også en oversikt over TeXs «tankegang» idet den oppdager `\jobname` i vår inndata `.tex` fil. I denne grafikken ser vi hvordan TeX oppdager et escape-tegn (`\` med kategorikode 0), behandler tegnsekvensen `jobname`, genererer et token og slår opp betydningen av `\jobname` kommandoen, der TeX vil oppdage at den har en kommandokode > 100, noe som indikerer at den er en utvidbar kommando.

![Hvordan TeX skanner etter og behandler \\\jobname](/files/7822bab622bf57c6432df463461ab0d6c1701c00)

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