> 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/vi/bai-viet-chuyen-sau/49-the-tex-family-tree-latex-pdftex-xetex-luatex-and-context.md).

# Gia phả họ TeX: LaTeX, pdfTeX, XeTeX, LuaTeX và ConTeXt

Câu chuyện về LaTeX bắt nguồn tận năm 1977, khi Donald Knuth lần đầu tiên nhận ra nhu cầu về một chương trình dàn trang chất lượng cao. Đây là minh chứng đáng chú ý cho chất lượng của LaTeX: hệ thống mà ông hình dung khi đó đến nay vẫn là công cụ tốt nhất cho công việc này, dù từ đó đến nay đã có nhiều bổ sung hữu ích được thực hiện qua nhiều thập kỷ. Thực ra, LaTeX là một trong những bổ sung như vậy cho hệ thống gốc mà Donald Knuth đã phát triển, có tên là [TeX](http://www.tug.org/).

Để giữ "độ ngầu" trong thế giới LaTeX, bạn phải viết nó với chữ T và X viết hoa, và phát âm nó như Lay-Tech. Sở dĩ vậy là vì chữ X trong TeX thực ra là một chữ Chi viết hoa (χ) trong tiếng Hy Lạp. Còn latex với cách viết hoa và phát âm bình thường là một loại cao su!

## TeX gốc

Có cả một họ lớn các công cụ hiện nay được phát triển từ TeX, và thoạt nhìn chúng có thể giống như một danh sách những từ vô nghĩa: LaTeX, pdfTeX, XeLaTeX, LuaTeX, ConTeXt, v.v. Tổ tiên của tất cả những công cụ này dĩ nhiên là chương trình TeX nguyên bản của Knuth. Nó nhận một tài liệu văn bản thuần túy và biến nó thành một tài liệu được dàn trang đẹp mắt. Knuth rất kỹ tính về việc dàn trang và sự chú ý đến từng chi tiết trong TeX là rất rõ ràng. Một tài liệu TeX mẫu có thể trông như thế này:

```latex
\TeX{} rất giỏi dàn trang các từ như `fjord', `efficiency',
và `fiasco'. Nó cũng rất giỏi dàn trang các công thức toán như,
$a^2 + b^2 = c^2$.
\bye
```

Kết quả sau khi cho nó chạy qua chương trình TeX là:

![Texsample.png](/files/a65a12bcab8dde37547f7dc2c6918f494398ee94)

Hãy để ý cách các tổ hợp chữ cái 'fi', 'fj' và 'ff' trong các từ ví dụ hòa vào nhau một cách dễ chịu, và cách các ký hiệu toán học được đặt khoảng cách hợp lý. Ở quy mô lớn hơn, TeX làm rất tốt việc ngắt dòng ở những vị trí thích hợp để tạo ra văn bản canh đều đẹp, với các chỗ gạch nối khi cần.

Không chỉ dàn trang văn bản đẹp, nó còn có một loạt lệnh, như `\bye` và `\TeX` trong ví dụ ở trên. Những lệnh này có thể làm những việc đơn giản như thay đổi cỡ chữ, hoặc thay đổi cách bố cục văn bản, cũng như những việc mạnh hơn nhiều như giữ số mục để tham chiếu chéo các trang của bạn, hoặc tự động xây dựng mục lục. Chương trình TeX có sẵn khoảng 300 lệnh, nhưng các lệnh khác cũng có thể được định nghĩa bên trong nó. Donald Knuth đã viết thêm khoảng 600 lệnh hữu ích nữa từ trong TeX, trong một gói có tên Plain TeX, giúp một số tác vụ dàn trang phổ biến trở nên dễ hơn.

## LaTeX

Các lệnh trong TeX và Plain TeX vẫn còn khá cơ bản và không dễ để làm những việc phức tạp với chúng. Để khắc phục điều này, Leslie Lamport đã tạo ra [LaTeX](http://www.latex-project.org/) vào đầu những năm 1980 để cung cấp một ngôn ngữ ở mức cao hơn TeX để làm việc. LaTeX là một tập hợp các lệnh được định nghĩa dựa trên các lệnh TeX nền tảng, thường ở rất nhiều tầng trừu tượng. Tất cả các lệnh bạn dùng trong một tài liệu LaTeX thực ra chỉ là những tập hợp lệnh TeX phức tạp ở bên dưới, trừ khi dĩ nhiên bạn dùng trực tiếp một lệnh TeX! Các khái niệm như gói (`\usepackage{...}`), môi trường (`\begin{environment} ... \end{environment}`), và lớp tài liệu (`\documentclass{...}`) đều được Leslie Lamport giới thiệu trong LaTeX.

Bằng cách tạo ra một hệ thống gói được chuẩn hóa cho LaTeX, Leslie Lamport đã cho phép cộng đồng phát triển cực kỳ lớn mạnh. Hiện nay có hàng nghìn, hàng nghìn gói LaTeX sẵn có để bạn dàn trang bất cứ thứ gì, từ các hình phụ cho đến các mẫu đan lát. Cũng có rất nhiều lớp tài liệu dành cho các loại tài liệu khác nhau, चाहे bạn đang viết sách, báo cáo thí nghiệm hay CV. Nhiều nhà xuất bản và tạp chí có các lớp tài liệu tùy chỉnh riêng để định kiểu tài liệu theo ý họ.

## pdfTeX

Chương trình TeX ổn định đến đáng kinh ngạc đối với một phần mềm đã hơn 20 năm tuổi; Knuth tuyên bố rằng nó đã hoàn thiện về tính năng vào năm 1989, và từ đó đến nay chỉ có các bản sửa lỗi. Dĩ nhiên, điều này không ngăn cản sự phát triển đáng kể và liên tục của LaTeX, vì nó được viết ngay trong TeX. Thực ra, sự ổn định của TeX đã cho phép những gói như LaTeX, vốn được xây dựng trên nó, phát triển mạnh.

Điều này không có nghĩa là chương trình TeX nền tảng đã không có bất kỳ tiến bộ nào trong 20 năm qua. Thực ra hoàn toàn không phải vậy, chỉ là các cải tiến đã được thực hiện song song với TeX, còn TeX gốc vẫn được giữ ổn định. Cải tiến quan trọng nhất của thập niên 1990 là việc tạo ra [pdfTeX](http://www.tug.org/applications/pdftex/) bởi Hàn Thế Thành cho luận án tiến sĩ của ông. Chương trình TeX gốc xuất tài liệu đã dàn trang ra một định dạng tùy chỉnh gọi là DVI (định dạng DeVice Independent), sau này có thể được chuyển thành một tệp PostScript để in. Tuy nhiên, định dạng PDF xuất hiện vào năm 1993 và ta có thể thấy ngày nay rằng nó rõ ràng đã thắng thế như một định dạng tốt hơn PostScript. Có rất nhiều tính năng làm cho PDF tốt hơn, như siêu liên kết giữa các phần, một phần siêu dữ liệu cho phép bạn xem mục lục ở khung bên trái của trình xem PDF, và hỗ trợ nhiều định dạng ảnh hiện đại hơn và đa dạng hơn. pdfTeX là một biến thể của TeX cho phép nó xuất thẳng ra PDF và nhờ đó tận dụng được những tính năng bổ sung này.

Khi bạn cài một bản phân phối LaTeX trên hệ thống của mình ngày nay, nó thực ra đi kèm với hai chương trình khác nhau: `thư mục tex`, và `pdftex`. Nó còn đi kèm thêm hai chương trình nữa bên trên đó: `latex` và `pdflatex`, nhưng thực ra đây chỉ là các lớp bao bọc quanh `thư mục tex` và `pdftex` tương ứng. Chúng trước hết nạp các gói LaTeX trước khi xử lý tài liệu của bạn nhưng bên dưới vẫn là TeX. Nếu bạn chạy `latex` hoặc `thư mục tex` thì bạn sẽ có một tệp DVI, từ đó có thể chuyển thành tệp postscript hoặc PDF, nhưng nếu bạn chạy `pdflatex` thì bạn sẽ có PDF trực tiếp.

Phần lớn, `pdftex` và `pdflatex` là những cải tiến so với `thư mục tex` và `latex`, nhưng có một nhược điểm. TeX gốc và định dạng DVI có hỗ trợ các tệp Encapsulated PostScript (`.eps`) vì chúng có thể dễ dàng được chèn vào các tệp PostScript (được tạo ra bằng cách chuyển đổi `.dvi` các tệp thành Postscript thông qua [`Dvips`](https://www.tug.org/texinfohtml/dvips.html)). Tuy nhiên, `pdftex` không thể chèn các tệp EPS, và thay vào đó bạn nên dùng PDF (có thể được tạo từ các tệp EPS bằng lệnh `epstopdf` thường đi kèm với các bản phân phối LaTeX). Đổi lại cho nhược điểm này, pdfTeX bổ sung hỗ trợ cho `.png`, `.jpg` và `.pdf` các ảnh, trong khi TeX gốc chỉ hỗ trợ .eps (thông qua [`Dvips`](https://www.tug.org/texinfohtml/dvips.html)).

## XeLaTeX và LuaTeX

Cho đến nay, ta đã thấy rằng TeX đã phát triển theo hai hướng khác nhau kể từ khi ra đời: bằng việc bổ sung các lệnh dễ dùng hơn lên trên hệ thống gốc (LaTeX), và bằng việc cập nhật chương trình nền tảng để hỗ trợ xuất PDF (pdfTeX). Tuy nhiên câu chuyện không dừng ở đó và đã có những nỗ lực liên tục nhằm hiện đại hóa TeX. Năm 2004, Jonathon Kew đã tạo ra [XeTeX](http://tug.org/xetex/), là một sửa đổi khác của bộ máy TeX nền tảng, lần này để hỗ trợ một phạm vi ký tự rộng hơn chứ không chỉ các số và chữ cái tiếng Anh thuần túy, và để bổ sung hỗ trợ cho các định dạng phông chữ hiện đại. Điều này khiến việc viết bằng các ngôn ngữ nước ngoài dễ hơn nhiều, đồng thời còn cho phép bạn dùng các phông chữ trong LaTeX vốn trước đây chỉ có trong trình soạn thảo văn bản của bạn.

[LuaTeX](http://www.luatex.org/) là một nỗ lực mở rộng chương trình TeX gốc bằng một ngôn ngữ lập trình hợp lý hơn. Về nguyên tắc, bạn có thể làm абсолютно mọi thứ từ bên trong TeX, nhưng trên thực tế đây là một ngôn ngữ lập trình rất vụng về để làm việc, nếu thậm chí có thể gọi nó là một ngôn ngữ lập trình. Phần lớn nội bộ của LaTeX khá phức tạp và khó để người ngoài hiểu được vì phải chỉ làm việc trong TeX. LuaTeX được mở rộng bằng ngôn ngữ kịch bản cùng tên, Lua, một ngôn ngữ đơn giản và ổn định, rất lý tưởng để viết các macro phức tạp. Tính đến năm 2012, nó vẫn đang được phát triển tích cực và API của nó có thể thay đổi, nhưng nó vẫn rất dễ dùng.

## ConTeXt

Chúng ta đã nhắc đến LaTeX như một phần mở rộng cho các lệnh có sẵn trong TeX, nhưng đó không phải là gói duy nhất đã mở rộng TeX theo cách đáng kể. [ConTeXt](http://wiki.contextgarden.net/What_is_ConTeXt) là một hệ thống khác được tạo ra vào năm 1990 bởi Hans Hagen. LaTeX nhằm tách người dùng khỏi việc phải đưa ra các quyết định về kiểu chữ và bố cục (bạn gõ `\section` và `\emph` nhưng bạn không phải lo nó làm gì - phần đó để lớp tài liệu hoặc bố cục lo). Mặt khác, ConTeXt nhằm cung cấp một giao diện dễ dùng cho các tính năng kiểu chữ nâng cao. Đáng tiếc là tôi không biết nhiều về ConTeXt như mình mong muốn, nên tôi không thể nói chi tiết hơn nhiều, nhưng nếu có lúc nào đó tôi thử nghiệm với nó nhiều hơn, tôi chắc chắn sẽ viết lại những phát hiện của mình.

Như một ghi chú lịch sử cuối cùng, tôi nên nhắc đến [AMSTeX](http://en.wikipedia.org/wiki/AMS-LaTeX) là một phần mở rộng của các macro Plain TeX và được Hội Toán học Hoa Kỳ (AMS) sử dụng từ năm 1982 đến 1985. Di sản của nó vẫn còn trong các gói AMS-LaTeX, vốn là một phần không thể thiếu trong nhiều tài liệu LaTeX: `\usepackage{amsmath}`.

## Tương lai

Tương lai của TeX và LaTeX sẽ ra sao? Tôi chưa biết, nhưng như Alan Kay từng nói:

> Cách tốt nhất để dự đoán tương lai là tự tạo ra nó.

Với ShareLaTeX, chúng tôi hy vọng sẽ cải thiện TeX và LaTeX theo một hướng thứ ba, bằng cách mang đến những cải tiến đáng kể cho quy trình làm việc LaTeX. Dù đã hơn 20 năm tuổi, LaTeX vẫn chủ yếu là một chương trình dòng lệnh phải được dùng qua một vòng lặp khó chịu gồm viết, biên dịch và kiểm tra đầu ra. Các phương thức cộng tác có xu hướng dựa vào những email cồng kềnh thay vì các quy trình gọn gàng sẵn có cho soạn thảo văn bản như Google Tài liệu.


---

# 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/vi/bai-viet-chuyen-sau/49-the-tex-family-tree-latex-pdftex-xetex-luatex-and-context.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.
