TeX, juga ditulis sebagaiTeX, sistemtypesetting (penyusunan huruf) yang dirancang dan ditulis olehDonald Knuth,[1] dan pertama kali dirilis pada tahun 1978. TeX adalah cara populer untuk menyusunrumus matematika yang kompleks; TeX telah dicatat sebagai salah satu sistem tipografi digital yang paling canggih.[2]
TeX dirancang dengan dua tujuan utama: untuk memungkinkan siapa pun menghasilkan buku berkualitas tinggi dengan usaha yang minimal, dan untuk menyediakan sistem yang akan memberikan hasil yang persis sama di semua komputer kapanpun (bersama dengan bahasaMetafont untuk deskripsifont dan keluargatypefaceComputer Modern).[3] TeX adalahperangkat lunak gratis, yang membuatnya dapat diakses oleh berbagai pengguna.
Ketika volume pertama dari bukuThe Art of Computer Programming karya Knuth diterbitkan pada tahun 1968,[4] buku ini diketik dengan menggunakanhot metal typesetting padamesin Monotype. Metode ini, yang berasal dari abad ke-19, menghasilkan "gaya klasik" yang disukai oleh Knuth.[5] Ketika edisi kedua diterbitkan, pada tahun 1976, seluruh buku harus diketik lagi karena teknologi Monotype sebagian besar telah digantikan olehphototypesetting, dan font asli tidak lagi tersedia. Ketika Knuth menerimacetak coba dari buku baru pada tanggal 30 Maret 1977, dia menemukan bahwa kualitas buku tersebut lebih rendah.
Kecewa dengan cetak coba edisi kedua dari jilid kedua, dia termotivasi untuk merancang sistem penyusunan hurufnya sendiri. Knuth melihat untuk pertama kalinya output dari sistem penyusunan huruf digital berkualitas tinggi, dan menjadi tertarik pada tipografi digital. Pada tanggal 13 Mei 1977, ia menulis memo untuk dirinya sendiri yang menjelaskan fitur dasar TeX.[6]
Dia berencana untuk menyelesaikannya pada masa cuti panjangnya pada tahun 1978, tetapi bahasa tersebut tidak sempat "frozen" (siap digunakan) sampai tahun 1989, lebih dari sepuluh tahun kemudian.Guy Steele kebetulan berada diUniversitas Stanford selama musim panas 1978, ketika Knuth mengembangkan versi pertama TeX. Ketika Steele kembali keInstitut Teknologi Massachusetts pada musim gugur itu, dia menulis ulanginput/output (I/O) TeX untuk dijalankan di sistem operasiIncompatible Timesharing System (ITS). Versi pertama TeX, yang disebut TeX78, ditulis dalambahasa pemrograman SAIL untuk dijalankan padaPDP-10 di bawah sistem operasiWAITS milik Stanford.
Untuk versi TeX yang lebih baru, Knuth menemukan konsep pemrograman literasi (literate programming), sebuah cara untuk menghasilkankode sumber yang dapat dikompilasi dan dokumentasi cross-linked yang diketik dalam TeX, dari berkas asli yang sama. Bahasa yang digunakan disebutWEB dan menghasilkan program dalam DEC PDP-10Pascal.
TeX82, versi baru TeX yang ditulis ulang dari awal, diterbitkan pada tahun 1982. Di antara perubahan lainnya, algoritma tanda hubung (hypenation) yang asli digantikan oleh algoritma baru yang ditulis olehFrank Liang. TeX82 juga menggunakan aritmetikafixed-point, bukanfloating-point, untuk memastikan hasil yang sama di berbagai perangkat keras komputer yang berbeda,[7] dan menyertakan bahasa pemrogramanTuring-lengkap yang nyata, setelah lobi intens oleh Guy Steele.[8] Pada tahun 1989, Donald Knuth merilis versi baru TeX danMetafont.[9] Terlepas dari keinginannya untuk menjaga kestabilan program, Knuth menyadari bahwa 128 karakter yang berbeda untuk input teks tidak cukup untuk mengakomodasi bahasa asing; perubahan utama dalam TeX versi 3.0 (juga disebut TeX90) adalah kemampuan untuk bekerja dengan input8-bit, memungkinkan 256 karakter berbeda dalam input teks.
Sejak versi 3, TeX telah menggunakan sistem penomoran versi yang istimewa, yakni pembaruan ditunjukkan dengan menambahkan digit ekstra di akhir desimal, sehingga nomor versi secaraasimtotik mendekatiπ. Ini adalah cerminan dari fakta bahwa TeX sekarang sangat stabil, dan hanya pembaruan kecil yang diantisipasi. Versi TeX saat ini adalah 3.141592653; terakhir diperbarui pada tahun 2021.[10] Desainnya dibekukan (frozen) setelah versi 3.0, dan tidak ada fitur baru atau perubahan mendasar yang akan ditambahkan, jadi semua versi yang lebih baru hanya akan berisi perbaikankutu.[11] Meskipun Donald Knuth sendiri telah menyarankan beberapa area di mana TeX dapat ditingkatkan, dia mengindikasikan bahwa dia sangat yakin bahwa memiliki sistem yang tidak berubah dan yang akan menghasilkan output yang sama sekarang juga di masa depan, lebih penting daripada memperkenalkan fitur baru. Untuk alasan ini, dia telah menyatakan bahwa "perubahan yang benar-benar terakhir (yang akan dilakukan setelah kematian saya)" adalah mengubah nomor versi menjadiπ, di mana semua bug yang tersisa akan menjadi fitur.[12] Demikian juga, versi Metafont setelah 2.0 secara asimtotik mendekatie (saat ini di 2.7182818), dan perubahan serupa akan diterapkan setelah kematian Knuth.[11]
Karena kode sumber TeX pada dasarnya berada dalamdomain publik (lihat di bawah), programmer lain diperbolehkan (dan secara eksplisit didorong) untuk meningkatkan sistem, tetapi diharuskan menggunakan nama lain untuk mendistribusikan TeX yang dimodifikasi, yang berarti bahwakode sumber masih dapat berkembang. Sebagai contoh, proyekOmega dikembangkan setelah tahun 1991, terutama untuk meningkatkan kemampuan typesetting multibahasa TeX.[13] Knuth menciptakan versi modifikasi "tidak resmi", sepertiTeX-XeT, yang memungkinkan pengguna untuk mencampur teks yang ditulis dalam sistem penulisan kiri-ke-kanan dan kanan-ke-kiri dalam dokumen yang sama.
Dalam beberapa bidang teknis seperti ilmu komputer, matematika, teknik dan fisika, TeX telah menjadi standarde facto. Ribuan buku telah diterbitkan menggunakan TeX, termasuk buku-buku yang diterbitkan olehAddison-Wesley,Cambridge University Press,Elsevier,Oxford University Press, danSpringer. Banyak jurnal di bidang ini diproduksi menggunakan TeX atau LaTeX, yang memungkinkan penulis untuk mengirimkan naskah mentah mereka yang ditulis dalam TeX.[14] Sementara banyak publikasi di bidang lain, termasuk kamus dan publikasi hukum, telah diproduksi menggunakan TeX, namun belum sesukses di bidang yang lebih teknis, karena TeX terutama dirancang untuk mengetik matematika.
Ketika dia mendesain TeX, Donald Knuth tidak percaya bahwa satu sistem penyusunan huruf tunggal akan sesuai dengan kebutuhan semua orang; sebagai gantinya, dia mendesain banyak pengait di dalam program sehingga memungkinkan untuk menulis ekstensi, dan merilis kode sumbernya, dengan harapan bahwa penerbit akan merancang versi yang menyesuaikan dengan kebutuhan mereka sendiri. Meskipun ekstensi semacam itu telah dibuat (termasuk beberapa oleh Knuth sendiri),[15] kebanyakan orang telah memperluas TeX hanya dengan menggunakan makro dan TeX tetap menjadi sistem yang terkait dengan penyusunan huruf teknis.[16][17]
Perintah TeX biasanya dimulai dengangaris miring terbalik dan dikelompokkan dengankurung kurawal. Hampir semua sifat sintaksis TeX dapat diubah dengan cepat (on the fly), yang membuat input TeX sulit diurai oleh apa pun kecuali TeX itu sendiri. TeX adalah bahasa berbasismakro dantoken: banyak perintah, termasuk sebagian besar perintah yang ditentukan pengguna, diperluas (expanded) dengan cepat sampai hanya token yang tidak dapat diekspansi yang tersisa, yang kemudian dieksekusi. Ekspansi itu sendiri praktis bebas dari efek samping.Rekursi ekor dari makro tidak membutuhkan memori, dan konstruksi if-then-else tersedia. Hal ini membuat TeX menjadi bahasaTuring-lengkap bahkan pada tingkat ekspansi.[18] Sistem ini dapat dibagi menjadi empat tingkat: yang pertama, karakter dibaca darifile input dan diberi kode kategori (kadang-kadang disebut dengan "catcode"). Kombinasi garis miring terbalik (sebenarnya, karakter apa pun dari kategori nol) yang diikuti oleh huruf (karakter kategori 11) atau satu karakter lain digantikan oleh tokencontrol-sequence. Dalam hal ini, tahap ini seperti analisis leksikal, meskipun tidak membentuk angka dari digit. Pada tahap berikutnya, urutan kontrol yang dapat diperluas (seperti kondisional atau makro yang didefinisikan) digantikan oleh teks penggantinya. Masukan untuk tahap ketiga adalah aliran karakter (termasuk yang memiliki makna khusus) dan urutan kontrol yang tidak dapat diperluas (biasanya tugas dan perintah visual). Di sini, karakter-karakter tersebut dirangkai menjadi sebuah paragraf, dan algoritma pemecah paragraf TeX bekerja dengan mengoptimalkanbreakpoints di seluruh paragraf. Tahap keempat memecah daftar vertikal baris dan materi lainnya ke dalam halaman.
Sistem TeX memiliki pengetahuan yang tepat tentang ukuran semua karakter dan simbol, dan dengan menggunakan informasi ini, sistem ini menghitung pengaturan optimal huruf per baris dan baris per halaman. Kemudian sistem menghasilkanfileDVI ("DeVice Independent") yang berisi lokasi akhir dari semua karakter. File DVI ini kemudian dapat dicetak langsung dengandriver printer yang sesuai, atau dapat dikonversi ke format lain. Saat ini,pdfTeX sering digunakan, yang melewati pembuatan DVI sama sekali.[19] Sistem TeX dasar memahami sekitar 300 perintah, yang disebutprimitif.[20] Perintah-perintah tingkat rendah ini jarang digunakan secara langsung oleh pengguna, dan sebagian besar fungsionalitas disediakan oleh file format (memory image TeX yang di-predump setelah koleksi makro besar telah dimuat). Format default asli Knuth, yang menambahkan sekitar 600 perintah, adalah Plain TeX.[21] Format yang paling banyak digunakan adalahLaTeX, awalnya dikembangkan olehLeslie Lamport, yang menggabungkan gaya dokumen untuk buku, surat, slide, dll.; juga menambahkan dukungan untuk referensi dan penomoran otomatis bagian dan persamaan. Format lain yang banyak digunakan,AMS-TeX, diproduksi olehAmerican Mathematical Society dan menyediakan banyak perintah yang lebih ramah pengguna, yang dapat diubah oleh jurnal-jurnal agar sesuai dengan format gaya mereka. Sebagian besar fitur AMS-TeX dapat digunakan di LaTeX dengan menggunakan "paket AMS" (misalnya,amsmath,amssymb) dan "kelas dokumen AMS" (misalnya,amsart,amsbook). Hal ini kemudian disebut sebagaiAMS-LaTeX.[22] Format lain termasukConTeXt, yang digunakan terutama untuk penerbitan desktop dan sebagian besar ditulis oleh Hans Hagen diPragma.
Hello, World\bye% menandai akhir file; tidak ditampilkan dalam output akhir
Teks program ini mungkin berada dalam filemyfile.tex, karena.tex adalah ekstensi file yang umum untuk file TeX biasa. Secara default, semua yang mengikuti tanda persen pada suatu baris adalah komentar, dan diabaikan oleh TeX. Menjalankan TeX pada file ini (misalnya, dengan mengetiktex myfile.tex dalamantarmuka baris perintah, atau dengan memanggilnya dariantarmuka pengguna grafis) akan membuat file output yang disebutmyfile.dvi, yang mewakili konten halaman dalam format independen perangkat (DVI,deviceindependent format). File DVI kemudian dapat dilihat di layar atau dikonversi ke format yang sesuai untuk salah satu dari berbagai printer yang driver perangkatnya ada (dukungan printer umumnya bukan fitur sistem operasi pada saat TeX dibuat). Knuth mengatakan bahwa tidak ada yang melekat pada TeX yang membutuhkan DVI sebagai format output, dan versi TeX yang lebih baru, terutamapdfTeX,XeTeX danLuaTeX, semuanya mendukung output langsung kePDF.
Rumus dicetak dengan cara seseorang akan menulisnya dengan tangan, atau dengan mengetik persamaan. Dalam dokumen,mode matematika dimulai dengan simbol $, kemudian memasukkan rumus dalam sintaks TeX, dan ditutup lagi dengan $. Knuth menjelaskan dengan bercanda bahwa dia memilih tanda dolar untuk menunjukkan awal dan akhir mode matematika di TeX biasa karenatypesetting matematika secara tradisional seharusnya mahal.[23]Tampilan matematika (matematika yang disajikan rata-tengah pada baris baru) dihasilkan dengan cara serupa tetapi menggunakan $$ bukan simbol $ tunggal. Sebagai contoh, di atas dengan rumus kuadratik dalam tampilan matematika:
Markah
Hasil akhir
The quadratic formula is$$-b\pm\sqrt{b^2-4ac}\over2a$$\bye
Perangkat lunak TeX menggabungkan beberapa aspek yang tidak tersedia, atau kualitasnya lebih rendah, dalam program penyusunan huruf (typesetting) lainnya pada saat TeX dirilis. Beberapa inovasi didasarkan padaalgoritma yang menarik, dan telah menghasilkan beberapa tesis untuk mahasiswa Knuth. Walaupun beberapa penemuan ini sekarang telah disertakan ke dalam programtypesetting lainnya; yang lain, seperti aturan untuk spasi matematis, masih unik.
Pengetikan teks matematika menggunakan TeX dan fontAMS Euler.
Karena tujuan utama dari bahasa TeX adalah penyusunan huruf berkualitas tinggi untuk penerbit buku, Knuth memberikan banyak perhatian pada aturan spasi untuk rumus matematika.[24][25] Dia mengambil tiga sistem yang dia anggap sebagai standar keunggulan untuk tipografi matematika: buku-buku yang disusun oleh penerbitAddison-Wesley Publishing (penerbitThe Art of Computer Programming) di bawah pengawasanHans Wolf; edisi jurnal matematikaActa Mathematica yang berasal dari sekitar tahun 1910; dan salinanIndagationes Mathematicae, sebuah jurnal matematikaBelanda. Knuth mencermati kertas-kertas cetak ini untuk memilah dan mencari seperangkat aturan untuk spasi.[26] Sementara TeX menyediakan beberapa aturan dasar dan alat yang diperlukan untuk menentukan spasi yang tepat, parameter yang-tepat bergantung pada font yang digunakan untuk mengeset rumus. Misalnya, jarak spasi untuk fontComputer Modern telah disetel dengan tepat selama bertahun-tahun dan sekarang sudah diatur; tetapi ketika font lain digunakan oleh Knuth untuk pertama kalinya (sepertiAMS Euler), parameter jarak spasi baru harus ditentukan.[27]
Penyusunan huruf matematika di TeX menuai beberapa kritik, terutama yang berkaitan dengan detail teknis metrik font, yang dirancang di era ketika perhatian yang signifikan diperlukan pada persyaratan penyimpanan data. Hal ini mengakibatkan beberapa "hack" di beberapa lokasi, yang pada gilirannya membutuhkan "hack" lainnya. Pada tingkat estetika, hasilrender bentuk akar (radical) juga dikritik.[28] Spesifikasi font matematikaOpenType sebagian besar meminjam dari TeX, tetapi memiliki beberapa fitur/peningkatan baru.[29][30][31]
^"Per Bothner (attendee at TeX Project meetings) discusses authorship".Knuth definitely wrote most of the code himself, at least for the Metafont re-write, for which I have pe[r]sonal knowledge. However, some of his students (such as Michael Plass and John Hobby) did work on the algorithms used in TeX and Metafont.
^Yannis Haralambous.Fonts & Encodings (Translated by P. Scott Horne). Beijing; Sebastopol, Calif: O’Reilly Media, 2007, pp. 235.
^Gaudeul, Alexia (27 March 2006). "Do Open Source Developers Respond to Competition?: The (La)TeX Case Study".SSRN908946.
^Knuth, Donald E."Less brief biography".Don Knuth's Home Page. Diakses tanggal9 January 2017.
^ab"What is the future of TeX?".The TeX FAQ. 2018-05-27. Diarsipkan dariversi asli tanggal 28 April 2019. Diakses tanggal2019-07-21.Parameter|url-status= yang tidak diketahui akan diabaikan (bantuan)
^Knuth, Donald E.The future of TeX and METAFONT, NTG journal MAPS (1990), 489. Reprinted as chapter 30 ofDigital Typography, p. 571.
^"TeX Engine development".The TeX FAQ. 2018-05-24. Diarsipkan dariversi asli tanggal 28 April 2019. Diakses tanggal2019-07-21.Parameter|url-status= yang tidak diketahui akan diabaikan (bantuan)
———; Plass, Michael F (1981), "Breaking Paragraphs into Lines",Software: Practice and Experience,11 (11): 1119–84,doi:10.1002/spe.4380111102Parameter|s2cid= yang tidak diketahui akan diabaikan (bantuan). Reprinted asBigelow, Charles; Day, Donald (1983). "Chapter 3".Digital Typography.Scientific American.249. hlm. 67–155.Bibcode:1983SciAm.249b.106B.doi:10.1038/scientificamerican0883-106..
———,TeX (source code), diarsipkan dariversi asli(WEB) tanggal 27 September 2011Parameter|url-status= yang tidak diketahui akan diabaikan (bantuan) contains extensive documentation about the algorithms used in TeX.