> 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/lisaa-aiheita/21-how-tex-macros-actually-work-part-3.md).

# Miten TeX-makrot oikeastaan toimivat: osa 3

[Osa 1](/latex/fi/lisaa-aiheita/19-how-tex-macros-actually-work-part-1.md) [Osa 2](/latex/fi/lisaa-aiheita/20-how-tex-macros-actually-work-part-2.md) [Osa 3](/latex/fi/lisaa-aiheita/21-how-tex-macros-actually-work-part-3.md) [Osa 4](/latex/fi/lisaa-aiheita/22-how-tex-macros-actually-work-part-4.md) [Osa 5](/latex/fi/lisaa-aiheita/23-how-tex-macros-actually-work-part-5.md) [Osa 6](/latex/fi/lisaa-aiheita/24-how-tex-macros-actually-work-part-6.md)

## Aika pysähtyä!

Ennen kuin siirrymme tämän tarinan seuraavaan osaan, meidän on kerrattava: muistutettava itseämme siitä, mihin olemme menossa, ja koottava ajatuksemme varmistaaksemme, että kaikki keskeiset ideat ovat paikallaan. Vain muistutuksena, esimerkkimme perustuu oletukseen, että TeX on lukenut tekstirivin, joka sisältää `Hello World \jobname` ja että TeX asettelee tätä rakentaakseen kappaleen.

### Perimmäinen tavoite

Tavoitteenamme on kehittää parempi (syvällisempi) ymmärrys TeX-makrojen luonteesta ja siitä, miten ne toimivat. Jotta pääsisimme siihen, meidän on ensin ymmärrettävä, miten TeX lukee syötetiedostoa ja käsittelee sen sisältämiä merkkejä. Tässä on yhteenveto tähän asti käsitellyistä aiheista.

* TeX lukee (skannaa) jokaisen merkin syötteestäsi, ja jokaisesta merkistä TeXillä on kaksi tietoa:
* **merkkikoodi**: kokonaisluku, jota käytetään kyseisen merkin tunnistamiseen, esim. kun se on tallennettu .tex-syötetiedostoon;
* **kategoriakoodi**: toinen, TeXiin sisäinen kokonaisluku, jota se käyttää antaakseen merkityksen jokaiselle syötteestä luetulle merkille.
* Heti kun TeX on lukenut merkin, kunkin merkin kategoriakoodi muuttuu *pysyvästi* liitetyksi kyseiseen yksittäiseen merkkiin merkkitunnisteen luomisen kautta:
* TeX käyttää yksinkertaista kaavaa “pakatakseen yhteen” merkkikoodin ja sitä vastaavan kategoriakoodin kokonaisluvuksi, jota kutsutaan merkkitunnisteeksi.
* Voit muuttaa minkä tahansa merkin merkitystä, jota TeX ei ole *vielä lukenut* antamalla eri kategoriakoodin mille tahansa merkille, jonka käyttäytymistä haluat muuttaa — eli muuttamalla tapaa, jolla TeX käsittelee kyseistä merkkiä.
* Kategoriakoodien uudelleenmäärittäminen (uudelleenkartoitus) onnistuu TeXin primitiivillä `\catcode` komento.
* Kun TeX näkee kategoriakoodin 0, se siirtyy erityiseen skannaustilaan ja alkaa etsiä komentoa: joko (mahdollisesti) monikirjaimista *ohjaussanaa* tai yksimerkkistä *ohjaussymbolia*.

Toistaiseksi olemme tarkastelleet TeXin syötteen skannausta sen tunnistaessa yksittäisiä merkkejä ja käyttäessään kunkin merkin kategoriakoodia selvittääkseen, mitä tehdä seuraavaksi. Jotkin merkit ovat vain tavallisia ladottavia tekstin osia (esim. kategoriakoodi 11), mutta olemme nähneet myös välilyöntimerkkejä (kategoriakoodi 10) ja escape-merkkejä (kategoriakoodi 0). On muitakin kategoriakoodeja, joita emme lyyyden vuoksi ole tarkastelleet — kuten kategoriakoodi 1 (“ryhmän alku”, esim., `{`) `}`) ja muita. Jokaisella kategoriakoodilla on oma roolinsa TeXin syötteen skannauksessa ja sitä seuraavassa käsittelyssä TeXin sisäisten ohjelmaprosessien/algoritmien toimesta.

