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

# Bagaimana mesin TeX menata tabel 2

## Bagaimana mesin TeX menyusun tabel 2

## Mesin TeX menyebut tabel sebagai perataan

Di dalam [dokumentasi kode sumber TeX](https://www.overleaf.com/latex/examples/typeset-the-source-code-documentation-for-tex-e-tex-or-pdftex/qkgfgyspnhcv) Knuth tidak membahas kemampuan TeX untuk “menyusun tabel”, melainkan ia menjelaskan algoritme TeX untuk membangun yang disebut *perataan*. Penyusunan tabel oleh TeX, pada dasarnya, adalah proses perataan kotak yang otomatis: menyusun kotak (sel tabel, baris, dan kolom) untuk menghasilkan kisi atau larik persegi panjang yang enak dipandang—meskipun, tentu saja, karena ini TeX ada *banyak* nuansa dalam proses itu.

Istilah “perataan” juga tercermin dalam nama dua perintah penyusunan tabel yang bawaan pada semua mesin TeX:

* `\halign` (perataan horizontal), dan
* `\valign` (perataan vertikal).

Kita akan membahas kedua perintah ini sepanjang seri artikel ini, dimulai dengan tinjauan yang lebih formal tentang format/struktur dari `\halign` dan `\valign` perintah-perintah tersebut untuk meletakkan dasar bagi artikel-artikel mendalam berikutnya dalam seri ini.

### Tabel TeX adalah kotak dan spasi

Setiap sel tabel biasanya berisi berbagai konten seperti baris teks, matematika, atau grafik, yang menghasilkan sejumlah sel tabel dengan lebar, tinggi, atau kedalaman materi yang disusun berbeda. Entah bagaimana, TeX perlu bekerja dengan sel-sel tersebut, yang dimensinya bervariasi, untuk membangun tabel akhir di mana setiap baris memiliki tinggi tertentu dan setiap kolom lebar tertentu. TeX perlu menyimpulkan nilai yang sesuai untuk tinggi setiap baris dan lebar setiap kolom dari kumpulan sel tabel berukuran bervariasi.

Namun, TeX tidak dapat mengetahui ukuran sebenarnya dari isi setiap sel sampai isi itu disusun; akibatnya, TeX memproses seluruh tabel, menyusun setiap sel, untuk memperoleh data ukuran yang diperlukan guna menyelesaikan tata letak tabel. Dari data ukuran itu, TeX dapat menentukan tinggi yang benar untuk setiap baris dan lebar untuk setiap kolom. TeX juga mungkin menemui sel kosong atau sel yang ingin dibentangkan pengguna melintasi beberapa kolom atau beberapa baris, yang semuanya harus diperhitungkan dengan cermat oleh TeX dalam perhitungannya. Setelah “menyaring” kumpulan data ukuran sel (kotak) yang beragam ini, barulah TeX dapat menentukan nilai akhir untuk lebar kolom dalam sebuah `\halign`, atau tinggi baris untuk `\valign` dan menggunakan nilai-nilai itu pada tahap akhir algoritme tata letak tabelnya.

Dalam praktiknya, dan “di balik layar”, penyusunan tabel TeX terdiri dari beberapa langkah. Secara garis besar, TeX terlebih dahulu menyusun versi “draf” atau “tidak lengkap” dari tabel sambil menangkap dan memproses data ukuran sel—dan data tentang setiap `\span` perintah yang digunakan di dalam tabel. Pada langkah-langkah akhir, TeX memproses ulang versi “tidak lengkap” tabel itu, untuk memfinalkan `\halign` lebar kolom atau `\valign` tinggi baris dan menghasilkan tata letak yang selesai—semuanya akan kita bahas dalam seri artikel ini.

## \halign dan \valign: dua cara untuk membangun tabel

Semua mesin TeX menyediakan dua *bawaan* perintah (primitive) yang dirancang untuk menyusun tabel (perataan): `\halign` dan `\valign`, yang memiliki banyak fitur inti yang sama tetapi juga berbeda dalam beberapa hal mendasar. Perbedaan utama antara `\halign` dan `\valign` adalah cara mereka membangun tabel masing-masing: baris demi baris atau kolom demi kolom:

* `\halign`: menyusun tabel berdasarkan baris demi baris untuk membuat baris-baris individual yang ditumpuk secara vertikal untuk menghasilkan kolom tabel
* `\valign`: menyusun tabel berdasarkan kolom demi kolom untuk membuat kolom-kolom individual yang ditumpuk secara horizontal untuk menghasilkan baris tabel

### \halign

Diagram berikut menggambarkan konstruksi tabel yang dibuat oleh `\halign`. Tabel disusun baris demi baris dengan baris-baris individual ditumpuk secara vertikal. Beberapa konsekuensinya adalah:

* kolom tabel muncul dari penumpukan vertikal baris-baris tabel
* pemisahan halaman dapat terjadi di antara baris-baris tabel
* materi non-tabular dapat disisipkan di antara baris (melalui `\nolign`, yang akan kita lihat nanti)

![](/files/e1167c415066cf0726e1d854cf5a838ea39d1b52)

### \valign

Diagram berikut menggambarkan konstruksi tabel yang dibuat oleh `\valign`. Tabel disusun kolom demi kolom dengan kolom-kolom individual ditumpuk secara horizontal (berdampingan). Beberapa konsekuensinya adalah:

* baris tabel muncul dari penumpukan horizontal kolom-kolom tabel
* pemisah baris dapat terjadi di antara kolom-kolom tabel
* materi non-tabular dapat disisipkan di antara kolom (melalui `\noalign`, yang akan kita lihat nanti)

![](/files/68ebc1e464e8476cf612fe2c2aaab04c0012b9c3)

### Contoh

Contoh berikut dimaksudkan untuk menyoroti pendekatan baris *vs*vs. kolom dari \halign dan \valign.

```latex
\documentclass{article}
\begin{document}
\pagestyle{empty}
% Bingkai kotak yang rapat
\setlength{\fboxsep}{0pt}

Berikut adalah tabel \verb|\valign|:
\begingroup
% \hsize mengontrol lebar kolom \valign
% kolom. Kita juga menetapkan
% \parindent ke nilai yang lebih kecil
\hsize=30pt
\parindent=10pt
\fbox{\valign{
#&#&#\cr % Prakata: dibahas nanti (secara sangat rinci!)
A&B&C\cr % KOLOM pertama dari tabel \valign ini
D&E&F\cr
G&H&I\cr
}}
\endgroup

% Catatan: karena alasan yang akan dijelaskan nanti
% \halign harus dimasukkan ke dalam \vbox
Berikut adalah tabel \verb|\halign|: \fbox{%
\vbox{\halign{
#&#&#\cr % Prakata: dibahas nanti (secara sangat rinci!)
A&B&C\cr % BARIS pertama dari tabel \halign ini
D&E&F\cr
G&H&I\cr
}}}
\end{document}
```

[Buka contoh ini di Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Basic+table+example\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cpagestyle%7Bempty%7D%0A%25+Close-fitting+box+borders+%0A%5Csetlength%7B%5Cfboxsep%7D%7B0pt%7D%0A%0AHere+is+a+%5Cverb%7C%5Cvalign%7C+table%3A+%0A%5Cbegingroup%0A%25+%5Chsize+controls+the+%5Cvalign+%0A%25+column+widths.+We+also+set+%0A%25+%5Cparindent+to+a+smaller+value%0A%5Chsize%3D30pt+%0A%5Cparindent%3D10pt%0A%5Cfbox%7B%5Cvalign%7B%0A%23%26%23%26%23%5Ccr+%25+The+preamble%3A+covered+later+%28in+great+detail%21%29%0AA%26B%26C%5Ccr+%25+The+first+COLUMN+of+this+%5Cvalign+table%0AD%26E%26F%5Ccr%0AG%26H%26I%5Ccr%0A%7D%7D%0A%5Cendgroup%0A%0A%25+Note%3A+for+reasons+explained+later%0A%25+the+%5Chalign+has+to+be+put+in+a+%5Cvbox%0AHere+is+an+%5Cverb%7C%5Chalign%7C+table%3A+%5Cfbox%7B%25%0A%5Cvbox%7B%5Chalign%7B%0A%23%26%23%26%23%5Ccr+%25+The+preamble%3A+covered+later+%28in+great+detail%21%29%0AA%26B%26C%5Ccr+%25+The+first+ROW+of+this+%5Chalign+table%0AD%26E%26F%5Ccr%0AG%26H%26I%5Ccr%0A%7D%7D%7D%0A%5Cend%7Bdocument%7D)

Contoh ini menghasilkan keluaran berikut: ![](/files/7b5590ced09b988129a6e57a36d6dddcd4e0c78d)

Grafik berikut menunjukkan versi beranotasi dari tabel yang dihasilkan oleh kode di atas. Nanti dalam seri artikel ini kita akan membahas topik seperti:

* apa itu prakata tabel?
* mengapa kita menetapkan `\hsize` dan `\parindent` untuk `\valign` tabel?

Untuk saat ini, cukup perhatikan pendekatan baris vs. kolom dari `\halign` *vs*. `\valign` konstruksi tabel:

![](/files/68a8e5a3d2dc9d0fb6475a9fd7ef321d63afb2c2)

## Bentuk umum \halign dan \valign

Sebagai permulaan, kita akan meninjau sifat dasar dan format umum dari `\halign` dan `\valign` tetapi belum membahas detail apa pun secara mendalam. [Seperti dicatat](#intro), kita mengadopsi tinjauan yang agak formal tentang bentuk/struktur dari `\halign` dan `\valign` perintah-perintah tersebut untuk meletakkan dasar bagi artikel-artikel berikutnya dalam seri ini.

Bentuk paling umum dari `\halign` dan `\valign` perintah-perintah ini dapat ditulis sebagai berikut:

`\halign` $$\langle$$⁠`spesifikasi opsional`⁠$$\rangle$$ { $$\langle$$⁠`preamble`⁠$$\rangle$$ $$\langle$$⁠`isi`⁠$$\rangle$$ }

`\valign` $$\langle$$⁠`spesifikasi opsional`⁠$$\rangle$$ { $$\langle$$⁠`preamble`⁠$$\rangle$$ $$\langle$$⁠`isi`⁠$$\rangle$$ }

Seperti yang bisa Anda lihat, keduanya `\halign` dan `\valign` terdiri dari tiga bagian utama:

* [$$\langle$$⁠`spesifikasi opsional`⁠$$\rangle$$](#optspec)
* [$$\langle$$⁠`preamble`⁠$$\rangle$$](#preamble)
* [$$\langle$$⁠`isi`⁠$$\rangle$$](#body)

## Fitur $$\langle$$⁠spesifikasi opsional⁠$$\rangle$$

Ukuran/cakupan default sebuah tabel, yang disebut “ukuran alami”, ditentukan oleh isinya—untuk memperjelas, yang dimaksud dengan ukuran/cakupan adalah

* situs web *lebar* dari tabel yang dihasilkan oleh `\halign`, atau
* situs web *tinggi* dari tabel yang dihasilkan oleh `\valign`

Sebuah $$\langle$$⁠`spesifikasi opsional`⁠$$\rangle$$ dapat digunakan untuk “menimpa” ukuran alami tabel dan memiliki salah satu dari dua bentuk:

* **`ke`** $$\langle$$**⁠`dimensi`⁠**$$\rangle$$
* **`spread`** $$\langle$$**⁠`dimensi`⁠**$$\rangle$$

di mana

* $$\langle$$**⁠`dimensi`⁠**$$\rangle$$ adalah panjang yang diberikan dalam satuan yang dipahami TeX, seperti pt, mm, atau cm—panjang itu juga dapat ditentukan sebagai perintah yang berkembang menjadi nilai yang dinyatakan dalam satuan yang sesuai;
* **`ke`** dan **`spread`** adalah kata kunci TeX yang menentukan jenis “penimpa” ukuran alami:
  * **`ke`**: menetapkan ukuran tabel ke $$\langle$$⁠`dimensi`⁠$$\rangle$$ nilai
  * **`spread`**: menambahkan $$\langle$$⁠`dimensi`⁠$$\rangle$$ nilai yang ditentukan ke ukuran alami tabel

Efek dari sebuah $$\langle$$⁠`spesifikasi opsional`⁠$$\rangle$$ bergantung pada jenis tabel yang sedang disusun: ini akan menyesuaikan sebuah `\halign` alami tabel *lebar*, atau `\valign` alami tabel *tinggi*.

Berikut beberapa contohnya:

* `\halign **to 100pt**{...}`: menetapkan `\halign` lebar tabel menjadi `100pt`
* `\valign **to 50pt**{...}`: menetapkan `\valign` tinggi tabel menjadi `30pt`
* `\halign **spread 30pt**{...}`: menambahkan 30pt ke `\halign` lebar alami tabel. Sebaliknya, menuliskan **spread -30pt** akan mengurangi lebar tabel sebesar 30pt.
* `\valign **spread 20pt**{...}`: menambahkan 20pt ke `\valign` tinggi alami tabel. Sebaliknya, menuliskan **spread -20pt** akan mengurangi tinggi tabel sebesar 20pt.

Kode berikut menggunakan ulang contoh tabel di atas tetapi menerapkan sebuah $$\langle$$⁠`spesifikasi opsional`⁠$$\rangle$$ pada sebuah `\valign` dan `\halign` tabel:

```latex
\documentclass{article}
\begin{document}
\pagestyle{empty}
% Bingkai kotak yang rapat
\setlength{\fboxsep}{0pt}

Berikut adalah tabel \verb|\valign|:
\begingroup
\hsize=30pt
\parindent=10pt
\fbox{\valign to 50pt{
#&#&#\cr
A&B&C\cr
D&E&F\cr
G&H&I\cr
}}
\endgroup

Berikut adalah tabel \verb|\halign|:
\fbox{%
\vbox{\halign to 100pt{
#&#&#\cr
A&B&C\cr
D&E&F\cr
G&H&I\cr
}}}
\end{document}
```

[Buka contoh ini di Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Basic+table+example\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cpagestyle%7Bempty%7D%0A%25+Close-fitting+box+borders+%0A%5Csetlength%7B%5Cfboxsep%7D%7B0pt%7D%0A%0AHere+is+a+%5Cverb%7C%5Cvalign%7C+table%3A+%0A%5Cbegingroup%0A%5Chsize%3D30pt+%0A%5Cparindent%3D10pt%0A%5Cfbox%7B%5Cvalign+to+50pt%7B%0A%23%26%23%26%23%5Ccr%0AA%26B%26C%5Ccr%0AD%26E%26F%5Ccr%0AG%26H%26I%5Ccr%0A%7D%7D%0A%5Cendgroup%0A%0AHere+is+an+%5Cverb%7C%5Chalign%7C+table%3A%0A%5Cfbox%7B%25%0A%5Cvbox%7B%5Chalign+to+100pt%7B%0A%23%26%23%26%23%5Ccr%0AA%26B%26C%5Ccr%0AD%26E%26F%5Ccr%0AG%26H%26I%5Ccr%0A%7D%7D%7D%0A%5Cend%7Bdocument%7D)

Contoh ini menghasilkan keluaran yang ditunjukkan di bawah:

![](/files/820e1c9b90b6ca4d85fd846e401189063152aef3)

—namun perhatikan bagaimana isi kedua tabel “menggumpal”. Alasannya adalah tidak adanya spasi fleksibel (glue) yang dapat digunakan TeX untuk merenggangkan isi agar mengisi ruang tambahan yang disediakan oleh **`ke`** $$\langle$$**⁠`dimensi`⁠**$$\rangle$$. Di sini kita akan melompat ke depan untuk menyebut `\tabskip` perintah.

#### Pengantar awal untuk perintah \tabskip

Estetika tata letak tabel mungkin memerlukan penyesuaian spasi di antara baris atau kolomnya, jadi tidak mengherankan jika mesin TeX menyediakan perintah bernama `\tabskip` yang memungkinkan Anda melakukan itu. `\tabskip` digunakan untuk menetapkan (dan memvariasikan) jumlah ruang fleksibel (“glue”) yang ditempatkan TeX di antara kolom-kolom sebuah `\halign` atau baris-baris sebuah `\valign`. Artikel-artikel selanjutnya akan membahas `\tabskip` dengan jauh lebih rinci.

Sebagai contoh pengantar, kode berikut menggunakan pengaturan untuk `\tabskip` yang menyebabkan TeX menyisipkan sedikit ruang yang (sangat) fleksibel di antara baris-baris sebuah `\valign` tabel. Ruang fleksibel itu memungkinkan baris-baris tabel menyebar dan mengisi ruang tambahan yang dihasilkan oleh $$\langle$$⁠`spesifikasi opsional`⁠$$\rangle$$ sebesar **`to 50pt`**:

```latex
\documentclass{article}
\setlength{\fboxsep}{0pt}
\setlength{\parindent}{0pt}
\newcommand{\optspec}{\(\langle \texttt{optional specification} \rangle\)}
\begin{document}
\pagestyle{empty}
Berikut adalah tabel \verb|\valign|:
\vspace{6pt}

\begingroup
\hsize=30pt
\parindent=10pt
\fbox{\valign{
#&#&#\cr
A&B&C\cr
D&E&F\cr
G&H&I\cr
}}
\endgroup
\vspace{6pt}

Berikut adalah tabel \verb|\valign| yang sama tetapi dengan \optspec{} ``\texttt{to 50pt}''. Perhatikan bagaimana baris-barisnya ``berdesakan'' karena tidak ada ``stretchable glue'' yang tersedia di antara baris-baris:

\vspace{6pt}
\begingroup
\hsize=30pt
\parindent=10pt
\fbox{\valign to 50pt{
#&#&#\cr
A&B&C\cr
D&E&F\cr
G&H&I\cr
}}
\endgroup
\vspace{6pt}

Kita akan menggunakan tabel \verb|\valign| dengan \optspec{} ``\texttt{to 50pt}'', tetapi menyediakan ``spasi fleksibel'' melalui perintah \verb|\tabskip|. Di sini, \verb|\tabskip| menyediakan cukup ``glue'' untuk memungkinkan baris-baris \verb|\valign| ``merenggang'' dan mengisi ruang ekstra yang tersedia. Berikut adalah tabel \verb|\valign| yang ``merenggang'':

\tabskip=0pt plus1fil % Ini menetapkan \tabskip menjadi glue yang sangat fleksibel
\vspace{6pt}

\def\mylen{50pt}
\begingroup
\hsize=30pt
\parindent=10pt
\fbox{\valign to \mylen{
#&#&#\cr
A&B&C\cr
D&E&F\cr
G&H&I\cr
}}
\endgroup
\end{document}
```

[Buka contoh ini di Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Basic+example+using+tabskip+glue\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Csetlength%7B%5Cfboxsep%7D%7B0pt%7D%0A%5Csetlength%7B%5Cparindent%7D%7B0pt%7D%0A%5Cnewcommand%7B%5Coptspec%7D%7B%5C%28%5Clangle+%5Ctexttt%7Boptional+specification%7D+%5Crangle%5C%29%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cpagestyle%7Bempty%7D%0AHere+is+a+%5Cverb%7C%5Cvalign%7C+table%3A%0A%5Cvspace%7B6pt%7D%0A%0A%5Cbegingroup%0A%5Chsize%3D30pt+%0A%5Cparindent%3D10pt%0A%5Cfbox%7B%5Cvalign%7B%0A%23%26%23%26%23%5Ccr%0AA%26B%26C%5Ccr%0AD%26E%26F%5Ccr%0AG%26H%26I%5Ccr%0A%7D%7D%0A%5Cendgroup%0A%5Cvspace%7B6pt%7D%0A%0AHere+is+the+same+%5Cverb%7C%5Cvalign%7C+table+but+with+an+%5Coptspec%7B%7D+of+%60%60%5Ctexttt%7Bto+50pt%7D%27%27.+Note+how+the+rows+are+%60%60bunched+up%27%27+because+there%27s+no+available+%60%60stretchable+glue%27%27+between+the+rows%3A+%0A%0A%5Cvspace%7B6pt%7D%0A%5Cbegingroup%0A%5Chsize%3D30pt+%0A%5Cparindent%3D10pt%0A%5Cfbox%7B%5Cvalign+to+50pt%7B%0A%23%26%23%26%23%5Ccr%0AA%26B%26C%5Ccr%0AD%26E%26F%5Ccr%0AG%26H%26I%5Ccr%0A%7D%7D%0A%5Cendgroup%0A%5Cvspace%7B6pt%7D%0A%0AWe%27ll+use+the+%5Cverb%7C%5Cvalign%7C+table+with+%5Coptspec%7B%7D+of+%60%60%5Ctexttt%7Bto+50pt%7D%27%27%2C+but+provide+%60%60flexible+spacing%27%27+via+the+%5Cverb%7C%5Ctabskip%7C+command.+Here%2C+%5Cverb%7C%5Ctabskip%7C+is+providing+enough+%60%60glue%27%27+to+enable+the++%5Cverb%7C%5Cvalign%7C+rows+to++%60%60stretch+out%27%27+and+fill+any+available+extra+space.+Here+is+the+%60%60stretched+out%27%27+%5Cverb%7C%5Cvalign%7C+table%3A%0A%0A%5Ctabskip%3D0pt+plus1fil+%25+This+sets+%5Ctabskip+to+a+very+flexible+glue%0A%5Cvspace%7B6pt%7D%0A%0A%5Cdef%5Cmylen%7B50pt%7D%0A%5Cbegingroup%0A%5Chsize%3D30pt+%0A%5Cparindent%3D10pt%0A%5Cfbox%7B%5Cvalign+to+%5Cmylen%7B%0A%23%26%23%26%23%5Ccr%0AA%26B%26C%5Ccr%0AD%26E%26F%5Ccr%0AG%26H%26I%5Ccr%0A%7D%7D%0A%5Cendgroup%0A%5Cend%7Bdocument%7D)

Contoh ini menghasilkan keluaran berikut:

![](/files/56c6f8a1c9121723b4229b76b0a59f05985334c7)

## Memperkenalkan tabel $$\langle$$⁠prakata⁠$$\rangle$$ dan $$\langle$$⁠isi⁠$$\rangle$$

Bagian ini memberikan pengantar terhadap tabel $$\langle$$⁠`preamble`⁠$$\rangle$$, dan *secara singkat* menyinggung tabel $$\langle$$⁠`isi`⁠$$\rangle$$ yang kemudian [dibahas lebih rinci](#bodydetails).

Artikel-artikel selanjutnya dalam seri ini akan membahas $$\langle$$⁠`preamble`⁠$$\rangle$$ dan $$\langle$$⁠`isi`⁠$$\rangle$$ secara lebih rinci, khususnya penggunaan dan pemrosesan tabel oleh TeX $$\langle$$⁠`preamble`⁠$$\rangle$$.

Seperti disebutkan di atas, format paling umum dari `\halign` atau `\valign` tabel dapat ditulis sebagai:

`\halign` $$\langle$$⁠`spesifikasi opsional`⁠$$\rangle$$ { $$\langle$$⁠`preamble`⁠$$\rangle$$ $$\langle$$⁠`isi`⁠$$\rangle$$ }

`\valign` $$\langle$$⁠`spesifikasi opsional`⁠$$\rangle$$ { $$\langle$$⁠`preamble`⁠$$\rangle$$ $$\langle$$⁠`isi`⁠$$\rangle$$ }

### Fitur $$\langle$$⁠prakata⁠$$\rangle$$

Fitur $$\langle$$⁠`preamble`⁠$$\rangle$$ bagian ini berisi satu $$\langle$$⁠`baris prakata`⁠$$\rangle$$ yang merupakan *diakhiri* oleh `\cr` perintah; akibatnya, $$\langle$$⁠`preamble`⁠$$\rangle$$ dapat ditulis ulang sebagai:

$$\langle$$⁠`preamble`⁠$$\rangle$$=$$\langle$$⁠`baris prakata`⁠$$\rangle$$**`\cr`**

### Fitur $$\langle$$⁠isi⁠$$\rangle$$

Demikian pula, $$\langle$$⁠isi⁠$$\rangle$$ bagian ini dapat dipecah lebih lanjut menjadi satu atau lebih “baris” penyusun, tetapi di sini ada dua pilihan untuk setiap baris:

* sebuah baris yang terdiri dari sekumpulan sel yang membentuk sebuah `\halign` baris atau `\valign` kolom; atau
* a `\noalign` perintah yang “menyuntikkan” materi di antara `\halign`baris sebuah `\valign`kolom sebuah.

Untuk saat ini kita akan mengabaikan `\noalign` perintah (lihat [nanti dalam artikel](#noalign)) dan menganggap setiap baris dari $$\langle$$⁠isi⁠$$\rangle$$ adalah data untuk sekumpulan sel dan *diakhiri* oleh `\cr` perintah.

Dengan mengabaikan `\noalign`,  $$\langle$$⁠`isi`⁠$$\rangle$$ bagian, yang mewakili konten pengguna, berisi urutan baris, yang masing-masing akan kita sebut sebagai $$\langle$$⁠`baris isi`⁠$$\rangle$$ yang *diakhiri* oleh yang menyertainya `\cr` perintah.

Fitur $$\langle$$⁠`isi`⁠$$\rangle$$ dapat ditulis ulang sebagai:

$$\langle$$⁠baris isi$${}\_1$$⁠$$\rangle$$\cr $$\langle$$⁠baris isi$${}\_2$$⁠$$\rangle$$\cr $$\langle$$⁠baris isi$${}*3$$⁠$$\rangle$$\cr ... $$\langle$$⁠baris isi$${}*\mathrm{N}$$⁠$$\rangle$$\cr

Jika digabungkan, kita dapat menulis ulang format umum dari `\halign` dan `\valign` sebagai berikut:

`\halign` $$\langle$$⁠`spesifikasi opsional`⁠$$\rangle$$ { $$\langle$$⁠`baris prakata`⁠$$\rangle$$\cr $$\langle$$⁠baris isi$${}\_1$$⁠$$\rangle$$\cr $$\langle$$⁠baris isi$${}\_2$$⁠$$\rangle$$\cr $$\langle$$⁠baris isi$${}*3$$⁠$$\rangle$$\cr ... $$\langle$$⁠baris isi$${}*\mathrm{N}$$⁠$$\rangle$$\cr }

`\valign` $$\langle$$⁠`spesifikasi opsional`⁠$$\rangle$$ { $$\langle$$⁠`baris prakata`⁠$$\rangle$$\cr $$\langle$$⁠baris isi$${}\_1$$⁠$$\rangle$$\cr $$\langle$$⁠baris isi$${}\_2$$⁠$$\rangle$$\cr $$\langle$$⁠baris isi$${}*3$$⁠$$\rangle$$\cr ... $$\langle$$⁠baris isi$${}*\mathrm{N}$$⁠$$\rangle$$\cr }

Karena alasan yang akan dibahas dalam artikel-artikel selanjutnya,  $$\langle$$⁠`preamble`⁠$$\rangle$$, hanya sebuah $$\langle$$⁠`baris prakata`⁠$$\rangle$$, memiliki format yang berbeda dari semua baris dalam tabel $$\langle$$⁠`isi`⁠$$\rangle$$. Kita juga akan [meninjau kembali `\noalign` perintah](#noalign) yang juga dapat digunakan di dalam tabel $$\langle$$⁠`isi`⁠$$\rangle$$.

### Fitur $$\langle$$⁠baris prakata⁠$$\rangle$$

Fitur $$\langle$$⁠`baris prakata`⁠$$\rangle$$ memainkan *penting* peran dalam menyusun tabel karena menyediakan semacam “cetak biru” yang digunakan untuk menyusun konten—`\halign` baris atau `\valign` kolom—yang terdapat dalam tabel $$\langle$$⁠`isi`⁠$$\rangle$$. Paket $$\langle$$⁠`baris prakata`⁠$$\rangle$$ juga dapat berisi “templat” sel yang digunakan untuk membangun baris-baris sebuah `\halign` atau kolom-kolom sebuah `\valign`—topik yang akan dibahas secara rinci.

Tujuan dari $$\langle$$⁠`baris prakata`⁠$$\rangle$$ adalah dua:

* ini menentukan *maksimum* jumlah sel per baris sebuah `\halign` atau per kolom sebuah `\valign`.
* ini menyimpan *templat sel* yang dapat digunakan untuk mengotomatiskan pemformatan atau penyertaan konten di dalam sel-sel yang terdapat dalam tabel $$\langle$$⁠`isi`⁠$$\rangle$$. Templat sel bersifat opsional dan dapat “kosong”, atau Anda dapat menyertakan karakter atau perintah yang akan secara otomatis disisipkan TeX sebelum dan/atau sesudah konten aktual dari sel-sel tertentu dalam tabel Anda. Ini menghemat Anda dari kerepotan harus menulis/menyertakan secara manual karakter atau perintah itu di setiap sel yang ingin Anda terapkan.

**Catatan**: sebuah `\halign` baris atau `\valign` kolom dapat berisi lebih sedikit sel daripada maksimum yang ditentukan oleh $$\langle$$⁠`baris prakata`⁠$$\rangle$$ tetapi tidak dapat berisi lebih banyak dari maksimum itu, jika tidak TeX akan menghasilkan kesalahan. Untuk saat ini kita mengabaikan rincian tentang *siklik* prakata.

Melanjutkan diagram struktur kita, tabel $$\langle$$⁠`baris prakata`⁠$$\rangle$$ untuk

* sebuah `\halign` dengan maksimum $$\mathrm{K}$$ sel per *baris*, atau
* a `\valign` dengan maksimum $$\mathrm{K}$$ sel per *kolom*

dapat ditulis sebagai:

$$\langle$$⁠templat$${}\_1$$⁠$$\rangle$$&$$\langle$$⁠templat$${}\_2$$⁠$$\rangle$$&$$\langle$$⁠templat$${}*3$$⁠$$\rangle$$ $$\cdots$$ &$$\langle$$⁠templat$${}*\mathrm{K}$$⁠$$\rangle$$

di mana `&` adalah *karakter tab perataan* yang menandai akhir satu sel dan awal sel berikutnya. Secara tradisional, karakter ampersand (`&`) digunakan sebagai tab perataan, tetapi karakter apa pun dengan [kode kategori](/latex/id/topik-lainnya/43-table-of-tex-category-codes.md) 4 dapat digunakan sebagai gantinya.

Sebagai pengingat,  $$\langle$$⁠`preamble`⁠$$\rangle$$ dapat ditulis $$\langle$$⁠`preamble`⁠$$\rangle$$=$$\langle$$⁠`baris prakata`⁠$$\rangle$$**`\cr`**, atau secara ekuivalen

$$\langle$$⁠`preamble`⁠$$\rangle$$=$$\langle$$⁠templat$${}\_1$$⁠$$\rangle$$&$$\langle$$⁠templat$${}\_2$$⁠$$\rangle$$&$$\langle$$⁠templat$${}*3$$⁠$$\rangle$$ $$\cdots$$ &$$\langle$$⁠templat$${}*\mathrm{K}$$⁠$$\rangle$$**`\cr`**

#### Struktur setiap sel $$\langle$$⁠templat⁠$$\rangle$$

Setiap sel $$\langle$$⁠templat$${}\_i$$⁠$$\rangle$$ dapat ditulis sebagai:

$$\langle$$⁠$$\texttt{U}\_i$$⁠$$\rangle$$$$\texttt{#}$$$$\langle$$⁠$$\texttt{V}\_i$$⁠$$\rangle$$ di mana:

* $$\langle$$⁠$$\texttt{U}\_i$$⁠$$\rangle$$ adalah sekumpulan karakter atau perintah (token) yang akan disisipkan TeX secara otomatis *sebelum* konten yang disediakan pengguna untuk sel $$i$$;
* $$\texttt{#}$$ adalah penanda tempat, yang menunjukkan di mana konten yang disediakan pengguna akan muncul di sel $$i$$. Lagi-lagi,  `#` karakter hanyalah sebuah *tradisi*, karakter apa pun dengan [kode kategori](/latex/id/topik-lainnya/43-table-of-tex-category-codes.md) 6 dapat digunakan sebagai gantinya. Perhatikan bahwa kode kategori 6 digunakan untuk parameter makro;
* $$\langle$$⁠$$\texttt{V}\_i$$⁠$$\rangle$$ adalah sekumpulan karakter atau perintah (token) yang akan disisipkan TeX secara otomatis *setelah* konten yang disediakan pengguna untuk sel $$i$$.

Perhatikan bahwa semua $$\langle$$⁠$$\texttt{U}\_i$$⁠$$\rangle$$ dan $$\langle$$⁠$$\texttt{V}\_i$$⁠$$\rangle$$ sudah *opsional*: Anda tidak perlu menggunakan karakter atau perintah apa pun sebelum atau sesudah konten sel.

**Melengkapi** $$\langle$$**⁠prakata⁠**$$\rangle$$

Akhirnya, dengan menggunakan notasi di atas, $$\langle$$⁠`preamble`⁠$$\rangle$$ untuk

* sebuah `\halign` dengan maksimum $$\mathrm{K}$$ sel per *baris*, atau
* a `\valign` dengan maksimum $$\mathrm{K}$$ sel per *kolom*

dapat ditulis sebagai:

$$\langle$$⁠`preamble`⁠$$\rangle$$=$$\langle$$⁠`baris prakata`⁠$$\rangle$$`**\cr**`

atau

$$\langle$$⁠`preamble`⁠$$\rangle$$=$$\langle$$⁠$$\texttt{U}\_1$$⁠$$\rangle$$$$\texttt{#}$$$$\langle$$⁠$$\texttt{V}\_1$$⁠$$\rangle$$&$$\langle$$⁠$$\texttt{U}\_2$$⁠$$\rangle$$$$\texttt{#}$$$$\langle$$⁠$$\texttt{V}\_2$$⁠$$\rangle$$&$$\langle$$⁠$$\texttt{U}*3$$⁠$$\rangle$$$$\texttt{#}$$$$\langle$$⁠$$\texttt{V}*3$$⁠$$\rangle$$$$\cdots$$$$\langle$$⁠$$\texttt{U}*\mathrm{K}$$⁠$$\rangle$$$$\texttt{#}$$$$\langle$$⁠$$\texttt{V}*\mathrm{K}$$⁠$$\rangle$$`**\cr**`

**Fitur** $$\langle$$**⁠prakata⁠**$$\rangle$$ **dan penghitungannya atas baris dan kolom**

Sebuah **`\halign`** tabel dengan sebuah $$\langle$$⁠`preamble`⁠$$\rangle$$ yang menentukan $$\mathrm{K}$$ sel dan sebuah $$\langle$$⁠`isi`⁠$$\rangle$$ yang berisi $$\mathrm{N}$$ $$\langle$$⁠`baris isi`⁠$$\rangle$$ akan menghasilkan tabel dengan $$\mathrm{K}$$ *kolom* dan $$\mathrm{N}$$ *baris*, seperti ditunjukkan dalam diagram berikut:

![](/files/b13e7c2b2f5d749cebfbf0e7feed20b519ffae75)

Sebuah **`\valign`** tabel dengan sebuah $$\langle$$⁠`preamble`⁠$$\rangle$$ yang menentukan $$\mathrm{K}$$ sel dan sebuah $$\langle$$⁠`isi`⁠$$\rangle$$ yang berisi $$\mathrm{N}$$ $$\langle$$⁠`baris isi`⁠$$\rangle$$ akan menghasilkan tabel dengan $$\mathrm{K}$$ *baris* dan $$\mathrm{N}$$ *kolom*, seperti ditunjukkan dalam diagram berikut:

![](/files/0a4dcd9d35a9696541c4f792547cd8c864a4bb43)

### Cukup teori, mari lihat beberapa contoh!

Seperti akan kita lihat nanti secara lebih rinci, ketika TeX memproses isi sebuah tabel—sel-sel tabel yang terdapat dalam [$$\langle$$⁠`isi`⁠$$\rangle$$](#body)—TeX memeriksa keberadaan templat sel, yang didefinisikan dalam $$\langle$$⁠`preamble`⁠$$\rangle$$, karena TeX mencari token templat apa pun untuk disisipkan sebelum dan/atau sesudah konten pengguna. Contoh-contoh minimal berikut menunjukkan penggunaan templat sel $$\langle$$⁠$$\texttt{U}\_i$$⁠$$\rangle$$$$\texttt{#}$$$$\langle$$⁠$$\texttt{V}\_i$$⁠$$\rangle$$ dalam sebuah `\halign` dan `\valign` .

#### Sebuah tabel \halign yang menggunakan templat sel

Contoh berikut menunjukkan sebuah `\halign` tabel yang menggunakan templat sel untuk secara otomatis menyisipkan tanda kutip ganda di sekitar konten sel pertama di setiap baris: yaitu, templat yang memengaruhi setiap sel di kolom pertama:

```latex
\documentclass{article}
\usepackage{parskip} % Set \parindent menjadi 0pt
% Pilih ukuran halaman yang kecil secara nyaman
\usepackage[paperheight=10cm,paperwidth=12cm,textwidth=8cm]{geometry}
\setlength{\tabskip}{20pt} % Beri jarak antar kolom \halign
\begin{document}
\pagestyle{empty}

Berikut adalah tabel \verb|\halign| \textit{tanpa} templat sel:

\halign{
% Tidak ada apa pun sebelum atau sesudah setiap '#' dalam <prakata>
#&#&#\cr
A&B&C\cr
D&E&F\cr
G&H&I\cr
}

Berikut adalah tabel \verb|\halign| yang sama tetapi dengan tanda kutip ganda yang secara otomatis ditambahkan ke sel pertama di setiap baris; yaitu, ini memengaruhi setiap sel di kolom pertama:

\halign{
% Templat tanda kutip dalam prakata:
``#''&#&#\cr % Tanda kutip ganda sebelum dan sesudah # pertama
A&B&C\cr
D&E&F\cr
G&H&I\cr
}
\end{document}
```

[Buka contoh ini di Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=halign+example+of+cell+templates\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%7Bparskip%7D+%25+Set+%5Cparindent+to+0pt%0A%25+Choose+a+conveniently+small+page+size%0A%5Cusepackage%5Bpaperheight%3D10cm%2Cpaperwidth%3D12cm%2Ctextwidth%3D8cm%5D%7Bgeometry%7D%0A%5Csetlength%7B%5Ctabskip%7D%7B20pt%7D+%25+Space+out+the+%5Chalign+columns%0A%5Cbegin%7Bdocument%7D%0A%5Cpagestyle%7Bempty%7D%0A%0AHere+is+an+%5Cverb%7C%5Chalign%7C+table+%5Ctextit%7Bwithout%7D+cell+templates%3A+%0A%0A%5Chalign%7B%0A%25+Nothing+before+or+after+each+%27%23%27+in+the+%3Cpreamble%3E%0A%23%26%23%26%23%5Ccr+%0AA%26B%26C%5Ccr%0AD%26E%26F%5Ccr%0AG%26H%26I%5Ccr%0A%7D%0A%0AHere+is+the+same+%5Cverb%7C%5Chalign%7C+table+but+with+double+quotes+automatically+added+to+the+first+cell+in+each+row%3B+i.e.%2C+it+affects+every+cell+in+the+first+column%3A+%0A%0A%5Chalign%7B%0A%25+Quotation+templates+in+the+preamble%3A%0A%60%60%23%27%27%26%23%26%23%5Ccr+%25+Double+quote+marks+before+and+after+first+%23%0AA%26B%26C%5Ccr%0AD%26E%26F%5Ccr%0AG%26H%26I%5Ccr%0A%7D%0A%5Cend%7Bdocument%7D)

Contoh ini menghasilkan keluaran berikut:

![](/files/272ac14b8e9728fa9b254240510eba9e8d982c40)

Grafik berikut adalah versi beranotasi dari `\halign` tabel yang dihasilkan oleh contoh di atas; di sini, kita membandingkan struktur “formal” dari tabel tiga sel $$\langle$$⁠`preamble`⁠$$\rangle$$:

$$\langle$$⁠$$\texttt{U}\_1$$⁠$$\rangle$$$$\texttt{#}$$$$\langle$$⁠$$\texttt{V}\_1$$⁠$$\rangle$$&$$\langle$$⁠$$\texttt{U}\_2$$⁠$$\rangle$$$$\texttt{#}$$$$\langle$$⁠$$\texttt{V}\_2$$⁠$$\rangle$$&$$\langle$$⁠$$\texttt{U}\_3$$⁠$$\rangle$$$$\texttt{#}$$$$\langle$$⁠$$\texttt{V}\_3$$⁠$$\rangle$$`**\cr**`

dengan $$\langle$$⁠`preamble`⁠$$\rangle$$ sebesar ` ``#''&#&#**\cr** `, yang menyoroti keberadaan, atau ketiadaan, templat sel:

![](/files/0215b68583362483e6de01c2db456b01bbbfb053)

#### Sebuah tabel \valign yang menggunakan templat sel

Contoh berikut menunjukkan sebuah `\valign` tabel yang menggunakan templat untuk setiap sel agar secara otomatis menyisipkan angka-angka yang mengelilingi konten pengguna.

```latex
\documentclass{article}
\usepackage{parskip} % Set \parindent menjadi 0pt
% Pilih ukuran halaman yang kecil secara nyaman
\usepackage[paperheight=14cm,paperwidth=12cm,textwidth=10cm]{geometry}
\setlength{\tabskip}{8pt} % Beri jarak antar baris \valign
\begin{document}
\pagestyle{empty}

Berikut adalah tabel \verb|\valign| \textit{tanpa} templat sel:

\begingroup
\hsize=25pt
\valign{
% Tidak ada apa pun sebelum atau sesudah setiap '#' dalam
% <prakata>
#&#&#\cr
A&B&C\cr
D&E&F\cr
G&H&I\cr
}
\endgroup

Berikut adalah tabel \verb|\valign| yang sama tetapi menggunakan templat sel untuk secara otomatis menyisipkan angka ke setiap sel:

\begingroup
\hsize=25pt
\valign{
% Angka disisipkan sebelum dan sesudah setiap '#' dalam
% <prakata>
1#2&3#4&5#6\cr
A&B&C\cr
D&E&F\cr
G&H&I\cr
}
\endgroup
\end{document}
```

[Buka contoh ini di Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Example+of+valign+cell+templates\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%7Bparskip%7D+%25+Set+%5Cparindent+to+0pt%0A%25+Choose+a+conveniently+small+page+size%0A%5Cusepackage%5Bpaperheight%3D14cm%2Cpaperwidth%3D12cm%2Ctextwidth%3D10cm%5D%7Bgeometry%7D%0A%5Csetlength%7B%5Ctabskip%7D%7B8pt%7D+%25+Space+out+the+%5Cvalign+rows%0A%5Cbegin%7Bdocument%7D%0A%5Cpagestyle%7Bempty%7D%0A%0AHere+is+a+%5Cverb%7C%5Cvalign%7C+table+%5Ctextit%7Bwithout%7D+cell+templates%3A%0A%0A%5Cbegingroup%0A%5Chsize%3D25pt%0A%5Cvalign%7B%0A%25+Nothing+before+or+after+each+%27%23%27+in+%0A%25+the+%3Cpreamble%3E%0A%23%26%23%26%23%5Ccr+%0AA%26B%26C%5Ccr%0AD%26E%26F%5Ccr%0AG%26H%26I%5Ccr%0A%7D%0A%5Cendgroup%0A%0AHere+is+the+same+%5Cverb%7C%5Cvalign%7C+table+but+using+cell+templates+to+automatically+insert+digits+into+every+cell%3A+%0A%0A%5Cbegingroup%0A%5Chsize%3D25pt%0A%5Cvalign%7B%0A%25+Digits+inserted+before+and+after+every+%27%23%27+in%0A%25+the+%3Cpreamble%3E%0A1%232%263%234%265%236%5Ccr+%0AA%26B%26C%5Ccr%0AD%26E%26F%5Ccr%0AG%26H%26I%5Ccr%0A%7D%0A%5Cendgroup%0A%5Cend%7Bdocument%7D)

Contoh ini menghasilkan keluaran berikut:

![](/files/ce61487929110f8500efb749d3c4036847bd7c9b)

Grafik berikut adalah versi beranotasi dari `\valign` tabel yang dihasilkan oleh contoh di atas; di sini, kita membandingkan struktur “formal” dari tabel tiga sel $$\langle$$⁠`preamble`⁠$$\rangle$$:

$$\langle$$⁠$$\texttt{U}\_1$$⁠$$\rangle$$$$\texttt{#}$$$$\langle$$⁠$$\texttt{V}\_1$$⁠$$\rangle$$&$$\langle$$⁠$$\texttt{U}\_2$$⁠$$\rangle$$$$\texttt{#}$$$$\langle$$⁠$$\texttt{V}\_2$$⁠$$\rangle$$&$$\langle$$⁠$$\texttt{U}\_3$$⁠$$\rangle$$$$\texttt{#}$$$$\langle$$⁠$$\texttt{V}\_3$$⁠$$\rangle$$`**\cr**`

dengan $$\langle$$⁠`preamble`⁠$$\rangle$$ sebesar `1#2&3#4&5#6**\cr**`, yang menyoroti penggunaan templat sel $$\langle$$⁠$$\texttt{U}\_i$$⁠$$\rangle$$$$\texttt{#}$$$$\langle$$⁠$$\texttt{V}\_i$$⁠$$\rangle$$:

![](/files/faa2452c909f5f5321a87a9af5a5e31e7df328a4)

Perhatikan bagaimana templat untuk sel $$i$$ ($$\langle$$⁠$$\texttt{U}\_i$$⁠$$\rangle$$$$\texttt{#}$$$$\langle$$⁠$$\texttt{V}\_i$$⁠$$\rangle$$) diterapkan pada $$i$$sel ke- `\valign` kolom, sehingga semua sel dari $$i$$ke- *baris* terpengaruh.

#### Menata teks menggunakan templat sel

Contoh berikut menggunakan $$\langle$$⁠`preamble`⁠$$\rangle$$ (templat sel) berikut untuk menata teks yang terdapat di setiap baris atau kolom:

`\textbf{#}&\textit{#}&\texttt{#}\cr`

Jika kita membandingkan ini $$\langle$$⁠`preamble`⁠$$\rangle$$ dengan struktur “formal” kita untuk tabel tiga sel $$\langle$$⁠`preamble`⁠$$\rangle$$:

$$\langle$$⁠$$\texttt{U}\_1$$⁠$$\rangle$$$$\texttt{#}$$$$\langle$$⁠$$\texttt{V}\_1$$⁠$$\rangle$$&$$\langle$$⁠$$\texttt{U}\_2$$⁠$$\rangle$$$$\texttt{#}$$$$\langle$$⁠$$\texttt{V}\_2$$⁠$$\rangle$$&$$\langle$$⁠$$\texttt{U}\_3$$⁠$$\rangle$$$$\texttt{#}$$$$\langle$$⁠$$\texttt{V}\_3$$⁠$$\rangle$$`**\cr**`

kita dapat melihat bahwa:

$$\langle$$⁠$$\texttt{U}\_1$$⁠$$\rangle$$=`\textbf{`

$$\langle$$⁠$$\texttt{V}\_1$$⁠$$\rangle$$=`}`

$$\langle$$⁠$$\texttt{U}\_2$$⁠$$\rangle$$=`\textit{`

$$\langle$$⁠$$\texttt{V}\_2$$⁠$$\rangle$$=`}`

$$\langle$$⁠$$\texttt{U}\_3$$⁠$$\rangle$$=`\texttt{`

$$\langle$$⁠$$\texttt{V}\_3$$⁠$$\rangle$$=`}`

Perhatikan bagaimana templat sel ini, seperti `\textbf{#}` menyerupai makro dengan satu parameter (isi sel).

```latex
Sebuah tabel \verb|\valign| dengan teks yang ditata menggunakan templat sel:

\begingroup
\hsize=25pt
\valign{
\textbf{#}&\textit{#}&\texttt{#}\cr
A&B&C\cr
D&E&F\cr
G&H&I\cr
}
\endgroup

Sebuah tabel \verb|\halign| dengan teks yang ditata menggunakan templat sel:

\halign{
\textbf{#}&\textit{#}&\texttt{#}\cr
A&B&C\cr
D&E&F\cr
G&H&I\cr
}
```

[Buka contoh ini di Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Styling+with+cell+templates\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%7Bparskip%7D+%25+Set+%5Cparindent+to+0pt%0A%25+Choose+a+conveniently+small+page+size%0A%5Cusepackage%5Bpaperheight%3D14cm%2Cpaperwidth%3D12cm%2Ctextwidth%3D6cm%5D%7Bgeometry%7D%0A%25+Space+out+the+%5Chalign+columns+or+%5Cvalign+rows%0A%5Csetlength%7B%5Ctabskip%7D%7B8pt%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cpagestyle%7Bempty%7D%0AA+%5Cverb%7C%5Cvalign%7C+table+with+text+styled+using+cell+templates%3A%0A%0A%5Cbegingroup%0A%5Chsize%3D25pt%0A%5Cvalign%7B%0A%5Ctextbf%7B%23%7D%26%5Ctextit%7B%23%7D%26%5Ctexttt%7B%23%7D%5Ccr+%0AA%26B%26C%5Ccr%0AD%26E%26F%5Ccr%0AG%26H%26I%5Ccr%0A%7D%0A%5Cendgroup%0A%0AAn+%5Cverb%7C%5Chalign%7C+table+with+text+styled+using+cell+templates%3A%0A%0A%5Chalign%7B%0A%5Ctextbf%7B%23%7D%26%5Ctextit%7B%23%7D%26%5Ctexttt%7B%23%7D%5Ccr+%0AA%26B%26C%5Ccr%0AD%26E%26F%5Ccr%0AG%26H%26I%5Ccr%0A%7D%0A%5Cend%7Bdocument%7D)

Contoh ini menghasilkan keluaran berikut:

![](/files/3896ce10b83bca04588c7844c07e92c956cb598c)

## Detail lebih lanjut tentang tabel $$\langle$$⁠isi⁠$$\rangle$$

Pada bagian [Memperkenalkan tabel $$\langle$$⁠`preamble`⁠$$\rangle$$ dan $$\langle$$⁠`isi`⁠$$\rangle$$](#preamble) kita melihat bagaimana, jika kita untuk sementara mengabaikan `\noalign`,  $$\langle$$⁠`isi`⁠$$\rangle$$ dari sebuah `\halign` atau `\valign` tabel terdiri dari beberapa baris, masing-masing ditandai $$\langle$$⁠baris isi$${}\_j$$⁠$$\rangle$$, di mana:

* setiap $$\langle$$⁠baris isi$${}\_j$$⁠$$\rangle$$ diakhiri oleh `\cr` perintah
* setiap $$\langle$$⁠baris isi$${}\_j$$⁠$$\rangle$$ dari sebuah `\halign` adalah baris tabel
* setiap $$\langle$$⁠baris isi$${}\_j$$⁠$$\rangle$$ dari sebuah `\valign` adalah kolom tabel

Urutan baris, $$\langle$$⁠baris isi$${}\_j$$⁠$$\rangle$$, di mana $$j=1\ldots\mathrm{N}$$, menghasilkan $$\mathrm{N}$$ baris sebuah `\halign` atau $$\mathrm{N}$$ kolom untuk sebuah `\valign`. Seperti diringkas dalam diagram berikut, sebuah $$\langle$$⁠`preamble`⁠$$\rangle$$ seperti

$$\langle$$⁠`preamble`⁠$$\rangle$$=$$\langle$$⁠$$\texttt{U}\_1$$⁠$$\rangle$$$$\texttt{#}$$$$\langle$$⁠$$\texttt{V}\_1$$⁠$$\rangle$$&$$\langle$$⁠$$\texttt{U}\_2$$⁠$$\rangle$$$$\texttt{#}$$$$\langle$$⁠$$\texttt{V}\_2$$⁠$$\rangle$$&$$\langle$$⁠$$\texttt{U}*3$$⁠$$\rangle$$$$\texttt{#}$$$$\langle$$⁠$$\texttt{V}*3$$⁠$$\rangle$$$$\cdots$$$$\langle$$⁠$$\texttt{U}*\mathrm{K}$$⁠$$\rangle$$$$\texttt{#}$$$$\langle$$⁠$$\texttt{V}*\mathrm{K}$$⁠$$\rangle$$`**\cr**`

menentukan templat sel untuk maksimal $$\mathrm{K}$$ sel di setiap $$\mathrm{N}$$ $$\langle$$⁠`baris isi`⁠$$\rangle$$ entri pada $$\langle$$⁠`isi`⁠$$\rangle$$:

![](/files/5f0c80deefafc2b41c92222060cb892f06da5ec5)

### Struktur dari setiap $$\langle$$⁠baris isi$${}\_j$$⁠$$\rangle$$

Setiap baris $$\langle$$⁠baris isi$${}\_j$$⁠$$\rangle$$ dari tabel $$\langle$$⁠isi⁠$$\rangle$$ berisi isi hingga $$\mathrm{K}$$ sel—sebagaimana ditentukan oleh tabel $$\langle$$⁠prakata⁠$$\rangle$$—dan memiliki bentuk umum:

$$\langle$$⁠baris isi$${}\_j$$⁠$$\rangle$$=$$\langle$$⁠Sel$${}\_1$$⁠$$\rangle$$$$\texttt{&}$$$$\langle$$⁠Sel$${}\_2$$⁠$$\rangle$$$$\texttt{&}$$$$\langle$$⁠Sel$${}*3$$⁠$$\rangle$$$$\texttt{&}$$$$\cdots$$$$\texttt{&}$$$$\langle$$⁠Sel$${}*\mathrm{K}$$⁠$$\rangle$$`**\cr**`

di mana:

* $$\langle$$⁠Sel$${}\_i$$⁠$$\rangle$$ mewakili isi pengguna untuk $$i$$sel ke- dalam suatu $$\langle$$⁠baris isi$${}\_j$$⁠$$\rangle$$
* situs web **`&`** karakter disebut *tab penyelarasan* (sama seperti yang digunakan dalam $$\langle$$⁠prakata⁠$$\rangle$$) yang menandakan akhir satu sel dan awal sel berikutnya. Sekali lagi, penggunaan **`&`** hanyalah tradisi (konvensi) karena karakter apa pun dengan [kode kategori](/latex/id/topik-lainnya/43-table-of-tex-category-codes.md) 4 dapat digunakan sebagai gantinya.

Meskipun setiap $$\langle$$⁠baris isi$${}\_j$$⁠$$\rangle$$ dapat berisi maksimal $$\mathrm{K}$$ sel (ditentukan oleh $$\langle$$⁠prakata⁠$$\rangle$$) mereka dapat berisi *lebih sedikit* daripada $$\mathrm{K}$$ sel dan setiap $$\langle$$⁠Sel$${}\_i$$⁠$$\rangle$$ di $$\langle$$⁠baris isi$${}\_j$$⁠$$\rangle$$ dapat kosong.

Contoh berikut menunjukkan sebuah $$\langle$$⁠prakata⁠$$\rangle$$ sebesar `#&#&#&#&#\cr` yang memungkinkan maksimal 5 sel per $$\langle$$baris isi$$\rangle$$; namun, tabel yang disusun memiliki baris dengan kurang dari 5 sel:

```latex
Sebuah tabel \verb|\valign| dengan 1 hingga 5 sel per \textit{kolom}:

\begingroup
% \hsize mengontrol lebar kolom \valign (ukuran baris yang disusun).
\hsize=40pt
\fbox{\valign{
% Gunakan preamble yang memungkinkan 5 sel per kolom
% Sebagian besar kolom tidak menyediakan isi untuk 5 sel
#&#&#&#&#\cr% 5 sel per kolom
\(\mathrm{Sel}{}_1\)\cr
\(\mathrm{Sel}{}_1\)&\(\mathrm{Sel}{}_2\)\cr
\(\mathrm{Sel}{}_1\)&\(\mathrm{Sel}{}_2\)&\(\mathrm{Sel}{}_3\)\cr
\(\mathrm{Sel}{}_1\)&\(\mathrm{Sel}{}_2\)&\(\mathrm{Sel}{}_3\)&\(\mathrm{Sel}{}_4\)\cr
\(\mathrm{Sel}{}_1\)&\(\mathrm{Sel}{}_2\)&\(\mathrm{Sel}{}_3\)&\(\mathrm{Sel}{}_4\)&\(\mathrm{Sel}{}_5\)\cr
}}
\endgroup

% Catatan: karena alasan yang akan dijelaskan nanti
% \halign harus dimasukkan ke dalam \vbox
Sebuah tabel \verb|\halign| dengan 1 hingga 5 sel per \textit{baris}:

\fbox{%
\vbox{\halign{
% Gunakan preamble yang memungkinkan 5 sel per baris
% Sebagian besar baris tidak menyediakan isi untuk 5 sel
#&#&#&#&#\cr % 5 sel per baris
\(\mathrm{Sel}{}_1\)\cr
\(\mathrm{Sel}{}_1\)&\(\mathrm{Sel}{}_2\)\cr
\(\mathrm{Sel}{}_1\)&\(\mathrm{Sel}{}_2\)&\(\mathrm{Sel}{}_3\)\cr
\(\mathrm{Sel}{}_1\)&\(\mathrm{Sel}{}_2\)&\(\mathrm{Sel}{}_3\)&\(\mathrm{Sel}{}_4\)\cr
\(\mathrm{Sel}{}_1\)&\(\mathrm{Sel}{}_2\)&\(\mathrm{Sel}{}_3\)&\(\mathrm{Sel}{}_4\)&\(\mathrm{Sel}{}_5\)\cr
}}}
```

[Buka contoh ini di Overleaf](/latex/id/artikel-mendalam/15-how-do-tex-engines-typeset-tables-2.md)

Contoh ini menghasilkan keluaran berikut:

![](/files/903feedd5e816bae049f18738e236d0502d57778)

Contoh berikutnya `\halign` contoh ini menunjukkan jumlah sel yang bervariasi per baris dan kemampuan sel untuk kosong—perhatikan bagaimana sel kosong dihasilkan oleh karakter \texttt{\\&} yang berurutan **`&`** karakter dalam tabel:

```latex
Sebuah tabel \verb|\halign| dengan beberapa sel kosong---perhatikan ada karakter \texttt{\&} yang berurutan di dalam tabel \(\langle\texttt{body}\rangle\):

\fbox{%
\vbox{\halign{
% Gunakan preamble yang memungkinkan 5 sel per baris
% Sebagian besar baris tidak menyediakan isi untuk 5 sel
#&#&#&#&#\cr % 5 sel per baris
\(\mathrm{Sel}{}_1\)\cr
\(\mathrm{Sel}{}_1\)&\(\mathrm{Sel}{}_2\)\cr
\(\mathrm{Sel}{}_1\)&&\(\mathrm{Sel}{}_3\)\cr
&\(\mathrm{Sel}{}_2\)&\(\mathrm{Sel}{}_3\)&\(\mathrm{Sel}{}_4\)\cr
\(\mathrm{Sel}{}_1\)&\(\mathrm{Sel}{}_2\)&&&\(\mathrm{Sel}{}_5\)\cr
}}}
```

[Buka contoh ini di Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Empty+cells+Number+of+cells+per+row\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%7Bparskip%7D+%25+Set+%5Cparindent+to+0pt%0A%25+Choose+a+conveniently+small+page+size%0A%5Cusepackage%5Bpaperheight%3D16cm%2Cpaperwidth%3D12cm%2Ctextwidth%3D8cm%5D%7Bgeometry%7D%0A%25+Space+out+the+%5Chalign+columns+and+%5Cvalign+rows%0A%5Csetlength%7B%5Ctabskip%7D%7B8pt%7D+%0A%25+Close-fitting+box+borders+%0A%5Csetlength%7B%5Cfboxsep%7D%7B0pt%7D%0A%5Cbegin%7Bdocument%7D%0AAn+%5Cverb%7C%5Chalign%7C+table+with+some+empty+cells---note+there+are+consecutive+%5Ctexttt%7B%5C%26%7D+characters+in+the+table+%5C%28%5Clangle%5Ctexttt%7Bbody%7D%5Crangle%5C%29%3A%0A%0A%5Cfbox%7B%25%0A%5Cvbox%7B%5Chalign%7B%0A%25+Use+a+preamble+that+allows+for+5+cells+per+row%0A%25+Most+rows+don%27t+provide+content+for+5+cells%0A%23%26%23%26%23%26%23%26%23%5Ccr+%25+5+cells+per+row%0A%5C%28%5Cmathrm%7BCell%7D%7B%7D_1%5C%29%5Ccr+%0A%5C%28%5Cmathrm%7BCell%7D%7B%7D_1%5C%29%26%5C%28%5Cmathrm%7BCell%7D%7B%7D_2%5C%29%5Ccr%0A%5C%28%5Cmathrm%7BCell%7D%7B%7D_1%5C%29%26%26%5C%28%5Cmathrm%7BCell%7D%7B%7D_3%5C%29%5Ccr%0A%26%5C%28%5Cmathrm%7BCell%7D%7B%7D_2%5C%29%26%5C%28%5Cmathrm%7BCell%7D%7B%7D_3%5C%29%26%5C%28%5Cmathrm%7BCell%7D%7B%7D_4%5C%29%5Ccr%0A%5C%28%5Cmathrm%7BCell%7D%7B%7D_1%5C%29%26%5C%28%5Cmathrm%7BCell%7D%7B%7D_2%5C%29%26%26%26%5C%28%5Cmathrm%7BCell%7D%7B%7D_5%5C%29%5Ccr%0A%7D%7D%7D%0A%5Cend%7Bdocument%7D)

Contoh ini menghasilkan keluaran berikut:

![](/files/2db2d8ab7615a20eebca72538c42d8a411191c69)

### Tidak ada yang istimewa tentang & dan # dalam penyusunan tabel

Penggunaan karakter oleh TeX `&` dan `#` dalam penyusunan `\halign`- atau `\valign`-tabel berbasis adalah tradisi yang berasal dari makro plain TeX asli milik Knuth. Sangat mungkin menggunakan karakter selain `&` dan `#` dengan menetapkan kode kategori yang sesuai pada pengganti pilihan Anda, seperti yang ditunjukkan contoh berikut:

* menggantinya `&` dengan `@` dengan menetapkan `@` ke kode kategori 4
* menggantinya `#` dengan `|` dengan menetapkan `|` ke kode kategori 6 (yang digunakan untuk parameter makro)

Perubahan kategori tetap lokal dengan menggunakan `\begingroup` dan `\endgroup`:

```latex
\documentclass{article}
\begin{document}
\begingroup
\catcode`@=4
\catcode`|=6
\halign{
|@|@|\cr
A@B@C\cr
D@E@F\cr
}
\endgroup
\end{document}
```

[Buka contoh ini di Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Tables+and+category+codes\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cbegingroup%0A%5Ccatcode%60%40%3D4%0A%5Ccatcode%60%7C%3D6%0A%5Chalign%7B%0A%7C%40%7C%40%7C%5Ccr%0AA%40B%40C%5Ccr%0AD%40E%40F%5Ccr%0A%7D%0A%5Cendgroup%0A%5Cend%7Bdocument%7D)

## Memperkenalkan kembali perintah \noalign

Mesin TeX menyediakan perintah bawaan (primitif) `\noalign` perintah:

`\noalign{`$$\langle$$⁠`token`⁠$$\rangle$$`}`

di mana $$\langle$$⁠`token`⁠$$\rangle$$ adalah karakter dan/atau perintah TeX/LaTeX. Perintah `\noalign` hanya untuk digunakan dalam sebuah `\halign` atau `\valign` tabel: menggunakannya di luar ini akan menghasilkan kesalahan.

Tujuan `\noalign` adalah untuk memungkinkan "penyisipan" teks dan perintah TeX/LaTeX *di antara* baris-baris sebuah `\halign` tabel atau kolom-kolom sebuah `\valign` adalah pembuatan garis tabel: `\noalign` horizontal

* *garis di antara* baris tabel `\halign` vertikal
* *kolom tabel* baris tabel `\valign` Perhatikan hal-hal berikut:

tidak diakhiri oleh\*\*\*\*

* situs web `\noalign` perintah ini adalah ***\*\*\*\*perintah\*\*\*\* ****`\cr`**** \*\*\*\*kumpulan perintah yang diizinkan di dalam***
* bergantung pada apakah ia digunakan dalam `\noalign{...}` tabel (yaitu, dalam mode vertikal atau horizontal). $$\langle$$⁠`isi`⁠$$\rangle$$ dari sebuah `\halign` atau `\valign` Sekarang kita dapat mengatakan bahwa tabel

dapat terdiri dari baris-baris individual $$\langle$$⁠`isi`⁠$$\rangle$$ sebesar `\halign` atau `\valign` diselingi dengan $$\langle$$⁠baris isi$${}\_i$$⁠$$\rangle$$`\cr` perintah; salah satu dari banyak kemungkinan/kombinasi dapat berupa: `\noalign` lebih banyak token

`\noalign{`$$\langle$$⁠`token`⁠$$\rangle$$`}` $$\langle$$⁠baris isi$${}\_1$$⁠$$\rangle$$\cr $$\langle$$⁠baris isi$${}\_2$$⁠$$\rangle$$\cr `\noalign{`$$\langle$$⁠`token lain`⁠$$\rangle$$`}` $$\langle$$⁠baris isi$${}*3$$⁠$$\rangle$$\cr ... $$\langle$$⁠baris isi$${}*\mathrm{N}$$⁠$$\rangle$$\cr `\noalign{`$$\langle$$⁠`Contoh penggunaan \noalign`⁠$$\rangle$$`}`

### Kita akan melihat kasus penggunaan lain nanti dalam seri artikel ini, tetapi berikut ini contoh dasar untuk mendemonstrasikan pembuatan garis tabel melalui

\setlength{\tabskip}{5pt} `\noalign`:

```latex
Menggunakan \verb|\noalign| untuk menempatkan garis horizontal di antara baris-baris tabel \verb|\halign|:

\halign{%
\vspace{6pt}

\noalign{\hrule\kern2pt}
#&#&#&#&#\cr
\noalign{\hrule\kern2pt}
1&2&3&4&5\cr
\noalign{\kern2pt\hrule\kern2pt}
6&7&8&9&10\cr
\noalign{\kern2pt\hrule}
}

Menggunakan \verb|\noalign| untuk menempatkan garis vertikal di antara kolom-kolom tabel \verb|\valign|:
\vspace{6pt}

\begingroup % simpan perubahan pada \parindent dan \hsize secara lokal
\parindent=0pt
\hsize=50pt
\valign{%
#&#&#&#&#\cr
\noalign{\vrule\kern2pt}
1&2&3&4&5\cr
\noalign{\kern2pt\vrule\kern2pt}
6&7&8&9&10\cr
\noalign{\kern2pt\vrule}
}
\endgroup
```

[Buka contoh ini di Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Example+of+the+noalign+command\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%5Bpaperheight%3D16cm%2Cpaperwidth%3D10cm%2Ctextwidth%3D6cm%5D%7Bgeometry%7D%0A%5Cusepackage%7Bverbatim%7D+%0A%5Cusepackage%7Bparskip%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cpagestyle%7Bempty%7D%0A%5Csetlength%7B%5Ctabskip%7D%7B5pt%7D%0A%0AUsing+%5Cverb%7C%5Cnoalign%7C+to+place+horizontal+rules+between+rows+of+an+%5Cverb%7C%5Chalign%7C+table%3A%0A%5Cvspace%7B6pt%7D%0A%0A%5Chalign%7B%25%0A%23%26%23%26%23%26%23%26%23%5Ccr%0A%5Cnoalign%7B%5Chrule%5Ckern2pt%7D%0A1%262%263%264%265%5Ccr%0A%5Cnoalign%7B%5Ckern2pt%5Chrule%5Ckern2pt%7D%0A6%267%268%269%2610%5Ccr%0A%5Cnoalign%7B%5Ckern2pt%5Chrule%7D%0A%7D%0A%0AUsing+%5Cverb%7C%5Cnoalign%7C+to+place+vertical+rules+between+columns+of+a+%5Cverb%7C%5Cvalign%7C+table%3A%0A%5Cvspace%7B6pt%7D%0A%0A%5Cbegingroup+%25+keep+changes+to+%5Cparindent+and+%5Chsize+local%0A%5Cparindent%3D0pt%0A%5Chsize%3D50pt%0A%5Cvalign%7B%25%0A%23%26%23%26%23%26%23%26%23%5Ccr%0A%5Cnoalign%7B%5Cvrule%5Ckern2pt%7D%0A1%262%263%264%265%5Ccr%0A%5Cnoalign%7B%5Ckern2pt%5Cvrule%5Ckern2pt%7D%0A6%267%268%269%2610%5Ccr%0A%5Cnoalign%7B%5Ckern2pt%5Cvrule%7D%0A%7D%0A%5Cendgroup%0A%5Cend%7Bdocument%7D)

Contoh ini menghasilkan keluaran berikut:

![](/files/3bd6c72a8d33fda625e40fb06fbb669e4ae13633)

## \tabskip ditinjau kembali

Kita akan melihat lebih dekat `\tabskip` perintah, dengan mengacu pada [pengantar di bagian sebelumnya](#tabskip).

Fitur `\tabskip` perintah menetapkan nilai bentuk khusus "spasi" (glue) yang digunakan *secara eksklusif* dalam penyusunan tabel: tujuannya adalah memberikan jarak antar baris atau kolom tabel:

* untuk `\halign` tabel: `\tabskip` glue disisipkan sebelum dan sesudah tabel (yaitu, di kiri dan kanan) dan di antara kolom-kolom tabel
* untuk `\valign` tabel: `\tabskip` glue disisipkan sebelum dan sesudah tabel (yaitu, di atas dan di bawah) dan di antara baris-baris tabel

Nilai `\tabskip` dapat diatur menggunakan LaTeX `\setlength` perintah:

`\setlength{\tabskip}{`$$\langle$$⁠`nilai glue`⁠$$\rangle$$`}`

di mana $$\langle$$⁠`nilai glue`⁠$$\rangle$$ dapat berupa:

* panjang tetap seperti `5pt`, `3mm`, atau
* glue fleksibel hingga tertentu seperti `3pt plus 2pt minus 1pt`, atau
* glue fleksibel tak hingga seperti `0pt plus1fill`.

Anda juga dapat langsung mengatur `\tabskip` (melewati `\setlength`) dengan menulis

`\tabskip`=$$\langle$$⁠`nilai glue`⁠$$\rangle$$

Namun, perubahan apa pun pada nilai `\tabskip` glue hanya akan memengaruhi spasi tabel ketika perubahan tersebut:

* dibuat *sebelum* situs web `\halign` atau `\valign` perintah diproses, atau
* dibuat di dalam tabel $$\langle$$⁠`preamble`⁠$$\rangle$$

Upaya untuk menetapkan `\tabskip` nilai di dalam isi tabel (sel di dalam tabel $$\langle$$⁠`isi`⁠$$\rangle$$) *tidak akan* mengubah spasi `\halign` kolom tabel atau `\valign` baris tabel. Alasan perilaku `\tabskip` dapat ditelusuri pada peran yang dimainkan oleh $$\langle$$⁠`preamble`⁠$$\rangle$$ selama penyusunan tabel—proses yang nanti akan kita bahas secara lebih rinci.

### Melihat adalah percaya

Untuk membantu memvisualisasikan keberadaan berbagai jenis spasi/glue yang digunakan dalam penyusunan tabel, terutama

* `\tabskip` glue
* `\baselineskip` glue
* penyetelan kerning manual (`\kern`)

Overleaf menyiapkan proyek berbasis LuaTeX untuk memberi warna pada komponen-komponen tabel. LuaTeX dipilih karena memungkinkan pemrosesan ulang tingkat rendah atas data/struktur internal tabel yang disusun, tetapi kita tidak akan membahas detail itu di sini.

Berikut beberapa contoh yang menunjukkan berbagai penerapan `\tabskip`. Untuk setiap contoh kita akan menampilkan keluaran sebenarnya dan versi berwarna yang dihasilkan oleh LuaTeX.

### Contoh \tabskip 1

Mari kita telaah penggunaan `\tabskip` dalam sebuah `\halign` dan `\valign` tabel. Kita akan menampilkan tabel yang disusun sebenarnya, dengan bingkai untuk memvisualisasikan ukuran dan spasinya, bersama grafik beranotasi yang berisi versi berwarna yang dengan jelas menunjukkan ukuran berbagai glue/spasi dalam setiap tabel.

Pertama, `\halign`:

```latex
% Untuk memvisualisasikan ukuran tabel, kita akan memberi bingkai di sekelilingnya
\setlength{\fboxsep}{0pt} % Gunakan bingkai yang pas

% Di sini kita menetapkan \tabskip "secara langsung"
\tabskip5pt % Tetapkan nilai awal \tabskip di luar tabel

% Untuk memberi bingkai pada tabel, tabel harus disimpan ke dalam kotak TeX.
% Sebuah \halign harus ditempatkan dalam \vbox karena \halign harus
% diproses dalam "mode vertikal": \hbox tidak akan berfungsi karena
% itu diproses dalam "mode horizontal"

\fbox{\vbox{\halign{
\tabskip10pt#&
\tabskip15pt#&
\tabskip20pt#\cr
A&B&C\cr
D&E&F\cr
G&H&I\cr
}}}
```

[Buka contoh ini di Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Tabskip+glue+in+an+halign\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%5Bpaperheight%3D16cm%2Cpaperwidth%3D10cm%2Ctextwidth%3D6cm%5D%7Bgeometry%7D%0A%5Cusepackage%7Bverbatim%7D+%0A%5Cusepackage%7Bparskip%7D+%25+sets+%5Cparindent+to+0pt%0A%5Cbegin%7Bdocument%7D%0A%5Cpagestyle%7Bempty%7D%0A%25+To+visualize+the+table%27s+extent+we%27ll+put+a+border+around+it+%0A%5Csetlength%7B%5Cfboxsep%7D%7B0pt%7D+%25+Use+close-fitting+borders%0A%0A%25+Here+we+set+%5Ctabskip+%22directly%22%0A%5Ctabskip5pt+%25+Set+the+initial+%5Ctabskip+value+outside+the+table%0A%0A%25+To+put+a+border+around+the+table+it+has+to+be+saved+to+a+TeX+box.%0A%25+An+%5Chalign+has+to+be+placed+in+a+%5Cvbox+because+%5Chalign+must+be+%0A%25+processed+in+a+%22vertical+mode%22%3A+an+%5Chbox+will+not+work+because%0A%25+that+is+processed+in+a+%22horizontal+mode%22%0A%0A%5Cfbox%7B%5Cvbox%7B%5Chalign%7B%0A%5Ctabskip10pt%23%26%0A%5Ctabskip15pt%23%26%0A%5Ctabskip20pt%23%5Ccr%0AA%26B%26C%5Ccr%0AD%26E%26F%5Ccr%0AG%26H%26I%5Ccr%0A%7D%7D%7D%0A%5Cend%7Bdocument%7D)

Contoh ini menghasilkan keluaran berikut:

![](/files/3496847765b5e94bb68c13d65093c735744d40f1)

Grafik berikutnya adalah versi yang lebih besar, berwarna, dan beranotasi dari tabel yang dihasilkan oleh contoh sebelumnya:

![](/files/13e5bc690edb3bee81fab2af84a0efa687e88263)

Ada 4 instance dari `\tabskip` perintah, masing-masing sesuai dengan lokasi spasi tertentu di dalam tabel:

1. `\tabskip5pt` digunakan di luar tabel dan menetapkan `\tabskip` nilai yang diterapkan sebelum (di sebelah kiri) sel pertama di setiap baris.
2. `\tabskip10pt` ditetapkan pada templat sel pertama dari $$\langle$$⁠`preamble`⁠$$\rangle$$ yang memengaruhi spasi antara $$\langle$$⁠Sel$${}\_1$$⁠$$\rangle$$ dan $$\langle$$⁠Sel$${}\_2$$⁠$$\rangle$$ dari setiap baris.
3. `\tabskip15pt` ditetapkan pada templat sel kedua dari $$\langle$$⁠`preamble`⁠$$\rangle$$ yang memengaruhi spasi antara $$\langle$$⁠Sel$${}\_2$$⁠$$\rangle$$ dan $$\langle$$⁠Sel$${}\_3$$⁠$$\rangle$$ dari setiap baris.
4. `\tabskip20pt` ditetapkan pada templat sel ketiga dan terakhir dari $$\langle$$⁠`preamble`⁠$$\rangle$$ yang memengaruhi spasi yang ditambahkan setelah $$\langle$$⁠Sel$${}\_3$$⁠$$\rangle$$, sel terakhir dari setiap baris.

Selanjutnya, `\valign`

```latex
\setlength{\fboxsep}{0pt} % Gunakan bingkai yang pas
\tabskip5pt % Tetapkan nilai awal \tabskip di luar tabel

% Simpan perubahan pada \hsize secara lokal (dalam grup)
\begingroup
% \hsize menentukan lebar kolom \valign
\setlength{\hsize}{50pt}
% Karena \valign dapat ditempatkan dalam \vbox atau \hbox kita dapat menggunakan
% \fbox secara langsung
\fbox{\valign{
\tabskip10pt#&
\tabskip15pt#&
\tabskip20pt#\cr
A&B&C\cr
E&E&F\cr
G&H&I\cr
}}
\endgroup
```

[Buka contoh ini di Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Example+halign\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%5Bpaperheight%3D16cm%2Cpaperwidth%3D10cm%2Ctextwidth%3D6cm%5D%7Bgeometry%7D%0A%5Cusepackage%7Bverbatim%7D+%0A%5Cusepackage%7Bparskip%7D+%25+sets+%5Cparindent+to+0pt%0A%5Cbegin%7Bdocument%7D%0A%5Cpagestyle%7Bempty%7D%0A%5Csetlength%7B%5Cfboxsep%7D%7B0pt%7D+%25+Use+close-fitting+borders%0A%5Ctabskip5pt+%25+Set+the+initial+%5Ctabskip+value+outside+the+table%0A%0A%25+Keep+changes+to+%5Chsize+local+%28in+a+group%29%0A%5Cbegingroup%0A%25+%5Chsize+determines+the+%5Cvalign+column+widths%0A%5Csetlength%7B%5Chsize%7D%7B50pt%7D+%0A%25+Because+%5Cvalign+can+be+placed+in+a+%5Cvbox+or+%5Chbox+we+can+use+%0A%25+%5Cfbox+directly%0A%5Cfbox%7B%5Cvalign%7B%0A%5Ctabskip10pt%23%26%0A%5Ctabskip15pt%23%26%0A%5Ctabskip20pt%23%5Ccr%0AA%26B%26C%5Ccr%0AE%26E%26F%5Ccr%0AG%26H%26I%5Ccr%0A%7D%7D%0A%5Cendgroup%0A%5Cend%7Bdocument%7D)

Contoh ini menghasilkan keluaran berikut:

![](/files/c4435799a1a98f3e9e110c73337d78e39c6c19c5)

Sekali lagi, grafik berikutnya adalah versi yang lebih besar, berwarna, dan beranotasi dari tabel yang dihasilkan oleh contoh sebelumnya:

![](/files/0c0899971c6ba3a33cab34f3f90a0b2b56e59278)

Seperti pada `\halign` contoh, ada 4 instance dari `\tabskip` perintah. Namun, dengan tabel `\valign` tabel `\tabskip` disisipkan di antara baris-baris tabel:

1. `\tabskip5pt` digunakan di luar tabel dan menetapkan `\tabskip` nilai yang diterapkan sebelum (di atas) sel pertama di setiap kolom.
2. `\tabskip10pt` ditetapkan pada templat sel pertama dari $$\langle$$⁠`preamble`⁠$$\rangle$$ yang memengaruhi spasi antara $$\langle$$⁠Sel$${}\_1$$⁠$$\rangle$$ dan $$\langle$$⁠Sel$${}\_2$$⁠$$\rangle$$ dari setiap kolom.
3. `\tabskip15pt` ditetapkan pada templat sel kedua dari $$\langle$$⁠`preamble`⁠$$\rangle$$ yang memengaruhi spasi antara $$\langle$$⁠Sel$${}\_2$$⁠$$\rangle$$ dan $$\langle$$⁠Sel$${}\_3$$⁠$$\rangle$$ dari setiap kolom.
4. `\tabskip20pt` ditetapkan pada templat sel ketiga dan terakhir dari $$\langle$$⁠`preamble`⁠$$\rangle$$ yang memengaruhi spasi yang ditambahkan setelah $$\langle$$⁠Sel$${}\_3$$⁠$$\rangle$$, sel terakhir dari setiap kolom.

**Ringkasan/kesimpulan**

* Dalam sebuah `\halign` tabel `\tabskip` glue ditempatkan di kiri dan kanan setiap sel dalam satu baris, sehingga memberi jarak antar kolom tabel.
* Dalam sebuah `\valign` tabel `\tabskip` glue ditempatkan di atas dan di bawah setiap sel dalam satu kolom, sehingga memberi jarak antar baris tabel.

### \tabskip dan \noalign

#### Menggunakan sebuah \halign

Berikut `\halign` contoh menggunakan `\tabskip` glue dan juga mendemonstrasikan `\noalign` perintah, menggunakannya untuk menempatkan garis berjarak di atas dan di bawah baris-baris sebuah `\halign` tabel. Garis-garis tersebut disusun menggunakan `\hrule` perintah (primitif) bersama spasi yang dibuat oleh `\kern`:

```latex
\setlength{\tabskip}{5pt} % Tetapkan \tabskip di luar tabel

\halign{
#&#&#&#&#\cr % Preamble <preamble>
\noalign{\hrule\kern2pt} % Garis berjarak sebelum baris 1
1&2&3&4&5\cr % Baris 1
\noalign{\kern2pt\hrule\kern2pt} % Garis berjarak di antara baris 1/2
6&7&8&9&10\cr % Baris 2
\noalign{\kern2pt\hrule\kern2pt} % Garis berjarak di antara baris 2/3
11&12&13&14&15\cr % Baris 3
16&17&18&19&20\cr % Baris 4---tidak ada garis di antara baris 3/4
\noalign{\kern2pt\hrule} % Garis berjarak di akhir tabel
}
```

[Buka contoh ini di Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Example+halign\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%5Bpaperheight%3D16cm%2Cpaperwidth%3D10cm%2Ctextwidth%3D6cm%5D%7Bgeometry%7D%0A%5Cusepackage%7Bverbatim%7D+%0A%5Cusepackage%7Bparskip%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cpagestyle%7Bempty%7D%0A%5Csetlength%7B%5Ctabskip%7D%7B5pt%7D+%25+Set+%5Ctabskip+outside+of+the+table%0A%0A%5Chalign%7B%0A%23%26%23%26%23%26%23%26%23%5Ccr+%25+The+%3Cpreamble%3E%0A%5Cnoalign%7B%5Chrule%5Ckern2pt%7D+%25+Spaced+rule+before+row+1%0A1%262%263%264%265%5Ccr+%25+Row+1%0A%5Cnoalign%7B%5Ckern2pt%5Chrule%5Ckern2pt%7D+%25+Spaced+rule+between+rows+1%2F2+%0A6%267%268%269%2610%5Ccr+%25+Row+2%0A%5Cnoalign%7B%5Ckern2pt%5Chrule%5Ckern2pt%7D+%25+Spaced+rule+between+rows+2%2F3+%0A11%2612%2613%2614%2615%5Ccr+%25+Row+3%0A16%2617%2618%2619%2620%5Ccr+%25+Row+4---no+rules+between+rows+3%2F4%0A%5Cnoalign%7B%5Ckern2pt%5Chrule%7D+%25+Space+rule+at+table+end%0A%7D%0A%5Cend%7Bdocument%7D)

Contoh ini menghasilkan tabel yang ditunjukkan di bawah, yang telah dianotasi lebih lanjut untuk mereproduksi kode (La)TeX dan angka (1) hingga (4) untuk menomori `\noalign` perintah, yang berisi garis dan kern, beserta keluaran hasil susunannya yang sesuai:

![](/files/e73485902e8e636ce840f39ee37779f857e87c70)

Grafik berikut menunjukkan versi berwarna dari tabel yang diberi label untuk menampilkan berbagai spasi/glue dalam tabel:

![](/files/9113fe3c71ffa64721eea33aa9f3f18e280600c7)

tidak diakhiri oleh\*\*\*\*

* penggunaan `\noalign` untuk menyisipkan garis di antara baris-baris tertentu dan penggunaan manual `\kern` nilai untuk memberi sedikit spasi sebelum/sesudah garis. Mesin TeX tidak menyisipkan `\baselineskip` glue setelah garis yang telah disusun, sehingga spasi disisipkan secara manual menggunakan `\kern` (perintah spasi lain juga bisa digunakan);
* `\baselineskip` glue disisipkan secara otomatis di antara baris 3 dan 4.

#### Menggunakan sebuah \valign

Berikut `\valign` contoh ini menggunakan data yang sama seperti pada `\halign`:

```latex
\begingroup
\setlength{\parindent}{10pt}
\setlength{\hsize}{50pt}
Menggunakan \verb|\noalign| untuk menempatkan garis horizontal di antara baris-baris tabel \verb|\halign|:
\valign{
#&#&#&#&#\cr
\noalign{\vrule\kern2pt}
1&2&3&4&5\cr
\noalign{\kern2pt\vrule\kern2pt}
6&7&8&9&10\cr
\noalign{\kern2pt\vrule\kern2pt}
11&12&13&14&15\cr
16&17&18&19&20\cr
\noalign{\kern2pt\vrule}
}
\endgroup
```

[Buka contoh ini di Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Example+halign\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%5Bpaperheight%3D16cm%2Cpaperwidth%3D12cm%2Ctextwidth%3D10cm%5D%7Bgeometry%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cpagestyle%7Bempty%7D%0A%5Cbegingroup%0A%5Csetlength%7B%5Cparindent%7D%7B10pt%7D%0A%5Csetlength%7B%5Chsize%7D%7B50pt%7D%0A%5Csetlength%7B%5Ctabskip%7D%7B5pt%7D%0A%5Cvalign%7B%0A%23%26%23%26%23%26%23%26%23%5Ccr%0A%5Cnoalign%7B%5Cvrule%5Ckern2pt%7D%0A1%262%263%264%265%5Ccr%0A%5Cnoalign%7B%5Ckern2pt%5Cvrule%5Ckern2pt%7D%0A6%267%268%269%2610%5Ccr%0A%5Cnoalign%7B%5Ckern2pt%5Cvrule%5Ckern2pt%7D%0A11%2612%2613%2614%2615%5Ccr%0A16%2617%2618%2619%2620%5Ccr%0A%5Cnoalign%7B%5Ckern2pt%5Cvrule%7D%0A%7D%0A%5Cendgroup%0A%5Cend%7Bdocument%7D)

Contoh ini menghasilkan tabel yang ditunjukkan di bawah, yang telah dianotasi lebih lanjut untuk mereproduksi kode (La)TeX dan angka (1) hingga (4) untuk menomori `\noalign` perintah, yang berisi garis dan kern, beserta keluaran hasil susunannya yang sesuai:

![](/files/939168d217afc8e9a5b6c08051ffb263e2a81e9f)

![](/files/a9fca36b11dd6feb946c347feb5fb9c24354ad69)

### Sebuah tabel \valign dengan baris-baris teks

Contoh berikut

```latex
Menggunakan \verb|\noalign| untuk menempatkan garis horizontal di antara baris-baris tabel \verb|\halign|:
\begingroup % Simpan perubahan pada \parindent dan \hsize secara lokal
\setlength{\parindent}{10pt}
\setlength{\hsize}{75pt}
\valign{
#&#&#\cr
\noalign{\vrule\kern5pt}
\TeX{} dapat menyusun
tabel-tabel yang sangat kompleks.&Berikut sedikit teks tambahan
teks.&Dan, akhirnya, sebuah baris tambahan
dalam kolom ini.\cr
\noalign{\kern5pt\vrule\kern5pt}
A&B&C\cr
\noalign{\kern5pt\vrule\kern5pt}
D&E&F\cr
G&H&I\cr
\noalign{\kern5pt\vrule}
}
\endgroup
```

[Buka contoh ini di Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Example+valign+command\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%5Bpaperheight%3D16cm%2Cpaperwidth%3D16cm%2Ctextwidth%3D12cm%5D%7Bgeometry%7D%0A%5Cbegin%7Bdocument%7D%0A%5Csetlength%7B%5Ctabskip%7D%7B5pt%7D%0A%5Cbegingroup+%25+Keep+changes+to+%5Cparindent+and+%5Chsize+local%0A%5Csetlength%7B%5Cparindent%7D%7B10pt%7D%0A%5Csetlength%7B%5Chsize%7D%7B75pt%7D%0A%5Cvalign%7B%0A%23%26%23%26%23%5Ccr%0A%5Cnoalign%7B%5Cvrule%5Ckern5pt%7D%0A%5CTeX%7B%7D+can+typeset+very+complex%0Atables.%26Here%27s+a+bit+of+extra+%0Atext.%26And%2C+finally%2C+an+extra+line%0Ain+this+column.%5Ccr%0A%5Cnoalign%7B%5Ckern5pt%5Cvrule%5Ckern5pt%7D%0AA%26B%26C%5Ccr%0A%5Cnoalign%7B%5Ckern5pt%5Cvrule%5Ckern5pt%7D%0AD%26E%26F%5Ccr%0AG%26H%26I%5Ccr%0A%5Cnoalign%7B%5Ckern5pt%5Cvrule%7D%0A%7D%0A%5Cendgroup%0A%5Cend%7Bdocument%7D)

Contoh ini menghasilkan keluaran berikut:

## Menetapkan lebar baris dan tinggi kolom

## Lebih lanjut tentang tabel $$\langle$$⁠prakata⁠$$\rangle$$


---

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