> 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/20-how-tex-macros-actually-work-part-2.md).

# Bagaimana makro TeX sebenarnya bekerja: Bagian 2

[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: Sebuah kisah dalam gambar

Seperti disebutkan dalam Bagian 1, TeX harus “membaca” setiap karakter di dalam `.tex` berkas Anda dan proses pembacaan itu lebih tepat disebut sebagai *pemindaian*. Secara tradisional, pemrosesan input TeX (pemindaian) dianalogikan seperti TeX memiliki “mata” untuk mengamati input, jadi kita akan mengadopsi analogi yang telah teruji waktu itu di dalam grafik di bawah.

### Grafik 1: Mata siap

Kita mengasumsikan bahwa TeX telah memperoleh beberapa input dari sebuah `.tex` berkas dan akan memproses rangkaian karakter kita `Hello World \jobname` yang terdapat di dalam sebuah paragraf teks. TeX akan memeriksa setiap karakter secara bergantian dan meneliti kode kategorinya.

![Mata TeX siap memindai baris teks](/files/f38bc28d3045b2deca6876c94338f737913bfb41)

### Grafik 2: Memproses kode kategori

Pada grafik berikut kita melihat, secara garis besar (dengan rincian lebih lanjut di bawah), bagaimana TeX bereaksi terhadap beberapa kode kategori yang berbeda. Perhatikan bahwa secara total ada 16 kode kategori, tetapi untuk kesederhanaan, kami hanya menggambarkan penggunaan tiga: 11, 10 dan 0. Kode karakter lainnya menjadi penting selama proses penataan huruf TeX seperti menyusun tabel, menata matematika, dan mengenali parameter makro.

![TeX bereaksi terhadap beberapa kode kategori yang berbeda](/files/b590bb24ea52591b4412ba8dde05a9de4ece3b47)

#### Catatan untuk Grafik 2

Di sini, kita meninjau TeX saat ia membaca (memindai) karakter yang menjadi bagian dari sebuah paragraf teks. TeX memeriksa setiap karakter, mengecek kode kategorinya dan mengambil tindakan yang sesuai berdasarkan kode kategori dan “mode” TeX (status yang didasarkan pada apa yang sedang dilakukannya saat ini).

* **(mata hijau)** TeX akan melihat bahwa masing-masing karakter tersebut memiliki kode kategori 11 (“huruf”) dan akan meneruskan karakter-karakter itu untuk ditata sebagai bagian dari paragraf yang sedang dibangunnya. Namun, TeX tidak meneruskan (menggunakan) hanya kode karakter saja melainkan, sebagai gantinya, ia menggunakan pasangan angka (kode karakter, kode kategori) untuk menghitung sebuah nilai bilangan bulat gabungan yang disebut *token karakter* (lihat di bawah). Setelah token karakter itu dihasilkan, ia masuk ke dalam proses/algoritma penataan huruf internal TeX.
* **(mata biru)** TeX melihat sebuah karakter spasi (ASCII 32) dengan kode kategori 10 (“pemisah”)—perhatikan bahwa, seperti telah dibahas, sangat mungkin kode kategori dari sebuah spasi (ASCII 32), atau karakter apa pun, telah diubah menjadi nilai lain—sebelum dibaca oleh TeX.

Cara TeX benar-benar memproses karakter dengan kode kategori 10 (“pemisah”) memang bervariasi tergantung kapan/di mana TeX melihatnya—“mode” TeX saat ini. Misalnya, ada kalanya TeX akan langsung melewatinya. Di sini, TeX akan tahu bahwa ia telah mendeteksi karakter dengan kode kategori 10 (yang kebetulan berupa spasi, ASCII 32) saat memproses teks paragraf sehingga pada akhirnya akan mengubahnya menjadi apa yang disebut interword glue: semacam spasi fleksibel yang dapat meregang atau menyusut.

* **(mata merah)** Di sini, TeX telah mengamati sebuah karakter yang memiliki kode kategori yang sangat penting: 0 (karakter escape).

Sebuah karakter escape—*karakter apa pun* dengan kode kategori 0—memberi tahu TeX untuk beralih ke mode pembacaan khusus dan memindai (membaca) dengan hati-hati karakter-karakter berikutnya karena karakter-karakter itu mengidentifikasi nama sebuah *perintah*bukan teks yang akan ditata. *0 yang berarti ia memperkenalkan awal dari sebuah*Dalam literatur TeX Anda akan melihat istilah “command” juga disebut sebagai *tepat setelahnya*; ini karena TeX mengenali dua jenis command:

* command multi-huruf yang disebut *control words*: karakter yang langsung mengikuti escape character memiliki kode kategori 11. Semua karakter berikutnya yang memiliki kode kategori 11 dianggap sebagai bagian dari nama sebuah command. TeX akan berhenti mencari karakter yang menjadi bagian dari nama command ketika ia mendeteksi karakter apa pun yang *tidak* memiliki kode kategori 11—seperti karakter spasi dengan kode kategori 10.
* command satu huruf yang disebut *simbol kontrol*: karakter yang langsung mengikuti escape character *tidak* memiliki kode kategori 11.

Anda dapat menganggap escape character sebagai pemicu bagi TeX untuk “keluar” dari perilaku pemindaian biasanya dan mengadopsi pendekatan yang berbeda untuk beberapa karakter berikutnya—hal ini ditunjukkan oleh kotak garis putus-putus merah yang menunjukkan bahwa TeX akan **Mulai memindai untuk sebuah command**.

### Grafik 3: Memproses kode kategori 11 (“huruf”)

Dalam Bagian 1 dari seri ini kami mencatat bahwa setiap karakter yang dibaca TeX dari inputnya dijelaskan oleh dua bilangan bulat:

* kode karakter: bilangan bulat yang mendefinisikan representasi numerik dari sebuah karakter;
* kode kategori: nilai dari 0 hingga 15 yang ditetapkan TeX kepada setiap karakter yang mungkin muncul dalam inputnya.

TeX menggunakan dua informasi ini pada tahap pemrosesan berikutnya: membuat token karakter.

Grafik 3 memperluas Grafik 2 untuk menunjukkan apa yang TeX lakukan dengan karakter input ini yang memiliki kode kategori 11 (huruf): TeX membuat *token karakter*—nilai bilangan bulat yang dihitung TeX menggunakan kombinasi kode kategori dan kode karakter dari karakter tersebut.

**Catatan**: Dalam contoh ini kami hanya membahas karakter dengan kode kategori 11, tetapi Anda perlu tahu bahwa TeX juga membuat nilai token untuk karakter input yang memiliki kode kategori lain—kecuali kode kategori 0 yang tidak pernah diubah menjadi token: escape character hanya bertindak sebagai “saklar” untuk memicu pemrosesan khusus.

![TeX memproses karakter dengan kode kategori 11](/files/45a5bffd3a8278f1b08b6d3f1cd1d17d9de38b31)

Grafik 5, di bawah, akan menunjukkan apa yang TeX lakukan ketika ia melihat karakter dengan kode kategori 0 (sebuah escape character).

#### Catatan untuk Grafik 3: Memproses kode kategori 11 (“huruf”)

Di sini, kita akan fokus pada **hijau** aktivitas: apa yang terjadi ketika TeX melihat karakter yang memiliki kode kategori 11 (“huruf”). Setelah TeX membaca sebuah karakter, dan menentukan kode kategorinya (di sini nilainya 11), hal berikut yang TeX lakukan adalah *menggabungkan* pasangan angka ini menjadi sebuah bilangan bulat tunggal yang disebut token karakter: token-token (bilangan bulat) ini diteruskan ke tahap berikutnya dari algoritma/pemrosesan penataan huruf internal TeX. Seperti telah disebutkan, TeX juga akan membuat token karakter untuk karakter dengan kode kategori lain (yaitu bukan 11), di sini kita hanya menggunakan kode kategori 11 sebagai contoh.

Setiap token karakter (sebuah bilangan bulat) secara permanen mengikat sebuah karakter input dengan kode kategori yang ditetapkan pada karakter tersebut **pada saat karakter itu dipindai**: fakta itu sangat penting untuk memahami perilaku makro TeX/LaTeX. Tentu saja, selama pemrosesan lebih lanjut, TeX kadang-kadang perlu memisahkan token karakter untuk menentukan pasangan (kode karakter, kode kategori) mana yang digunakan untuk membentuk token itu. Namun, setelah sebuah karakter dibaca masuk oleh proses input (pemindaian) TeX, nilai token karakter yang dihitung TeX menyebabkan karakter itu *secara permanen* terikat dengan kode kategori yang ditetapkan padanya *pada saat ia dibaca masuk*.

**Menghitung token karakter**

Mesin TeX menggunakan rumus sederhana untuk menghitung token karakter, $$T$$, dari sebuah karakter dengan kode kategori $$C$$ dan kode karakter $$A$$:

$$T = \text{constant} \times C + A$$

Mesin 8-bit, seperti pdfTeX menggunakan:

$$T = 256\times C + A$$

Mesin yang memahami Unicode, seperti XeTeX atau LuaTeX, harus menggunakan rumus yang berbeda karena, dalam Unicode, kode karakter dapat jauh lebih besar daripada maksimum 255 di dunia pengodean ASCII 8-bit lama. XeTeX, misalnya, menggunakan:

$$T= 2^{21}\times C + A \hskip5mm \text{(where } A \text{ is a Unicode character code value)}$$

Sekali lagi, perlu dicatat bahwa karakter dengan kode kategori 0 tidak diubah menjadi token karakter: kode kategori 0 memiliki tempat yang sangat khusus dalam penyaringan input TeX dan digunakan murni sebagai “saklar” untuk memicu TeX ke mode khusus untuk memindai beberapa karakter berikutnya. Grafik 5 membahas hal ini.

### Grafik 4: Memproses kode kategori 10 (“pemisah”)

Penanganan TeX terhadap karakter dengan kode kategori 10 (“pemisah”) bergantung pada apa yang sedang dikerjakan TeX ketika ia mendeteksi karakter berkode kategori 10 di dalam input. Dalam contoh kita, TeX sedang melakukan pemrosesan paragraf rutin dan karakter spasi, dengan kode kategori 10, akan diubah menjadi interword glue.

![TeX memproses karakter dengan kode kategori 10](/files/85324dc3c8a023a21a9f3a9ccf8159119e224261)

Penanganan Te [TeX by Topic](http://www.eijkhout.net/texbytopic/texbytopic.html) oleh Victor Eijkhout—Anda dapat [mengunduh salinan PDF gratis](https://bitbucket.org/VictorEijkhout/tex-by-topic) melalui situs webnya.

Misalnya, ketika TeX melihat karakter dengan kode kategori 10, ada kalanya TeX akan:

* melewati (mengabaikan) semuanya—misalnya, saat TeX berada dalam mode vertikal;
* mengubah beberapa pemisah menjadi satu pemisah—melewatkan spasi ekstra seperti saat memproses sebuah paragraf;
* menyerapnya—misalnya menyerap satu spasi setelah nama command;

Perlu juga dicatat, ada kalanya TeX juga akan *menghasilkan* spasi—dengan mengubah karakter akhir baris menjadi spasi. Perilaku/perlakuan terhadap karakter spasi (karakter apa pun dengan kode kategori 10) adalah salah satu “keunikan” TeX: butuh waktu/latihan untuk menjadi akrab (nyaman) dengan aspek TeX ini.

### Grafik 5a: Memproses kode kategori 0 (sebuah “escape character”)

Dalam grafik ini, TeX telah memproses semua karakter hingga `\` karakter, yang memiliki kode kategori 0: “escape character”—kita akan menggunakan rangkaian grafik berikutnya untuk menunjukkan bagaimana TeX memproses escape character dan mengidentifikasi nama sebuah command.

![TeX memproses karakter dengan kode kategori 0](/files/4781ef8d3c3ac3f02eb95a10a337c1d01de2ecac)

### Grafik 5b: Mencari nama command

Dalam grafik ini kita melihat ke bagian kotak garis putus-putus merah (**Mulai memindai untuk sebuah command**) untuk melihat apa yang TeX lakukan setelah ia melihat escape character.

![TeX mencari nama command](/files/c677945ed542489fe192c8b457940fbe11aa0e8c)

**Catatan untuk Grafik 5b**

* Setelah dikenali, escape character telah menjalankan tugasnya: ia bertindak sebagai saklar dan tidak mengambil bagian dalam pemrosesan lebih lanjut—secara khusus, ia **berisi nilai data aktual yang disimpan dalam** diubah menjadi token karakter.
* Untuk memudahkan, kami akan mengulangi beberapa rincian yang disebutkan sebelumnya. Setelah melihat escape character, TeX memeriksa kode kategori dari karakter yang mengikutinya *tepat setelahnya*; ini karena TeX mengenali dua jenis command:
* * command multi-huruf yang disebut *control words*: karakter yang langsung mengikuti escape character memiliki kode kategori 11. Semua karakter berikutnya yang memiliki kode kategori 11 dianggap membentuk nama sebuah command (*kata kontrol*). TeX akan berhenti mencari karakter yang menjadi bagian dari nama command ketika ia mendeteksi karakter apa pun yang *tidak* memiliki kode kategori 11—seperti karakter spasi dengan kode kategori 10.
  * command satu huruf yang disebut *simbol kontrol*: karakter yang langsung mengikuti escape character *tidak* memiliki kode kategori 11.
* Dalam contoh kita, karakter pertama setelah `\` adalah sebuah `j` (kode kategori 11) yang memberi tahu TeX untuk mencari command yang (berpotensi) berupa rangkaian multi-huruf dari karakter-karakter dengan kode kategori 11.
* TeX terus memeriksa karakter lain yang memiliki kode kategori 11. Segera setelah ia mendeteksi karakter dengan kode kategori lain, seperti spasi dengan kode kategori 10, TeX tahu bahwa ia telah mencapai akhir nama command. Untuk menegaskan poin ini: di sini adalah karakter spasi (kode kategori 10) yang “mengakhiri” command, tetapi bisa saja merupakan karakter apa pun yang **tidak** memiliki kode kategori 11.

## Bagian 3

Dalam Bagian 3 kita melanjutkan dari Grafik 5b untuk menyelesaikan bagian kisah ini—bagaimana TeX mengidentifikasi sebuah command—dan beralih ke apa yang dilakukannya selanjutnya. Kita juga melihat lebih dalam beberapa aspek internal pemrosesan TeX—bagian-bagian yang dapat dilewati pada pembacaan pertama, kecuali jika Anda benar-benar menikmati detailnya.

[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/20-how-tex-macros-actually-work-part-2.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.
