Mengapa TeX memiliki begitu banyak kode kategori?

Dec 21 2020

Ketika saya melihat daftar panjang kode kategori, saya sama sekali tidak mengerti mengapa semuanya dibutuhkan. Contohnya:

  • $, ^, _, Dan &bisa dengan mudah didefinisikan sebagai karakter aktif sebagai gantinya.
  • Ngomong-ngomong &, mengapa menyia-nyiakan simbol umum pada penyelarasan tab? Mengapa tidak menggunakan sesuatu seperti \ncuntuk "kolom baru"?

Jawaban

6 egreg Dec 21 2020 at 07:46

Tentu tidak semua karakter dengan kode kategori khusus dapat diganti dengan karakter aktif.

Kode kategori ditetapkan selama fase tokenisasi dan kemudian dilampirkan secara permanen ke token karakter. Namun karakter dengan kode kategori 0 tidak pernah menjadi token karakter, karena hanya memicu mekanisme pembentukan urutan kontrol. Demikian pula, tidak mungkin memiliki token karakter dengan kode kategori 5 (end-of-line), 9 (diabaikan), 14 (komentar), 15 (tidak valid).

Kode 0, 5, 9, 14 dan 15 semuanya memicu tindakan khusus. Catatan sejarah: di TeX78 kode kategori %adalah 5 (yang tidak memungkinkan untuk komentar seperti yang biasa kita lakukan sekarang).

Perbedaan antara kode kategori 11 dan 12 adalah penting selama pembentukan urutan kontrol: \aadalah kata kontrol (dan spasi diabaikan setelahnya), sedangkan \?simbol kontrol (dan spasi tidak diabaikan).

Kode 1 dan 2 juga penting untuk definisi makro dan pengambilan argumen (dan pengelompokan). Kode 10 sangat penting untuk menormalkan spasi dan untuk lekukan kode. Kode 14 sesuai dengan komentar dan juga penting dan kode 6 juga, untuk menunjukkan parameter dalam definisi makro (dan dalam keselarasan).

Mari kita sekarang memeriksa kode 3, 4, 7, 8. Ada bisa menjadi primitif bagi mereka, mengatakan \mathshift, \alignment, \superscriptdan \subscripts. Sebenarnya dimungkinkan untuk mendefinisikannya dengan

\let\mathshift=$
\let\alignment=&
\let\superscript=^
\let\subscript=_

dan memang TeX dan LaTeX biasa memiliki \spdan \sbmendefinisikan dengan cara yang persis sama.

Mengapa tidak menggunakan karakter aktif? Nah, karakter aktif diperkenalkan pada 1980, jauh setelah bisnis dengan kode kategori dimulai. TeX78 hanya memiliki 13 kode, jadi karakter aktif mendapat slot berikutnya. Komentar seperti yang kita ketahui sekarang mereka mendapat slot 14 dan kode 15 ditambahkan untuk mengatasi karakter aneh seperti ASCII 127 (yang digunakan dengan kartu berlubang untuk menghapus byte sebelumnya jika terjadi kesalahan agar tidak menyia-nyiakan kartu).

Tetapi alasan sebenarnya adalah bahwa karakter aktif seperti makro (lebih tepatnya, urutan kontrol) dan dapat diberi arti baru kapan saja.

Jika Anda berkata \def\b{foo}\def\a{\b}\def\b{baz}, maka panggilan \aakan menghasilkan baz, bukan foo.

Demikian pula, sesuatu seperti

\def\splat{\hbox{$\otimes$}}

dengan $karakter aktif tidak akan berfungsi jika seseorang melakukannya \def${foo}setelahnya. Seseorang akan membutuhkan primitif \mathshiftsebagai pengganti $untuk melakukan definisi seperti \splat; tetapi masalahnya hanya akan didorong ke depan: bagaimana jika seseorang merasakan kebutuhan mendesak untuk mendefinisikan ulang \mathshift?

Selain itu, #tidak dapat diimplementasikan sebagai karakter aktif tanpa mengubah inti TeX. Mungkin itu bisa dilakukan untuk &, tetapi primitif untuk arti awal akan diperlukan dan masalahnya akan sama seperti sebelumnya.

Paranoia? Tidak semuanya. Ada pertanyaan di situs oleh orang-orang yang menggunakan \foreach \number in {1,2,...,10} {...}dan mengeluh bahwa ada yang tidak beres. Atau \foreach \color in {<color list>}{...}dan neraka pecah.