TeX
Lịch sử

Knuth bắt đầu viết TeX vì ông cảm thấy khó chịu khi chất lượng sắp chữ bị giảm sút trong các quyển I-III của tác phẩm The Art of Computer Programming (Nghệ thuật lập trình máy tính) hoành tráng của ông, được sắp xếp bởi Tập đoàn Monotype. Với phong thái của một hacker điển hình thôi thúc giải quyết vấn đề một lần cho mãi mãi, ông bắt đầu thiết kế ngôn ngữ sắp chữ của riêng mình. Vào ngày 13 tháng 5 năm 1977, ông đã viết một bản ghi nhớ để tự mô tả các tính năng cơ bản của TeX. Ông dự tính hoàn thành trong kỳ nghỉ phép năm 1978 nhưng phải đến hơn 10 năm sau, tức năm 1989, ngôn ngữ này mới ngưng bổ sung thêm tính năng.
Guy Steele tình cờ ở Stanford trong mùa hè năm 1978, khi Knuth phát triển phiên bản TeX đầu tiên. Khi Steele quay lại Viện Công nghệ Massachusetts (MIT) mùa thu năm ấy, ông viết lại phần nhập/xuất (I/O) của TeX để chạy dưới Hệ thống chia sẻ thời gian không tương thích (ITS).
Phiên bản TeX đầu tiên được viết bằng ngôn ngữ lập trình SAIL để chạy trên một PDP-10 dưới hệ điều hành WAITS của Đại học Stanford. Ở các phiên bản TeX sau này, Knuth phát minh khái niệm lập trình văn chương (literate programming), một phương thức tạo ra mã nguồn có tính tương thích và tài liệu có liên kết chéo với chất lượng cao (dĩ nhiên được sắp chữ bằng TeX) từ một cùng tập tin nguyên thủy. Ngôn ngữ được dùng gọi là WEB và tạo ra chương trình ở dạng DEC PDP-10 Pascal.
Một phiên bản mới của TeX được viết lại từ đầu và gọi là TeX82 do được xuất bản vào năm 1982. Trong số những thay đổi đáng chú ý có, thuật toán gạch nối ban đầu đã được thay thế bằng một thuật toán mới được viết bởi Frank Liang. TeX82 cũng sử dụng số học cố định điểm thay vì dấu phẩy động, để đảm bảo khả năng tái tạo kết quả trên phần cứng máy tính khác nhau và bao gồm một ngôn ngữ lập trình Turing hoàn chỉnh. Năm 1989, Donald Knuth phát hành phiên bản mới của TeX và METAFONT. Mặc dù mong muốn giữ cho chương trình ổn định, Knuth nhận ra rằng 128 ký tự khác nhau cho đầu vào văn bản không đủ để chứa ngôn ngữ nước ngoài; thay đổi chính trong phiên bản 3.0 của TeX là khả năng làm việc với đầu vào 8 bit, cho phép thực hiện 256 ký tự khác nhau trong đầu vào văn bản.
Kể từ phiên bản 3, TeX đã sử dụng một hệ thống đánh số phiên bản riêng, các cập nhật được biểu thị bằng cách thêm vào một chữ số vào cuối số thập phân, sao cho số phiên bản tiệm cận π. Phiên bản hiện tại của TeX là 3.141592653; nó được cập nhật lần cuối vào năm 2021. Đây là sự phản ánh thực tế rằng TeX hiện rất ổn định và chỉ các cập nhật nhỏ được dự tính thực hiện. Thiết kế đã bị hoãn lại sau phiên bản 3.0 và không có tính năng mới hoặc thay đổi cơ bản nào được thêm vào, vì vậy tất cả các phiên bản mới hơn sẽ chỉ chứa các bản sửa lỗi. Mặc dù chính Donald Knuth đã đề xuất một vài mảng mà TeX có thể đã được cải thiện. Vì lý do này, ông đã nói rằng "thay đổi cuối cùng (thực hiện sau khi tôi chết)" sẽ chuyển số phiên bản thành π, tại điểm đó mọi lỗi (bug) còn lại sẽ thành tính năng". Tương tự như vậy, các phiên bản của METAFONT sau 2.0 tiếp cận tiệm cận e và một sự thay đổi tương tự sẽ được áp dụng sau khi Knuth qua đời.
Vì mã nguồn của TeX về cơ bản nằm trong phạm vi công cộng, các lập trình viên khác được phép (hay được khuyến khích) cải thiện hệ thống, nhưng được yêu cầu sử dụng tên khác để phân phối TeX đã sửa đổi, có nghĩa là mã nguồn có thể vẫn phát triển. Ví dụ, dự án Omega được phát triển sau năm 1991, chủ yếu để tăng cường khả năng sắp xếp đa ngôn ngữ của TeX. Knuth đã tạo ra các phiên bản sửa đổi "không chính thức", chẳng hạn như TeX-XeT, cho phép người dùng trộn các văn bản được viết bằng các hệ thống viết từ trái sang phải và phải sang trái trong cùng một tài liệu.