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

# Hur fungerar \expandafter: TeX använder tillfälliga tokenlistor

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

## Expansion och interna tokenlistor

Hittills har vi utforskat token, tokenlistor och de grundläggande principerna bakom TeX:s begrepp expansion. I det här avsnittet ska vi använda den TeX-primitive `\jobname` för att introducera en viktig aspekt av expansionsbearbetning: TeX:s användning av *tillfälliga tokenlistor*—vilket är en *grundläggande* aspekt av hur `\expandafter` fungerar, som vi ska se senare i den här artikelserien.

`\jobname` är en expanderbar TeX-primitive vars expansion genererar en serie teckentokens som representerar namnet på huvudinmatnings `.tex` fil. Anta till exempel att vi hade följande text som en del av en `.tex` fil som kallas `mycode.tex`:

```
    Namnet på min fil är \jobname .tex %Observera mellanrummet efter \jobname
```

Detta skulle sättas med typsnitt som

```
    Namnet på min fil är mycode.tex
```

När vi använder `\jobname` kommandot läses de resulterande sättningstecknen inte från din fysiska `.tex` filen, så varifrån kommer de: var lagrar/läser TeX dessa token? Osynligt för användaren (dvs. djupt inne i TeX själv) skapar expansionsprocessen för `\jobname` en tillfällig tokenlista som konstrueras av serien av teckentokens som representerar namnet på din fil. När `\jobname` har skapat den tokenlistan ”vänder” TeX tillfälligt bort blicken från sin aktuella indatakälla (här vår `.tex` fil) för att läsa token (teckentokens) från den tillfälliga tokenlistan. När TeX behöver ännu en indatatoken läser den nästa token från den interna listan och fortsätter så tills den når slutet av listan; därefter återupptar TeX läsningen av token från sin tidigare indatakälla, vilket här skulle vara text läst från vår `.tex` inmatningsfil.

Som visas i följande diagram återupptar TeX läsningen av `.tex` inmatningsfilen på exakt den plats där den stannade efter att ha bearbetat `\jobname`—efter att ha läst mellanslagstecknet men innan ”.”-tecknet läses. Punkten (.) väntar i praktiken på att läsas från TeX:s indatabuffer — ett litet område i TeX:s minne som är avsett att hålla en textrad läst från `.tex` filen — TeX läser och bearbetar din `.tex` fil en rad i taget; det läser inte in hela filen i minnet.

När du studerar följande grafik, läs från botten och arbeta dig uppåt för att följa processflödet.

![Hur TeX expanderar \jobname](/files/4971da2305bb2daabf7f6dc1119fa7d3f5771bf7)

Om vi går tillbaka till vår diskussion om expansion kan vi se att expansionen av `\jobname` resulterade i att `\jobname` kommandot (tokenen) blev *borttaget* från indata och *ersatts* med token som uppstår genom expansion: den tillfälliga tokenlistan som genereras för att hålla namnet på `.tex` -filen.

Expanderbara kommandon (såsom `\jobname`) är inte de enda TeX-primitiverna som ”i hemlighet” skapar och använder tokenlistor för att åstadkomma sin effekt. Till exempel kommandona `\uppercase` och `\\lowercase` skapar båda interna tokenlistor för att ändra skiftläget på sitt argument. När skiftändringsarbetet är klart växlar TeX till att läsa teckentokens från de tokenlistor som genererats av dessa kommandon. Tokenlistor är TeX:s enda mekanism för ”lagring av tokendata” — bortsett från att skriva data till en fysisk diskfil.

### Källor till token: TeX är en mästerlig jonglör

När TeX bearbetar ett typiskt dokument måste det hantera *många* tokenkällor: indata som kommer från många fysiska diskfiler och otaliga interna tokenlistor som skapas under bearbetningen. I det här avsnittet ska vi mycket kort utforska hur TeX lyckas ”jonglera” med dessa indatakällor.

