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

# Jak działa \expandafter: wprowadzenie do tokenów TeX

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

## Tło dla \expandafter: tokeny TeX-a i listy tokenów

Jako pierwszy krok do zrozumienia, jak `\expandafter` to naprawdę działa, przyjrzymy się dwóm składnikom TeX-a, które są fundamentalne dla działania `\expandafter`: tokeny TeX-a (liczby całkowite) i listy tokenów (listy liczb całkowitych). Czytelników, którzy chcieliby zgłębić te tematy znacznie bardziej szczegółowo, może zainteresować lektura następujących artykułów opublikowanych przez Overleaf:

* [Czym jest token TeX-a?](/latex/pl/artykuly-szczegolowe/53-what-is-a-tex-token.md)
* [Czym jest lista tokenów TeX-a?](/latex/pl/artykuly-szczegolowe/54-what-is-a-tex-token-list.md)-[Jak właściwie działają makra TeX-a?](/latex/pl/wiecej-tematow/01-a-six-part-series-how-do-tex-macros-actually-work.md)

### Skąd pochodzą dane o tokenach?

W całym tym artykule używamy rzeczywistych wartości tokenów obliczonych przez TeX — danych, które zwykle nie są dostępne użytkownikom. Czytelnicy ciekawi, jak te dane o wartościach tokenów zostały uzyskane, mogą zainteresować się tym, że Overleaf ma niestandardowe kompilacje kilku silników TeX, których używamy do badań. Te silniki są zmodyfikowane tak, aby wyświetlały informacje o wewnętrznych działaniach przetwarzania TeX-a — pomaga to dostarczyć dodatkowy materiał kontekstowy do niektórych tworzonych przez nas artykułów. Pokazując/omawiając numeryczne wartości tokenów, chcemy zawrzeć szczegóły, które, miejmy nadzieję, pomogą czytelnikom lepiej zrozumieć „tokeny TeX-a”, czyniąc to ważne pojęcie nieco mniej nieprzejrzystym.

## Tokeny TeX-a 101 (i pojęcie rozwijania)

Gdy TeX przetwarza twój plik wejściowy, odczytuje tekst i zamienia poszczególne znaki oraz sekwencje znaków (polecenia) na tzw. *tokeny*. Token TeX-a to po prostu wartość całkowita obliczana przez TeX, używana do „kodowania” danych, które TeX musi przechować o elemencie odczytanym z bieżącego źródła wejściowego. Można myśleć o tokenach jak o małych pakietach informacji, które „opakowują” dane, jakie TeX musi zapisać, gotowe do przekazania do następnego etapu przetwarzania. Wewnętrznie TeX operuje na tych całkowitych wartościach tokenów — nie używa rzeczywistych liter, symboli, cyfr itp., które pierwotnie znajdowały się w twoim pliku wejściowym: wszystko jest zamieniane na token (liczbę całkowitą) i TeX pracuje właśnie z nimi.

## Jak TeX oblicza wartości tokenów

Tutaj przyglądamy się obliczaniu tokenów używanemu w oryginalnym TeX-u Knutha, e-TeX-u i pdfTeX-u; w innych silnikach TeX, zwłaszcza XeTeX i LuaTeX, obliczenia tokenów muszą być nieco inne ze względu na użycie Unicode, ale metody obliczeń są podobne do opisanych poniżej.

### Tokeny znaków (znaki nieaktywne)

Obliczanie wartości tokenów dla znaków nieaktywnych jest proste:

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

**Przykład**: Litera A z [kodem kategorii](/latex/pl/wiecej-tematow/43-table-of-tex-category-codes.md) 11, kod znaku 65 jest reprezentowany przez TeX jako wartość tokenu znaku $$256\times 11 + 65 = 2881$$.

Możesz natknąć się w literaturze TeX-a na opisy wskazujące, że gdy TeX wczyta znak, jego wartość kodu kategorii zostaje „trwale przypisana” do tego znaku: powyższe obliczenie wartości tokenu pokazuje, dlaczego tak jest. Jednak w późniejszym przetwarzaniu TeX może, i rzeczywiście to robi, „rozpakować” tokeny znaków, aby ujawnić składową parę (kod znaku, kod kategorii), z której token został zbudowany — gdy TeX dokonuje tego „rozpakowania”, nadal nie zmienia kodu kategorii tego znaku, jedynie używa tych informacji podczas dalszego przetwarzania.

