> 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/19-how-does-expandafter-work-an-introduction-to-tex-tokens.md).

# Miten \expandafter toimii: johdanto TeX-tokeneihin

[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)

## Taustaa \expandafter: TeX-tunnukset ja tunnuslistat

Ensimmäisenä askeleena kohti sen ymmärtämistä, miten `\expandafter` se todella toimii, tarkastelemme kahta TeXin osaa, jotka ovat keskeisiä `\expandafter`: TeX-tunnuksia (kokonaislukuja) ja tunnuslistoja (kokonaislukujen listoja). Lukijoita, jotka haluavat perehtyä näihin aiheisiin paljon tarkemmin, saattavat kiinnostaa seuraavat Overleafin julkaisut:

* [Mikä on TeX-tunnus?](/latex/fi/syvalliset-artikkelit/53-what-is-a-tex-token.md)
* [Mikä on TeX-tokenlista?](/latex/fi/syvalliset-artikkelit/54-what-is-a-tex-token-list.md)-[Miten TeX-makrot oikeastaan toimivat?](/latex/fi/lisaa-aiheita/01-a-six-part-series-how-do-tex-macros-actually-work.md)

### Mistä tunnustieto on peräisin?

Tässä artikkelissa käytämme TeXin laskemia todellisia tunnusarvoja—tietoa, joka ei yleensä ole käyttäjien saatavilla. Lukijoille, joita kiinnostaa tietää, miten tämä tunnusarvodata saatiin, Overleafilla on useista TeX-moottoreista räätälöityjä versioita, joita käytämme tutkimukseen. Näitä moottoreita on muokattu tulostamaan tietoa TeXin sisäisistä käsittelytoiminnoista—mikä auttaa tarjoamaan lisätaustamateriaalia joihinkin tuottamiimme artikkeleihin. Näyttämällä/keskustelemalla numeerisista tunnusarvoista pyrimme sisällyttämään yksityiskohtia, jotka toivottavasti auttavat lukijoita ymmärtämään paremmin “TeX-tunnuksia” ja tekevät tästä tärkeästä käsitteestä hieman vähemmän läpinäkymättömän.

## TeX-tunnukset 101 (ja laajentamisen käsitteitä)

Kun TeX käsittelee syötetiedostoasi, se lukee tekstin ja muuntaa yksittäiset merkit ja merkkijonot (komennot) niin sanotuiksi *tokenit*. TeX-tunnus on yksinkertaisesti TeXin laskema kokonaislukuarvo, jota käytetään TeXin tarvitsemien, nykyisestä syöttölähteestään luettujen kohteiden tietojen “koodaamiseen”. Ajattele tunnuksia pieninä tietopaketteina, jotka “paketoivat yhteen” TeXin tallentamat tiedot seuraavaa käsittelyvaihetta varten. Sisäisesti TeX toimii näillä kokonaislukuisilla tunnusarvoilla—se ei käytä varsinaisia kirjaimia, symboleja, numeroita jne., jotka alun perin olivat syötetiedostossasi: kaikki muunnetaan tunnukseksi (kokonaisluvuksi), ja TeX työskentelee niiden kanssa.

## Miten TeX laskee tunnusarvot

Tässä tarkastelemme tunnuslaskentaa, jota käytetään Knuthin alkuperäisessä TeXissä, e-TeXissä ja pdfTeXissä; muissa TeX-moottoreissa, erityisesti XeTeXissä ja LuaTeXissä, tunnuslaskennan on oltava hieman erilainen Unicodea käytettäessä, mutta laskentamenetelmät ovat samanlaisia kuin alla kuvatut.

### Merkkitunnukset (ei-aktiiviset merkit)

Ei-aktiivisten merkkien tunnusarvojen laskeminen on suoraviivaista:

$$\text{character token} = 256\times \text{(category code)} + \text{character (ASCII) code}$$

**Esimerkki**: Kirjain A, jonka [kategoriakoodi](/latex/fi/lisaa-aiheita/43-table-of-tex-category-codes.md) 11, merkkikoodi 65 esitetään TeXissä merkkitunnuksen arvolla $$256\times 11 + 65 = 2881$$.