### Tokenit: nopea kertaus

“Tokenien” käsite on keskeinen TeXin toiminnassa: tulet näkemään “tokeneita” mainittavan tai niihin viitattavan kaikkialla TeX-aiheisissa kirjoissa, artikkeleissa ja verkkoyhteisöissä, joten tätä aihetta kannattaa kerrata lyhyesti — voit löytää lisää yksityiskohtia aiemmin julkaistusta artikkelista [Mikä on "TeX-token"?](/latex/fi/syvalliset-artikkelit/53-what-is-a-tex-token.md)

Olemme jo nähneet, että TeX muuntaa syötemerkit tokeneiksi yhdistämällä merkkikoodin ja kategoriakoodin yhdeksi yhdistetyksi kokonaisluvuksi. TeX tekee komentojen kanssa jotakin samankaltaista: käyttäen komennon nimeä se laskee kokonaisluvun, jota kutsutaan *vaan toiseksi (kokonaisluku-)tokenityypiksi nimeltä* (tätä tutkimme tarkemmin). Ohjenuorana voit ajatella tokeneita TeXin tapana “paketoida” syötteestä lukemiaan asioita, jolloin ne ovat valmiita lähetettäväksi TeXin käsittelyn seuraavaan vaiheeseen. Kun kaikki asiat (merkit tai komennot) on siististi kääritty yhdeksi numeeriseksi esitykseksi, niitä on helpompi käsitellä edelleen prosessin myöhemmissä vaiheissa. Esimerkiksi kun TeX haluaa tallentaa osan syötteestäsi käytettäväksi myöhemmin, kuten makron määrittelyn, TeX:n tarvitsee vain tallentaa makron määrittely, kuinka monimutkainen tahansa, kokonaislukusarjana, jossa kukin kokonaisluku on token, joka edustaa makron määrittelyn osana olevaa merkkiä tai komentoa.

## Mitä seuraavaksi?

Part 2:n viimeisessä osassa näimme, kuinka escape-merkki (kategoriakoodi 0) siirtää TeXin erityiseen käsittelytilaan, jossa se etsii komennon nimeä. Esimerkissämme TeX havaitsi merkkijonon `jobname` ja lopetimme Part 2:n siihen kohtaan, jossa TeXin oli tarkoitus “tehdä jotain” kyseisellä merkkijonolla (komennon nimellä). Tässä osassa tarkastelemme yksityiskohtaisesti, mitä TeX tekee seuraavaksi.

Kun TeX on tunnistanut, että jokin tietty merkkijono syötetiedostossasi edustaa komennon nimeä (tässä, `jobname`) TeXin voi, riippuen siitä mitä se tekee, olla tarpeen suorittaa tuo komento. Sanomme “voi olla tarpeen”, koska on tilanteita, joissa TeX ei yritä suorittaa komentoa heti: esimerkiksi kun se määrittelee makroa (TeX rakentaa token-listoja) — aiheita, joita käsittelemme myöhemmin. Jatkamme kuitenkin esimerkkiämme, jossa TeX asettelee kappaletta ja *tulee*, tässä tilanteessa, tarvitsee suorittaa `\jobname`.

### Merkkijonosta komennon suorittamiseen: miten?

Ensiksi palataan Part 2:n grafiikkaan 5b, jossa TeX on tunnistanut, että syötteessä oleva tietty merkkijono muodostaa komennon nimen: `jobname`. Grafiikka 5b osoittaa, että TeXin on “Tarkistettava sisäiset taulukot...”. Mitä tuo *oikeastaan tarkoittaa*?

![TeX etsii komennon nimeä](/files/77d475284b6cab179e2eb7f772d919403117ef05)

