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

# Bagaimana \expandafter bekerja: Pengantar token TeX

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

## Latar belakang untuk \\\expandafter: token TeX dan daftar token

Sebagai langkah pertama untuk memahami bagaimana `\expandafter` benar-benar bekerja, kita akan melihat dua komponen TeX yang mendasar bagi operasi `\expandafter`: token TeX (bilangan bulat) dan daftar token (daftar bilangan bulat). Pembaca yang ingin menjelajahi topik-topik tersebut dengan jauh lebih rinci mungkin tertarik membaca artikel-artikel berikut yang diterbitkan oleh Overleaf:

* [Apa itu token TeX?](/latex/id/artikel-mendalam/53-what-is-a-tex-token.md)
* [Apa itu daftar token TeX?](/latex/id/artikel-mendalam/54-what-is-a-tex-token-list.md)-[Bagaimana sebenarnya makro TeX bekerja?](/latex/id/topik-lainnya/01-a-six-part-series-how-do-tex-macros-actually-work.md)

### Dari mana data token itu berasal?

Sepanjang artikel ini kami menggunakan nilai token aktual yang dihitung oleh TeX—data yang biasanya tidak dapat diakses oleh pengguna. Bagi pembaca yang penasaran ingin mengetahui bagaimana data nilai token ini diperoleh, Overleaf memiliki build khusus dari beberapa mesin TeX yang kami gunakan untuk penelitian. Mesin-mesin tersebut dimodifikasi untuk mengeluarkan informasi tentang aktivitas pemrosesan internal TeX—membantu menyediakan bahan latar tambahan untuk beberapa artikel yang kami hasilkan. Dengan menampilkan/membahas nilai token numerik, tujuan kami adalah menyertakan detail yang, semoga, membantu pembaca lebih memahami “token TeX”, sehingga konsep penting ini terasa sedikit kurang buram.

## TeX Tokens 101 (dan gagasan tentang ekspansi)

Saat TeX memproses file input Anda, ia membaca teks dan mengonversi karakter individual serta urutan karakter (perintah) menjadi yang disebut *token*. Token TeX hanyalah sebuah nilai bilangan bulat, yang dihitung oleh TeX, dan digunakan untuk “mengodekan” data yang perlu disimpan TeX tentang suatu item yang dibaca dari sumber input saat ini. Anggap token sebagai paket kecil informasi yang “mengemas bersama” data yang perlu dicatat TeX, siap diteruskan ke tahap pemrosesan berikutnya. Secara internal, TeX beroperasi pada nilai token bilangan bulat tersebut—ia tidak menggunakan huruf, simbol, digit, dll. yang sebenarnya semula terdapat dalam file input Anda: semuanya dikonversi menjadi token (bilangan bulat) dan TeX bekerja dengan itu.

## Bagaimana TeX menghitung nilai token

Di sini kita melihat perhitungan token yang digunakan dalam TeX asli milik Knuth, e-TeX, dan pdfTeX; untuk mesin TeX lain, khususnya XeTeX dan LuaTeX, perhitungan tokennya perlu sedikit berbeda untuk menyesuaikan penggunaan Unicode, tetapi metode perhitungannya serupa dengan yang dijelaskan di bawah ini.

### Token karakter (karakter non-aktif)

Perhitungan nilai token untuk karakter non-aktif cukup langsung:

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

**Contoh**: Huruf A dengan [kode kategori](/latex/id/topik-lainnya/43-table-of-tex-category-codes.md) 11, kode karakter 65 direpresentasikan oleh TeX sebagai nilai token karakter $$256\times 11 + 65 = 2881$$.