### Tokeny poleceń

Przetwarzanie wejścia i generowanie tokenów w TeX-u rozpoznają dwa typy poleceń:

* polecenia zbudowane z jednego lub więcej znaków mających kod kategorii 11;
* polecenia jednoznakowe, w których kod kategorii tego znaku nie jest równy 11: na przykład `\\$` lub `\#`.

W obu przypadkach TeX pomija początkowy `\` znak i używa kodu znaku każdego pozostałego znaku, aby obliczyć liczbę całkowitą, którą TeX nazywa `curcs` (**bieżą**ca **c**sterują **s**sekwencja). TeX następnie używa wartości `curcs` aby obliczyć wartość tokenu dla polecenia.

#### Polecenia złożone ze znaków o kodzie kategorii 11

Załóżmy, że nasze polecenie (bez początkowego `\` znaku) składa się z sekwencji znaków: $$\mathrm{C\_1C\_2C\_3...C\_N}$$ gdzie $$\mathrm{C}\_i$$ jest kod znaku każdego znaku — np. kod znaku A wynosi 65. TeX używa wszystkich kodów znaków $$\mathrm{C}\_i$$ aby obliczyć liczbę całkowitą `curcs` (używając [funkcji skrótu](https://en.wikipedia.org/wiki/Hash_function)). Gdy TeX obliczy wartość `curcs` po prostu dodaje do tej wartości 4095, aby uzyskać wartość tokenu:

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

Zauważ, że zmienna `curcs` odgrywa niezwykle ważną rolę w wewnętrznych działaniach przetwarzania TeX-a.

#### Polecenia jednoznakowe

Tokeny reprezentujące polecenia takie jak `\\$`, `\#` itd. podlegają nieco innemu obliczeniu: liczba całkowita `curcs` jest teraz obliczana prostszym wzorem:

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

Na przykład, przy `\\$`, $$\text{curcs}=257 + 36 = 293$$. TeX ponownie dodaje 4095 do tej wartości (używając $$\text{command token} = \text{curcs} + 4095$$) co daje `\\$` który ma wartość tokenu $$293 + 4095 = 4388$$.

W porównaniu z poleceniami złożonymi ze znaków o kodzie kategorii 11 jedyną różnicą jest tutaj sposób, w jaki TeX oblicza wartość dla `curcs`.

**Uwaga**: liczba całkowita `curcs` nie jest obliczana dla tokenów znaków: zawsze jest ustawiana na 0, gdy TeX tworzy tokeny znaków lub na nich pracuje.

#### Tokeny znaków aktywnych

TeX ma pojęcie tzw. *znaków aktywnych*: każdy znak, któremu przypisano kod kategorii 13. Tokeny dla tej specjalnej klasy znaków są obliczane inaczej niż zwykłe znaki.