Anta att vi vill ha en enkel makro som sätter namnet på vår `.tex` fil:

```
    \def\myfile{Namnet på min fil är \jobname .tex}
```

Senare, vid någon tidpunkt i vår `.tex` fil anropar vi makrot `\myfile`: tillfälligt växlar TeX från att skapa/läsa token via text i din text (`.tex`) fil till att läsa token från `\myfile` definitionen (tokenlista) som lagras i dess minne. När TeX kör `\myfile` makrot (bearbetar dess token) kommer det att upptäcka en token som representerar `\jobname` kommandot, vars expansion skapar ännu en tillfällig tokenlista från vilken TeX måste läsa token. Även i detta enkla scenario måste TeX hantera tre indatakällor:

1. den `.tex` textfil som innehåller `\myfile` makrot;
2. tokenlistan som lagrar definitionen av `\myfile` makrot;
3. en tokenlista skapad av `\jobname` kommandot inom `\myfile` makrot.

När TeX bearbetar ett dokument växlar det ständigt mellan indatakällor: fysiska filer och tokenlistor, så hur håller TeX reda på detta? Svaret är att TeX-motorer internt upprätthåller en så kallad [indatastack](https://en.wikipedia.org/wiki/Stack_\(abstract_data_type\)) som fungerar som en sorts ”minne” som gör det möjligt för TeX att komma ihåg vad det gjorde (var det läste från) när det växlar mellan indatakällor.

Utan att gå in för mycket på detaljer använder den interna koden i TeX-motorer en global variabel som kallas `curinput` (current input) som bland annat talar om för TeX om det för närvarande läser från en fysisk fil eller tokenlista. `curinput` pekar också TeX på platsen (i den aktuella tokenlistan eller dess textbuffert) varifrån det ska hämta nästa token. Om TeX läser från en tokenlista `curinput` registrerar den också vilken typ av tokenlista som bearbetas — t.ex. tokenlistan som lagras som ett makro eller om dessa token uppstod från en annan källa.

Vid behov kommer `curinput` variabeln att ändras så att den pekar på en ny indatakälla och TeX:s aktuella ”indatatillstånd” (källa och plats) sparas i indatastacken så att TeX senare kan återvända till exakt den platsen (position i en `.tex` fil eller nästa token i en tokenlista). När den nya indatakällan är förbrukad (t.ex. när inga fler token finns i tokenlistan eller när slutet av en fil nås) tas den bort från stacken och `curinput` uppdateras curinput för att säkerställa att TeX återgår till att hämta token från den tidigare källan.

## Djupdykning (valfri läsning)

Följande avsnitt ger ytterligare bakgrundsinformation för läsare som uppskattar detaljerna.

### Verkliga tokenlistor

Följande grafik genererades med Overleafs anpassade version av Knuths TeX, som ger åtkomst till TeX:s interna data och datastrukturer. Den här illustrationen av en tokenlista bygger på den förenklade version som presenterades ovan och innehåller ytterligare data, till exempel visar den tecken som genereras av `\jobname` har kategori­kod 12, inte den vanliga kategori­koden 11. I detta diagram är ”nod” helt enkelt namnet på en minneslagringsenhet som används av TeX.

![Inuti en TeX-tokenlista](/files/912a8478aff27cfdf56c1b348d84e24ba5943123)

### Hur TeX läser och bearbetar \jobname

För fullständighetens skull följer också här en översikt över TeX:s ”tankegångar” när det upptäcker `\jobname` i vår indata `.tex` fil. I denna grafik ser vi hur TeX upptäcker ett escape-tecken (`\` med kategorikod 0), bearbetar teckensekvensen `jobname`, genererar en token och slår upp betydelsen av `\jobname` kommandot, där TeX upptäcker att det har en kommandokod > 100, vilket visar att det är ett expanderbart kommando.

![Hur TeX söker efter och bearbetar \jobname](/files/998983f989f1bfdeb9ed9accad33279ca358d081)

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