Anda mungkin menjumpai deskripsi dalam literatur TeX yang menyebutkan bahwa begitu TeX telah memasukkan sebuah karakter, nilai kode kategorinya menjadi “terikat permanen” pada karakter tersebut: perhitungan nilai token di atas menunjukkan mengapa hal itu benar. Namun, nanti dalam pemrosesan TeX, ia bisa, dan memang, “membongkar” token karakter untuk menyingkap pasangan penyusun (kode karakter, kode kategori) dari mana token tersebut dibentuk—ketika TeX melakukan “pembongkaran” itu, ia tetap tidak akan mengubah kode kategori karakter tersebut, ia hanya menggunakan informasi itu selama pemrosesan berikutnya.

### Token perintah

Pemrosesan input dan pembuatan token TeX mengenali dua jenis perintah:

* perintah yang dibentuk dari satu atau lebih karakter yang memiliki kode kategori 11;
* perintah satu karakter di mana kode kategori karakter tersebut bukan 11: seperti `\$` atau `\\#`.

Dalam kedua kasus, TeX mengecualikan karakter `\` terdepan dan menggunakan kode karakter dari setiap karakter sisanya untuk menghitung sebuah bilangan bulat yang oleh TeX disebut `curcs` (**saat**ini **c**kendali **s**urutan). TeX kemudian menggunakan nilai `curcs` untuk menghitung nilai token bagi perintah.

#### Perintah yang dibuat dari karakter dengan kode kategori 11

Misalkan perintah kita (tanpa `\` terdepan) tersusun dari urutan karakter: $$\mathrm{C\_1C\_2C\_3...C\_N}$$ di mana $$\mathrm{C}\_i$$ adalah kode karakter dari setiap karakter—mis., kode karakter A adalah 65. TeX menggunakan semua kode karakter $$\mathrm{C}\_i$$ untuk menghitung bilangan bulat `curcs` (menggunakan sebuah [fungsi hash](https://en.wikipedia.org/wiki/Hash_function)). Setelah TeX menghitung nilai `curcs` ia cukup menambahkan 4095 pada nilai tersebut, untuk menghasilkan nilai token:

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

Perhatikan bahwa variabel `curcs` memainkan peran yang sangat penting dalam aktivitas pemrosesan internal TeX.

#### Perintah satu karakter

Token untuk merepresentasikan perintah seperti `\$`, `\\#` dll tunduk pada perhitungan yang sedikit berbeda: bilangan bulat `curcs` sekarang adalah perhitungan yang lebih sederhana:

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

Misalnya, dengan `\$`, $$\text{curcs}=257 + 36 = 293$$. TeX lagi-lagi menambahkan 4095 pada nilai ini (menggunakan $$\text{command token} = \text{curcs} + 4095$$) sehingga menghasilkan `\$` memiliki nilai token $$293 + 4095 = 4388$$.

Dibandingkan dengan perintah yang tersusun dari karakter dengan kode kategori 11, satu-satunya perbedaan di sini adalah cara TeX menghitung nilai untuk `curcs`.

**Catatan**: bilangan bulat `curcs` tidak dihitung untuk token karakter: nilainya selalu disetel ke 0 ketika TeX membuat, atau bekerja dengan, token karakter.

#### Token karakter aktif

TeX memiliki konsep yang disebut *karakter aktif*: setiap karakter yang diberi kode kategori 13. Token untuk kelas karakter khusus ini tunduk pada perhitungan yang berbeda dibandingkan karakter biasa.