TeX-kirjallisuudessa saattaa törmätä kuvauksiin, joiden mukaan kun TeX on lukenut merkin, sen kategorakoodin arvo “sitoutuu pysyvästi” kyseiseen merkkiin: yllä oleva tunnusarvon laskenta osoittaa, miksi tämä pitää paikkansa. Myöhemmässä TeXin käsittelyssä se kuitenkin voi, ja myös tekee niin, “purkaa” merkkitunnuksia paljastaakseen koostuvan (merkkikoodi, kategorakoodi) -parin, josta tunnus on muodostettu—kun TeX tekee tämän “purkamisen”, se ei silti muuta kyseisen merkin kategorakoodia, vaan käyttää kyseistä tietoa vain myöhemmässä käsittelyssään.

### Komentotunnukset

TeXin syötteenkäsittely ja tunnusten generointi tunnistavat kahdenlaisia komentoja:

* komennot, jotka muodostetaan yhdestä tai useammasta merkistä, joiden kategorakoodi on 11;
* yksimerkkiset komennot, joissa kyseisen merkin kategorakoodi ei ole 11: kuten `\$` tai `\#`.

Molemmissa tapauksissa TeX jättää pois alkuperäisen `\` merkin ja käyttää kunkin jäljelle jäävän merkin merkkikoodia laskeakseen kokonaisluvun, jota TeX kutsuu `curcs` (**nyky**inen **c**ohjaus **jono**sekvenssi). TeX käyttää sitten arvon `curcs` laskiakseen komennolle tunnusarvon.

#### Merkeistä, joiden kategorakoodi on 11, muodostetut komennot

Oletetaan, että komentomme (ilman alkuperäistä `\` merkkiä) koostuu merkkijonosta: $$\mathrm{C\_1C\_2C\_3...C\_N}$$ jossa $$\mathrm{C}\_i$$ on kunkin merkin merkkikoodi—esim. A:n merkkikoodi on 65. TeX käyttää kaikkia merkkikoodeja $$\mathrm{C}\_i$$ laskeakseen kokonaisluvun `curcs` (käyttäen [tiivistefunktiota](https://en.wikipedia.org/wiki/Hash_function)). Kun TeX on laskenut arvon `curcs` se vain lisää siihen 4095, jolloin saadaan tunnusarvo:

$$\text{command token} = \text{curcs + 4095}$$

Huomaa, että muuttujalla `curcs` on erittäin tärkeä rooli TeXin sisäisissä käsittelytoiminnoissa.

#### Yksimerkkiset komennot

Tunnukset, jotka edustavat komentoja kuten `\$`, `\#` jne, lasketaan hieman eri tavalla: kokonaisluku `curcs` lasketaan nyt yksinkertaisemmalla kaavalla:

$$\text{curcs} = 257 + \text{character (ASCII) code}$$

Esimerkiksi, kun `\$`, $$\text{curcs}=257 + 36 = 293$$. TeX lisää taas tähän arvoon 4095 (käyttäen $$\text{command token} = \text{curcs} + 4095$$) ja siitä seuraa `\$` jonka tunnusarvo on $$293 + 4095 = 4388$$.

Verrattuna komentoihin, jotka koostuvat merkeistä, joiden kategorakoodi on 11, ainoa ero on siinä, miten TeX laskee arvon `curcs`.

**Huomaa**: kokonaislukua `curcs` ei lasketa merkkitunnuksille: se asetetaan aina arvoon 0, kun TeX luo merkkitunnuksia tai työskentelee niiden kanssa.

#### Aktiivimerkkitunnukset

TeXissä on niin sanottujen *aktiivimerkkien*: mikä tahansa merkki, jolle on annettu kategorakoodiksi 13. Tämän erityisen merkkiluokan tunnukset lasketaan eri tavalla kuin tavallisten merkkien tunnukset.

