> 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/14-how-do-tex-engines-typeset-tables.md).

# Bagaimana mesin TeX menata tabel

## Bagaimana mesin TeX menyusun tabel

## Pendahuluan: Apa yang dibahas dalam seri ini?

Menghasilkan tabel yang sedap dipandang dapat menjadi tugas yang memakan waktu—baik Anda menggunakan alat tata letak visual, LaTeX, maupun bahasa markup seperti HTML atau markdown. Bagi pengguna LaTeX khususnya, menyusun tabel termasuk tinggi dalam daftar “titik nyeri” banyak orang, yang mungkin terbukti dari “tabel” menjadi salah satu yang paling [topik yang paling banyak diberi tag di tex.stackexchange](https://tex.stackexchange.com/tags).

Selain jawaban dan contoh di tex.stackexchange, bahkan tinjauan sepintas atas dukungan yang tersedia untuk menyusun tabel dengan LaTeX mengungkap sejumlah sumber informasi terkait tabel:

* milik Overleaf [halaman bantuan](https://www.overleaf.com/learn/latex/tables) dan situs lain seperti [learnlatex.org](https://www.learnlatex.org/en/lesson-08)
* CTAN, Comprehensive TeX Network, mencantumkan lebih dari [70 paket TeX/LaTeX](https://ctan.org/topic/table) yang terkait dengan pembuatan tabel
* seluruh sebuah [buku tentang penyusunan tabel menggunakan LaTeX](https://www.amazon.co.uk/Typesetting-Tables-LaTeX-Herbert-Voss/dp/1906860254)
* sebuah [pembuat tabel LaTeX daring yang sangat baik](https://www.tablesgenerator.com/latex_tables)

Pencarian Google sederhana untuk [tabel LaTeX](https://www.google.com/search?q=latex+tables) menghasilkan sejumlah besar hasil, yang mencantumkan banyak situs yang menawarkan bantuan, saran, contoh, dan penjelasan.

### TeX, bukan LaTeX

Mengingat begitu banyaknya literatur yang tersedia tentang penyusunan tabel menggunakan LaTeX, apakah masih ada hal lain untuk ditulis tentangnya—lebih banyak contoh tabel dan penomoran/demonstrasi perintah paket? Adakah cara untuk mendekati topik penyusunan tabel yang menyoroti atau berfokus pada prinsip-prinsip dan konsep dasar penyusunan tabel? Ada, tetapi itu memerlukan mengupas lapisan bawang LaTeX…

Kami memutuskan untuk membuat seri artikel yang bertujuan memberikan kepada pembaca informasi latar belakang dan penjelasan tentang *mekanika* dari penyusunan tabel berbasis TeX. Alih-alih berfokus pada penyusunan tabel menggunakan makro/paket LaTeX tertentu, kami akan menelusuri *perilaku mendasar* mesin TeX: menelusuri mesin penyusunan tingkat rendah yang menjadi dasar tempat perintah makro LaTeX dibangun. Tujuan akhirnya adalah menguraikan, dan menjelaskan, metode dan algoritme inti penyusunan tabel berbasis TeX—semoga membantu pembaca/pengguna memahami lebih baik mengapa tabel berperilaku seperti itu. Konsekuensi tak terhindarkan dari pendekatan ini, yaitu mengupas lapisan perlindungan isolasi makro LaTeX, adalah tereksposnya detail tingkat rendah yang berantakan, yang darinya pengguna biasanya (dan dengan gembira) terlindungi melalui lapisan kode makro LaTeX.

Butuh banyak waktu untuk meneliti, menulis, dan mengilustrasikan artikel-artikel ini, jadi kami berharap artikel-artikel ini menjadi tambahan yang berharga bagi literatur, menyediakan materi yang akan memberi informasi kepada pembaca dan membantu mereka lebih memahami area penyusunan TeX yang kompleks ini. Perlu kami tekankan bahwa seri artikel ini akan *berisi nilai data aktual yang disimpan dalam* turut membahas *estetika* dalam desain tabel—itu adalah topik yang sarat dengan preferensi subjektif dan perdebatan yang harus dibahas di tempat lain…

### Menjelajahi mekanika tabel TeX: Bagaimana Anda bisa melakukannya?

Untuk menjelajahi, lalu menulis tentang, mekanisme dan proses tingkat rendah yang terjadi di dalam mesin TeX, seperti penyusunan tabel, Overleaf membuat versi “debug” mesin TeX karya Knuth yang dibangun (dikompilasi) menggunakan [proses Web2W](https://w3-o.cs.hm.edu/users/ruckert/public_html/web2w/index.html).

Secara tradisional, membangun TeX melibatkan proses yang disebut Web2C, yang digunakan dalam TeX Live, yang menghasilkan kode C dengan mengonversi kode sumber Pascal asli TeX ke padanan C-nya. Proses itu menghasilkan kode C yang tidak pernah dimaksudkan untuk dibaca manusia, hanya oleh kompilator C. Kode C yang dihasilkan secara mekanis itu sangat *sangat* sulit dibaca atau dimodifikasi untuk tujuan eksperimen.

Sebaliknya, Web2W menghasilkan kode sumber C (tersedia [di sini](https://w3-o.cs.hm.edu/users/ruckert/public_html/web2w/ctex.c)) yang *berkali-kali lipat* lebih mudah dibaca daripada kode yang dihasilkan oleh Web2C. Akibatnya, kode sumber C Web2W jauh lebih mudah dimodifikasi untuk tujuan belajar/eksperimen.

Web2W menghasilkan versi TeX (“CTeX”) yang *sangat* dekat dengan program asli Knuth: “CTeX” tidak menyertakan banyak perubahan dan peningkatan yang diperkenalkan oleh proses Web2C—seperti SyncTeX, pemrosesan baris perintah, dan pencarian berkas melalui Kpathsea. Meskipun Anda mengorbankan peningkatan berharga tersebut, kode C yang dihasilkan (Web2W) relatif mudah dinavigasi menggunakan kode sumber TeX yang diterbitkan Knuth, meskipun TeX ditulis dalam Pascal.

* **Catatan tentang nama:** Secara ketat, nama “TeX” hanya boleh merujuk pada perangkat lunak asli yang ditulis dan diterbitkan oleh Donald Knuth. Setiap modifikasi pada perangkat lunaknya harus menggunakan nama yang berbeda untuk perangkat lunak penyusunan berbasis TeX yang dihasilkan. Di sini, kami menggunakan proses Web2W untuk membangun sebuah mesin yang pada dasarnya masih merupakan perangkat lunak asli Knuth. Namun, untuk menghindari keraguan, kami akan menggunakan istilah “CTeX” untuk menyebut versi spesifik yang dibangun menggunakan Web2W, tetapi kami juga akan menggunakan “TeX” untuk berarti mesin asli Knuth atau sebagai istilah umum untuk bahasa penyusunan yang didasarkan pada prinsip-prinsip TeX karya Knuth. Kami berharap pembaca akan memaafkan setiap kekeliruan sesekali dalam penerapan/penggunaan terminologi yang benar secara ketat: kami berharap makna/niat tersampaikan melalui konteks.

Versi debug dari CTeX dijalankan menggunakan [Eclipse IDE](https://www.eclipse.org/downloads/packages/), sehingga memungkinkan pengamatan pemrosesan waktu nyata dari kode C yang mengimplementasikan perintah TeX primitif (bawaan) tingkat rendah, dan algoritme, yang dirancang oleh Knuth untuk mendukung penyusunan tabel.

Video singkat berikut (sekitar 90 detik) mendemonstrasikan mesin CTeX yang berjalan di dalam [Eclipse IDE](https://www.eclipse.org/downloads/packages/):

{% embed url="<https://videos.ctfassets.net/nrgyaltdicpt/7drdFwYR6h5xD88XnurDIH/36511f504755ab274f4da2e3f3fc1ce5/TeXtables.mp4>" %}

Selain CTeX, kami juga mengompilasi e-TeX untuk mengakses beberapa primitif tambahan yang tidak ada dalam perangkat lunak asli Knuth. Meskipun CTeX dan e-TeX kini merupakan mesin berbasis TeX yang lama, keduanya masih cocok sebagai dasar untuk menjelajahi mekanika penyusunan tabel karena prinsip-prinsip mendasar itu masih berlaku untuk semua mesin penyusunan berbasis TeX.

### Mengapa menggunakan mesin TeX yang lebih lama untuk menjelajahi tabel?

Pertama, buku cetak, [TeX:The Program](https://www.amazon.co.uk/Computers-Typesetting-TeX-Program-TEX/dp/0201134373), yang mencantumkan dan menjelaskan kode sumber TeX, masih merupakan panduan yang sangat praktis untuk seluk-beluk cara kerja internal TeX, meskipun diterbitkan lebih dari 30 tahun yang lalu (1986). Tentu saja, Anda dapat menyusun dokumentasi kode sumber TeX sendiri, misalnya lihat proyek Overleaf [Susun dokumentasi kode sumber untuk TeX, e-TeX, atau pdfTeX](https://www.overleaf.com/latex/examples/typeset-the-source-code-documentation-for-tex-e-tex-or-pdftex/qkgfgyspnhcv). Sejak penerbitan TeX:The Program pada tahun 1986, mesin TeX baru telah berkembang, termasuk pdfTeX, XeTeX, dan LuaTeX, yang semuanya memperkenalkan fitur dan perintah yang tidak didokumentasikan dalam TeX:The Program semata-mata karena fitur dan perintah itu tidak ada dalam perangkat lunak asli Knuth.

Untuk banyak proses inti, seperti penyusunan tabel TeX, kode yang didokumentasikan dalam TeX:The Program masih relevan sebagai dasar studi—meskipun kode sumber TeX ditulis dalam Pascal. Selain itu, TeX karya Knuth relatif mudah, dan cepat, untuk dikompilasi—terutama melalui [Web2W](https://w3-o.cs.hm.edu/users/ruckert/public_html/web2w/index.html) proses yang dikembangkan oleh Martin Ruckert. Kemudahan/kecepatan kompilasi membuatnya jauh lebih nyaman untuk memodifikasi TeX dengan cara sederhana—seperti pembuatan grafik SVG yang digunakan nanti dalam seri artikel ini.

### Memahami perbedaan antara TeX dan LaTeX

Banyak pembaca mungkin sudah tahu bahwa LaTeX sebenarnya bukan sebuah *dapat dieksekusi* program penyusunan, melainkan kumpulan besar perintah (*makro*) yang pada akhirnya ditulis dalam bahasa penyusunan/pemrograman tingkat rendah yang disebut TeX. Kode LaTeX Anda menghasilkan keluaran tersusun hanya setelah diproses oleh program yang dapat dieksekusi yang disebut sebuah *mesin TeX*—perangkat lunak yang berada di antara kode LaTeX Anda (dokumen) dan PDF yang telah disusun. Saat ini, pengguna dapat memilih di antara berbagai mesin TeX untuk menyusun kode LaTeX mereka, termasuk pdfTeX, XeTeX, dan varian LuaTeX.

Mereka yang baru mengenal ekosistem TeX/LaTeX sering kali, dan wajar, dibuat bingung oleh banyaknya nama yang terdengar samar yang digunakan untuk alat yang mereka temui: TeX, LaTeX, pdfTeX, pdfLaTeX, XeTeX, XeLaTeX, LuaTeX, dan LuaLaTeX. Jika Anda merasakan hal yang sama, bantuan tersedia dalam artikel Overleaf [Apa Arti Sebuah Nama: Panduan untuk Berbagai Ragam TeX](/latex/id/artikel-mendalam/55-what-s-in-a-name-a-guide-to-the-many-flavours-of-tex.md) yang menjelaskan asal-usul dan makna semua istilah itu.

#### Dialek dan primitif TeX

Setiap mesin TeX memiliki seperangkat perintah bawaan yang disebut *primitif* yang secara kolektif membentuk “dialek” mesin itu dalam bahasa penyusunan TeX, yang mencerminkan kemampuan yang dibangun ke dalam masing-masing mesin. Di sini, istilah “primitif” yang digunakan untuk menggambarkan perintah bawaan mesin TeX tidak *berisi nilai data aktual yang disimpan dalam* berarti perintah-perintah itu dasar atau sederhana, melainkan bahwa perintah-perintah itu fundamental dan tak terpisahkan: tidak dibangun dari perintah lain (tidak seperti makro). Semua mesin TeX memiliki seperangkat inti primitif yang besar, tetapi beberapa memang mengandung primitif khusus untuk mesin tersebut—yang memunculkan gagasan tentang “dialek” TeX.

Terlepas dari mesin TeX mana yang digunakan untuk menyusun dokumen LaTeX Anda, tugasnya adalah memproses (“mengeksekusi”) kumpulan perintah LaTeX (yaitu makro) yang digunakan untuk menulis dan membangun dokumen Anda. Pada dasarnya, mesin TeX “mengonversi” kode LaTeX Anda (makro) *kembali menjadi* perintah primitif mesin TeX penyusunnya yang dapat dieksekusi mesin untuk melakukan penyusunan sebenarnya. Anda tidak *harus* untuk menggunakan perintah LaTeX guna menyusun dokumen dengan mesin TeX—Anda *bisa* memilih untuk menyusun dokumen Anda sepenuhnya dengan primitif TeX, yaitu langsung dalam *bahasa pemrograman TeX* yang terpasang dalam mesin TeX. Namun, menurut standar saat ini bahasa TeX cukup kuno dan umumnya dianggap sulit untuk diprogram—bahkan juga dapat memerlukan sejumlah besar primitif bawaan untuk mencapai tujuan penyusunan Anda, sehingga menjadi tugas pemrograman yang rawan kesalahan dan berpotensi repetitif.

Untuk menghindari keharusan menulis langsung dalam bahasa TeX, atau terus-menerus mengetik ulang rangkaian perintah yang sama, mesin TeX memungkinkan Anda membuat “jalan pintas” yang disebut *makro*. Dengan membuat makro, Anda mendefinisikan perintah Anda sendiri yang membungkus urutan primitif bahasa TeX yang berpotensi panjang dan kompleks (atau makro lain) menjadi satu perintah “tingkat lebih tinggi”. Pemrogram TeX dapat menulis makro yang sangat canggih yang merangkum banyak fungsionalitas dalam satu perintah—seperti perintah yang disediakan oleh LaTeX. Dengan menggunakan paket makro, seperti LaTeX (atau [ConTeXt](https://wiki.contextgarden.net/Main_Page)), penulis dokumen sebagian besar terlindungi dari banyak detail yang membosankan, sehingga mereka dapat berfokus pada penulisan dan penyusunan daripada terus-menerus bergulat dengan kompleksitas dan nuansa bahasa TeX.

## Pada awalnya...

Bersamaan dengan merancang algoritme untuk menyusun matematika dan pemenggalan baris yang canggih, Knuth menghadapi tantangan memprogram perangkat lunak TeX-nya untuk menyusun tabel. Jelas, algoritme konstruksi tabel apa pun tidak boleh terlalu membatasi karena itu akan menyulitkan pengguna yang membutuhkan kebebasan untuk membuat rentang tata letak tabel yang hampir tak terbatas. Selain itu, sel tabel dapat berisi beragam konten termasuk matematika, grafik, dan potongan teks yang dipecah menjadi baris-baris yang tersusun rapi—bahkan, apa pun yang mampu disusun oleh TeX. Memberikan fleksibilitas ini mengharuskan algoritme pembangun tabel TeX bekerja selaras dengan bagian lain dari mesin penyusunan TeX.

Namun, mesin TeX menuntut harga atas fleksibilitas yang disediakan oleh kemampuan konstruksi tabelnya: terdapat banyak seluk-beluk dan nuansa dalam perilaku tingkat rendah dari perintah penyusunan tabel bawaan (primitif), yang jumlahnya ada 9:

* **`\halign`**, **`\valign`**: perintah inti konstruksi tabel
* **`\tabskip`**: perekat yang ditempatkan di antara kolom \halign atau baris \valign
* **`\cr`**: penutup wajib “carriage return” untuk semua baris dalam tabel
* **`\noalign`**: menyisipkan materi di antara baris \halign atau kolom \valign
* **`\everycr`**: perintah (register token) yang dibaca setelah mendeteksi \cr
* **`\span`**: perintah berfungsi ganda: \span membuat sel yang membentang beberapa kolom atau baris, atau memperluas perintah dalam preamble tabel (akan kita bahas secara rinci)
* **`\omit`**: melewati template untuk sel tertentu
* **`\crcr`**: digunakan dalam makro untuk menghindari kesalahan jika pengguna lupa \cr yang diwajibkan

Kita akan menjumpai perintah-perintah ini dalam perjalanan kita melalui konstruksi tabel.

### Gaung jauh dari tantangan-tantangan itu

Terkubur di [kode sumber TeX](https://www.overleaf.com/latex/examples/typeset-the-source-code-documentation-for-tex-e-tex-or-pdftex/qkgfgyspnhcv) terdapat pengantar yang cukup menakutkan tentang topik penerapan perintah tingkat rendah \halign dan \valign yang dirancang untuk menyusun tabel:

> “Sungguh semacam keajaiban setiap kali \halign dan \valign bekerja, karena keduanya melintasi begitu banyak struktur kendali TeX. Oleh karena itu, halaman ini mungkin bukan tempat terbaik bagi pemula untuk mulai membaca program ini; lebih baik kuasai semuanya yang lain terlebih dahulu.”

Knuth melanjutkan dengan mengatakan

> “Perhatikan bahwa saat \halign sedang diproses, kami dengan berani menyerahkan kendali kepada sisa TeX. Pada titik-titik kritis, rutin penyelarasan dipanggil untuk masuk dan melakukan sedikit tindakan, tetapi sebagian besar waktu rutin-rutin ini hanya bersembunyi di latar belakang. Ini agak seperti sugesti pascahipnosis.”

Dari komentar-komentar ini tampaknya wajar untuk menyimpulkan bahwa, bahkan bagi Knuth, penerapan penyusunan tabel TeX adalah “semacam tantangan”—untuk memberikan kendali dan fleksibilitas bagi pengguna sambil sekaligus memastikan algoritme konstruksi tabel otomatis TeX terkoordinasi dengan baik dengan proses penyusunan inti TeX.

Penulis dengan mudah mengakui kompleksitas kode dan algoritme di balik kemampuan penyusunan tabel TeX, tetapi juga mengagumi besarnya kemampuan yang terkandung dalam jumlah kode Pascal (atau C) yang relatif kecil, meskipun padat.


---

# 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/14-how-do-tex-engines-typeset-tables.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.