Toinen, yksityiskohtaisempi kuvaus siitä, kuinka TeX “tarkistaa sisäiset taulukot” siirtyäkseen tilanteesta, jossa sillä on merkkijono (esim., `jobname`) siihen, että se selvittää täsmälleen, mikä komento on kyseessä ja mitä se tarkoittaa, löytyy aiemmasta artikkelista [Mikä on "TeX-token"?](/latex/fi/syvalliset-artikkelit/53-what-is-a-tex-token.md) Tässä tiivistämme keskeiset ideat ja yritämme välttää liiallista toistoa.

Aloitetaan analogialla. Kuvittele, että luet kirjaa ja törmäät tuntemattomaan sanaan: mitä teet? Nykyään vastaus on lähes varmasti “tartut Googleen”, mutta oletetaan, että suosittelet vanhempaa menetelmää: tarttuu sanakirjaan, joka listaa sanat ja antaa niiden merkityksen/merkitykset. TeXillä on analoginen mekanismi: sisäinen “sanakirja”, joka luettelee kaikki TeXille tällä hetkellä tunnetut komennot — ja näiden komentojen “merkityksen”. “Merkityksellä” tarkoitamme sitä, millainen komento on: mitä se tekee, sekä mahdolliset muut tiedot, joita TeX voi tarvita komennon suorittamiseen. Huomaa myös, että termi “komento” kattaa kaikki käyttäjien/TeX-ohjelmoijien kirjoittamat TeX/LaTeX-makrot sekä [satoja sisäänrakennettuja primitiivikomentoja](/latex/fi/lisaa-aiheita/46-tex-primitives-listed-by-tex-engine.md).

Jatketaan sanakirja-analogiaamme. Kun me ihmisinä haluamme selvittää sanan merkityksen, etsimme sen sanakirjasta aakkosellisen sanaluettelon avulla — mutta tietenkään TeX ei toimi aivan näin. Palataan alkuperäiseen `jobname` esimerkkiimme: miten TeX löytää “sanakirjastaan” `jobname`— ja mitä tuo “merkitys” oikeastaan antaa TeXille?

Sen sijaan, että TeX tarjoaisi sisäisen “aakkosellisen luettelon” kaikista tuntemistaan komennoista, se tekee jotakin hieman erilaista. TeX muuntaa koko merkkijonon — joka on komennon nimessä — yhdeksi kokonaisluvuksi, jota käytetään kyseisen komennon tunnistamiseen (esittämiseen). Sisäisesti TeX ylläpitää suurta “sanakirjaa” kaikista tunnetuista komennoista, johon se tallentaa *kokonaisluvut* komentojen nimistä laskettuina — huomaa, että tuo sanakirja ei tallenna itse komentojen nimiä merkkijonoina (kutsutaan *merkkijonoiksi*). TeX käyttää tuota sanakirjaa kaikille sisäänrakennetuille komennoilleen (primitiiveille) *ja* se käyttää sitä myös tallentamaan käyttäjien luomien makrojen (komentojen) tiedot: makrosi nimi muunnetaan kokonaisluvuksi, ja tuo kokonaisluku “rekisteröidään” TeXin sanakirjaan.

