> 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/topik-lainnya/23-how-tex-macros-actually-work-part-5.md).

# Bagaimana makro TeX sebenarnya bekerja: Bagian 5

[Bagian 1](/latex/id/topik-lainnya/19-how-tex-macros-actually-work-part-1.md) [Bagian 2](/latex/id/topik-lainnya/20-how-tex-macros-actually-work-part-2.md) [Bagian 3](/latex/id/topik-lainnya/21-how-tex-macros-actually-work-part-3.md) [Bagian 4](/latex/id/topik-lainnya/22-how-tex-macros-actually-work-part-4.md) [Bagian 5](/latex/id/topik-lainnya/23-how-tex-macros-actually-work-part-5.md) [Bagian 6](/latex/id/topik-lainnya/24-how-tex-macros-actually-work-part-6.md)

## Pendahuluan dan gambaran umum

Dalam Bagian 4 kita meninjau beberapa sifat dasar makro TeX sebagai persiapan untuk dua artikel berikutnya, di mana kita melihat secara dekat mekanisme dasar makro TeX: daftar token khusus. Dalam dua artikel terakhir ini kita menggunakan diagram, yang disebut daftar node, yang disiapkan dari data yang dihasilkan menggunakan versi TeX asli Knuth yang telah dimodifikasi secara khusus—modifikasi tersebut dirancang untuk mengakses struktur data internal TeX yang biasanya tidak dapat diakses oleh pengguna. Dengan “mengaitkan” ke rutin pemrosesan makro dan eksekusi internal TeX, dimungkinkan untuk menuliskan data grafis yang memungkinkan pembahasan yang lebih rinci dan akurat tentang perilaku pemrosesan makro TeX. Overleaf berharap diagram ini membantu pembaca memperoleh pemahaman yang lebih baik tentang bagaimana makro TeX sebenarnya bekerja.

### Bacaan latar belakang tambahan yang mungkin berguna

Overleaf telah menerbitkan dua artikel terkait token yang memberikan informasi latar belakang tambahan tentang token TeX dan daftar token TeX. Silakan luangkan waktu untuk membacanya jika Anda perlu mengisi celah dalam pemahaman Anda dan membantu Anda mendapatkan manfaat maksimal dari Bagian 5 dan 6 dari seri ini.

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

## Makro sebagai daftar token

Ketika TeX mendeteksi perintah pembuatan makro (`\def`, `\edef`, `\gdef` atau `\xdef`) di dalam aliran input, TeX memicu proses yang mengonversi kedua bagian `<teks parameter><teks pengganti>` dari definisi makro kita menjadi satu daftar token panjang—tetapi jenis daftar token yang sangat khusus.

Daftar token untuk makro sedikit berbeda dari daftar token lain yang digunakan di dalam TeX karena daftar token tersebut berisi nilai token “khusus” yang hanya dapat dibuat/dihasilkan oleh proses internal TeX itu sendiri: token-token khusus itu tidak dapat dibuat secara langsung oleh perintah apa pun yang dapat Anda sertakan di file .tex Anda. TeX membuat dan menggunakan nilai token “khusus” itu untuk membantu memproses pemanggilan makro Anda, seperti akan kita jelajahi dan jelaskan di bawah ini.

### Sekilas tentang bagaimana daftar token disimpan: node

