> 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/co-so-tri-thuc/066-how-to-find-and-fix-errors-reported-in-generated-files.md).

# Cách tìm và sửa lỗi được báo trong các tệp được tạo ra

## Giới thiệu

Đôi khi Overleaf sẽ báo cáo các lỗi phát sinh từ những tệp có tên như `output.toc`, `output.bbl`, v.v., nhưng những tệp đó *thậm chí không tồn tại trong dự án của bạn*. Vậy những tệp như vậy *đến từ đâu* và quan trọng hơn, bạn làm thế nào để *tìm* và *sửa* các lỗi đó?

> ![Gen-toc-error.png](/files/dda53be06b0e7f4ce17a9e17a4960dd1aa2a2716) “Nhưng tôi thậm chí không **đã** có `output.toc` tệp này trong dự án của tôi!”

Những “tệp bí ẩn” này là các tệp phụ: những tệp được tạo trong quá trình biên dịch LaTeX, nhưng chúng cũng có thể kích hoạt lỗi vốn thường bắt nguồn từ các vấn đề mã nguồn trong các tệp nguồn của dự án. Bài viết trợ giúp này sử dụng một [ví dụ thực tế đầy lỗi](#playing-detective-locating-errors-in-generated-files) để chỉ ra cách lần theo các lỗi đó đến điểm khởi phát trong (các) tệp nguồn dự án của bạn.

## Các tệp được tạo trong quá trình biên dịch LaTeX

Ngoài tệp đầu ra `.pdf` tệp, quá trình biên dịch LaTeX tạo ra một số loại tệp chứa thông tin về nhãn, tham chiếu chéo, số trang, v.v. Một số loại tệp phụ không được tạo trực tiếp bởi trình biên dịch LaTeX mà bởi các công cụ xử lý khác được dùng trong quá trình sắp chữ: ví dụ, danh sách tài liệu tham khảo và chỉ mục đã định dạng. Các tệp được tạo này phải được trình biên dịch đọc trong các lần chạy tiếp theo, để tệp cuối cùng `.pdf` được điền đúng danh sách, trích dẫn và tham chiếu chéo.

Việc LaTeX và các công cụ xử lý liên quan cần ghi và đọc các tệp dữ liệu phụ có nghĩa là có thể cần nhiều bước biên dịch/xử lý trước khi toàn bộ tập dữ liệu tệp hội tụ (ổn định) để tạo ra tệp cuối cùng đã sắp chữ (ổn định) `.pdf` tệp. Một chu trình sắp chữ điển hình có thể là:

`pdflatex`$$\mapsto$$`bibtex`$$\mapsto$$`pdflatex`$$\mapsto$$`pdflatex`

Trên một bản cài đặt LaTeX cục bộ, bạn có thể cần tự thực hiện từng bước trung gian, hoặc dùng một công cụ xây dựng như [make](https://www.gnu.org/software/make/manual/), [latexmk](https://ctan.org/pkg/latexmk) hoặc [arara](https://ctan.org/pkg/arara), để tự động hóa chuỗi quy trình này. [Overleaf sử dụng latexmk](/latex/vi/co-so-tri-thuc/064-how-does-overleaf-compile-my-project.md), và video này cho thấy điều gì xảy ra mỗi khi bạn nhấp nút “Biên dịch lại” trong dự án Overleaf của mình.

{% embed url="<https://videos.ctfassets.net/nrgyaltdicpt/Uo3I2FXEI8H6aFPBZq171/e2139f9575a4db6955dc2278dc08283c/latexmk-ol.mp4>" %}

Thông thường, các tệp được tạo có cùng tên tệp với `.tex` tệp đang được biên dịch; ví dụ, nếu bạn đang biên dịch `**main**.tex`, các tệp được tạo sẽ có tên là `**main**.aux`, `**main**.toc`, `**main**.lof` v.v. Tuy nhiên, *trên Overleaf* việc biên dịch `\jobname` luôn được đặt thành `**output**`, vì vậy các [tệp được tạo](/latex/vi/co-so-tri-thuc/150-view-generated-files.md) từ dự án Overleaf của bạn luôn có tên `**output**.aux`, `**output**.toc`, `**output**.lof` v.v. Bạn có thể tải các tệp được tạo này xuống từ dự án Overleaf, nhưng không thể xem hoặc chỉnh sửa chúng trên Overleaf.

## Lỗi biên dịch được báo từ các tệp được tạo

Các lỗi mã hóa trong tệp dự án chính `.tex` có thể được chuyển sang các tệp được tạo. Ví dụ, một ký tự `&` trong `\section{Introduction & Background}` chưa được escape sẽ đi vào tệp được tạo `.toc` tệp. Khi tệp được tạo `.toc` sau đó được đọc vào trong lần `pdflatex` biên dịch tiếp theo, thông báo lỗi sẽ được đưa ra là “đến từ tệp .toc”. Tuy nhiên, nhật ký và cơ chế báo lỗi LaTeX hiện tại không liên kết các dòng trong `.toc` tệp (và các tệp được tạo khác) với vị trí gốc của chúng trong tệp nguồn `.tex` tệp: có thể không ngay lập tức rõ lỗi gốc cần được sửa ở đâu.

Đây là ví dụ về cách lỗi được trình bày trong một trình soạn thảo LaTeX khác: mặc dù bạn có thể nhấp vào thông báo lỗi để mở dòng liên quan trong tệp được tạo `.toc` hoặc `.aux` tệp, nhưng không có đường dẫn từ lỗi đến vị trí gốc trong `.tex` tệp. Và ngay cả khi bạn sửa lỗi bằng cách thay thế `&` với `\&` trong `.toc` tệp, điều đó thực sự không giải quyết vấn đề: lần tiếp theo bạn biên dịch `.tex` tệp, tệp `.toc` được tạo lại và cùng lỗi sẽ được ghi lại vào `.toc` .

![Texstudio-errors-generated-files.gif](/files/4e56cd45fd39b99b078ab9f72547b5a3815f7c0e)

Khi một lỗi được báo là đến từ các tệp được tạo, cách đúng để giải quyết là tìm lỗi gốc thực sự trong các tệp nguồn và sửa chúng. Thông báo lỗi thường bao gồm thông tin ngữ cảnh, một số văn bản hoặc mã xung quanh lỗi, vì vậy tìm kiếm văn bản trong các tệp nguồn sẽ giúp xác định vị trí. Bản thân các lỗi thường phổ biến: bạn có thể tra một số lỗi phổ biến trên [trang trợ giúp này](/latex/vi/kien-thuc-co-ban-ve-latex/05-errors.md), hoặc trong [danh sách FAQ TeX](https://texfaq.org/#errors).

## Trước tiên, hãy thử xóa các tệp được tạo

Đôi khi, lỗi trong các tệp được tạo là tàn dư từ lần biên dịch trước. Ngay cả khi bạn đã sửa lỗi trong tệp `.tex` và biên dịch lại, các tệp được tạo vẫn chứa lỗi có thể vẫn được trình biên dịch đọc, tạo ra cùng lỗi như trước. Bạn có thể thử xóa các tệp được tạo trước khi biên dịch lại. Hướng dẫn thực hiện việc này trên Overleaf có thể được tìm thấy [ở đây](/latex/vi/co-so-tri-thuc/028-clearing-the-cache.md).

Nếu bạn vẫn thấy cùng các lỗi ngay cả sau khi xóa mọi tệp được tạo và biên dịch lại, có khả năng có lỗi thực sự trong các tệp nguồn của bạn.

## Đóng vai thám tử: xác định lỗi trong các tệp được tạo

Các phần sau cung cấp một số mẹo về nơi tìm các lỗi như vậy. Chúng ta sẽ sử dụng *cố ý đầy lỗi* dự án ví dụ sau để thực hành điều tra. Sẵn sàng chưa? Bắt đầu nào!

[Mở một dự án Overleaf *đầy lỗi* !](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Demo+of+LaTeX+compile+errors+reported+from+generated+files\&main_document=main.tex\&snip_uri=https%3A%2F%2Fassets.ctfassets.net%2Fnrgyaltdicpt%2F5qdEqgUidaYDHjOlBoKM7K%2F55395921a114edb36ed3d51d7b1c6edb%2Fdemoerrors.zip) Dự án sẽ trông giống như thế này 😲:

![Hình ảnh hiển thị lỗi dự án LaTeX](/files/90ffb3ca12110825f15bdc613732ecf6a6bef620)

### Lỗi từ các tệp .aux

Tính năng `.aux` tệp chứa thông tin về việc sử dụng `\label{...}` các khai báo và `\cite{...}` trong `.tex` tệp, vì vậy đây là những điều hữu ích để kiểm tra.

Hãy xem lỗi đầu tiên này từ dự án ví dụ đầy lỗi của chúng ta.

![lỗi ví dụ trong tệp .aux do khai báo \label không hợp lệ](/files/ff9e9dbccc776f550f22c49e52369ea0b435182a)

Lỗi `Missing \endcsname inserted.` tại một `\alpha` ban đầu có thể khá khó hiểu và dường như không quá hữu ích cho việc gỡ lỗi. Nhưng từ văn bản (ngữ cảnh) của thông báo lỗi, chúng ta thấy nó xảy ra gần một đoạn mã có `sec:\alpha`, được liên kết với một nhãn hoặc bộ đếm mang số 1.1. Vì vậy, chúng ta có thể muốn xem kỹ bất kỳ `\label{...}` trong tệp `.tex` tệp nào chứa đoạn mã `sec:\alpha`.

Bạn sẽ sớm tìm đến dòng 37 của dự án ví dụ:

```latex
\label{sec:\alpha}
```

Đối số truyền cho `\label{...}` không được chứa bất kỳ lệnh LaTeX hoặc chuỗi điều khiển nào, chẳng hạn như `\alpha`. Vì vậy, sửa nhãn thành một dạng như `\label{sec:alpha}`, cũng như mọi `\ref{...}`tương ứng, sẽ xóa lỗi này.

Đây là một lỗi khác được báo từ tệp `.aux` trong dự án ví dụ của chúng ta:

![lỗi ví dụ trong tệp .aux do khoảng trắng trong khóa \cite{...}](/files/f828f420dc8a1867f86e9ae2f4982682b61c2f82)

Lần này trình biên dịch phàn nàn về khoảng trắng trong một `\citation`; trong đó khóa bắt đầu bằng “That”. Vì vậy, chúng ta sẽ muốn tìm kiếm `\cite{That ...}` trong tệp `.tex` tệp... và chúng ta tìm thấy nó ở dòng 23:

```latex
... justo \cite{That mandatory talk} eget magna ...
```

Khóa trích dẫn không được chứa ký tự khoảng trắng, vì vậy cần xóa các khoảng trắng trong `\cite{...}`, cũng như khóa BIBTeX tương ứng trong tệp `.bib` .

### Lỗi từ các tệp .toc

Tính năng `.toc` tệp chứa các mục cho `\tableofcontents`. Chúng được điền từ các tiêu đề mục trong tài liệu LaTeX, ví dụ: `\chapter{...}`, `\section{...}`, v.v. Do đó, nếu bạn thấy lỗi được báo từ `.toc` tệp, sẽ hữu ích nếu kiểm tra các tiêu đề mục chứa văn bản được báo trong thông báo lỗi.

![lỗi ví dụ trong tệp .toc do & chưa được escape trong \section{...}](/files/1f2d5a7aa7104c5418bb03f6185a24b800adf8b4)

Có vẻ đây là một tiêu đề mục sẽ được đánh số “1”, và chứa văn bản `Introduction & Welcome`. Tìm nhanh trong tệp `.tex` sẽ đưa chúng ta đến dòng 12:

```latex
\section{Introduction & Welcome}
```

Tính năng `&` chưa được escape ở đây, vì vậy chúng ta cần đổi nó thành `\&` trong `.tex` .

Một ví dụ tương tự khác:

![lỗi ví dụ trong tệp .toc do lệnh toán học không ở chế độ toán trong khóa \section{...}](/files/5eb66e02617e4996847ad6fcff64fa06eadb5a11)

Tương tự, chúng ta sẽ đoán là tìm một tiêu đề mục được đánh số “1.1”, và có khả năng chứa `Setting \alpha`. Phỏng đoán của chúng ta hóa ra đúng, tại dòng 36 của tệp `.tex` tệp:

```latex
\subsection{Setting \alpha}
```

`\alpha` là một lệnh toán học nhưng chúng ta quên đặt nó vào chế độ toán ở đây, vì vậy cần sửa thành

```latex
\subsection{Setting $\alpha$}
```

hoặc

```latex
\subsection{Setting \(\alpha\)}
```

Đôi khi lỗi phát sinh trong tệp `.toc` do lỗi trong mã được dùng để tạo kiểu các mục trong mục lục:

![lỗi ví dụ trong tệp .toc do mã không đúng khi tạo kiểu mục ToC](/files/30582c951ea37128c30d9c2cc7012396e3de2098)

Ở đây, tìm kiếm bằng `\itshae` sẽ dẫn chúng ta đến lỗi gõ sai ở dòng 5 của tệp ví dụ `.tex`: đáng ra phải là `\itshape` thay vào đó. Trong trường hợp này, lỗi có thể được xác định trong phần mở đầu của tệp `.tex` của chúng ta, vì vậy ta có thể sửa nó. Nhưng nếu bạn đang sử dụng một tệp `.cls` hoặc `.sty` do tổ chức của bạn cung cấp và bạn nghi ngờ lỗi do cấu hình sai trong các tệp được cung cấp, bạn nên liên hệ tác giả hoặc người bảo trì mẫu hay gói để họ cập nhật mẫu.

### Lỗi từ các tệp .lof và .lot

Tính năng `.lof` tệp chứa các mục cho `\listoffigures`, và được điền bởi `\caption{...}` của `figure` các môi trường.

Tương tự, tệp `.lot` sử dụng `\caption{...}` từ `table` các môi trường, để tạo các mục cho `\listoftables`.

Do đó, nếu có lỗi LaTeX từ `.lof` hoặc `.lot` các tệp, bạn nên kiểm tra `\caption{...}` chứa các đoạn văn bản liên quan.

Dựa trên thông báo lỗi ở đây, chúng ta sẽ tìm kiếm `Effects of \alpha and var_coeff` trong tệp `\caption{...}`đặc biệt đối với `figure`s:

![lỗi ví dụ trong tệp .lof do lệnh toán học không ở chế độ toán trong khóa \caption{...} của hình](/files/4665114f1dd4f12d9873aefaaffcf9a8e118c696)

và đến dòng 19 trong tệp `.tex` tệp:

```latex
\caption{Effects of \alpha and var_coeff}
```

Tính năng `\alpha` nên được đặt trong chế độ toán; và nếu `var_coeff` được cho là tên biến, dấu gạch dưới cần được escape. Đừng dùng `\verb|var_coeff|` vì điều này có thể khá tai hại trong `\caption{...}`, nữa!

```latex
\caption{Effects of $\alpha$ and \texttt{var\_coeff}}
```

Tương tự, khi xem lỗi này, chúng ta sẽ tìm kiếm `some sample data with n^i` trong `table` `\caption{...}`, với phỏng đoán rằng chúng ta quên đặt `n^i` vào chế độ toán nữa.

![lỗi ví dụ trong tệp .lot do số mũ không ở chế độ toán trong khóa \caption{...} của bảng](/files/524e5031b542ab49f56a3a58b0c0caa778d93d92)

Và vì vậy chúng ta sửa dòng 31

```latex
\caption{Some sample data with n^i}
```

sang

```latex
\caption{Some sample data with $n^i$}
```

### Lỗi từ các tệp .bbl

Tính năng `.bbl` tệp chứa các mục cho danh sách tài liệu tham khảo (thư mục), và được BIBTeX tạo sau khi xử lý tệp `.bib` tệp, sử dụng thông tin kiểu dáng từ tệp `.bst` tệp. Các lỗi được báo từ `.bbl` thường bắt nguồn từ `.bib` .

Đây là một lỗi phổ biến mà chúng tôi thường thấy trong bộ phận hỗ trợ Overleaf:

![lỗi ví dụ trong tệp .bbl do & chưa được escape trong tệp .bib](/files/ce2b9bc2663399002961d0e61cd98898d6b30867)

Tìm kiếm `This & that` trong `.bib` tệp của dự án ví dụ sẽ đưa chúng ta đến dòng 13, nơi ta nhận ra rằng `&` nên được escape thành `\&` hoặc thay bằng từ `và`.

```bibtex
    title   = {This & That},
```

Tác giả thường gặp lỗi liên quan đến các ký tự Unicode trong `.bbl` (và do đó các tệp `.bib`)—đặc biệt nếu thông tin nguồn được sao chép và dán từ nơi khác:

![lỗi ví dụ trong tệp .bbl do ký tự Unicode không được hỗ trợ trong tệp .bib](/files/f5905e4c373e020e1f9e425735a291081533d992)

Sao chép-dán ký tự ♣ từ thông báo lỗi và tìm kiếm nó trong tệp `.bib` sẽ đưa bạn đến dòng 3:

```bibtex
    title   = {Research ♣ Development},
```

Một số ký tự Unicode không được hỗ trợ bởi `latex` và `pdflatex` các trình biên dịch. Để tránh lỗi, bạn có thể thử [thay đổi trình biên dịch của dự án](/latex/vi/co-so-tri-thuc/026-changing-compiler.md) sang `XeLaTeX` hoặc `LuaLaTeX`. Nhưng ngay cả khi đó, bạn vẫn cần đảm bảo dự án tương thích với các trình biên dịch đó và đã dùng phông chữ có glyph đại diện cho ♣ để nó hiển thị đúng trong PDF đầu ra. Do đó, tốt hơn là dùng các lệnh LaTeX phù hợp:

```bibtex
    title   = {Research $\clubsuit$ Development},
```

Tuy nhiên, đôi khi ký tự có thể khó nhận ra hơn nhiều:

![lỗi ví dụ trong tệp .bbl do ký tự Unicode không được hỗ trợ, không in được trong tệp .bib](/files/92bcb4a230561b607f984d9b2b0a0a22e2f611b4)

Ở đây, U+3000 là một [Ký tự Unicode `KHOẢNG TRẮNG Ý HỆ`](https://www.fileformat.info/info/unicode/char/3000/index.htm), và do đó thực sự là một khoảng trắng. Có thể khó sao chép chính xác ký tự này từ thông báo lỗi để tìm trong tệp `.bib` tệp. Vì vậy, chúng ta sẽ phải thử cách khác để xác định vị trí nó, bằng cách sử dụng `\DeclareUnicodeCharacter` để thay thế `U+3000` bằng thứ gì đó dễ thấy hơn! Thêm các dòng sau vào phần mở đầu của dự án, trước `\begin{document}`:

```latex
\usepackage{xcolor}
\DeclareUnicodeCharacter{3000}{\textcolor{red}{BAD!!}}
```

Sau đó, biên dịch dự án sẽ khiến lỗi biến mất; nhưng bạn nên xem kỹ trong PDF đầu ra để tìm BAD!!:

![PDF đầu ra thay thế U+3000 bằng BAD!! màu đỏ](/files/2da1be478edc4df4cc56a10da70530e92a530bae)

Vậy giờ ta biết ký tự lỗi nằm giữa `của` và `Wondrous`, trong mục tài liệu tham khảo của “An Author”. Nó trông khá vô hại ở dòng 5 của tệp `.bib` vì nó vô hình: nhưng nếu bạn gõ lại đoạn đó `...of Wondrous...` thủ công bằng phím cách thông thường, lỗi sẽ biến mất sau khi biên dịch lại.

```bibtex
    journal = {Journal of　Wondrous Musings},
```

#### Lưu ý về biblatex

Nếu bạn đang sử dụng `biblatex` gói, thì các lỗi tương tự trong các tệp `.bib` có khả năng đều sẽ được báo là đến từ dòng `\printbibliography` trong tệp `.tex` của bạn. Quy trình gỡ lỗi tương tự: dùng các đoạn văn bản ngắn trong thông báo lỗi để tìm kiếm trong tệp `.bib` để xác định các dòng gây lỗi và sửa chúng.

### Lỗi từ các tệp .bst

`.bst` các tệp là kiểu thư mục mà BIBTeX dùng để xử lý và định dạng danh sách tài liệu tham khảo. Nếu bạn thấy lỗi từ `.bst` các tệp, điều này có thể do lỗi trong `.bst` chính nó, đặc biệt nếu đó là một tệp kiểu rất, rất cũ có thể không còn tương thích với các gói LaTeX gần đây. Nhưng thực ra cũng có thể do lỗi trong tệp `.bib` nữa. Lỗi phổ biến nhất trong danh mục này trông như sau:

![Bst-error-example-01.png](/files/d33d215e876a0b8f59a62c7877474069babfc46d)

Mục có khóa BIBTeX `Someone:etal:2008` có trường `author` ở dòng 12 của tệp `.bib` tệp:

```bibtex
    author  = {Strange Someone, Night Stranger, and Random Person},
```

Trong một tệp `.bib` tệp, [danh sách nhiều tên](/latex/vi/tai-lieu-tham-khao-va-trich-dan/01-bibliography-management-with-bibtex.md#multiple-authors) nên được phân cách bằng `và`, không phải dấu phẩy cũng không phải `&`. Do đó trường `author` này nên được sửa thành

```bibtex
    author  = {Strange Someone and Night Stranger and Random Person},
```

### Lỗi từ các tệp .ttt và .fff

Các loại tệp này chỉ được tạo nếu bạn nạp [`endfloat` gói](https://www.ctan.org/pkg/endfloat), được dùng để buộc tất cả môi trường bảng và hình được chuyển đến cuối tài liệu, theo yêu cầu của một số tạp chí học thuật khi nộp bài.

Để xem các lỗi ví dụ từ những tệp được tạo này, hãy bỏ chú thích dòng 3 `\usepackage{endfloat}` của `.tex` tệp trong dự án ví dụ của chúng ta.

![Ttt-error-example-01.png](/files/61a75dcfdb2420673c4873c7c32e6f8410b5adf8)

Tính năng `.ttt` tệp chứa nội dung từ tất cả `table` các môi trường trong tài liệu, vì vậy chúng ta sẽ tìm kiếm `dummy & data` trong `.tex` tệp, chú ý đến các bảng. Chúng ta sẽ đến dòng 29 trong tệp `.tex` tệp, nơi thấy vấn đề: chúng ta có ba cột, nhiều hơn một cột so với hai cột đã khai báo. Vì vậy có thể cần xóa một cột thừa; hoặc chúng ta nên chèn `\\` sau `dummy` để bắt đầu một hàng mới; hoặc có lẽ chúng ta đã định khai báo ba cột `c | c | c` ngay từ đầu!

![Fff-error-example-01.png](/files/cde745760ee399c5d0b3d12b91c88f6ee9ca74e3)

Tương tự, tệp `.fff` tệp chứa nội dung từ tất cả `figure` các môi trường, và tìm kiếm lỗi gõ sai đó `\includegraphcs` sẽ đưa chúng ta đến dòng 18 của tệp `.tex` tệp, nơi chúng ta có thể sửa nó thành `\includegraphics`.

## Đọc thêm

* [Overleaf biên dịch dự án của tôi như thế nào?](/latex/vi/co-so-tri-thuc/064-how-does-overleaf-compile-my-project.md)
* [Các lỗi LaTeX phổ biến](/latex/vi/kien-thuc-co-ban-ve-latex/05-errors.md)
* [danh sách FAQ TeX](https://texfaq.org/#errors)


---

# 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/co-so-tri-thuc/066-how-to-find-and-fix-errors-reported-in-generated-files.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.
