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

# Bagaimana makro TeX sebenarnya bekerja: Bagian 1

[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: Tujuan seri ini

Seri artikel ini memiliki tujuan yang ambisius: menjelaskan *bagaimana* bagaimana makro TeX (seperti perintah LaTeX) benar-benar bekerja—pada tingkat paling mendasar, di dalam perangkat lunak mesin TeX itu sendiri. Alih-alih hanya mengandalkan *semata-mata* pada serangkaian makro contoh yang dirancang untuk menunjukkan berbagai fitur, kasus tepi, dan perilaku TeX, kita akan melihat langsung ke dalam TeX untuk melihat *bagaimana* dan *mengapa* mengapa metode pemrograman makronya bekerja seperti itu.

Untuk mencapai tujuan kita, kita perlu mulai dengan membahas topik yang cukup rendah tingkatnya dan, pada awalnya, ini mungkin tampak agak jauh dari tugas menata huruf dokumen Anda. Mudah-mudahan, setelah menyelami lebih dalam, Anda akan memperoleh dasar untuk membangun pemahaman yang lebih baik yang pada akhirnya akan menghemat banyak waktu Anda dan, mungkin, juga mengurangi tingkat frustrasi.

### Bahasa pemrograman TeX: Tahu rasanya?

Tidak berlebihan jika menggambarkan bahasa pemrograman TeX sebagai sesuatu yang agak misterius, karena memang begitu—setidaknya jika dibandingkan dengan kebanyakan bahasa pemrograman arus utama yang digunakan saat ini. Saat Anda mulai mempelajari TeX/LaTeX lebih jauh, terutama jika Anda ingin menulis makro yang tidak sepele, Anda akan cepat menjumpai konsep seperti kode kategori, token/tokenisasi, dan “ekspansi” perintah atau makro. Rentetan konsep itu kemungkinan besar terasa sangat asing, mungkin membuat Anda bingung dan, terkadang, sedikit frustrasi karena jalan Anda menuju keberhasilan tidak selalu dibantu oleh pesan kesalahan TeX/LaTeX yang hampir tak tertembus.

## Jadi, dari mana kita mulai? Dengan kode kategori.

Mesin TeX termasuk dalam kelas perangkat lunak yang disebut [kompiler](https://en.wikipedia.org/wiki/Compiler): program yang memasukkan berkas yang ditulis dalam suatu *bahasa* sumber dan *mengompilasi* (mentransformasi) berkas itu menjadi berkas keluaran yang ditulis dalam suatu *bahasa* sasaran. Lebih khusus lagi, TeX adalah sebuah *kompiler dokumen*. Bagi mesin TeX (kompiler), berkas masukan ditulis dalam bahasa penataan huruf TeX dan sasaran adalah berkas keluaran yang ditulis dalam “bahasa” lain seperti [DVI](https://en.wikipedia.org/wiki/Device_independent_file_format) atau PDF—meskipun kita agak longgar dalam menggunakan istilah “bahasa”.

Mari kita lihat lebih dekat bahasa “sumber”, atau masukan, yang digunakan untuk menulis berkas TeX Anda. Sebuah `.tex` berkas pada akhirnya hanyalah satu rangkaian karakter yang panjang (termasuk karakter pemisah baris): terdiri atas teks yang ditujukan untuk penataan huruf yang diselingi dengan `\`, `}`, `$`, `[` dan segala macam karakter yang dapat muncul dalam kombinasi yang tampaknya hampir tak terbatas. Siapa pun yang tidak menggunakan TeX/LaTeX mungkin melihat sebuah `.tex` berkas dan wajar saja jika menganggapnya sebagai campuran karakter yang cukup membingungkan dengan sedikit, jika ada, struktur berkas yang terlihat. Paket makro LaTeX tentu cukup membantu dalam “memaksakan” beberapa struktur dasar pada berkas masukan .tex. Namun, di antara `\begin{document}` dan `\end{document}` itu, terserah kepada penulis dokumen untuk menentukan apa yang dimasukkan ke sana. Jika Anda melihat `.tex` berkas yang ditulis menggunakan paket makro Plain TeX asli karya Knuth, Anda akan melihat bahwa struktur dokumen hampir sama sekali tidak ada.

Jadi, secara umum, berkas masukan TeX dapat tampak cukup tidak terstruktur, campuran yang tampaknya acak antara konten yang akan ditata huruf diselingi dengan instruksi (perintah) yang memandu penataan huruf konten tersebut. Bagaimana mungkin TeX dapat memahami sebuah `.tex` berkas masukan: menyaring campuran karakter yang berantakan itu menjadi instruksi yang dapat ditindaklanjuti untuk mesin penataan huruf dan konten yang akan ditata huruf?

### Menyaring kekacauan: Sambutlah kode kategori

Setiap pengamat manusia, yang tidak tahu apa-apa tentang TeX, mungkin melihat sebuah `.tex` berkas dan mengenali karakter tertentu seperti `$` dan tahu bahwa itu adalah tanda mata uang, atau melihat sebuah `&` dan mengidentifikasinya sebagai ampersand. Pengamat itu menyimpulkan sebuah *maknanya* untuk setiap karakter yang mereka lihat—sebuah makna berdasarkan peran yang dimainkan karakter itu dalam komunikasi manusia. Selain itu, mereka mungkin melihat karakter seperti `a`, `e`, `atau` dan tahu bahwa itu diklasifikasikan sebagai vokal sementara yang lain seperti `b`, `c` atau `d` diklasifikasikan sebagai konsonan. Sebagai manusia, kita memiliki semacam tabel pencarian bawaan (di dalam ingatan kita) yang melaluinya kita memberikan makna pada setiap karakter yang kita lihat—makna berdasarkan peran yang dijalankan karakter tersebut dalam bahasa yang dapat kita gunakan untuk berkomunikasi.

Untuk memproses sebuah `.tex` berkas, perangkat lunak TeX juga harus melihat setiap karakter di dalam masukan Anda dan ia pun perlu menetapkan sebuah *maknanya* kepada setiap karakter yang “dilihatnya”. Namun, TeX hanyalah mesin berbasis perangkat lunak yang menangani pemrosesan teks—disimpan sebagai rangkaian bilangan bulat (kode karakter) yang berada dalam sebuah berkas masukan. Sebagai mesin, TeX harus diprogram dengan data yang relevan yang memberitahunya cara menentukan makna dari sebuah karakter yang sedang “dilihatnya” dan selanjutnya apa yang perlu dilakukannya terhadap karakter itu. Bagaimana TeX mencapai hal ini?

Jawabannya adalah salah satu konsep khas TeX: *kode kategori,* yang jumlahnya ada 16, mulai dari 0 hingga 15. Sejauh yang menjadi perhatian TeX, setiap karakter yang pernah diharapkannya muncul dalam sebuah `.tex` berkas memiliki apa yang disebut *kode kategori* yang telah ditetapkan sebelumnya. Di dalam perangkat lunak TeX terdapat semacam “tabel pencarian” yang mencantumkan kode kategori *saat ini* yang diberikan kepada setiap karakter yang mungkin dilihat TeX dalam berkas masukan .tex. Anda sebaiknya memandang kode kategori TeX sebagai pemberian sebuah *maknanya* kepada masing-masing karakter dalam aliran masukan yang harus diperiksa (dipindai) oleh TeX.

Untuk menata huruf dokumen Anda, mesin TeX harus membaca (memindai) setiap karakter, tetapi minat langsung TeX bukan pada karakter aktual (kode karakter): *kode kategori* karakter itu *ukuran* kode kategori menentukan *makna saat ini* dari karakter itu *pada saat TeX membacanya*: kode kategori itu menentukan bagaimana TeX akan memperlakukan/memproses setiap karakter—kami akan menjelaskan mengapa kami mengatakan “kode kategori saat ini” dan “makna saat ini”. Melalui kode kategori, TeX dapat menyaring karakter-karakter yang masuk untuk membedakan antara karakter (konten) yang ditujukan untuk ditata huruf dan karakter yang membentuk instruksi untuk diproses—*perintah* yang perlu dijalankan TeX.

Tabel berikut mencantumkan 16 kode kategori tersebut: apa yang masing-masing tandakan beserta contoh karakter yang biasanya diberikan ke setiap kategori.

| **Kode kategori** | **Deskripsi**                                                        | **LATEX/TEX standar**                                            |
| ----------------- | -------------------------------------------------------------------- | ---------------------------------------------------------------- |
| 0                 | Karakter escape—memberi tahu TEX untuk mulai mencari perintah        | `\`                                                              |
| 1                 | Mulai sebuah grup                                                    | {                                                                |
| 2                 | Akhiri sebuah grup                                                   | }                                                                |
| 3                 | Pergeseran matematika—masuk/keluar mode matematika                   | $                                                                |
| 4                 | Tab penyelarasan                                                     | &                                                                |
| 5                 | Akhir baris                                                          | Kode ASCII 13 (`\r`)                                             |
| 6                 | Parameter makro                                                      | #                                                                |
| 7                 | Pangkat atas—untuk penataan matematika: `$y=x^2$` $$y=x^2$$          | ˆ                                                                |
| 8                 | Subskrip—untuk penataan matematika: `$y=x_2$` $$y=x\_2$$             | \_                                                               |
| 9                 | Karakter yang diabaikan                                              | ASCII 0 `<null>`                                                 |
| 10                | Spasi                                                                | Kode ASCII 32 (spasi) dan 9 (karakter tab)                       |
| 11                | Huruf                                                                | A...Z, a...z, (dan ribuan karakter Unicode)                      |
| 12                | Lainnya                                                              | 0...9 ditambah ,.;?" dan banyak lainnya                          |
| 13                | Karakter aktif                                                       | Kode kategori khusus untuk membuat makro satu karakter seperti ˜ |
| 14                | Karakter komentar—abaikan semua yang mengikutinya hingga akhir baris | %                                                                |
| 15                | Karakter tidak valid, tidak diizinkan muncul di berkas masukan .tex  | Kode ASCII 127 (`DEL`)                                           |

Penggunaan kode kategori adalah mekanisme esensial TeX untuk menyaring aliran karakter yang masuk, memahami masukan Anda guna menentukan:

* karakter yang membentuk teks yang akan ditata huruf;
* pembatas konten yang harus ditata huruf sebagai matematika;
* rangkaian karakter yang merupakan nama perintah untuk diproses atau dieksekusi;
* … dan banyak operasi penataan huruf lainnya.

Pada awalnya, Anda mungkin mengira bahwa kode kategori (makna) setiap karakter adalah semacam alokasi tetap: tak dapat diubah dan secara permanen tertanam dalam fondasi terdalam perangkat lunak TeX, tetapi ini tidak demikian. Seperti disebutkan, TeX mempertahankan tabel pencarian internal untuk menyimpan rincian kode kategori yang *saat ini* diberikan kepada setiap karakter—kami sengaja mengatakan *diberikan saat ini* karena kode kategori untuk karakter apa pun (yang belum dibaca masuk) dapat diubah dengan menggunakan perintah primitif (bawaan) yang disebut `\catcode`. Ini memberikan fleksibilitas yang besar karena Anda dapat, jika mau, sepenuhnya mengubah cara TeX akan memperlakukan atau menafsirkan makna karakter apa pun yang kemudian dibaca dari masukan, sehingga membuka ruang yang sangat besar untuk aplikasi penataan huruf yang canggih.

Jika Anda terutama tertarik pada penggunaan LaTeX untuk “menyelesaikan pekerjaan”, kemungkinan besar Anda mungkin tidak pernah secara langsung menemui kode kategori kecuali, mungkin, melalui pesan kesalahan yang pernah Anda lihat. Namun tenanglah, kode kategori adalah komponen inti dari operasi mesin TeX: memungkinkan LaTeX (dan paket-paket LaTeX) benar-benar melakukan pekerjaan menata huruf dokumen Anda.

Saat mesin TeX Anda mulai (“[bootstrapping](https://en.wikipedia.org/wiki/Bootstrapping)”) ia akan menggunakan sekumpulan alokasi default karakter ke kode kategori, tetapi, melalui perintah `\catcode` default tersebut dapat diubah oleh kode inti LaTeX (makro) dan/atau oleh paket LaTeX yang telah Anda muat—atau bahkan oleh kode TeX atau makro Anda sendiri. Namun, seiring waktu dan melalui tradisi/penggunaan, karakter tertentu yang dialokasikan ke kode kategori tertentu telah diterima sebagai “standar” dan mematuhi standar tersebut tentu diinginkan jika Anda ingin dokumen Anda portabel dan mudah dibagikan dengan rekan kerja atau pengguna lain. Misalnya, karakter `\` dialokasikan kode kategori 0 untuk menandakan awal perintah TeX/LaTeX—lihat [tabel di atas](#tbl-0).

### Membaca (memindai) masukan

Saat TeX membaca (memindai) karakter berikutnya dari berkas masukan Anda, hal pertama yang dilakukannya adalah melihat kode kategorinya, jadi mari kita lihat lebih dekat apa yang terjadi ketika TeX membaca baris masukan yang tipikal.

Misalkan kita memiliki sebuah berkas .tex yang berisi teks `Hello World \jobname` di suatu tempat dalam sebuah paragraf. Jika kita melihat ke dalam `.tex` berkas menggunakan sebuah [editor heksa](https://en.wikipedia.org/wiki/Hex_editor), kita melihat bahwa rangkaian karakter `Hello World \jobname` dalam `.tex` berkas kita hanyalah serangkaian bilangan bulat, atau *kode karakter*, yang ditampilkan pada tangkapan layar di bawah sebagai rangkaian heksadesimal:

`48, 65, 6C, 6C, 6F, 20, 57, 6F, 72, 6C, 64, 20, 5C, 6A, 6F, 62, 6E, 61, 6D, 65, 20`

![Kode karakter heksadesimal dalam berkas TeX](/files/e558b30fa8569f56fe2ef7a1c24a306a69f6f5d9)

Jika kita mengonversi dari heksadesimal (basis 16) ke desimal (basis 10), rangkaian kode karakter tersebut adalah:

![Kode karakter desimal dalam berkas TeX](/files/73d65828df9ef7ae88fa984d16be852ed241df84)

Kita juga tahu bahwa, bagi TeX, setiap karakter memiliki kode kategori yang bersesuaian; jadi, berdasarkan [tabel di atas](#tbl-0) kita tahu bahwa alokasi kode kategori default berikut (kemungkinan besar) juga sedang digunakan:

![Kode kategori TeX](/files/762dfb93d0721be265f0d3818a9c92132f203ec6)

Jadi, bagi TeX, setiap karakter dalam berkas masukan diwakili oleh *dua* nilai numerik—kode karakter dan kode kategorinya:

![Kode karakter dan kode kategori TeX yang bersesuaian](/files/d77b8181e792947d85d1e69af0aac6039ba6b686)

Pada titik ini kita hanya mempertimbangkan tahap paling awal dalam pemrosesan berkas Anda oleh TeX: memindai karakter-karakter individual. Jadi, sebenarnya apa yang dilakukan TeX dengan pasangan kode karakter dan kode kategori ini? Setelah TeX memindai sebuah karakter individual dan mencari kode kategori yang bersesuaian, tepatnya bagaimana TeX menggunakan informasi ini untuk “menyaring” karakter-karakter yang masuk?

## Bagian 2

Di bagian 2 kita melihat lebih dekat bagaimana TeX membaca masukan Anda: berpura-pura menjadi “mata” TeX saat ia melihat masukan Anda, karakter demi karakter.

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