Phát triển bởi | Donald Knuth |
---|---|
Phát hành lần đầu | 1978 |
Phiên bản ổn định | 3.141592653
/ tháng 2 năm 2021; 3 năm trước |
Kho mã nguồn | |
Viết bằng | WEB/Pascal |
Hệ điều hành | Đa nền tảng |
Thể loại | Sắp chữ |
Giấy phép | Permissive |
Website | http://www.tug.org/ |
Trạng thái | Đang hỗ trợ |
TEX (phát âm là /tɛx/ hoặc /tɛk/) là hệ thống sắp chữ được Donald Knuth phát triển và ra mắt lần đầu vào năm 1978, với mục đích đơn giản hóa việc tạo ra các tài liệu chất lượng cao.
Mục tiêu chính của TeX là giúp mọi người có thể tạo ra sách và tài liệu chất lượng cao một cách dễ dàng, đồng thời cung cấp một hệ thống sắp chữ đồng nhất trên mọi máy tính, không chỉ hiện tại mà cả trong tương lai.
TeX rất phổ biến trong các lĩnh vực học thuật, đặc biệt trong toán học, vật lý, khoa học máy tính, kinh tế học, ngôn ngữ học, thống kê và kỹ thuật. Trong nhiều bản phân phối Unix, nó thay thế chương trình troff, một công cụ định dạng văn bản phổ biến.
TeX là phần mềm miễn phí, được coi là công cụ lý tưởng để soạn thảo các công thức toán học phức tạp, đặc biệt là qua các gói như LaTeX, ConTeXt và nhiều khuôn mẫu khác, ngoài ra nó còn hỗ trợ các công việc sắp chữ khác.
Tên
Tên gọi này được lấy cảm hứng từ Viện Công nghệ California (Caltech), nơi mà Knuth nhận bằng tiến sĩ. Tên TeX được phát âm là "tekh", trong đó "kh" tượng trưng cho âm cuối của từ "loch" trong tiếng Scotland hoặc tên của nhà soạn nhạc Bach, theo cách phát âm IPA /tɛx/. Chữ X được mượn từ chữ cái Hy Lạp χ (chi) và TeX là viết tắt của từ "τέχνη" trong tiếng Hy Lạp, có nghĩa là "nghệ thuật" và "thủ công", cũng là gốc từ của từ "technical" (kỹ thuật).
Tên này được xếp với chữ "E" nằm dưới đường ngang. Nếu hệ thống không hỗ trợ kiểu chữ con, nó sẽ được viết thành "TeX" theo cách thông dụng.
Những người ủng hộ TeX đã sáng tạo ra nhiều từ ngữ liên quan, như TeXnician (người sử dụng TeX), TeXhacker (người lập trình TeX), TeXmaster (chuyên gia lập trình TeX), TeXhax, và TeXnique.
TeX bắt đầu được sử dụng rộng rãi và phát triển trong cộng đồng những người yêu thích công nghệ và lập trình, từ đó hình thành nên một hệ sinh thái phong phú với các thuật ngữ đặc trưng.
Knuth bắt đầu phát triển TeX vì ông không hài lòng với chất lượng sắp chữ trong các quyển I-III của bộ sách nổi tiếng "The Art of Computer Programming" của mình, vốn được Tập đoàn Monotype thực hiện. Với tính cách của một hacker, ông quyết tâm tạo ra một giải pháp vĩnh viễn cho vấn đề này và bắt tay vào thiết kế ngôn ngữ sắp chữ riêng. Vào ngày 13 tháng 5 năm 1977, ông viết một bản ghi nhớ miêu tả các tính năng cơ bản của TeX và dự tính hoàn thành trong kỳ nghỉ phép năm 1978, nhưng mãi đến năm 1989, ngôn ngữ này mới ngừng phát triển thêm tính năng.
Vào mùa hè năm 1978, Guy Steele tình cờ có mặt tại Stanford khi Knuth đang phát triển phiên bản TeX đầu tiên. Sau khi quay lại Viện Công nghệ Massachusetts (MIT), Steele đã viết lại phần nhập/xuất (I/O) của TeX để chạy trên 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 và chạy trên một máy PDP-10 với hệ điều hành WAITS của Đại học Stanford. Sau đó, Knuth phát triển khái niệm lập trình văn chương (literate programming), giúp tạo ra mã nguồn có tài liệu liên kết chéo chất lượng cao từ một tập tin duy nhất. Ngôn ngữ lập trình WEB được sử dụng và tạo ra chương trình cho máy DEC PDP-10 bằng Pascal.
TeX82, một phiên bản hoàn toàn mới được viết lại và phát hành vào năm 1982, có những thay đổi quan trọng như thuật toán gạch nối mới được Frank Liang phát triển. Phiên bản này cũng chuyển sang sử dụng số học cố định thay vì dấu phẩy động, giúp tái tạo kết quả trên các phần cứng khác nhau và bao gồm một ngôn ngữ lập trình Turing đầy đủ. Năm 1989, Knuth phát hành một phiên bản mới của TeX và METAFONT, với sự thay đổi quan trọng là khả năng xử lý đầu vào 8 bit, hỗ trợ 256 ký tự.
Từ phiên bản 3.0 trở đi, TeX áp dụng hệ thống đánh số phiên bản riêng, với các cập nhật được thể hiện bằng cách thêm một chữ số vào cuối số thập phân, nhằm tiệm cận giá trị π. Phiên bản hiện tại của TeX là 3.141592653 và được cập nhật lần cuối vào năm 2021. Điều này phản ánh sự ổn định của TeX, với chỉ các bản sửa lỗi nhỏ được thực hiện và không có thay đổi cơ bản nào. Knuth từng nói rằng sau khi ông qua đời, số phiên bản sẽ chuyển thành π, tại thời điểm đó mọi lỗi còn lại sẽ trở thành tính năng. Tương tự, các phiên bản của METAFONT sau 2.0 cũng tiệm cận e và sẽ có sự thay đổi tương tự sau khi Knuth qua đời.
Vì mã nguồn của TeX thuộc phạm vi công cộng, các lập trình viên có thể (và thường được khuyến khích) cải tiến hệ thống. Tuy nhiên, họ cần phải sử dụng tên khác khi phân phối phiên bản TeX đã được sửa đổi, cho phép mã nguồn tiếp tục phát triển. Một ví dụ điển hình là dự án Omega, ra đời sau năm 1991, chủ yếu nhằm tăng cường khả năng sắp xếp đa ngôn ngữ của TeX. Knuth cũng đã tạo ra các phiên bản sửa đổi không chính thức như TeX-XeT, giúp người dùng kết hợp văn bản viết từ trái sang phải và phải sang trái trong cùng một tài liệu.
TeX sử dụng một hệ thống sắp chữ mạnh mẽ và linh hoạt, cho phép người dùng kiểm soát hoàn toàn cách thức và bố cục của văn bản. Hệ thống này có thể được điều chỉnh để đáp ứng nhu cầu riêng biệt của người sử dụng và hỗ trợ nhiều ngôn ngữ khác nhau.
Các lệnh trong TeX thường bắt đầu với dấu chéo ngược và được đóng gói trong dấu ngoặc nhọn. Tuy nhiên, phần lớn cú pháp của TeX có thể được thay đổi ngay khi sử dụng, điều này khiến cấu trúc mã nguồn TeX rất khó phân tích ngoại trừ chính TeX. TeX là ngôn ngữ dựa trên macro và biểu tượng (token): nhiều lệnh, bao gồm các lệnh do người dùng tự định nghĩa, sẽ được mở rộng cho đến khi chỉ còn lại các biểu tượng không thể mở rộng hơn, và chúng sẽ được thực thi. Quá trình mở rộng này không gây ra tác dụng phụ. Đệ quy đuôi (tail recursion) của macro không sử dụng nhiều bộ nhớ, và TeX cũng hỗ trợ cấu trúc if-then-else, điều này làm cho TeX trở thành một ngôn ngữ Turing hoàn chỉnh ngay cả khi mở rộng.
Hệ thống TeX có thể được chia thành 4 cấp độ xử lý. Cấp độ đầu tiên, TeX phân tích từ vựng để nhận diện các chuỗi điều khiển. Tiếp theo, chuỗi điều khiển được mở rộng (chẳng hạn như các câu điều kiện hoặc macro đã được định nghĩa) bằng cách thay thế chúng bằng nội dung văn bản tương ứng. Ở giai đoạn 3, các ký tự được nhóm lại thành các đoạn văn, và thuật toán ngắt đoạn của TeX tối ưu hóa các điểm ngắt cho từng đoạn. Cuối cùng, văn bản được phân thành các trang.
TeX có khả năng tính toán chính xác kích thước của mọi ký tự và ký hiệu, và sử dụng thông tin này để tối ưu hóa việc sắp xếp các từ trong dòng và các dòng trong trang. Sau đó, TeX tạo ra một tệp DVI (Device Independent), chứa các vị trí cuối cùng của mọi ký tự. Tệp DVI này có thể được in trực tiếp với driver máy in tương thích, hoặc chuyển đổi sang các định dạng khác. Hiện nay, PDFTeX thường được sử dụng để bỏ qua giai đoạn tạo DVI và tạo ra tệp PDF trực tiếp.
Hầu hết các tính năng của TeX được triển khai thông qua các tập tin định dạng. Các định dạng phổ biến bao gồm TeX nguyên gốc của Knuth, LaTeX (được sử dụng rộng rãi trong các lĩnh vực kỹ thuật), và ConTeXt (chủ yếu áp dụng trong xuất bản trên máy tính để bàn).
Những tài liệu tham khảo chính của TeX là hai cuốn đầu trong bộ Computers and Typesetting của Knuth, bao gồm The TeXbook và TeX: The Program (cung cấp toàn bộ mã nguồn của TeX với các giải thích chi tiết).
TeX thường được phân phối cùng với Metafont, một chương trình do Knuth phát triển cho phép mô tả phông chữ bằng thuật toán. Cấu trúc thư mục cài đặt TeX và Metafont tuân thủ chuẩn trong cây thư mục texmf.
Giấy phép của TeX cho phép người dùng tự do phân phối và thay đổi, nhưng yêu cầu các phiên bản sửa đổi không được sử dụng tên TeX hay TEX hoặc bất kỳ tên gọi nào có thể gây hiểu nhầm như một thương hiệu. Công cụ TRIPTRAP được sử dụng để xác minh liệu ứng dụng có thực sự phù hợp với các tiêu chí của TeX hay không.
TeX có giấy phép tự do cho phép phân phối và sửa đổi, nhưng yêu cầu rằng các phiên bản sửa đổi không được phép sử dụng tên gọi TeX hay TEX hoặc bất kỳ tên nào gây nhầm lẫn, giống như một nhãn hiệu. Bộ công cụ TRIPTRAP giúp kiểm tra xem một ứng dụng có thực sự tuân thủ tiêu chuẩn của TeX hay không.
Chất lượng
Mặc dù được phát triển rất tỉ mỉ, TeX quá phức tạp và chứa nhiều kỹ thuật tiên tiến đến mức nó đã gây ra ít nhất một lỗi lập trình trong mỗi hệ thống Pascal dùng để biên dịch. TeX có thể chạy trên hầu hết các hệ điều hành.
Knuth đã treo giải thưởng tiền mặt cho những ai phát hiện và thông báo lỗi trong TeX. Mỗi lỗi phát hiện được thưởng $2,56, và số tiền này gấp đôi mỗi năm cho đến khi đạt giới hạn, hiện tại là $327,68. Tuy nhiên, điều này không làm Knuth mất tiền vì rất ít lỗi được tìm thấy, và hầu hết các tờ séc thưởng thường được đóng khung thay vì được rút tiền.
Các khía cạnh khoa học máy tính của TeX
Phần mềm TeX bao gồm một số thuật toán thú vị, đã dẫn đến các luận văn của các học trò của Knuth. Ví dụ, thuật toán gạch nối từ (hyphenation) do Frank Liang phát triển, giúp xác định ưu tiên cho việc ngắt từ trong các nhóm chữ cái.
Thuật toán chia dòng là một ví dụ điển hình của lập trình động. Bài toán chia một đoạn văn dài n chữ thành các dòng có độ phức tạp thực tế là 2^n, nhưng với kỹ thuật lập trình động, việc tối ưu hóa toàn bộ có thể thực hiện trong thời gian tỷ lệ với số từ và số từ mỗi dòng. Nghiên cứu của Michael Plass chỉ ra rằng bài toán phân trang có thể trở thành bài toán NP-hoàn chỉnh, do các tình huống phát sinh khi sắp xếp hình ảnh.
Metafont là một chương trình được sử dụng để tạo ra các ký tự thông qua đường cong Bezier một cách chuẩn mực. Tuy nhiên, đóng góp lớn của Knuth là vào việc chuyển hình ảnh thành định dạng bitmap (quá trình raster hóa). Một nghiên cứu khác của John Hobby tiếp tục khảo sát bài toán số hóa "đường cọ" (brush trajectories), thuật ngữ này xuất phát từ việc Metafont mô tả ký tự như thể chúng được vẽ bằng các cọ vẽ trừu tượng.
Các nghiên cứu tiếp theo
Một số hệ thống xử lý tài liệu dựa trên TeX đáng chú ý bao gồm:
- LaTeX (Lamport TeX), hỗ trợ nhiều kiểu tài liệu như sách, thư từ, bài giảng (slide), và cung cấp các công cụ để tạo tài liệu tham khảo và tự động đánh số các phần, phương trình.
- ConTeXt, được phát triển chủ yếu bởi Hans Hagen tại Pragma, là công cụ thiết kế tài liệu chuyên nghiệp trên nền tảng TeX. Mặc dù ít phổ biến hơn LaTeX, nhưng ConTeXt lại mạnh mẽ và đầy đủ tính năng hơn.
- AMS-TeX, được phát triển bởi Hội Toán học Hoa Kỳ, cung cấp các lệnh thân thiện với người sử dụng và có thể được tùy chỉnh bởi các tạp chí. Phần lớn tính năng của AMS-TeX có thể sử dụng trong LaTeX thông qua các gói mở rộng, gọi là AMS-LaTeX. Cẩm nang của AMS-TeX mang tên "Thú vui của TeX" (The Joy of TeX).
- jadeTeX sử dụng TeX làm nền tảng cho việc in ấn từ DSSSL Engine của James Clark.
- Texinfo, hệ thống xử lý tài liệu của GNU.
- XeTeX là công cụ TeX mới hỗ trợ Unicode và các tính năng font nâng cao của Mac OS X.
Hiện nay, có rất nhiều bản mở rộng dành cho TeX, bao gồm BibTeX giúp tạo thư mục (bibliography) và được phân phối kèm với LaTeX, PDFTeX giúp bỏ qua bước DVI để trực tiếp tạo ra tài liệu PDF (Portable Document Format) của Adobe Systems, và Omega cho phép TeX sử dụng bộ ký tự Unicode. Tất cả những bản mở rộng này đều miễn phí trên mạng CTAN (Mạng lưới lưu trữ TeX tổng hợp).
Các công cụ tương thích với TeX
Trên hệ thống UNIX (bao gồm cả Mac OS X), TeX được phân phối thông qua teTeX. Trên nền tảng Windows, người dùng có thể lựa chọn giữa bản phân phối MiKTeX và fpTeX.
TeXmacs là một trình soạn thảo văn bản khoa học WYSIWYG tương thích với TeX. Nó sử dụng các phông chữ của Knuth và có khả năng tạo ra kết quả tương tự TeX. Một công cụ tương tự là LyX.
Tiếng Việt và sự tương thích với TeX
Đến nay, đã có một số cố gắng để tích hợp tiếng Việt vào TeX.
- VnTeX cung cấp hỗ trợ cho tiếng Việt trong LaTeX và TeX thuần thông qua các gói macro và phông chữ. VnTeX thường được bao gồm trong các bản phân phối TeX như teTeX, TeXLive,...
- OmegaVN cho phép sử dụng trực tiếp bộ ký tự Unicode cho tiếng Việt thông qua hệ thống Omega.
- Người dùng ConTeXt có thể tận dụng các phông chữ từ gói VnTeX để hiển thị tiếng Việt.
- Ký tự tiếng Việt có thể được tạo ra bằng các lệnh của TeX. Tuy nhiên, phương pháp này có thể không cho kết quả đẹp mắt. Cách này đã được sử dụng tại Viện Toán học Việt Nam, Đại học Khoa học Tự nhiên Hà Nội và Bộ môn Toán, Khoa Khoa học, Đại học Cần Thơ.
- Metafont
- MetaPost
- Danh sách các ngôn ngữ đánh dấu
- So sánh giữa các ngôn ngữ đánh dấu tài liệu
Chú thích
Liên kết ngoài
- Hướng dẫn sử dụng MediaWiki để soạn thảo công thức toán học
- Nhóm người dùng TeX trên toàn cầu
- Comprehensive TeX Archive Network (CTAN): Kho lưu trữ các tài liệu TeX và hàng nghìn gói mở rộng cùng các style file.
- Bắt đầu với LaTeX tại Lưu trữ 2004-08-24 tại Wayback Machine của Nghệ thuật giải quyết vấn đề (Art of Problem Solving)
- TeXLive là bản phân phối dễ sử dụng dành cho những người mới làm quen với TeX.
- TeXShop: Trình soạn thảo miễn phí dành cho Mac OS X.
- MiKTeX Lưu trữ 2005-09-07 tại Wayback Machine: Bản phân phối cập nhật của TeX trên hệ thống Windows (tất cả các phiên bản hiện tại) cho kiến trúc x86.
- fpTeX Lưu trữ 2005-03-21 tại Wayback Machine: Phiên bản cập nhật của tetex dành cho Windows.
- Trang web TeX trên Mac OS X Lưu trữ 2003-04-01 tại Wayback Machine
- FAQ Lưu trữ 2004-04-05 tại Wayback Machine của nhóm người dùng TeX ở Vương quốc Anh
- ConTeXt Wiki Lưu trữ 2008-08-07 tại Wayback Machine và Trang chủ tại Pragma+
- Donald E. Knuth, The TeXbook (Computers and Typesetting Volume A), Reading, Massachusetts: Addison-Wesley, 1984. ISBN 0-201-13448-9. Mã nguồn sách Lưu trữ 2007-09-27 tại Wayback Machine có trên CTAN.
- Victor Eijkhout, TeX by Topic Lưu trữ 2021-02-25 tại Wayback Machine: Sách tham khảo cho lập trình viên, tải về miễn phí
- TeX for the Impatient Lưu trữ 2006-09-24 tại Wayback Machine, một hướng dẫn cơ bản, có bản quyền GFDL.
- Norman Walsh, Making TeX Work: Sách trực tuyến miễn phí.
- Stefan Schwarz và Rudolf Potucek, TeXikon Lưu trữ 2005-03-05 tại Wayback Machine: (tiếng Đức) tài liệu tham khảo cho hơn 1400 lệnh TeX và LaTeX trực tuyến.
- Omega Lưu trữ 2004-08-12 tại Wayback Machine (phiên bản 16 bit của TeX, bao gồm phiên bản lambda cho LaTeX)
- TeXnicCenter: Môi trường phát triển tích hợp (IDE) cho LaTeX trên Windows, miễn phí theo GPL.
- Simon Eveson, An Introduction to Mathematical Document Production Using AmSLaTeX Lưu trữ 2005-05-12 tại Wayback Machine
- GNU TeXmacs: Trình soạn thảo khoa học miễn phí.
- vnTeX: Hỗ trợ tiếng Việt cho TeX.
- OmegaVN Lưu trữ 2005-03-21 tại Wayback Machine: Hỗ trợ tiếng Việt khi sử dụng Omega.
- ViệtTUG Lưu trữ 2006-10-14 tại Wayback Machine, nhóm người Việt sử dụng TeX.