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

# Bagaimana \expandafter bekerja: TeX menggunakan daftar token sementara

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

## Ekspansi dan daftar token internal

Sejauh ini kita telah mempelajari token, daftar token, dan prinsip-prinsip inti di balik konsep ekspansi TeX. Dalam bagian ini kita akan menggunakan primitif TeX `\jobname` untuk memperkenalkan aspek penting dari pemrosesan ekspansi: penggunaan TeX atas *daftar token sementara*—yang merupakan suatu *mendasar* aspek dari bagaimana `\expandafter` bekerja, seperti yang akan kita lihat nanti dalam seri artikel ini.

`\jobname` adalah primitif TeX yang dapat diekspansi yang ekspansinya menghasilkan serangkaian token karakter yang merepresentasikan nama dari input utama `.tex` berkas. Sebagai contoh, misalkan kita memiliki teks berikut sebagai bagian dari sebuah `.tex` berkas bernama `mycode.tex`:

```
    Nama berkas saya adalah \\jobname .tex %Catatan spasi setelah \\jobname
```

Ini akan menghasilkan tata letak

```
    Nama berkas saya adalah mycode.tex
```

Ketika kita menggunakan `\jobname` perintah, karakter hasil tata letak tidak dibaca dari `.tex` berkas fisik Anda, jadi dari mana asalnya: di mana TeX menyimpan/membaca token-token tersebut? Tak terlihat oleh pengguna (yaitu, jauh di dalam TeX itu sendiri), proses ekspansi untuk `\jobname` membuat daftar token sementara yang dibangun dari serangkaian token karakter yang merepresentasikan nama berkas Anda. Setelah `\jobname` telah membuat daftar token itu, TeX untuk sementara “mengalihkan perhatiannya” dari sumber input saat ini (di sini, berkas `.tex` kami) untuk membaca token (token karakter) dari daftar token sementara itu. Ketika TeX membutuhkan token input lain, ia akan membaca token berikutnya dari daftar internal itu dan terus melakukannya hingga mencapai akhir daftar; pada titik itu TeX melanjutkan membaca token dari sumber input sebelumnya yang, di sini, adalah teks yang dibaca dari `.tex` berkas input kami.

Seperti ditunjukkan pada diagram berikut, TeX melanjutkan membaca `.tex` berkas input pada lokasi tepat ketika ia berhenti setelah memproses `\jobname`—setelah membaca karakter spasi tetapi sebelum membaca karakter “.”. Tanda titik (.) pada praktiknya menunggu untuk dibaca dari buffer input TeX—sebuah area kecil memori TeX yang dirancang untuk menyimpan sebaris teks yang dibaca dari `.tex` berkas—TeX membaca dan memproses berkas Anda `.tex` berkas satu baris demi satu baris, ia tidak membaca seluruh berkas ke dalam memori.

Saat mempelajari grafik berikut, bacalah dari bawah dan naik ke atas untuk mengikuti alur proses.

![Bagaimana TeX melakukan ekspansi \\\jobname](/files/08072f2674053a3adf58cc8e829cf6b9f7f3bff1)

Merujuk kembali ke pembahasan kita tentang ekspansi, kita dapat mengamati bahwa ekspansi dari `\jobname` menghasilkan `\jobname` perintah (token) menjadi *dihapus* dari input dan *digantikan* dengan token yang muncul dari ekspansi: daftar token sementara yang dihasilkan untuk menyimpan nama `.tex` .

Perintah yang dapat diekspansi (seperti `\jobname`) bukan satu-satunya primitif TeX yang “secara diam-diam” membuat dan menggunakan daftar token untuk mencapai efeknya. Misalnya, perintah `\uppercase` dan `\lowercase` keduanya membuat daftar token internal untuk mengubah huruf besar/kecil argumen mereka. Setelah pekerjaan pengubahan huruf selesai, TeX beralih untuk membaca token karakter dari daftar token yang dihasilkan oleh perintah-perintah tersebut. Daftar token adalah satu-satunya mekanisme “penyimpanan data token” TeX—kecuali menulis data keluar ke berkas disk fisik.

### Sumber token: TeX adalah ahli juggling

Ketika TeX memproses sebuah dokumen biasa, ia harus mengelola *banyak* sumber token: input yang datang dari banyak berkas disk fisik dan tak terhitung banyaknya daftar token internal yang dibuat selama pemrosesan. Dalam bagian ini kita akan sangat singkat mengeksplorasi bagaimana TeX mampu “menyulap” sumber input tersebut.

Misalkan kita ingin sebuah makro sederhana yang mencetak nama `.tex` file:

```
    \\def\\myfile{The name of my file is \\jobname .tex}
```

Nanti, pada suatu saat di `.tex` berkas kita, kita memanggil makro `\\myfile`: untuk sementara, TeX beralih dari membuat/membaca token melalui teks di berkas teks Anda (`.tex`) ke membaca token dari `\\myfile` definisi (daftar token) yang disimpan dalam memorinya. Ketika TeX mengeksekusi `\\myfile` makro (memproses token-token-nya) ia akan mendeteksi sebuah token yang merepresentasikan `\jobname` perintah, yang ekspansinya menciptakan lagi sebuah daftar token sementara dari mana TeX harus membaca token. Bahkan dalam skenario sederhana ini TeX harus mengelola tiga sumber input:

1. situs web `.tex` berkas teks yang berisi `\\myfile` makro;
2. daftar token yang menyimpan definisi dari `\\myfile` makro;
3. sebuah daftar token yang dibuat oleh `\jobname` perintah di dalam `\\myfile` makro.

Saat TeX memproses sebuah dokumen, ia terus-menerus berpindah antara sumber input: berkas fisik dan daftar token, jadi bagaimana TeX melacak hal ini? Jawabannya adalah bahwa, secara internal, mesin TeX memelihara apa yang disebut [tumpukan input](https://en.wikipedia.org/wiki/Stack_\(abstract_data_type\)) yang bertindak sebagai semacam “memori” yang memungkinkan TeX mengingat apa yang sedang dilakukannya (dari mana ia membaca) saat berpindah antara sumber input.

Tanpa membahas terlalu jauh detailnya, kode internal dalam mesin TeX menggunakan variabel global yang disebut `curinput` (input saat ini) yang, antara lain, memberi tahu TeX apakah ia saat ini membaca dari berkas fisik atau daftar token. `curinput` juga menunjukkan TeX ke lokasi (dalam daftar token saat ini atau buffer teksnya) dari mana ia harus mengambil token berikutnya. Jika TeX membaca dari daftar token `curinput` juga mencatat jenis daftar token yang sedang diproses—misalnya, daftar token yang disimpan sebagai makro atau apakah token-token tersebut berasal dari sumber lain.

Bila diperlukan, `curinput` variabel akan diubah untuk menunjuk ke sumber input baru dan “status input” TeX saat ini (sumber dan lokasi) akan disimpan di tumpukan input sehingga TeX nanti dapat kembali ke lokasi tepat itu (posisi dalam sebuah `.tex` berkas atau token berikutnya dalam daftar token). Setelah sumber input baru itu habis (misalnya, tidak ada lagi token dalam daftar token atau akhir berkas tercapai) sumber tersebut dikeluarkan dari tumpukan dan `curinput` diperbarui untuk memastikan TeX kembali mengambil token dari sumber sebelumnya.

## Menyelami lebih dalam (bacaan opsional)

Bagian-bagian berikut memberikan informasi latar belakang tambahan bagi pembaca yang menyukai detail.

### Daftar token nyata

Grafik berikut dihasilkan menggunakan build kustom Overleaf dari TeX milik Knuth yang menyediakan akses ke data internal dan struktur data TeX. Ilustrasi daftar token ini dibangun berdasarkan versi sederhana yang disajikan di atas dan mencakup data tambahan, seperti menampilkan karakter yang dihasilkan oleh `\jobname` memiliki kode kategori 12, bukan kode kategori biasa 11. Dalam diagram ini, “node” hanyalah nama yang diberikan untuk satuan penyimpanan memori yang digunakan TeX.

![Di dalam daftar token TeX](/files/b4710ceb2c5362004a2db36c4cf21c269f14b1e9)

### Bagaimana TeX membaca dan memproses \\\jobname

Juga, demi kelengkapan, berikut adalah gambaran umum “proses berpikir” TeX saat ia mendeteksi `\jobname` dalam input kita `.tex` berkas. Dalam grafik ini kita melihat bagaimana TeX mendeteksi karakter escape (`\` dengan kode kategori 0), memproses urutan karakter `jobname`, menghasilkan sebuah token dan mencari makna dari `\jobname` perintah tersebut, di mana TeX akan menemukan bahwa ia memiliki kode perintah > 100, yang menandakan bahwa itu adalah perintah yang dapat diekspansi.

![Bagaimana TeX memindai dan memproses \\\jobname](/files/4ebe7ed99155d5de5c6b0067719d20ef66ed84de)

[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/21-how-does-expandafter-work-tex-uses-temporary-token-lists.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
