> 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/chu-de-khac/39-mltex-enctex-and-synctex-tex-extensions.md).

# Các phần mở rộng TeX MLTeX, EncTeX và SyncTeX

## Một số chi tiết bối cảnh về các phần mở rộng của TeX

TeX có một lịch sử phát triển rất dài—nay đã hơn 4 thập kỷ! Trong thời gian đó, các “phiên bản” mới của TeX đã được phát triển—chẳng hạn như e-TeX, pdfTeX, XeTeX, LuaTeX, v.v. Ngoài các bộ máy hoàn toàn mới, với cả một bộ tính năng bổ sung, còn có nhiều *phần mở rộng* thường tập trung vào việc triển khai một tính năng cụ thể để nâng cao phần mềm gốc của Knuth.

Với sự xuất hiện của các bộ máy TeX hiện đại, như XeTeX và LuaTeX, nhu cầu và việc sử dụng một số phần mở rộng TeX cũ đã giảm dần, vì các bộ máy TeX mới hơn mang đến các chức năng bổ sung mạnh mẽ—chẳng hạn như hỗ trợ tích hợp cho văn bản được mã hóa UTF-8. Mục đích của trang này là cung cấp một vài ghi chú về các phần mở rộng, bao gồm MLTeX và EncTeX, mà bạn vẫn có thể thấy được nhắc đến trong [các tùy chọn dòng lệnh của bộ máy TeX](/latex/vi/chu-de-khac/44-tex-engine-command-line-options-for-pdftex-xetex-and-luatex.md). MLTeX và EncTeX hiện đều không còn được phát triển, nhưng một phần mở rộng rất hữu ích, SyncTeX, vẫn tiếp tục được phát triển tích cực và được Overleaf hỗ trợ.

## MLTeX

*TeX đa ngôn ngữ*, hay MLTeX, được phát triển trong các năm 1992–5 như một sửa đổi của TeX để cho phép ngắt từ đối với các từ có chữ cái có dấu bằng cách sử dụng các phông Computer Modern (CM) thông thường.

### Kích hoạt (bật) MLTeX

MLTeX được thiết kế để hoạt động như một phần của cái gọi là `.fmt` (tệp định dạng), mà trên thực tế là một phiên bản nhị phân được biên dịch sẵn của một bộ macro TeX. Để tạo các tệp định dạng, bạn đưa một bộ máy TeX vào cái gọi là `INI` chế độ, xử lý bộ sưu tập macro rồi phát ra lệnh `\dump` để ghi ra `.fmt` tệp. Xem [bài viết này](/latex/vi/bai-viet-chuyen-sau/50-the-two-modes-of-tex-engines-ini-mode-and-production-mode.md) để thảo luận về các chế độ INI.

Để bật MLTeX, *đối với những bộ máy hỗ trợ nó*, chẳng hạn như pdfTeX, bạn sẽ viết

```
pdftex -ini -mltex *pdfetex.ini
```

trong đó `pdfetex.ini` là một tệp có trong bản phân phối TeX Live.

**Tại sao dấu hoa thị (`*`)?** Dấu hoa thị đưa pdfTeX vào cái gọi là “chế độ mở rộng”, cho phép hỗ trợ các nguyên thủy e-TeX. Nếu bạn bỏ nó và gõ `pdftex -ini -mltex pdfetex.ini` bạn sẽ nhận được một lỗi:

```
Đây là pdfTeX, Phiên bản 3.14159265-2.6-1.40.19 (INITEX)
 \write18 được bật.
MLTeX v2.2 được bật
(c:/texmf-dist/tex/plain/config/pdfetex.ini
(c:/texmf-dist/tex/generic/tex-ini-files/pdftexconfig.tex)
(c:/texmf-dist/tex/plain/etex/etex.src

! Lỗi nghiêm trọng e-TeX: tệp này chỉ có thể được xử lý ở chế độ mở rộng;
  bạn có quên dấu hoa thị không?
```

**Lưu ý**: Thay vì dùng dấu hoa thị để bật “chế độ mở rộng”, bạn có thể dùng `-etex` tùy chọn dòng lệnh thay thế:

```
pdftex -ini -etex -mltex pdfetex.ini
```

**Lưu ý**: Dùng `-mltex` tùy chọn trên dòng lệnh với một `.fmt` tệp đã *không được tạo* với MLTeX được bật sẽ *không* hoạt động: MLTeX phải được “kích hoạt” thông qua một tệp định dạng phù hợp.

Khi bạn dùng `-mltex` tùy chọn trong quá trình `.fmt` tạo tệp, một biến boolean với giá trị “đúng” được ghi vào `.fmt` tệp, báo cho bộ máy TeX biết rằng các phần mở rộng MLTeX đã được kích hoạt và phải sẵn có cho người dùng. Nếu bạn không đặt rõ ràng `-mltex` tùy chọn thì biến tương ứng sẽ là “sai”. Nếu giá trị của biến đó được phát hiện là “sai” (khi tệp đó `.fmt` được nạp lại trong một lần chạy TeX) thì việc cố sử dụng các phần mở rộng MLTeX sẽ dẫn đến một `Lệnh không xác định...` lỗi—vì các nguyên thủy MLTeX sẽ không được đăng ký (nạp) và do đó không được nhận diện.

Sau khi chạy `pdftex -ini -mltex *pdfetex.ini` trên dòng lệnh và bạn sẽ thấy một đoạn tương tự như văn bản sau, cho biết MLTeX v2.2 đã được bật:

```
Đây là pdfTeX, Phiên bản 3.14159265-2.6-1.40.19 (INITEX)
\write18 được bật.
đang vào chế độ mở rộng
MLTeX v2.2 được bật
....
....
....
Bắt đầu ghi ra tệp pdfetex.fmt
....
Không có trang nào được xuất ra.
Bản ghi được ghi vào pdfetex.log.
```

Điều này tạo ra một `.fmt` tệp có tên `pdfetex.fmt` cho phép bạn sử dụng các lệnh MLTeX:

```
pdftex -fmt=pdfetex <yourfile.tex>
```

trong đó `<yourfile.tex>` có thể sử dụng các nguyên thủy riêng của MLTeX