Mechanizm znaków aktywnych pozwala TeX-owi tworzyć w praktyce makra jednoznakowe, których możesz używać *bez* bez konieczności poprzedzania znaku aktywnego znakiem ucieczki (zazwyczaj `\`): odizolowany znak wywoła jego zachowanie makra. Klasycznym przykładem jest znak tyldy (\~), którego TeX/LaTeX używają dla spacji nierozdzielających, i który można zdefiniować/włączyć następująco:

```
\catcode`~=13 %przypisz kod kategorii 13 do ~
\def~{\penalty100000\ } % zdefiniuj ~, aby działało jako makro
```

Gdy TeX następnie odczyta `~` znak, wykryje, że jego kod kategorii wynosi 13, i przetworzy go jako „mini-makro”. Aby obliczyć token reprezentujący znak aktywny, TeX stosuje kolejną odmianę obliczania `curcs`:

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

Na przykład znak \~ ma kod znaku 126, co oznacza, że jego reprezentacja wartości tokenu znaku aktywnego jest obliczana następująco:

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

Zauważ, że podobnie jak polecenia, tokeny reprezentujące znaki aktywne są > 4095.

### Konsekwencje/uwagi

* Każdy token, którego wartość przekracza 4095, jest natychmiast rozpoznawalny jako token polecenia — stąd TeX może bardzo łatwo wykryć, czy dany token reprezentuje znak, czy polecenie.
* Dla dowolnej wartości tokenu TeX może, gdy zajdzie taka potrzeba, „rozpakować” ten token, aby ujawnić znak (i jego kod kategorii) albo polecenie, pierwotnie obecne w twoim `.tex` pliku, zapisane w definicji makra lub zawarte w innej liście tokenów.
* „pośrednia” wielkość zwana `curcs`—której TeX używa do obliczania wartości tokenów poleceń—odgrywa ważną rolę w niskopoziomowym przetwarzaniu TeX-a. `curcs` działa jako „wartość indeksowa”, której TeX używa do przechowywania/wyszukiwania bieżącego znaczenia polecenia. Dla dowolnego tokenu polecenia, $$\mathrm{T}$$, TeX po prostu odejmuje 4095, aby uzyskać wartość `curcs`: $$\text{curcs} = \mathrm{T}-4095$$

Nawiasem mówiąc, TeX przechowuje także czytelny dla człowieka ciąg znaków, z którego generowany jest token polecenia — jest to niezbędne do raportowania błędów i innych poleceń, takich jak `\string` którego rozwinięcie jest czytelną dla człowieka wersją wartości tokenu. Jednak te czytelne dla człowieka ciągi znaków przechowywane wewnątrz TeX-a są używane/wyprowadzane tylko na żądanie: do całego innego przetwarzania używana jest całkowita wartość tokenu.

## Przyjrzyjmy się kilku rzeczywistym tokenom

Aby pojęcie tokenów wydawało się nieco mniej nieprzejrzyste, zdefiniujemy następujące proste makro i przyjrzymy się tokenom, które generuje TeX:

```
\def\hello{Pozdrowienia od \TeX. \hskip 10pt}
```

Dla `\hello` makra TeX używa znaków `h`, `e`, `l`, `l`, `o` do obliczenia wartości 3745 dla `curcs`; TeX następnie dodaje 4095, aby utworzyć wartość tokenu $$3745 + 4095 = 7840$$ (dla TeX-a Knutha, e-TeX-u lub pdfTeX-u).

Po utworzeniu tokenu reprezentującego `\hello`, a `\def` polecenie powoduje, że TeX odczytuje kolejne tokeny i używa ich do utworzenia listy tokenów, która jest przechowywana jako *definicją* środowisku `\hello` polecenie. Ta przechowywana definicja (lista tokenów) może być następnie pobrana, gdy tylko polecisz TeX-owi użyć `\hello` polecenie.

Poniższa tabela przedstawia rzeczywiste wartości tokenów utworzone dla każdego elementu (znaku, makra lub prymitywu) zawartego w `\hello` definicji makra — ta lista tokenów (liczb całkowitych) to to, co TeX przechowuje w swojej pamięci (jako strukturę danych znaną jako [lista połączona](https://en.wikipedia.org/wiki/Linked_list)). Czytelnikom, którzy chcieliby lepiej zrozumieć listy tokenów, polecamy artykuł Overleaf [Czym jest lista tokenów TeX-a?](/latex/pl/artykuly-szczegolowe/54-what-is-a-tex-token-list.md)

|                          |                            |
| ------------------------ | -------------------------- |
| **Wartość tokenu TeX-a** | **Reprezentowany element** |
| 2887                     | G                          |
| 2930                     | r                          |
| 2917                     | e                          |
| 2917                     | e                          |
| 2932                     | t                          |
| 2921                     | i                          |
| 2926                     | n                          |
| 2919                     | g                          |
| 2931                     | s                          |
| 3116                     | ,                          |
| 2592                     |                            |
| 2918                     | f                          |
| 2930                     | r                          |
| 2927                     | o                          |
| 2925                     | m                          |
| 2592                     |                            |
| 5235                     | \TeX                       |
| 3118                     | .                          |
| 2592                     |                            |
| 7943                     | \hskip                     |
| 3121                     | 1                          |
| 3120                     | 0                          |
| 2928                     | s                          |
| 2932                     | t                          |

W powyższej liście tokenów znaki mają kody kategorii 10, 11 lub 12. Na przykład:

* znaki mają kod kategorii 10 i kod znaku 32, co daje wartość tokenu $$256\times 10 + 32 = 2592$$
* `,` i `.` mają kod kategorii 12 oraz kody znaków 44 i 46 odpowiednio, co daje tokeny:
* token dla `,` $$= 256 \times 12 + 44 = 3116$$
* token dla `.` $$= 256\times 12+ 46 = 3118$$

Za każdym razem, gdy TeX później napotka wartość tokenu 7840 (reprezentującą `\hello`) może, jeśli zachodzi potrzeba, „rozpakować” ten token, aby wydobyć `curcs` za pomocą prostego obliczenia $$\text{curcs} = \text{token value} - 4095$$ (patrz wyżej). Używając wartości `curcs` TeX może sprawdzić swoje wewnętrzne tablice danych, aby ustalić, że token polecenia 7840 reprezentuje polecenie makra. Ponadto, ponownie poprzez `curcs`, TeX może również wyszukać i pobrać przechowywaną definicję `\hello`.

Gdy TeX musi w pełni przetworzyć token 7840, tzn. uruchomić `\hello` makro, token 7840 nie jest już potrzebny: ten token *wykonał swoją pracę*—tj. wywołał uruchomienie przez TeX makra `\hello`. TeX może teraz odrzucić token 7840 i pobrać tokeny reprezentujące definicję (listę tokenów) przechowywaną w pamięci. W praktyce `\hello` polecenie makra (token 7840) zostało *usunięte* z bieżącego źródła wejściowego TeX-a i *zastąpione* tokenami zawartymi w definicji `\hello`. *rozwijanie tokenów*.

Ta `\TeX` polecenie (wartość tokenu 5235 podana powyżej) używane w `\hello` samo w sobie jest makrem zbudowanym z większej liczby tokenów — więc jego definicja jest również przechowywana jako lista tokenów:

|                          |                            |
| ------------------------ | -------------------------- |
| **Wartość tokenu TeX-a** | **Reprezentowany element** |
| 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                          |

Gdybyśmy mieli zastąpić `\hello` polecenie pełną listą tokenów, z których jest zbudowane, w tym `\TeX` makrem, byłaby to dość długa lista — tzn. gdybyśmy również *rozwinęli* stronie `\TeX` makro, zobaczylibyśmy:

![Lista tokenów przechowywana w makrze TeX-a](/files/a72496eaf79b0b10f70d9336373242edd02f89ab)

Zasadniczo pojedyncza wartość tokenu 7840 (dla `\hello`) po pełnym rozwinięciu dałaby łącznie 51 tokenów (liczb całkowitych) reprezentujących znaki i prymitywne polecenia. Na poniższej liście znak lub polecenie reprezentowane przez każdy token jest ujęte w nawiasy „(...)” — nie są one bezpośrednio przechowywane w listach tokenów TeX-a i zostały pokazane, aby ułatwić czytelnikowi orientację:

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

Dla człowieka to po prostu ciąg liczb całkowitych, ale dla TeX-a koduje on bardzo wiele informacji.

## Odczytuj tokeny teraz i zachowaj je na później

Gdy TeX odczytuje twoje wejście, mogą zdarzyć się chwile, gdy musi (lub zostaje do tego polecony), aby opóźnić pełne przetwarzanie pewnego określonego zestawu tokenów. Jeśli zostanie do tego skierowany, TeX będzie — dopóki nie zostanie mu powiedziane, aby przestał — nadal tworzyć tokeny z wejścia, ale przechowywać je do późniejszego użycia, a następnie pobierać je i przetwarzać jako część swoich działań składania tekstu. Te przechowywane tokeny są zapisywane jako tzw. *listy tokenów* , które są w praktyce jedynym (wewnętrznym) mechanizmem przechowywania danych tokenów w TeX-u.

Widzieliśmy już przykłady list tokenów — `\hello` i `\TeX` makra wymienione powyżej: definicje tych makr są przechowywane w pamięci TeX-a jako listy tokenów. TeX przetwarza (wykonuje) takie listy tokenów tylko wtedy, gdy zdecydujesz się wywołać te makra. Pamiętaj też, że każdy token (wartość całkowita) koduje wystarczająco dużo informacji, aby TeX mógł łatwo ustalić, czy każdy token zapisany w definicji makra reprezentuje znak czy polecenie.

### Zapisywanie tokenów za pomocą rejestrów tokenów

Innym przykładem przechowywania tokenów jest jawne tworzenie list tokenów, które są zapisywane w tzw. *rejestrach tokenów*: wydzielonych wewnętrznych obszarach pamięci, które TeX udostępnia użytkownikom do przechowywania list tokenów. Prymityw TeX-a `\toksdef` jest jednym ze sposobów używania rejestrów tokenów; na przykład, aby użyć rejestru tokenów `100` i odwołać się do niego za pomocą polecenia `\mylist`:

```
        \toksdef\mylist=100
        \mylist={jakieś \TeX{} tokeny tutaj}
```

`\mylist` jest w praktyce po prostu nazwą, którą przypisujesz do listy tokenów przechowywanej w lokalizacji rejestru `100`. `\mylist` zawiera następującą listę tokenów:

|                          |                            |
| ------------------------ | -------------------------- |
| **Wartość tokenu TeX-a** | **Reprezentowany element** |
| 2931                     | s                          |
| 2927                     | o                          |
| 2925                     | m                          |
| 2917                     | e                          |
| 2592                     |                            |
| 5235                     | \TeX                       |
| 379                      | {                          |
| 637                      | }                          |
| 2592                     |                            |
| 2932                     | t                          |
| 2927                     | o                          |
| 2923                     | k                          |
| 2917                     | e                          |
| 2926                     | n                          |
| 2931                     | s                          |
| 2592                     |                            |
| 2920                     | h                          |
| 2917                     | e                          |
| 2930                     | r                          |
| 2917                     | e                          |

**Uwaga**: aby zakończyć `\TeX` makro i zapobiec wchłonięciu następującego `<space>` znaku użyliśmy pary nawiasów klamrowych `{}` bezpośrednio po `\TeX`—tokeny dla `{` (379) oraz `}` (637) są przechowywane na liście tokenów. Inną opcją jest użycie tokenu „spacji sterującej” `\<space>` który pojawiłby się na liście tokenów, jak pokazano poniżej (pogrubiony):

|                          |                            |
| ------------------------ | -------------------------- |
| **Wartość tokenu TeX-a** | **Reprezentowany element** |
| 2931                     | s                          |
| 2927                     | o                          |
| 2925                     | m                          |
| 2917                     | e                          |
| 2592                     |                            |
| 5235                     | \TeX                       |
| **4384**                 | **\\**                     |
| 2932                     | t                          |
| 2927                     | o                          |
| 2923                     | k                          |
| 2917                     | e                          |
| 2926                     | n                          |
| 2931                     | s                          |
| 2592                     |                            |
| 2920                     | h                          |
| 2917                     | e                          |
| 2930                     | r                          |
| 2917                     | e                          |

Zauważ, że token `<space>` znak jest reprezentowany jako *tokenem znaku* o wartości $$256\times 10 + 32 = 2592$$ ale `\﻿<space>` jest traktowany jako jednoznakowy *token polecenia* (o wartości 4384), który jest obliczany według wzorów podanych powyżej:

\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\*}

W istocie `\mylist={jakieś \TeX{} tokeny tutaj}` oznacza dla TeX-a: proszę, przeskanuj mój plik wejściowy, aby przekształcić następujące znaki/polecenia w tokeny i zapisać je do późniejszego użycia. TeX spełni prośbę i zapisze te tokeny w lokalizacji pamięci, do której możesz uzyskać dostęp, wpisując `\the\mylist`, nakazując TeX-owi wstawić kopię tokenów zawartych w rejestrze tokenów `\mylist`. Silniki TeX zawierają szereg prymitywnych poleceń, które jawnie generują i przechowują listy tokenów — takich jak `\everyjob`, `\everypar`, `\mark`, oraz wiele innych.

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