Joka kerta kun TeX havaitsee syötteessäsi käytetyn komennon ja tarvitsee tietoa siitä komennosta, se muuntaa komennon nimessä olevan merkkisarjan “vastaavaksi” kokonaisluvuksi ja käyttää tuota kokonaislukua komennon etsimiseen “suuresta sanakirjastaan”. Ohjelmoijien joukossa olevia saattaa kiinnostaa tietää, että TeX käyttää tähän muunnokseen eräänlaista [hajautusfunktiota](https://en.wikipedia.org/wiki/Hash_function) hash-funktiota

![Hash-funktion kaavio](/files/e7354c35aa997f2cb31757013e7a9da96986fda9)

### Kuva 6: Merkeistä komennon merkitykseen

Seuraava grafiikka näyttää komennon matkan, kun TeX muuntaa merkkijonon vastaavaksi kokonaisluvuksi, jota kutsutaan **curcs**, ja käyttää tuota kokonaislukua komennon merkityksen etsimiseen TeXin “suuresta sanakirjasta”. Tämän haun tuloksena saadaan kaksi tietoa: kaksi kokonaislukua, joita kutsutaan **curcmd** ja **curchr**, joita TeX voi käyttää selvittääkseen tarkalleen, mitä komento tekee ja miten se sen jälkeen suoritetaan.

![TeX muuntaa merkkijonon vastaavaksi kokonaisluvuksi komennon merkityksen etsimiseksi](/files/e43b2614a1c80e5e148bed0b8275c1e300138f17)

Sisäisesti TeX ylläpitää muuttujaa nimeltä **curcs** (**nyky**inen **c**ohjaus **jono**sekvenssi) jota käytetään tallentamaan komennon kokonaislukuarvo, jonka parissa TeX parhaillaan työskentelee — eli, **curcs** tallentaa komennon nimestä lasketun kokonaisluvun. Se ei kuitenkaan ole koko tarina, sillä on vielä yksi yksityiskohta: jos TeX on juuri lukenut/käsitellyt merkin eikä komentoa, se asettaa **curcs** nollan arvoon, jotta se muistaa, että viimeksi luettu asia oli merkki, ei komento.

### Mitä komennot merkitsevät TeXille

Jos tarkastelemme [TeXin tarjoamien sisäänrakennettujen komentojen joukkoa](/latex/fi/lisaa-aiheita/46-tex-primitives-listed-by-tex-engine.md) voimme nähdä, että jotkin näistä komennoista liittyvät läheisesti toisiinsa: ne suorittavat samankaltaisia tehtäviä; esimerkiksi on neljä primitiivikomentoa, joita kaikki TeX-moottorit käyttävät makrojen määrittelemiseen (luomiseen): `\def`, `\gdef`, `\edef`, `\xdef`. Nämä neljä komentoa kaikki määrittelevät makroja, mutta tietenkin kukin tekee sen hieman eri tavalla. Jos ajattelemme tätä ohjelmoinnin näkökulmasta: tässä on neljä makronmäärittelykomentoa, jotka tekevät suunnilleen samaa, mutta meidän on valittava niiden välillä, jotta voimme huomioida niiden yksilöllisen käyttäytymisen.

Tämän käsittelemiseksi TeX antaa jokaiselle komennolle kaksi arvoa, ja TeX ymmärtää nämä kaksi arvoa komennon “merkitykseksi” (sen rooliksi / mitä se tekee) — nämä kaksi arvoa ovat TeXin sisäisiä, syvällä ohjelmistossa, ja osa “sisäistä koneistoa”, johon käyttäjillä ei ole pääsyä. Jokaiselle TeX-komennolle, olipa se sisäänrakennettu primitiivi tai käyttäjän määrittelemä komento, annetaan kaksi arvoa, jotka määrittävät/luokittelevat sen käyttäytymisen TeXille — mitä se tarkoittaa TeXille. Kun TeX käyttää “suurta sanakirjaansa” komennon etsimiseen, se löytää nämä kaksi tärkeää tietoa:

* **komentokoodi**: eräänlainen “yleinen luokitus”, joka ilmaisee, minkä “tyyppinen” komento on — kuten “makron määrittely” -komento (yksi `\def`, `\gdef`, `\edef`, `\xdef`); “laatikkorakennus”-komento (yksi `\hbox`, `\vbox` tai `\vcenter`) ja niin edelleen niille sadoille komennoille, joita TeX-moottorit tukevat. Myös makroille (käyttäjän määrittelemille komennoille) annetaan komentokoodi.
* **komennon muokkausosa**: Tämä on lisätietoa, joka antaa TeXille tarkkoja tietoja komennosta. Myös makroille (käyttäjän määrittelemille komennoille) annetaan komennon muokkausosa — tosin makroilla komennon muokkausosalla on hieman erilainen tehtävä kuin primitiiveillä (makroissa komennon muokkausosa ilmaisee, mihin makron määrittely on tallennettu muistiin).

Yhdessä komentokoodi ja komennon muokkausosa yksilöivät jokaisen komennon ainutlaatuisesti. Tässä ovat makronmäärittelykomentojen koodit ja komennon muokkausosat, sellaisina kuin Knuthin alkuperäinen TeX-ohjelmisto niitä käyttää — huomaa, että muut TeX-moottorit voivat käyttää eri arvoja, mutta ne noudattavat täsmälleen samaa periaatetta:

|             |                                                           |                                                                 |
| ----------- | --------------------------------------------------------- | --------------------------------------------------------------- |
| **Komento** | <p><strong>Komento</strong><br><strong>koodi</strong></p> | <p><strong>Komento</strong><br><strong>muokkausosa</strong></p> |
| `\def`      | 97                                                        | 0                                                               |
| `\gdef`     | 97                                                        | 1                                                               |
| `\edef`     | 97                                                        | 2                                                               |
| `\xdef`     | 97                                                        | 3                                                               |

### Kertaus: näiden muuttujien/arvojen ymmärtäminen

Tässä vaiheessa meitä tulvii paljon tietoa arvoista, muuttujista, komentoarvoista ja kaikenlaisista yksityiskohdista — tästä voi nopeasti tulla sekavaa, joten pysähdytään kokoamaan, mitä tiedämme. Kun TeX lukee jotakin syötteestäsi, se on joko merkki tai komento. Aina kun TeX lukee jotakin syötteestä, sen on tallennettava tiedot juuri lukemastaan (skannaamastaan) asiasta:

* Tiedostoissa **merkkejä**: sen on kirjattava merkkikoodi ja kategoriakoodi. Sen on myös luotava ja tallennettava token-arvo, jonka TeX laskee näiden arvojen avulla.
* Tiedostoissa **komennot**: TeXin on tiedettävä numeerinen vastine, **curcs**jonka se laski komennon nimestä. Sen on ehkä myös tallennettava “merkitys”, jonka se haki etsimällä komennon TeXin “sanakirjasta”: komentokoodi ja komennon muokkausosa. Tämän lisäksi TeXin on myös laskettava tätä komentoa edustava token-arvo.

Kyllä, tämä on sekavaa: pyörii paljon muuttujia ja token-ajatuksia, joten yritetään saada tästä tolkkua.

Sisäisesti TeX käyttää neljää globaalia muuttujaa tallentamaan tietoja viimeisimmästä asiasta, jonka TeX on lukenut (tai jota se parhaillaan “käsittelee”) — emme käy näitä muuttujia kovin yksityiskohtaisesti läpi, mutta niiden olemassaolo auttaa antamaan hieman taustaa ymmärtää, mitä todella tapahtuu:

* **curcmd**: (current command) kokonaislukumuuttuja. Sitä käytetään tallentamaan *nykyinen komento* arvo komennolle, jota käsitellään *tai* se tallentaa nykyisen *kategoriakoodi* käsiteltävän merkin;
* **curchr**: (current character) kokonaislukumuuttuja, mutta se, mitä se tallentaa, riippuu siitä, mitä TeX on juuri lukenut syötteestään:
* **merkkiä**: Jos viimeksi luettu asia on merkki, **curchr** tallentaa nykyisen *merkkikoodi*.
* **komento**: Jos viimeksi luettu asia on komento, **curchr** tallentaa *komennon muokkausosa*lisätietoa, jota TeX käyttää tukemaan/selventämään **curcmd**—koska, kuten edellä näimme, joillakin komennoilla on sama **curcmd**
* **curcs**: (current control sequence) kokonaislukumuuttuja, joka tallentaa komennon nimen merkkijonosta lasketun arvon. **curcs** = 0, jos viimeksi luettu asia oli yksittäinen merkki eikä ohjaussekvenssin nimi (komennon nimi);
* **curtok**: (current token) kokonaislukumuuttuja, joka sisältää nykyisen tokenin arvon — joka on joko komentotoken tai merkkitoken.

Yllä oleva tieto taulukkona:

|                                               |                                                                                                                                                                                                                    |                                                                                                                                                                                                                                                                                       |
| --------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **TeXin sisällä käytetty globaali muuttuja:** | **Kun TeX skannaa merkin:**                                                                                                                                                                                        | **Kun TeX skannaa komennon:**                                                                                                                                                                                                                                                         |
| **curcmd**                                    | Tallentaa nykyisen merkin kategoriakoodin                                                                                                                                                                          | Tallentaa *komentokoodi*—joka yksilöi nykyisen komennon “tyypin”                                                                                                                                                                                                                      |
| **curchr**                                    | Tallentaa nykyisen merkin merkkikoodin                                                                                                                                                                             | : lisätietoa (jota kutsutaan *komennon muokkausosa*) joka antaa lisätietoja nykyisestä komennosta                                                                                                                                                                                     |
| **curcs**                                     | 0                                                                                                                                                                                                                  | Nollasta poikkeava positiivinen kokonaisluku, joka lasketaan (hash-funktion avulla) käyttäen komennon nimessä olevaa merkkijonoa. Sitä käytetään TeXin “sanakirjaan” pääsemiseen komennon nykyisen merkityksen hakemiseksi — sen komentokoodin ja komennon muokkausosan noutamiseksi. |
| **curtok**                                    | 8-bittisissä TeX-moottoreissa *merkkitokeniksi* lasketaan kaavalla: $$\text{curtok}=256\times \text{curcmd} + \text{curchr}$$ jossa $$\text{curcmd}$$ on merkin kategoriakoodi ja $$\text{curchr}$$ on merkkikoodi | 8-bittisissä TeX-moottoreissa *vaan toiseksi (kokonaisluku-)tokenityypiksi nimeltä* lasketaan kaavalla: $$\text{curtok}=4095 + \text{curcs}$$                                                                                                                                         |

### Lisähuomautuksia nykyisestä tokenista

Merkeille suurin mahdollinen token-arvo saadaan käyttämällä suurinta kategoriakoodia (15) ja suurinta merkkikoodia, joka 8-bittisissä TeX-moottoreissa on 255. Teoriassa (8-bittisissä TeX-moottoreissa) suurin merkkitokenin arvo, $$\text{curtok}\_{\text{max}}$$, on:

$$\text{curtok}\_{\text{max}}= 256\times 15 + 255 = 4095$$

Huomautamme “teoriassa”, koska kategoriakoodia 15 käytetään kuvaamaan “virheellistä merkkiä”, joka saa TeXin tuottamaan virheen: virheellinen merkki ei koskaan pääse TeXin syötteen skannausprosessia pidemmälle, eikä siitä siis koskaan tule merkkitokenia.

Komennoille nykyinen token ($$\text{curtok}$$) lasketaan $$\text{curtok}=4095 + \text{curcs}$$ mutta komennoille $$\text{curcs}$$ on *aina* ei-nolla, joten TeX voi helposti määrittää, mitä token edustaa:

* Jos $$\text{curtok} > 4095$$ silloin se on komentotoken;
* Jos $$\text{curtok} < 4095$$ se on merkkitoken.

Käytännössä TeX käyttää tokeneita, yksinkertaista kokonaislukuarvoa, “pakatakseen” kaikki tiedot, jotka sen on tiedettävä syötteestä luetusta asiasta.

## Osa 4

Osassa 4 tutkimme joukkoa esimerkkimakroja havainnollistaaksemme makron `<parametriteksti>` osaa toimia “token-pohjana”, joka voidaan rakentaa erotintokeneiden avulla.

[Osa 1](/latex/fi/lisaa-aiheita/19-how-tex-macros-actually-work-part-1.md) [Osa 2](/latex/fi/lisaa-aiheita/20-how-tex-macros-actually-work-part-2.md) [Osa 3](/latex/fi/lisaa-aiheita/21-how-tex-macros-actually-work-part-3.md) [Osa 4](/latex/fi/lisaa-aiheita/22-how-tex-macros-actually-work-part-4.md) [Osa 5](/latex/fi/lisaa-aiheita/23-how-tex-macros-actually-work-part-5.md) [Osa 6](/latex/fi/lisaa-aiheita/24-how-tex-macros-actually-work-part-6.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/lisaa-aiheita/21-how-tex-macros-actually-work-part-3.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.