MLTeX ban đầu được phân phối dưới dạng một tệp thay đổi riêng, [mltex.ch](http://tug.ctan.org/systems/generic/mltex/mltex.ch), có thể được ghép với mã nguồn chủ của Knuth ([`tex.web`](https://ctan.org/tex-archive/systems/knuth/dist/tex?lang=en)) để tạo ra một phiên bản mới của TeX, gọi là MLTeX, chứa một số nguyên thủy mới. Ngày nay, mã MLTeX từ `mltex.ch` được gộp vào `tex.ch` tệp thay đổi chính được dùng để xây dựng gần như tất cả các bộ máy TeX.

### Các nguyên thủy MLTeX

Các ghi chú sau đây chủ yếu được chuẩn bị và sao chép từ tệp `web2c.info` có trong [TeX Live](https://tug.org/texlive/) bản phân phối.

* **`\charsubdef`**: Định nghĩa thay thế ký tự. Khai báo cách tạo một hình vị ký tự có dấu (không nhất thiết tồn tại trong phông hiện tại) bằng hai hình vị ký tự (có tồn tại).

  ```
  \charsubdef COMPOSITE [=] ACCENT BASE
  ```

  Mỗi COMPOSITE, ACCENT và BASE đều là số hình vị phông, được biểu diễn theo cú pháp TeX thông thường: \`\e\` theo ký hiệu, '145 cho hệ bát phân, "65 cho hệ thập lục phân, 101 cho hệ thập phân. Vì vậy nó xác định xem một mã hình vị ký tự, dù được nhập dưới dạng một ký tự đơn hay bằng cách dùng `\char` nguyên thủy, sẽ được ánh xạ tới một hình vị phông hay tới một `\accent` cách tạo hình vị.

  Ví dụ, nếu bạn giả sử mã hình vị 138 (thập phân) cho e-mũ và bạn đang dùng các phông Computer Modern, vốn có dấu mũ ở vị trí 18 và chữ thường ‘e’ ở vị trí ASCII thông thường 101 thập phân, bạn sẽ dùng `\charsubdef` như sau:

  ```
  \charsubdef 138 = 18 101
  ```
* **`\charsubdefmax`**: Đặt giá trị lớn nhất trong `\charsubdef` danh sách. Ví dụ:

  ```
  \charsubdefmax=-1 % vô hiệu hóa tất cả các thay thế
  \charsubdefmax=256 % bật tất cả các thay thế
  ```
* **`\tracingcharsubdef`**: Theo dõi các phép thay thế. Để giúp chẩn đoán các vấn đề với `\charsubdef`, MLTeX cung cấp một tham số nguyên thủy, `\tracingcharsubdef`. Nếu dương, mọi lần sử dụng của `\charsubdef` sẽ được báo cáo. Điều này có thể giúp tìm ra khi nào một ký tự được định nghĩa lại.

## EncTeX

EncTeX được phát triển trong các năm 1997–2004 như một phần mở rộng TeX cung cấp việc mã hóa lại đầu vào/đầu ra linh hoạt thông qua việc bổ sung các nguyên thủy mới—ví dụ, một cách để chuyển đổi đầu vào trên đường vào TeX. Nó cho phép, chẳng hạn, chuyển đổi các chuỗi nhiều byte, như mã hóa UTF-8, để sử dụng trong các bộ máy TeX 8-bit tiêu chuẩn.

### Kích hoạt (bật) EncTeX

Cũng như MLTeX, EncTeX cũng được thiết kế để hoạt động như một phần của cái gọi là `.fmt` (tệp định dạng)–xem [MLTeX](#mltex), ở trên, để giải thích về các tệp định dạng/chế độ INI.

Để bật EncTeX, *đối với những bộ máy hỗ trợ nó*, chẳng hạn như pdfTeX, bạn sẽ tạo một tệp định dạng đã bật EncTeX bằng cách viết

```
pdftex -ini -enc *pdfetex.ini
```

trong đó `pdfetex.ini` là một tệp có trong bản phân phối TeX Live.

**Tại sao dấu hoa thị (`*`)?** Dấu hoa thị đưa pdfTeX vào cái gọi là “chế độ mở rộng”, cho phép hỗ trợ các nguyên thủy e-TeX. Nếu bạn bỏ nó và gõ `pdftex -ini -mltex pdfetex.ini` bạn sẽ nhận được một lỗi:

```
Đây là pdfTeX, Phiên bản 3.14159265-2.6-1.40.19 (INITEX)
 \write18 được bật.
MLTeX v2.2 được bật
(c:/texmf-dist/tex/plain/config/pdfetex.ini
(c:/texmf-dist/tex/generic/tex-ini-files/pdftexconfig.tex)
(c:/texmf-dist/tex/plain/etex/etex.src

! Lỗi nghiêm trọng e-TeX: tệp này chỉ có thể được xử lý ở chế độ mở rộng;
  bạn có quên dấu hoa thị không?
```

**Lưu ý**: Thay vì dùng dấu hoa thị để bật “chế độ mở rộng”, bạn có thể dùng `-etex` tùy chọn dòng lệnh thay thế:

```
pdftex -ini -etex -mltex pdfetex.ini
```

Tính năng `-enc` tùy chọn dòng lệnh này kích hoạt bộ máy pdfTeX bật EncTeX bằng cách ghi một số dữ liệu vào `pdfetex.fmt` tệp định dạng kết quả.

**Lưu ý**: Dùng `-enc` tùy chọn trên dòng lệnh với một `.fmt` tệp đã *không được tạo* với EncTeX được bật sẽ *không* hoạt động: EncTeX phải được “kích hoạt” thông qua một tệp định dạng được tạo phù hợp.

### Các nguyên thủy EncTeX

EncTeX bổ sung 10 lệnh nguyên thủy mới cho bộ máy TeX:

* 3 nguyên thủy trong bản phát hành đầu tiên (1997):
* `\xordcode`
* `\xchrcode`
* `\xprncode`
* 7 nguyên thủy bổ sung (để hỗ trợ UTF-8) vào năm 2003:
* `\mubyte`
* `\endmubyte`
* `\mubytein`
* `\mubyteout`
* `\mubytelog`
* `\specialout`
* `\noconvert`

Việc sử dụng và hành vi của các nguyên thủy này được tài liệu hóa rất rõ trong [sổ tay tham khảo EncTeX](http://mirrors.ctan.org/systems/enctex/encdoc-e.pdf), do tác giả của EncTeX, Petr Olšák, viết. Để tránh lặp lại không cần thiết ở đây, độc giả quan tâm có thể xem tài liệu đó.

### Thông tin thêm về EncTeX

* [Phiên bản thứ hai của EncTeX: hỗ trợ UTF-8](http://mirrors.ctan.org/systems/enctex/eurotex2003-enctex.pdf): một bài viết của tác giả EncTex, Petr Olšák.
* [sổ tay tham khảo EncTeX](http://mirrors.ctan.org/systems/enctex/encdoc-e.pdf) (bằng tiếng Anh).

### Kích hoạt (bật) cả MLTeX và EncTeX

Để bật cả MLTeX và EncTeX, bạn sẽ tạo một tệp định dạng phù hợp bằng một dòng lệnh như

```
pdftex -ini -enc -mltex *pdfetex.ini
```

trong đó `pdfetex.ini` là một tệp có trong bản phân phối TeX Live.

**Tại sao dấu hoa thị (`*`)?** Dấu hoa thị đưa pdfTeX vào cái gọi là “chế độ mở rộng”, cho phép hỗ trợ các nguyên thủy e-TeX. Nếu bạn bỏ nó và gõ `pdftex -ini -enc -mltex pdfetex.ini` bạn sẽ nhận được một lỗi:

```
Đây là pdfTeX, Phiên bản 3.14159265-2.6-1.40.19 (INITEX)
 \write18 được bật.
MLTeX v2.2 được bật
(c:/texmf-dist/tex/plain/config/pdfetex.ini
(c:/texmf-dist/tex/generic/tex-ini-files/pdftexconfig.tex)
(c:/texmf-dist/tex/plain/etex/etex.src

! Lỗi nghiêm trọng e-TeX: tệp này chỉ có thể được xử lý ở chế độ mở rộng;
  bạn có quên dấu hoa thị không?
```

**Lưu ý**: Thay vì dùng dấu hoa thị để bật “chế độ mở rộng”, bạn có thể dùng `-etex` tùy chọn dòng lệnh thay thế:

```
pdftex -ini -etex -enc -mltex pdfetex.ini
```

Sau khi chạy dòng lệnh ở trên, bạn sẽ thấy một thông báo như sau để cho biết rằng cả MLTeX và EncTeX đều đã được bật:

```
Đây là pdfTeX, Phiên bản 3.14159265-2.6-1.40.19 (INITEX)
 \write18 được bật.
đang vào chế độ mở rộng
MLTeX v2.2 được bật
 encTeX v. Jun. 2004, reencoding enabled.
....
....
....
Bắt đầu ghi ra tệp pdfetex.fmt
....
Không có trang nào được xuất ra.
Bản ghi được ghi vào pdfetex.log.
```

và `pdfetex.fmt` tệp định dạng, bật cả MLTeX và EncTeX, sẽ được tạo ra.

## SyncTeX

Phần mở rộng SyncTeX đã có từ năm 2008 và tiếp tục được tác giả của nó, Jérôme Laurens, phát triển tích cực. Nó được sử dụng rộng rãi, bao gồm cả bởi Overleaf, và được hỗ trợ bởi tất cả các bộ máy TeX đang được dùng ngày nay.

### SyncTeX làm gì?

Khi xem một tài liệu được dàn trang bởi TeX, có lẽ để hiệu đính/kiểm tra trước khi nộp cho nhà xuất bản, bạn có thể phát hiện một lỗi và cần sửa nó trong mã nguồn TeX. Tuy nhiên, việc tìm đúng vị trí trong tệp TeX có thể khó khăn, đặc biệt nếu đó là một tài liệu lớn. Tương tự, bạn có thể muốn làm theo chiều ngược lại: nhảy từ một vị trí trong tệp mã nguồn TeX trực tiếp đến vị trí trang trong bản PDF đã dàn trang cuối cùng. Trong cả hai trường hợp, cần phải *đồng bộ hóa* một vị trí cụ thể trong tệp TeX và vị trí tương ứng của nó trong phần hiển thị kết quả dàn trang: và đó chính là điều SyncTeX cung cấp—một cách để tự động liên kết các vị trí trong tệp TeX với các vị trí trang trong tài liệu đã dàn trang.

Nếu SyncTeX được bật, nó sẽ ghi ra một tệp đặc biệt với phần mở rộng `.synctex.gz` (được nén gz) hoặc `.synctex` (không nén) tùy theo [các tùy chọn dòng lệnh được cung cấp cho SyncTeX](#synoptions). Các trình soạn thảo văn bản hỗ trợ SyncTeX và (phần lớn) trình xem PDF có thể dùng các tệp đó để thực hiện việc đồng bộ hóa cần thiết giữa đầu vào (mã TeX) và đầu ra (hiển thị PDF đã dàn trang). Rõ ràng, điều này không thể chỉ “tự xảy ra” nếu trình soạn thảo văn bản và trình xem tài liệu PDF của người dùng không có chức năng phù hợp cho phép giao tiếp vị trí giữa tệp văn bản/trình xem PDF—dựa trên dữ liệu chứa trong tệp `.synctex.gz` (hoặc `.synctex`được ghi ra bởi SyncTeX.

Ngoài chức năng bên trong bộ máy TeX—để tạo `.synctex.gz` các tệp—SyncTeX còn cung cấp một [bộ phân tích](https://github.com/jlaurens/synctex/) đặc biệt `.synctex.gz` (hoặc `.synctex`đọc các tệp

### để trích xuất thông tin vị trí trang/dòng liên quan. Các ứng dụng sử dụng bộ phân tích đó để hỗ trợ SyncTeX.

Các bộ máy TeX hỗ trợ SyncTeX có hai cách để kích hoạt/tắt SyncTeX:

* một tùy chọn dòng lệnh: `-synctex=NUMBER`
* một lệnh trong `.tex` tệp: lệnh `\synctex` nguyên thủy

### Sử dụng SyncTeX trên dòng lệnh

Bạn có thể sử dụng `-synctex=NUMBER` tùy chọn khi bạn chạy một bộ máy TeX hỗ trợ SyncTeX, chẳng hạn như pdfTeX.

#### Ví dụ

* Bật SyncTeX: đầu ra `.synctex.gz` (tệp nén gz):

```
pdftex -synctex=1 myfile.tex
```

Tạo ra `myfile.synctex.gz`

* Bật SyncTeX: đầu ra `.synctex` (tệp không nén):

```
pdftex -synctex=-1 myfile.tex
```

Tạo ra `myfile.synctex`

* Tắt SyncTeX:

```
pdftex -synctex=0 myfile.tex
```

Không tạo ra đầu ra SyncTeX.

### nguyên thủy duy nhất của SyncTeX

SyncTeX cung cấp một nguyên thủy, `\synctex`, mà người dùng có thể thêm vào các `.tex` tệp:

* Bật SyncTeX: `\synctex=1`
* Tắt SyncTeX: `\synctex=0`

### Thông tin thêm về SyncTeX

* [Một bài viết trên TUGBoat của Jérôme Laurens](http://www.tug.org/TUGboat/tb29-3/tb93laurens.pdf), tác giả của SyncTeX.
* Tính năng [Kho lưu trữ GitHub](https://github.com/jlaurens/synctex) của bộ phân tích SyncTeX.


---

# 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/chu-de-khac/39-mltex-enctex-and-synctex-tex-extensions.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.
