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

# Miten \expandafter toimii: TeX käyttää tilapäisiä token-luetteloita

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

## Laajeneminen ja sisäiset tokeniluettelot

Tähän mennessä olemme tarkastelleet tokeneita, tokeniluetteloita ja TeXin laajenemiskäsitteen taustalla olevia perusperiaatteita. Tässä osiossa käytämme TeXin primitiiviä `\jobname` tuodaksemme esiin laajenemisen käsittelyn tärkeän näkökohdan: TeXin tapa käyttää *väliaikaisia tokeniluetteloita*—jotka ovat *perustavanlaatuinen* näkökulma siihen, miten `\expandafter` toimii, kuten näemme myöhemmin tässä artikkelisarjassa.

`\jobname` on laajeneva TeXin primitiivi, jonka laajeneminen tuottaa joukon merkkitokeneita, jotka edustavat pääsyötetiedoston nimeä `.tex` tiedostoa. Esimerkiksi olettakaamme, että meillä olisi seuraava teksti osana `.tex` tiedoston nimeltä `mycode.tex`:

```
    Tiedostoni nimi on \jobname .tex %Huomaa välilyönti \jobname:n jälkeen
```

Tämä ladottaisiin muodossa

```
    Tiedostoni nimi on mycode.tex
```

Kun käytämme `\jobname` komentoa, ladotut merkit eivät ole luettu fyysisestä `.tex` tiedostosta, joten mistä ne tulevat: minne TeX tallentaa/lukee nuo tokenit? Käyttäjälle näkymättömissä (eli syvällä TeXin sisällä) laajenemiskäsittely `\jobname` luo väliaikaisen tokeniluettelon, joka koostuu merkkitokenien sarjasta, joka edustaa tiedostosi nimeä. Kun `\jobname` on luonut tuon tokeniluettelon, TeX “siirtää katseensa” hetkeksi pois nykyisestä syötelähteestään (tässä tapauksessa meidän `.tex` tiedostosta) lukeakseen tokeneita (merkkitokeneita) tuosta väliaikaisesta tokeniluettelosta. Kun TeX tarvitsee uuden syötetokenin, se lukee seuraavan tokeninsa tuosta sisäisestä luettelosta ja jatkaa näin, kunnes saavuttaa luettelon lopun; siinä vaiheessa TeX jatkaa tokenien lukemista aiemmasta syötelähteestään, joka tässä olisi tekstimme luettuna meidän `.tex` syötetiedostostamme.

Kuten seuraavassa kaaviossa näkyy, TeX jatkaa lukemista `.tex` syötetiedostosta juuri siitä kohdasta, johon se pysähtyi käsiteltyään `\jobname`—luettuaan välilyöntimerkin mutta ennen “.”-merkin lukemista. Piste (.) odottaa käytännössä TeXin syötepuskurissa luettavaksi — TeXin muistin pieni alue, joka on suunniteltu säilyttämään tekstirivi luettuna `.tex` tiedostosta — TeX lukee ja käsittelee `.tex` tiedostoa yksi rivi kerrallaan, eikä se lue koko tiedostoa muistiin.

Kun tarkastelet seuraavaa kuvaa, lue alhaalta ylöspäin seurataksesi prosessin kulkua.

![Miten TeX laajentaa \jobname](/files/5ed1c4044c58c10f734dfb8215990427c753f030)

Palatessamme keskusteluumme laajenemisesta voimme todeta, että `\jobname` johti `\jobname` komennon (tokenin)  *poistettu* syötteestä ja *korvattu* laajenemisen synnyttämien tokenien avulla: väliaikainen tokeniluettelo, joka luotiin pitämään sisällään `.tex` tiedostossa.

Laajenevat komennot (kuten `\jobname`) eivät ole ainoita TeXin primitiivejä, jotka “salaa” luovat ja käyttävät tokeniluetteloita vaikutuksensa aikaansaamiseksi. Esimerkiksi komennot `\uppercase` ja `\lowercase` molemmat luovat sisäisiä tokeniluetteloita muuttaakseen argumenttinsa kirjainkoon. Kun kirjainkoon muuttaminen on tehty, TeX siirtyy lukemaan merkkitokeneita niiden komentojen tuottamista tokeniluetteloista. Tokeniluettelot ovat TeXin ainoa “tokenitietojen tallennusmekanismi” — lukuun ottamatta datan kirjoittamista ulos fyysiselle levy­tiedostolle.

### Tokenien lähteet: TeX on mestarijonglööri

Kun TeX käsittelee tavallista dokumenttia, sen täytyy hallita *monien* tokenien lähteitä: syötettä, joka tulee lukuisista fyysisistä levy­tiedostoista, ja lukemattomia käsittelyn aikana luotuja sisäisiä tokeniluetteloita. Tässä osiossa tarkastelemme hyvin lyhyesti, miten TeX onnistuu “jonglööraamaan” näitä syötelähteitä.

Oletetaan, että haluamme yksinkertaisen makron, joka ladottaa tiedostomme nimen `.tex` tiedosto:

```
    \def\myfile{Tiedostoni nimi on \jobname .tex}
```

Myöhemmin jossain vaiheessa meidän `.tex` tiedostossamme kutsumme makroa `\myfile`: tilapäisesti TeX siirtyy luomaan/lukemaan tokeneita tekstissäsi olevan tekstin kautta (`.tex`) tiedostosta lukemaan tokeneita `\myfile` määritelmästä (tokeniluettelosta), joka on tallennettu sen muistiin. Kun TeX suorittaa `\myfile` makron (käsittelee sen tokeneita), se havaitsee tokenin, joka edustaa `\jobname` komentoa, jonka laajeneminen luo jälleen yhden väliaikaisen tokeniluettelon, josta TeXin täytyy lukea tokeneita. Jopa tässä yksinkertaisessa tilanteessa TeXin täytyy hallita kolmea syötelähdettä:

1. sivustolta `.tex` tekstitiedosto, joka sisältää `\myfile` makron;
2. tokeniluettelo, joka tallentaa määritelmän `\myfile` makron;
3. tokeniluettelo, jonka on luonut `\jobname` komento `\myfile` makrossa.

Kun TeX käsittelee dokumenttia, se vaihtaa jatkuvasti syötelähteiden välillä: fyysisten tiedostojen ja tokeniluetteloiden välillä, joten miten TeX pysyy tästä perillä? Vastaus on, että sisäisesti TeX-moottorit ylläpitävät niin sanottua [syötepinoksi](https://en.wikipedia.org/wiki/Stack_\(abstract_data_type\)) joka toimii eräänlaisena “muistina”, jonka avulla TeX voi muistaa, mitä se oli tekemässä (mistä se luki), kun se vaihtaa syötelähteiden välillä.

Menkäämme menemättä liian syvälle yksityiskohtiin: TeX-moottoreiden sisäinen koodi käyttää globaalia muuttujaa nimeltä `curinput` (nykyinen syöte), joka muun muassa kertoo TeXille, lukeeko se parhaillaan fyysisestä tiedostosta vai tokeniluettelosta. `curinput` osoittaa TeXille myös sijainnin (nykyisessä tokeniluettelossa tai sen tekstipuskurissa), josta sen pitäisi hakea seuraava tokeni. Jos TeX lukee tokeniluettelosta `curinput` se tallentaa myös, minkä tyyppistä tokeniluetteloa käsitellään — esimerkiksi makrona tallennettua tokeniluetteloa tai sitä, ovatko nuo tokenit peräisin toisesta lähteestä.

Tarvittaessa `curinput` muuttuja muutetaan osoittamaan uutta syötelähdettä ja TeXin nykyinen “syötetila” (lähde ja sijainti) tallennetaan syötepinoon, jotta TeX voi myöhemmin palata täsmälleen siihen kohtaan (sijaintiin `.tex` tiedostossa tai tokeniluettelon seuraavaan tokeniin). Kun tuo uusi syötelähde on kulutettu loppuun (esim. tokeniluettelossa ei ole enää tokeneita tai tiedoston loppu saavutetaan), se poistetaan pinosta ja `curinput` päivitetään, jotta varmistetaan, että TeX palaa saamaan tokeneita aiemmasta lähteestä.

## Syvemmälle kaivautuminen (valinnainen lukeminen)

Seuraavat osiot tarjoavat lisätaustatietoa lukijoille, jotka pitävät yksityiskohdista.

### Varsinaiset tokeniluettelot

Seuraava kuva tuotettiin Overleafin Knuthin TeXistä tekemällä omalla käännöksellä, joka tarjoaa pääsyn TeXin sisäisiin tietoihin ja tietorakenteisiin. Tämä tokeniluettelon havainnollistus rakentuu yllä esitetyn yksinkertaistetun version varaan ja sisältää lisätietoja, kuten näyttää merkit, jotka on tuottanut `\jobname` on luokka­koodi 12, ei tavallinen luokkakoodi 11. Tässä kaaviossa “node” on vain nimi, joka annetaan TeXin käyttämälle muistin tallennusyksikölle.

![TeX-tokeniluettelon sisällä](/files/0731ff32b61f7af3058ccb2ad7e35be4e12a2d5a)

### Miten TeX lukee ja käsittelee \jobname

Lisäksi, täydellisyyden vuoksi, tässä on yleiskatsaus TeXin “ajatusprosesseihin”, kun se havaitsee `\jobname` syötteessämme `.tex` tiedostossa. Tässä kuvassa näemme, miten TeX havaitsee escape-merkin (`\` luokkakoodilla 0), käsittelee merkkijonon `jobname`, luo tokenin ja etsii `\jobname` komennon merkityksen, jolloin TeX huomaa sillä olevan komentokoodi > 100, mikä osoittaa sen olevan laajeneva komento.

![Miten TeX etsii ja käsittelee \jobname](/files/fad4fa0b7a50f7b657896282266cfecdc1555078)

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