Aktiivimerkkimekanismi antaa TeXille mahdollisuuden luoda käytännössä yksimerkkisiä makroja, joita voit käyttää *ilman* ilman että aktiivimerkin eteen täytyy lisätä escape-merkkiä (yleensä `\`): yksittäinen merkki laukaisee makromaisen toimintonsa. Kaanoninen esimerkki on tilde-merkki (\~), jota TeX/LaTeX käyttävät sitoviin välilyönteihin ja joka voidaan määrittää/ottaa käyttöön seuraavasti:

```
\catcode`~=13 %määritä kategorakoodi 13 merkille ~
\def~{\penalty100000\ } %määritä ~ toimimaan makrona
```

Kun TeX myöhemmin lukee `~` merkin, se havaitsee sen kategorakoodin olevan 13 ja käsittelee sen “minimakrona”. Laskeakseen aktiivista merkkiä edustavan tunnuksen TeX käyttää toista muunnelmaa laskennassa `curcs`:

$$\begin{align\*} \text{curcs} &= \text{character code} + 1\ \text{active character token} &= \text{curcs} + 4095\ \end{align\*}$$

Esimerkiksi \~-merkin merkkikoodi on 126, mikä tarkoittaa, että sen aktiivimerkkitunnuksen esitysarvo lasketaan seuraavasti:

$$\begin{align\*} \text{curcs} &= 126 + 1\ \text{active character token} &= 127 + 4095\ &=4222\ \end{align\*}$$

Huomaa, että kuten komennotkin, aktiivisia merkkejä edustavat tunnukset ovat > 4095.

### Seuraukset/huomautukset

* Mikä tahansa tunnus, jonka arvo ylittää 4095:n, on heti tunnistettavissa komentotunnukseksi—näin TeX voi hyvin helposti havaita, edustaako jokin tunnus merkkiä vai komentoa.
* Mille tahansa tunnusarvolle TeX voi tarvittaessa “purkaa” kyseisen tunnuksen paljastaakseen merkin (ja sen kategorakoodin) tai komennon, joka alun perin oli `.tex` tiedostossasi, tallennettu makromääritelmään tai sisältyi johonkin muuhun tunnuslistaan.
* “Välisuureksi” kutsuttu suure `curcs`—jota TeX käyttää komentotunnusten arvojen laskemiseen—on tärkeä rooli TeXin matalan tason käsittelyssä. `curcs` toimii “indeksiarvona”, jota TeX käyttää komennon nykyisen merkityksen tallentamiseen/etsimiseen. Kun mikä tahansa komentotunnus, $$\mathrm{T}$$, TeX yksinkertaisesti vähentää siitä 4095 päästäkseen arvoon `curcs`: $$\text{curcs} = \mathrm{T}-4095$$

Sivumennen sanoen TeX kyllä tallentaa ihmisen luettavissa olevan merkkijonon, josta komentotunnus muodostetaan—tämä on välttämätöntä virheraportointia ja muiden komentojen, kuten `\string` jonka laajennus on tunnusarvon ihmisen luettavissa oleva versio, varten. TeXin sisällä tallennettuja ihmisen luettavia merkkijonoja käytetään/kirjoitetaan kuitenkin vain pyydettäessä: kaikessa muussa käsittelyssä käytetään tunnuksen kokonaislukuarvoa.

## Tarkastellaan joitakin oikeita tunnuksia

Jotta tunnusten käsite tuntuisi hieman vähemmän läpinäkymättömältä, määrittelemme seuraavan yksinkertaisen makron ja katsomme, millaisia tunnuksia TeX tuottaa:

```
\def\hello{Greetings, from \TeX. \hskip 10pt}
```

Makrolle `\hello` TeX käyttää merkkejä `h`, `e`, `l`, `l`, `o` laskeakseen arvon 3745 tunnukselle `curcs`; TeX lisää sitten 4095 luodakseen tunnusarvon $$3745 + 4095 = 7840$$ (Knuthin TeXissä, e-TeXissä tai pdfTeXissä).

Luotuaan tunnuksen, joka edustaa `\hello`, `\def` komento saa TeXin lukemaan seuraavat tunnukset ja käyttämään niitä tunnuslistan luomiseen, joka tallennetaan *joka sillä on tallennettuna muistissa. Kun kutsut makron, joka tarvitsee yhden tai useampia argumentteja, TeX:n täytyy tutkia (skannata) makron käyttöäsi selvittääkseen* sisällä `\hello` komentona. Tuo tallennettu määritelmä (tunnuslista) voidaan sitten hakea aina, kun käsket TeXiä käyttämään `\hello` komento.

Seuraava taulukko sisältää kunkin kohteen (merkki, makro tai primitiivi), joka sisältyy `\hello` makromääritelmään—tuon tunnusluettelon (kokonaislukujen) TeX tallentaa muistiinsa (tietorakenteena, jota kutsutaan [linkitetyksi listaksi](https://en.wikipedia.org/wiki/Linked_list)). Lukijoita, jotka haluavat ymmärtää tunnuslistoja tarkemmin, ohjataan Overleafin artikkeliin [Mikä on TeX-tokenlista?](/latex/fi/syvalliset-artikkelit/54-what-is-a-tex-token-list.md)

|                    |                    |
| ------------------ | ------------------ |
| **TeX-tunnusarvo** | **Esitetty kohde** |
| 2887               | G                  |
| 2930               | r                  |
| 2917               | e                  |
| 2917               | e                  |
| 2932               | t                  |
| 2921               | i                  |
| 2926               | n                  |
| 2919               | g                  |
| 2931               | jono               |
| 3116               | ,                  |
| 2592               |                    |
| 2918               | f                  |
| 2930               | r                  |
| 2927               | o                  |
| 2925               | m                  |
| 2592               |                    |
| 5235               | \TeX               |
| 3118               | .                  |
| 2592               |                    |
| 7943               | \hskip             |
| 3121               | 1                  |
| 3120               | 0                  |
| 2928               | p                  |
| 2932               | t                  |

Yllä olevassa tunnuslistassa merkeillä on kategorakoodit 10, 11 tai 12. Esimerkiksi:

* merkeillä on kategorakoodi 10 ja merkkikoodi 32, mikä antaa tunnusarvoksi $$256\times 10 + 32 = 2592$$
* `,` ja `.` niillä on kategorakoodi 12 ja merkkikoodit 44 ja 46, mikä antaa tunnuksiksi:
* tunnus merkille `,` $$= 256 \times 12 + 44 = 3116$$
* tunnus merkille `.` $$= 256\times 12+ 46 = 3118$$

Aina kun TeX myöhemmin kohtaa tunnusarvon 7840 (joka edustaa `\hello`), se voi tarvittaessa “purkaa” kyseisen tunnuksen poimiakseen `curcs` yksinkertaisella laskutoimituksella $$\text{curcs} = \text{token value} - 4095$$ (katso yllä). Käyttämällä arvoa `curcs` TeX voi tarkastaa sisäiset tietotaulunsa ja päätellä, että komentotunnus 7840 edustaa makrokomentoa. Lisäksi jälleen `curcs`, TeX voi myös hakea ja noutaa tallennetun määritelmän `\hello`.

Kun TeX:n täytyy käsitellä tunnus 7840 kokonaan, eli ajaa `\hello` makro, se ei enää tarvitse tunnusta 7840: kyseinen tunnus on *tehnyt tehtävänsä*—eli se sai TeXin suorittamaan makron `\hello`. TeX voi nyt hylätä tunnuksen 7840 ja hakea tunnukset, jotka edustavat muistissa tallennettua määritelmää (tunnuslistaa). Käytännössä `\hello` makrokuento (tunnus 7840) on *poistettu* TeXin nykyisestä syöttölähteestä ja *korvattu* tunnuksilla, jotka sisältyvät määritelmään `\hello`. Kuvaamamme on yksi muoto *tunnusten laajentamista*.

Se `\TeX` komennon (yllä lueteltu tunnusarvo 5235), jota käytetään `\hello` on itsekin useammista tunnuksista rakennettu makro—joten senkin määritelmä tallennetaan tunnuslistana:

|                    |                    |
| ------------------ | ------------------ |
| **TeX-tunnusarvo** | **Esitetty kohde** |
| 2900               | T                  |
| 19598              | \kern              |
| 3117               | -                  |
| 3118               | .                  |
| 3121               | 1                  |
| 3126               | 6                  |
| 3126               | 6                  |
| 3127               | 7                  |
| 2917               | e                  |
| 2925               | m                  |
| 19597              | \lower             |
| 3118               | .                  |
| 3125               | 5                  |
| 2917               | e                  |
| 2936               | korkeus            |
| 6175               | \hbox              |
| 379                | {                  |
| 2885               | E                  |
| 637                | }                  |
| 19598              | \kern              |
| 3117               | -                  |
| 3118               | .                  |
| 3121               | 1                  |
| 3122               | 2                  |
| 3125               | 5                  |
| 2917               | e                  |
| 2925               | m                  |
| 2904               | X                  |

Jos korvaisimme `\hello` komennon täydellisellä tunnusluettelolla, josta se on rakennettu, mukaan lukien `\TeX` makro, siitä tulisi varsin pitkä lista—eli jos myös *laajentaisimme* sivustolta `\TeX` makron, näkisimme:

![TeX-makroon tallennettu tunnuslista](/files/ee2e20139abac7b2d853525ef3dd353958eee9b2)

Periaatteessa yksi tunnusarvo 7840 (merkille `\hello`) tuottaisi täysin laajennettuna yhteensä 51 tunnusta (kokonaislukua), jotka edustavat merkkejä ja primitiivikomentoja. Seuraavassa luettelossa kunkin tunnuksen edustama merkki tai komento on sulkeissa “(...)”—näitä ei tallenneta suoraan TeXin tunnuslistoihin, vaan ne on esitetty lukijan avuksi:

```
2887 (G), 2930 (r), 2917 (e), 2917 (e), 2932 (t), 2921 (i), 2926 (n), 2919 (g), 2931 (s), 3116 (,), 2592 (<space>), 2918 (f), 2930 (r), 2927 (o), 2925 (m), 2592 (<space>),  2900 (T), 19598 (\kern), 3117 (-), 3118 (.), 3121 (1), 3126 (6), 3126 (6), 3127 (7), 2917 (e), 2925 (m), 19597 (\lower), 3118 (.), 3125 (5), 2917 (e), 2936 (x), 6175 (\hbox), 379 ({), 2885 (E), 637 (}), 19598 (\kern), 3117 (-), 3118 (.), 3121 (1), 3122 (2), 3125 (5), 2917 (e), 2925 (m), 2904 (X), 3118 (.), 2592 (<space>), 7943 (\hskip), 3121 (1), 3120 (0), 2928 (p), 2932 (t)
```

Ihmisen lukemana tämä on vain joukko kokonaislukuja, mutta TeXille se koodaa valtavan määrän tietoa.

## Lue tunnukset nyt ja tallenna ne myöhempää käyttöä varten

Kun TeX lukee syötettäsi, voi joskus olla tarpeen (tai sitä voidaan käskeä) viivästää jonkin tietyn tunnusjoukon täyttä käsittelyä. Jos sitä käsketään tekemään niin, TeX jatkaa, kunnes sille sanotaan lopettaa, tunnusten luomista syötteestä mutta tallentaa ne myöhempää käyttöä varten—ja noutaa sekä käsitellä ne myöhemmin osana ladontatoimintojaan. Nämä tallennetut tunnukset säilytetään niin sanottuina *tunnuslistoina* jotka ovat käytännössä TeXin ainoa (sisäinen) tunnustiedon tallennusmekanismi.

Olemme jo nähneet esimerkkejä tunnuslistoista— `\hello` ja `\TeX` yllä luetellut makrot: näiden makrojen määritelmät tallennetaan TeXin muistiin tunnuslistoina. TeX käsittelee (toimittaa) tällaisia tunnuslistoja vasta, kun päätät kutsua näitä makroja. Muista myös, että jokainen tunnus (kokonaislukuarvo) sisältää TeXille riittävästi tietoa, jotta se voi helposti päätellä, edustaako makromääritelmään tallennettu tunnus merkkiä vai komentoa.

### Tunnusten tallentaminen tunnusrekistereihin

Toinen esimerkki tunnusten tallentamisesta on tunnuslistojen nimenomainen luominen ja niiden tallentaminen niin sanottuihin *tunnusrekistereihin*: TeXin käyttäjien käyttöön tarjoamia omia sisäisiä tallennusalueita tunnuslistojen säilyttämistä varten. TeXin primitiivi `\toksdef` on yksi tapa käyttää tunnusrekistereitä; esimerkiksi käyttää tunnusrekisteriä `100` ja viitata siihen komennolla `\mylist`:

```
        \toksdef\mylist=100
        \mylist={some \TeX{} tokens here}
```

`\mylist` on käytännössä vain nimi, jonka annat tunnuslistalle, joka on tallennettu rekisteripaikkaan `100`. Samoin kuin makromääritelmä, `\mylist` sisältää seuraavan tunnuslistan:

|                    |                    |
| ------------------ | ------------------ |
| **TeX-tunnusarvo** | **Esitetty kohde** |
| 2931               | jono               |
| 2927               | o                  |
| 2925               | m                  |
| 2917               | e                  |
| 2592               |                    |
| 5235               | \TeX               |
| 379                | {                  |
| 637                | }                  |
| 2592               |                    |
| 2932               | t                  |
| 2927               | o                  |
| 2923               | k                  |
| 2917               | e                  |
| 2926               | n                  |
| 2931               | jono               |
| 2592               |                    |
| 2920               | h                  |
| 2917               | e                  |
| 2930               | r                  |
| 2917               | e                  |

**Huomaa**: päättämään `\TeX` makron ja estämään sitä nielemästä seuraavaa `<välilyönti>` merkkiä käytimme aaltosulkuparia `{}` heti jälkeen `\TeX`—tunnukset `{` (379) ja `}` (637) tallennetaan tunnuslistaan. Toinen vaihtoehto on käyttää “ohjausvälilyönti”-tunnusta `\<space>` joka näkyisi tunnuslistassa alla esitetyllä tavalla (lihavoituna):

|                    |                    |
| ------------------ | ------------------ |
| **TeX-tunnusarvo** | **Esitetty kohde** |
| 2931               | jono               |
| 2927               | o                  |
| 2925               | m                  |
| 2917               | e                  |
| 2592               |                    |
| 5235               | \TeX               |
| **4384**           | **\\**             |
| 2932               | t                  |
| 2927               | o                  |
| 2923               | k                  |
| 2917               | e                  |
| 2926               | n                  |
| 2931               | jono               |
| 2592               |                    |
| 2920               | h                  |
| 2917               | e                  |
| 2930               | r                  |
| 2917               | e                  |

Huomaa, että `<välilyönti>` merkki esitetään *merkkitokeniksi* arvolla $$256\times 10 + 32 = 2592$$ mutta `\﻿<space>` käsitellään yksimerkkisenä *komentotunnuksena* (arvo 4384), joka lasketaan yllä annettujen kaavojen avulla:

\begin{align\*} \text{curcs} & = 257 + \text{character (ASCII) code}\\\ & = 257 + 32\\\ &=289\\\ \text{command token for} \left<\text{\\\space}\right> & = \text{curcs + 4095}\\\ & = 289+4095\\\ &=4384\\\ \end{align\*}

Pohjimmiltaan `\mylist={some \TeX{} tokens here}` sanoo TeXille: skannaa syötetiedostoni ja muunna seuraavat merkit/komennot tunnuksiksi ja tallenna ne myöhempää käyttöä varten. TeX tottelee ja tallentaa nuo tunnukset muistipaikkaan, johon voit päästä käsiksi kirjoittamalla `\the\mylist`, jolloin TeX:lle annetaan käsky lisätä kopio tunnusrekisterissä olevista tunnuksista `\mylist`. TeX-moottoreihin sisältyy useita primitiivikomentoja, jotka nimenomaisesti luovat ja tallentavat tunnuslistoja—kuten `\everyjob`, `\everypar`, `\mark`, ja monia muita.

[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/19-how-does-expandafter-work-an-introduction-to-tex-tokens.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.