Untuk menyimpan daftar token (nilai integer) TeX menggunakan struktur data yang disebut [daftar tertaut](https://en.wikipedia.org/wiki/Linked_list), yang, dalam kasus TeX, terdiri dari daftar yang disebut *node*. Anda dapat menganggap node sebagai paket kecil memori komputer yang dapat digunakan untuk menyimpan kumpulan item data. Untuk menyimpan makro, node-node ini dirangkai seperti rantai, di mana setiap node (mata rantai dalam rantai) dapat menyimpan beberapa informasi—termasuk nilai token dan alamat memori node berikutnya dalam daftar. Untuk informasi lebih lanjut, Anda dapat membaca artikel [Apa itu daftar token TeX](/latex/id/artikel-mendalam/54-what-is-a-tex-token-list.md) tetapi diagram berikut merangkum fitur utama makro yang disimpan sebagai daftar token:

![Diagram daftar token makro TeX yang disimpan sebagai daftar node tertaut](/files/559a397091978e94f41bb3216bfc73873e0b8f13)

### Pengingat: 4 bagian dari definisi makro

Seperti dibahas dalam Bagian 4, struktur makro apa pun dapat ditulis sebagai:

```
<primitif makro TeX><nama makro><teks parameter>{<teks pengganti>}
```

di mana:

* `<primitif makro TeX>` = salah satu dari `\def`, `\edef`, `\gdef` atau `\xdef`;
* `<nama makro>`= nama makro Anda, seperti `\foo`;
* `<teks parameter>` dapat “null” (tidak ada) atau dapat berupa deretan token pemisah dan token parameter makro;
* `<teks pengganti>` adalah isi sebenarnya dari makro Anda: bagian yang “dieksekusi” saat Anda memanggil makro.

**CATATAN**: (Seperti juga dicatat dalam Bagian 4) sepanjang pembahasan ini kita mengasumsikan bahwa `<nama makro>` akan diikuti oleh karakter spasi dengan kode kategori 10 untuk bertindak sebagai pemisah yang mengakhiri `<nama makro>`. Kita *tidak* secara eksplisit menampilkan karakter spasi itu dalam teks/pembahasan kita, tetapi kita mengasumsikannya ada. Secara ketat, kita seharusnya merepresentasikannya seperti ini:

```
<primitif makro TeX><nama makro><spasi><teks parameter>{<teks pengganti>}
```

Namun, kami akan menghilangkan penyertaan eksplisit dari sebuah `<spasi>` karakter dan secara implisit mengasumsikan keberadaannya.

**CATATAN**: Karakter-karakter `{` dan `}` *tidak* menjadi bagian dari daftar token makro: tujuan mereka hanyalah untuk memberi tahu pemindai input teks (yang membuat token) di mana `<teks pengganti>` dimulai dan berhenti.

Ketika TeX mendefinisikan sebuah makro, bagian-bagian `<teks parameter><teks pengganti>` diubah menjadi satu daftar token kontinu yang panjang—jumlah total token dalam daftar itu bergantung pada kompleksitas makro. Seperti telah kita lihat, bagian tersebut memiliki tujuan khusus sebagai “templat token” atau “cetak biru” yang digunakan TeX untuk memilih token-token yang membentuk argumen (nilai) yang dipakai dengan makro sebenarnya: yaitu token-token yang akan dimasukkan ke dalam `<teks pengganti>`.

Untuk memantapkan gagasan ini, mari ambil contoh makro tetapi buat singkat agar diagram berikutnya tidak terlalu penuh:

```
\def\foo A#1\fake{123 #1}
```

Untuk makro kita, `\foo`

* `<teks parameter>` = `A#1\fake`
* `<teks pengganti>` = `123 #1`

Meskipun contoh ini adalah makro sederhana, contoh ini memuat semua fitur yang perlu kita eksplorasi.

Seperti dicatat, TeX akan mengonversi `<teks parameter><teks pengganti>` menjadi satu daftar token panjang yang dapat Anda lihat pada diagram di bawah. Dalam contoh kita, token `A#1\fake{123 #1}` telah diubah menjadi urutan token berurutan yang disimpan dalam daftar token (sebagai daftar tertaut dari node).

## Grafik yang menunjukkan daftar token makro yang nyata

Diagram berikut, yang menunjukkan bagaimana makro `\def\foo A#1\fake{123 #1}` disimpan, menggunakan data nyata dari dalam mesin TeX. Diagram ini dibuat menggunakan [versi TeX Knuth yang telah disesuaikan](/latex/id/artikel-mendalam/01-a-new-series-of-articles-tex-tokens-and-related-concepts-but-why-and-how.md#how-can-you-study-tex-tokens3f) yang dimodifikasi dengan kode tambahan untuk mencegat pemanggilan makro, memeriksa data internal TeX, dan mengekspornya ke format untuk diproses menggunakan program grafis sumber terbuka bernama [Graphviz](https://www.graphviz.org/).

Anda dapat mengunduh grafik berikut sebagai [berkas PDF](https://assets.ctfassets.net/nrgyaltdicpt/N6gT757eXCxRV3FtdPPga/7ce120dc05ed05962bb911ff1124734b/annotatednodelist-plain.pdf) (675 KB) atau [berkas SVG](https://images.ctfassets.net/nrgyaltdicpt/4PkmtHDhO8KF892ZDWuLHP/2c9c8385c6948fd122b228c5c780a3a6/annotatednodelist-plain.svg) (1,8 MB).

![Diagram daftar token TeX beranotasi](/files/83d6fc40904a5568820f6315954711f29c6b66cd)

#### Memahami node

Dalam diagram di atas Anda akan melihat bahwa setiap node berisi dua item data yang disebut **node berikutnya** dan **node saat ini**. Ini hanyalah nilai integer yang merepresentasikan lokasi memori di dalam TeX—lokasi tempat node lain disimpan. Nilai dari **node berikutnya** dan **node saat ini** tidak penting, mereka hanya menyimpan lokasi (alamat memori) yang memungkinkan node-node dihubungkan bersama dalam sebuah daftar.

![Arti next node dan current node](/files/2d5273e48c7aa3feea21280b60d18a50b0f333cf)

#### Kembali ke contoh

Dalam diagram node, daftar token yang terbentuk dari `A#1\fake{123 #1}` berisi beberapa “token khusus” yang diperkenalkan di awal artikel ini. Selain itu, daftar node yang mewakili makro kita dimulai dengan “node pertama khusus”: kita akan membahas apa itu dan apa fungsinya.

Item pertama dalam daftar token makro (dan beberapa jenis daftar token lainnya) tidak menyimpan nilai token, melainkan item data yang disebut *jumlah referensi* yang digunakan TeX untuk melacak penggunaan makro.

![Node jumlah referensi adalah yang pertama dalam daftar token](/files/7e5142f94f12c7360bc4f9d3061531acce8c60df)

Token pertama dari `<teks parameter>` disimpan dalam node yang langsung mengikuti jumlah referensi: Anda dapat melihat bahwa itu adalah token yang merepresentasikan huruf `Sebuah` dengan kode kategori 11. Dari pembahasan di Bagian 2 dan 3, kita tahu bahwa token karakter dihitung menggunakan

$$\text{token value}=256\times \text{category code} + \text{character code}$$

yang, untuk huruf `Sebuah` dengan kode kategori 11, adalah

$$\text{token value}=256\times 11 + 65$$

menghasilkan nilai 2881, seperti ditunjukkan pada node.

#### “Perintah” \fake yang digunakan dalam \foo

Dalam definisi makro kita `\def\foo A#1\fake{123 #1}` salah satu pemisahnya adalah *tak terdefinisi* perintah `\fake` yang disimpan dalam daftar token sebagai bagian dari `<teks parameter>` bagian. Seperti yang dapat Anda lihat, dalam keseluruhan daftar token makro `\fake` adalah token yang nilainya `19491`—nilai integer yang dihitung oleh TeX menggunakan rumus yang dibahas di Bagian 3. Ketika TeX mencoba mengeksekusi `\foo` ia akan mengharapkan menemukan `\fake` nilai token di akhir `<teks parameter>` bagian. TeX *tidak akan* mencoba mengeksekusi `\fake` perintah karena perannya semata-mata untuk menyediakan bentuk “tanda baca” di dalam `<teks parameter>` “templat token”.

![Menggunakan token perintah sebagai pemisah makro](/files/01b5fa65ad45772ad5f8db218bf978c7ed2b0eac)

#### Token khusus dalam daftar token

**Token “akhir pencocokan”**

Saat memanggil makro, tugas pertama TeX adalah memindai makro seperti yang diketik oleh pengguna dan membandingkan token yang ada dalam `<teks parameter>` bagian pengguna dengan token yang terkandung dalam templat `<teks parameter>` yang disimpan dalam memori (dibuat saat makro didefinisikan). Karena definisi lengkap makro, yang dibangun dari `<teks parameter><teks pengganti>` disimpan sebagai satu daftar token berurutan yang panjang, TeX perlu mengetahui di mana, dalam daftar token itu, `<teks parameter>` *berhenti* dan di mana `<teks pengganti>` *dimulai*. Untuk mencapai ini, ketika TeX mendefinisikan makro (membangun daftar token), ia akan menyisipkan token penutup khusus yang disebut **akhir pencocokan** token sebagai token terakhir dalam kumpulan token yang dihasilkan dari `<teks parameter>`. Paket **akhir pencocokan** token ini tidak dapat dihasilkan dari perintah pengguna, hanya TeX sendiri yang dapat membuatnya, sehingga TeX pasti akan mendeteksi akhir dari `<teks parameter>`.

![Menampilkan token akhir pencocokan dalam daftar token TeX](/files/cd90b259199f6bc9a67625cd9a112ffafaa82a77)

Di sini, kita dapat melihat bahwa token pertama yang mengikuti setelah **akhir pencocokan** adalah token yang merepresentasikan angka `1` dengan kode kategori 12. Ini memang sesuai harapan karena `<teks pengganti>` untuk makro kita `\foo` adalah `123 #1`—yaitu, dimulai dengan token yang merepresentasikan angka `1` (dengan kode kategori 12).

Dari pembahasan di Bagian 2 dan 3, kita tahu bahwa token karakter dihitung menggunakan

$$\text{token value}=256\times \text{category code} + \text{character code}$$

yang, untuk angka `1` dengan kode kategori 12 adalah

$$\text{token value}=256\times 12 + 49$$

menghasilkan nilai token 3121, seperti ditunjukkan pada node.

**token “parameter pencocokan”**

Ketika TeX menyimpan definisi makro, ia mengonversi semua token parameter (`#1`, `#2`… `#9`) di dalam `<teks parameter>` menjadi salah satu yang disebut **parameter pencocokan** token. Token-token ini memberi tahu TeX bahwa ia perlu mulai mencari token, di dalam pemanggilan makro oleh pengguna, yang merupakan argumen makro.

![Menampilkan token parameter pencocokan dalam daftar token TeX](/files/c5f63392f9b0b23568fd3fde86e4517c5a6e1192)

### Token khusus dalam daftar token

#### token “parameter keluaran”

Ketika TeX telah memproses semuanya dan siap untuk benar-benar menjalankan (memperluas) makro, token **parameter keluaran** memberi tahu TeX tentang lokasi di dalam `<teks pengganti>` tempat ia perlu memasukkan token yang merepresentasikan argumen yang diberikan oleh pengguna saat makro dipanggil. Intinya, “Di lokasi ini, sisipkan token yang merepresentasikan argumen pengguna n, dengan n=1...9”.

Di dalam `<teks pengganti>` bagian dari daftar token definisi makro yang tersimpan akan ada sebuah **parameter keluaran** token yang sesuai untuk setiap `#1`, `#2`... `#9` yang ada dalam definisi asli.

![Menampilkan token parameter keluaran dalam daftar token TeX](/files/bcc0b20055c620f63969ced5d1bc83d5920a59f3)

Jika kita melihat definisi `\foo` (`\def\foo A#1\fake{123 #1}`) kita melihat bahwa hanya ada 1 parameter makro (`#1`adalah menyimpan catatan bibliografis, dan hanya entri yang telah disitasi (melalui `<teks parameter>` (`A#1\fake`) dan selanjutnya hanya 1 parameter makro (`#1`) muncul dalam `<teks pengganti>` (`123 #1`): ini menghasilkan hanya 1 **parameter keluaran** token yang ada dalam daftar token yang mewakili `<teks pengganti>`.

Perhatikan hal berikut dalam daftar node yang mewakili `\foo`’s `<teks pengganti>`:

* token tepat sebelum **parameter keluaran** token merepresentasikan karakter spasi (kode kategori 10, kode karakter 32) karena ada spasi antara `123` dan parameter makro (`#1`) dalam definisi asli `\foo`;
* situs web **parameter keluaran** adalah token terakhir dalam daftar: **node berikutnya** memiliki nilai khusus “null” (artinya “kosong”) yang digunakan untuk mengakhiri daftar: tidak ada node lagi setelah **parameter keluaran** karena itu adalah token terakhir, yang menandakan akhir dari `<teks pengganti>` dan dengan demikian akhir dari definisi makro.

## Bagian 6

Dalam Bagian 6 kami menggunakan beberapa grafik rinci untuk menjelaskan dan mengeksplorasi makna tepat dari ekspansi makro dan konsekuensi tokenisasi argumen makro oleh TeX sebelum memasukkannya ke dalam `<teks pengganti>`.

[Bagian 1](/latex/id/topik-lainnya/19-how-tex-macros-actually-work-part-1.md) [Bagian 2](/latex/id/topik-lainnya/20-how-tex-macros-actually-work-part-2.md) [Bagian 3](/latex/id/topik-lainnya/21-how-tex-macros-actually-work-part-3.md) [Bagian 4](/latex/id/topik-lainnya/22-how-tex-macros-actually-work-part-4.md) [Bagian 5](/latex/id/topik-lainnya/23-how-tex-macros-actually-work-part-5.md) [Bagian 6](/latex/id/topik-lainnya/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/id/topik-lainnya/23-how-tex-macros-actually-work-part-5.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.