Mekanisme karakter aktif memungkinkan TeX membuat apa yang pada dasarnya adalah makro satu karakter yang bisa Anda gunakan *tanpa* tanpa harus mendahului karakter aktif dengan karakter escape (biasanya `\`): karakter yang berdiri sendiri akan memicu perilaku makronya. Contoh klasiknya adalah karakter tilde (\~) yang digunakan TeX/LaTeX untuk spasi tak-terputus, yang dapat didefinisikan/diaktifkan sebagai berikut:

```
\\catcode`~=13 % berikan kode kategori 13 pada ~
\\def~{\\penalty100000\\ } % definisikan ~ agar bertindak sebagai makro
```

Saat TeX kemudian membaca sebuah `~` karakter, ia akan mendeteksi bahwa kode kategorinya adalah 13 dan memprosesnya sebagai “makro mini”. Untuk menghitung token yang merepresentasikan karakter aktif, TeX menerapkan variasi lain untuk menghitung `curcs`:

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

Misalnya, karakter \~ memiliki kode karakter 126, yang berarti representasi nilai token karakter aktifnya dihitung sebagai berikut:

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

Perhatikan bahwa, seperti perintah, token yang merepresentasikan karakter aktif bernilai > 4095.

### Konsekuensi/catatan

* Setiap token yang nilainya melebihi 4095 langsung dapat diidentifikasi sebagai token perintah—karena itu TeX dapat dengan sangat mudah mendeteksi apakah token tertentu merepresentasikan karakter atau perintah.
* Untuk nilai token apa pun, TeX dapat, saat diperlukan, “membongkar” token itu untuk menyingkap karakter (dan kode kategorinya), atau perintah, yang semula terdapat dalam `.tex` file Anda, disimpan dalam definisi makro atau terkandung dalam daftar token lain.
* Besaran “antara” yang disebut `curcs`—yang digunakan TeX untuk menghitung nilai token perintah—memainkan peran penting dalam pemrosesan tingkat rendah TeX. `curcs` bertindak sebagai “nilai indeks” yang digunakan TeX untuk menyimpan/mencari arti saat ini dari sebuah perintah. Untuk token perintah apa pun, $$\mathrm{T}$$, TeX cukup mengurangkan 4095 untuk mengakses nilai `curcs`: $$\text{curcs} = \mathrm{T}-4095$$

Ngomong-ngomong, TeX memang menyimpan string karakter yang dapat dibaca manusia dari mana token perintah dihasilkan—ini penting untuk pelaporan galat dan perintah lain seperti `\string` yang ekspansinya adalah versi yang dapat dibaca manusia dari sebuah nilai token. Namun, string karakter yang dapat dibaca manusia yang disimpan di dalam TeX hanya digunakan/dikeluarkan ketika diminta: untuk semua pemrosesan lainnya digunakan nilai token bilangan bulat.

## Melihat beberapa token nyata

Agar gagasan tentang token terasa sedikit kurang buram, kita akan mendefinisikan makro sederhana berikut dan melihat token-token yang dihasilkan TeX:

```
\\def\\hello{Salam, dari \\TeX. \\hskip 10pt}
```

Untuk `\\hello` makro, TeX menggunakan karakter `h`, `e`, `l`, `l`, `o` untuk menghitung nilai 3745 bagi `curcs`; TeX kemudian menambahkan 4095 untuk membuat nilai token sebesar $$3745 + 4095 = 7840$$ (untuk TeX Knuth, e-TeX, atau pdfTeX).

Setelah membuat token untuk merepresentasikan `\\hello`,  `\def` perintah menyebabkan TeX membaca token-token berikutnya dan menggunakannya untuk membuat daftar token yang disimpan sebagai *definisi* dari `\\hello` perintah. Definisi tersimpan (daftar token) itu kemudian dapat diambil kapan pun Anda menyuruh TeX menggunakan `\\hello` perintah.

Tabel berikut mencantumkan nilai token aktual yang dibuat untuk setiap item (karakter, makro, atau primitif) yang terdapat dalam definisi makro `\\hello` —daftar token (bilangan bulat) inilah yang disimpan TeX dalam memorinya (sebagai struktur data yang dikenal sebagai [linked-list](https://en.wikipedia.org/wiki/Linked_list)). Pembaca yang ingin memahami daftar token lebih rinci diarahkan ke artikel Overleaf [Apa itu daftar token TeX?](/latex/id/artikel-mendalam/54-what-is-a-tex-token-list.md)

|                     |                                 |
| ------------------- | ------------------------------- |
| **Nilai token TeX** | **Item yang direpresentasikan** |
| 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                | p                               |
| 2932                | t                               |

Dalam daftar token di atas, karakter-karakter memiliki kode kategori 10, 11, atau 12. Misalnya:

* karakter memiliki kode kategori 10 dan kode karakter 32, menghasilkan nilai token $$256\times 10 + 32 = 2592$$
* `,` dan `.` memiliki kode kategori 12 dan kode karakter masing-masing 44 dan 46, sehingga menghasilkan token:
* token untuk `,` $$= 256 \times 12 + 44 = 3116$$
* token untuk `.` $$= 256\times 12+ 46 = 3118$$

Setiap kali TeX kemudian menemui nilai token 7840 (merepresentasikan `\\hello`) ia dapat, jika diperlukan, “membongkar” token itu untuk mengekstrak `curcs` melalui perhitungan sederhana $$\text{curcs} = \text{token value} - 4095$$ (lihat di atas). Dengan menggunakan nilai `curcs` TeX dapat memeriksa tabel data internalnya untuk menentukan bahwa token perintah 7840 merepresentasikan perintah makro. Selain itu, melalui `curcs`, TeX juga dapat mencari dan mengambil definisi tersimpan dari `\\hello`.

Saat TeX perlu memproses token 7840 sepenuhnya, yakni untuk menjalankan `\\hello` makro, ia tidak lagi memerlukan token 7840: token itu telah *menyelesaikan tugasnya*—yakni, token itu memicu TeX untuk menjalankan makro `\\hello`. TeX kini dapat membuang token 7840 dan mengambil token-token yang merepresentasikan definisi (daftar token) yang tersimpan dalam memori. Secara efektif,  `\\hello` perintah makro (token 7840) telah *dihapus* dari sumber input TeX saat ini dan *digantikan* oleh token-token yang terkandung dalam definisi `\\hello`. Yang baru saja kita jelaskan adalah salah satu bentuk *ekspansi token*.

Fitur `\TeX` perintah (nilai token 5235 yang tercantum di atas) yang digunakan di dalam `\\hello` itu sendiri adalah makro yang dibentuk dari lebih banyak token—jadi definisinya juga disimpan sebagai daftar token:

|                     |                                 |
| ------------------- | ------------------------------- |
| **Nilai token TeX** | **Item yang direpresentasikan** |
| 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                               |

Jika kita mengganti `\\hello` perintah dengan daftar lengkap token penyusunnya, termasuk makro `\TeX` makro, maka daftar itu akan cukup panjang—yakni, jika kita juga *mengekspansi* situs web `\TeX` makro kita akan melihat:

![Daftar token yang disimpan dalam makro TeX](/files/5ba4e74d9b875090cce789a3490e88b7b8fe4493)

Intinya, satu nilai token 7840 (untuk `\\hello`) saat diekspansi sepenuhnya akan menghasilkan total 51 token (bilangan bulat) yang merepresentasikan karakter dan perintah primitif. Dalam daftar berikut, karakter atau perintah yang direpresentasikan oleh setiap token dicantumkan dalam tanda kurung “(...)”—ini tidak disimpan langsung dalam daftar token TeX dan ditampilkan untuk membantu pembaca:

```
2887 (G), 2930 (r), 2917 (e), 2917 (e), 2932 (t), 2921 (i), 2926 (n), 2919 (g), 2931 (s), 3116 (,), 2592 (<spasi>), 2918 (f), 2930 (r), 2927 (o), 2925 (m), 2592 (<spasi>),  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 (<spasi>), 7943 (\\hskip), 3121 (1), 3120 (0), 2928 (p), 2932 (t)
```

Bagi pembaca manusia ini hanyalah rangkaian bilangan bulat, tetapi bagi TeX itu mengodekan banyak informasi.

## Membaca token sekarang dan menyimpannya untuk nanti

Saat TeX membaca input Anda, mungkin ada saat-saat ketika ia perlu (atau diperintahkan) untuk menunda pemrosesan penuh atas suatu kumpulan token tertentu. Jika diarahkan demikian, TeX akan, sampai diberi tahu untuk berhenti, terus membuat token dari input tetapi menyimpannya untuk digunakan nanti—kemudian mengambil dan memprosesnya sebagai bagian dari aktivitas penatahurufannya. Token-token tersimpan itu disimpan sebagai yang disebut *daftar token* yang, pada praktiknya, merupakan satu-satunya mekanisme penyimpanan data token internal TeX.

Kita sudah melihat contoh daftar token— `\\hello` dan `\TeX` makro-makro yang tercantum di atas: definisi makro-makro tersebut disimpan dalam memori TeX sebagai daftar token. TeX hanya akan memproses (melakukan aksi atas) daftar token semacam itu ketika Anda memutuskan untuk memanggil makro-makro tersebut. Ingat juga bahwa setiap token (nilai bilangan bulat) mengodekan informasi yang cukup bagi TeX untuk dengan mudah menentukan apakah setiap token yang disimpan dalam definisi makro merepresentasikan karakter atau perintah.

### Menyimpan token dengan register token

Contoh lain penyimpanan token adalah pembuatan eksplisit daftar token yang disimpan dalam yang disebut *register token*: area penyimpanan internal khusus yang disediakan TeX bagi pengguna untuk menyimpan daftar token. Primitif TeX `\toksdef` adalah salah satu cara menggunakan register token; misalnya, untuk menggunakan register token `100` dan merujuknya dengan menggunakan perintah `\\mylist`:

```
        \\toksdef\\mylist=100
        \\mylist={beberapa token \\TeX{} di sini}
```

`\\mylist` sebenarnya hanyalah sebuah nama yang Anda berikan pada daftar token yang disimpan pada lokasi register `100`. Mirip dengan definisi makro, `\\mylist` memuat daftar token berikut:

|                     |                                 |
| ------------------- | ------------------------------- |
| **Nilai token TeX** | **Item yang direpresentasikan** |
| 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                               |

**Catatan**: untuk mengakhiri `\TeX` makro dan mencegahnya menyerap `<space>` karakter berikutnya yang kita gunakan sepasang kurung kurawal `{}` tepat setelah `\TeX`—token untuk `{` (379) dan `}` (637) disimpan dalam daftar token. Pilihan lain adalah menggunakan token “spasi kontrol” `\\<space>` yang akan muncul dalam daftar token seperti ditunjukkan di bawah ini (dengan huruf tebal):

|                     |                                 |
| ------------------- | ------------------------------- |
| **Nilai token TeX** | **Item yang direpresentasikan** |
| 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                               |

Perhatikan bahwa `<space>` karakter direpresentasikan sebagai *token karakter* dengan nilai $$256\times 10 + 32 = 2592$$ tetapi `\\<space>` diperlakukan sebagai sebuah *token perintah* (nilai 4384) yang dihitung menggunakan rumus yang diberikan di atas:

\\\begin{align\*} \\\text{curcs} & = 257 + \\\text{kode karakter (ASCII)}\\\\\\\ & = 257 + 32\\\\\\\ &=289\\\\\\\ \\\text{token perintah untuk} \\\left<\\\text{\\\\\\\space}\\\right> & = \\\text{curcs + 4095}\\\\\\\ & = 289+4095\\\\\\\ &=4384\\\\\\\ \\\end{align\*}

Pada dasarnya `\\mylist={beberapa token \\TeX{} di sini}` mengatakan kepada TeX: silakan pindai file input saya untuk mengonversi karakter/perintah berikut menjadi token dan simpan untuk digunakan nanti. TeX akan menuruti dan menyimpan token-token itu di lokasi memori yang dapat Anda akses dengan menulis `\\the\\mylist`, yang menginstruksikan TeX untuk menyisipkan salinan token yang terkandung dalam register token `\\mylist`. Mesin TeX mencakup sejumlah perintah primitif yang secara eksplisit menghasilkan dan menyimpan daftar token—seperti `\everyjob`, `\everypar`, `\mark`, dan banyak lainnya.

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