> 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/loi-latex/25-missing-inserted.md).

# Thiếu ký hiệu $ được chèn vào

## Cách sửa lỗi này

Lỗi này có thể được kích hoạt theo nhiều cách và, đặc biệt với những người mới dùng LaTeX, thì không phải lúc nào cũng *ngay lập tức* hiển nhiên vì sao nó xảy ra, hay quan trọng hơn, cách khắc phục nó. Chúng ta sẽ bắt đầu với một cái nhìn tổng quan về các *điều kiện chung* kích hoạt lỗi này rồi liệt kê một số nguyên nhân phổ biến hơn và cách sửa chúng. Các [phần sau của bài viết này](#background-to-the-missing-inserted-error) cung cấp tài liệu chuyên sâu hơn cho độc giả muốn mở rộng hiểu biết.

**Lưu ý**: Trong bài viết này chúng tôi dùng các thuật ngữ “TeX”, “LaTeX” và “TeX engine” nhưng nếu bạn chưa chắc về ý nghĩa khác nhau của chúng, bạn có thể tìm hiểu trong bài viết Overleaf [Trong một cái tên có gì: Hướng dẫn về nhiều biến thể của TeX](/latex/vi/bai-viet-chuyen-sau/55-what-s-in-a-name-a-guide-to-the-many-flavours-of-tex.md).

### Các nguyên nhân chính của lỗi Missing $ inserted

Có ba lý do chính khiến (La)TeX tạo ra lỗi này:

1. Bạn đã mắc một lỗi rõ ràng trong phần đánh dấu toán học của mình, chẳng hạn như viết `$y=f(x)$$`—chúng ta sẽ xem các ví dụ khác ở phần sau của bài viết này.
2. TeX đã phát hiện một ký tự hoặc lệnh được thiết kế để dùng **chỉ** khi TeX đang dàn trang toán học nhưng ký tự hoặc lệnh đó đã được dùng khi TeX đang **không** dàn trang toán học.
   * **Nói một cách kỹ thuật**: TeX phát hiện một ký tự hoặc lệnh được thiết kế để hoạt động *trong* [*chế độ toán học*](#math-mode) nhưng bạn đã cố dùng nó *bên ngoài* [*chế độ toán học*](#math-mode). Để làm rõ vấn đề với các “ký tự” được thiết kế để hoạt động trong [chế độ toán học](#math-mode), điều thực sự muốn nói là dùng các ký tự được gán những [mã loại](/latex/vi/chu-de-khac/43-table-of-tex-category-codes.md) được thiết kế để hoạt động bên trong nội dung toán học.
3. TeX đã phát hiện một lệnh được thiết kế để chỉ được dùng khi TeX đang **không** dàn trang toán học nhưng lệnh đó đã được phát hiện (được dùng) trong lúc TeX **đang** dàn trang nội dung toán học.
   * **Nói một cách kỹ thuật**: TeX phát hiện một lệnh được thiết kế để hoạt động *bên ngoài* [*chế độ toán học*](#math-mode) nhưng bạn đã cố dùng nó *trong* [*chế độ toán học*](#math-mode).

### Ví dụ về lỗi và cách giải quyết

Các ví dụ sau minh họa một số cách mà `Thiếu ký hiệu $ được chèn vào` lỗi có thể được kích hoạt, đồng thời cung cấp các giải pháp để khắc phục lỗi.

#### Các lệnh ký hiệu phải được dùng trong chế độ toán học

Nhiều ký hiệu toán học trong LaTeX được truy cập bằng các lệnh chỉ được dùng khi TeX đang dàn trang toán học; tức là vào thời điểm TeX ở trong chế độ toán học.

Các ví dụ về lệnh ký hiệu thường dùng bao gồm các lệnh cho chữ cái Hy Lạp: `\alpha` $$(\alpha)$$, `\beta` $$(\beta)$$, `\gamma` ($$\gamma)$$, `\delta` $$(\delta)$$, `\Delta` $$(\Delta)$$ v.v. Nhiều lệnh LaTeX khác, chẳng hạn như các lệnh cho bộ biến đổi: `\vec{x}` $$(\vec{x})$$, `\tilde{x}` $$(\tilde{x})$$, `\hat{x}` $$(\hat{x})$$ v.v., cũng được thiết kế để dùng trong chế độ toán học.

Việc dùng các bộ biến đổi, các lệnh ký hiệu — và nhiều lệnh khác liên quan đến toán học — bên ngoài nội dung dàn trang toán học sẽ tạo ra một `Thiếu ký hiệu $ được chèn vào` lỗi và buộc bộ biên dịch chuyển vào chế độ toán học.

Ví dụ sau cho thấy điều gì xảy ra nếu bạn cố dùng lệnh `\alpha` $$(\alpha)$$ bên ngoài chế độ toán học:

```latex
Việc viết \verb|\alpha| bên ngoài chế độ toán học sẽ tạo ra lỗi: \alpha và vì thế đoạn văn này sẽ không được dàn trang đúng...
```

[Mở ***gây lỗi*** ví dụ này trong Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Incorrect+use+of+LaTeX+symbols\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cbegin%7Bdocument%7D%0AWriting+%5Cverb%7C%5Calpha%7C+outside+math+mode+will+generate+an+error%3A+%5Calpha+and+so+this+text+will+not+be+typeset+correctly...%0A%5Cend%7Bdocument%7D)

Hình ảnh sau cho thấy một phần kết quả đầu ra do mã LaTeX ở trên tạo ra, minh họa lỗi do việc dùng `\alpha` bên ngoài chế độ toán học:

![\alpha bên ngoài chế độ toán học](/files/8eba7b3f5040ef47ab731b8e6630d7a4e209ff7f)

**Sửa lỗi do các lệnh ký hiệu LaTeX gây ra**

Để dùng các bộ biến đổi, hoặc các ký hiệu toán học Hy Lạp, trong câu thì chúng luôn phải được đặt trong các dấu đô la đơn `$...$`, hoặc cú pháp `\(...\)` của LaTeX, để TeX xử lý chúng trong *chế độ toán học nội tuyến*, như minh họa dưới đây.

```latex
Khi viết chữ cái Hy Lạp alpha trong một câu, nó phải được viết là \verb|$\alpha$| để tạo ra $\alpha$, hoặc là \verb|\(\alpha\)| cũng tạo ra \(\alpha\).

Khi viết một vector x trong một câu, nó phải được viết là \verb|$\vec{x}$| để tạo ra $\vec{x}$ hoặc là \verb|\(\vec{x}\)| cũng cho ra \(\vec{x}\).
```

[Mở ví dụ này trong Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Using+LaTeX+symbols\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cbegin%7Bdocument%7D%0AWhen+writing+the+Greek+letter+alpha+in+a+sentence%2C+it+must+be+written+as+%5Cverb%7C%24%5Calpha%24%7C+to+generate+%24%5Calpha%24%2C++or+as+%5Cverb%7C%5C%28%5Calpha%5C%29%7C+which+also+generates+%5C%28%5Calpha%5C%29.%0A+%0AWhen+writing+a+vector+x+in+a+sentence%2C+it+must+be+written+as+%5Cverb%7C%24%5Cvec%7Bx%7D%24%7C+to+produce+%24%5Cvec%7Bx%7D%24+or+as+%5Cverb%7C%5C%28%5Cvec%7Bx%7D%5C%29%7C+which+also+yields+%5C%28%5Cvec%7Bx%7D%5C%29.%0A%5Cend%7Bdocument%7D)

**Danh sách các ký hiệu LaTeX**

Bài viết Overleaf [Danh sách các chữ cái Hy Lạp và ký hiệu toán học](/latex/vi/toan-hoc/11-list-of-greek-letters-and-math-symbols.md) cung cấp một danh sách các ký hiệu chỉ dành cho chế độ toán học, cùng với các liên kết tới nhiều tài nguyên hữu ích hơn.

#### Sử dụng các ký tự chỉ dùng trong chế độ toán học bên ngoài chế độ toán học

Theo truyền thống, TeX/LaTeX dành riêng một số ký tự phổ biến để dùng trong chế độ toán học:

* `^`: dành riêng để tạo số mũ
* `_`: dành riêng để tạo chỉ số dưới
* `$`: dành riêng để bắt đầu/kết thúc chế độ toán học

Việc dùng trực tiếp chúng bên ngoài chế độ toán học sẽ gây lỗi.

* Để gõ `$` bên ngoài chế độ toán học hãy dùng `\$`
* Để gõ `_` bên ngoài chế độ toán học hãy dùng `\_`
* Nhiều cách để gõ `^` bên ngoài chế độ toán học. Một danh sách được cung cấp trên [tex.stackexchange](https://tex.stackexchange.com/a/77647)

**Sử dụng dấu gạch dưới bên ngoài chế độ toán học**

Một nguyên nhân phổ biến của `Thiếu ký hiệu $ được chèn vào` lỗi là dùng dấu gạch dưới (`_`), một ký tự chế độ toán học, bên ngoài chế độ toán học—chẳng hạn như dấu gạch dưới xuất hiện trong tên tệp: một ví dụ về điều này được minh họa dưới đây.

```latex
Dùng một ký tự toán học, chẳng hạn dấu gạch dưới, trong tên tệp: math_example.tex.
```

[Mở ***gây lỗi*** mã trên Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Math+code+error\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cbegin%7Bdocument%7D%0AUsing+a+math+character%2C+such+as+an+underscore%2C+in+a+file+name%3A+math_example.tex.%0A%5Cend%7Bdocument%7D)

Vì ký tự gạch dưới được gán [mã loại 8](/latex/vi/chu-de-khac/43-table-of-tex-category-codes.md) nó được dành riêng để tạo chỉ số dưới khi bộ máy TeX ở trong chế độ toán học. Do đó, khi (La)TeX phát hiện `_` trong tên tệp `math_example.tex` nó làm như vậy bên ngoài chế độ toán học, điều này gây lỗi và dẫn tới việc dàn trang sai của văn bản sau đó:

$$\text{Using a math character, such as an underscore, in a file name: math}\_example.tex.$$

Tính năng `_` ký tự (về mặt kỹ thuật là mã loại 8 của nó) sẽ gây lỗi và khiến TeX chuyển vào chế độ toán học: chữ cái `e` ngay sau `_` được xem như một ký tự sẽ được dàn trang dưới dạng chỉ số dưới. Việc xử lý sau đó tiếp tục trong chế độ toán học dẫn đến văn bản in nghiêng và, ngoài ra, ở đây không có cách nào để TeX thoát ra khỏi chế độ toán học một cách êm thấm, điều này sẽ gây ra thêm lỗi.

Để tránh lỗi cụ thể này, bạn luôn phải dùng `_` trong chế độ toán học—tức là, bên trong `$..$`, `$$...$$` hoặc, tốt hơn, bên trong ký hiệu của LaTeX là `\(...\)` và `\[...\]`.

Bên ngoài chế độ toán học bạn cần viết `\_` để dùng hoặc dàn trang dấu gạch dưới, như trong phiên bản đã sửa của ví dụ:

```latex
Để dùng ký tự gạch dưới của chế độ toán học trong tên tệp, hãy viết như sau: math\_example.tex.
```

[Mở ***phiên bản đã sửa*** trên Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Fixed+math+code+error\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cbegin%7Bdocument%7D%0ATo+use+the+math-mode+underscore+character+in+a+file+name%2C+write+it+like+this%3A+math%5C_example.tex.%0A%5Cend%7Bdocument%7D)

**Sử dụng dấu gạch dưới trong URL**

Bạn cũng có thể gặp lỗi này khi cố dàn trang các URL có dấu gạch dưới, ví dụ `[https://www.overleaf.com/learn/latex/Subscripts_and_superscripts](../02-mathematics/02-subscripts-and-superscripts.md)`. Thay vì thoát từng ký tự gạch dưới, bạn có thể muốn tải gói `url` hoặc `hyperref` , rồi dùng `\url` lệnh như sau:

```latex
\documentclass{article}
\usepackage{url}
\begin{document}
\url{https://www.overleaf.com/learn/latex/Subscripts_and_superscripts}
\end{document}
```

[Mở ví dụ này trong Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=URL+example\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%7Burl%7D+%0A%5Cbegin%7Bdocument%7D%0A%5Curl%7Bhttps%3A%2F%2Fwww.overleaf.com%2Flearn%2Flatex%2FSubscripts_and_superscripts%7D%0A%5Cend%7Bdocument%7D)

**Dấu gạch dưới trong URL của tệp .bib**

Nếu những URL như vậy nằm trong tệp thư mục tham khảo `.bib` tệp, khiến lỗi được báo từ `.bbl` tệp, thì hãy chắc chắn bạn dùng các `url` hoặc `doi` trường để ghi lại các trường này trong `.bib` tệp:

```
doi = {10.1007/978-94-015-6859-3_4},
url = {https://abc.com/latest_news_1.html}
```

và nạp `url` hoặc `hyperref` gói trong phần tiền đề của bạn, nếu cần. Khi đó, hầu hết các tệp kiểu thư mục tham khảo sẽ có thể tự động bọc các giá trị này trong một `\url{...}` lệnh này.

#### Sử dụng các lệnh không được phép trong chế độ toán học

Một số lệnh TeX tích hợp ở mức thấp (được gọi là *các nguyên thủy*) không được phép trong chế độ toán học và việc dùng chúng trong chế độ toán học sẽ kích hoạt `Thiếu ký hiệu $ được chèn vào` lỗi. Mặc dù hầu hết người dùng khó mà dùng các lệnh này trong mã LaTeX hằng ngày, chúng tôi ghi chú ở đây vì có thể chúng nằm trong các lệnh LaTeX (macro) đang được dùng trong chế độ toán học.

Ví dụ sau cố gắng dùng lệnh TeX `\vskip` bên trong vật liệu toán học. Điều này không được phép và tạo ra lỗi.

```latex
\documentclass{article}
\begin{document}
Tôi muốn thêm một khoảng trống, nhưng đây không phải cách để làm điều đó...
\[y=f(x) \vskip5pt z=f(y)\]
$y=f(x) \vskip5pt z=f(y)$
\end{document}
```

[Mở ***gây lỗi*** mã trên Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Math+error+demo+1\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cbegin%7Bdocument%7D%0AI+want+to+add+some+space%2C+but+this+is+not+the+way+to+do+it...%0A%5C%5By%3Df%28x%29+%5Cvskip5pt+z%3Df%28y%29%5C%5D%0A%24y%3Df%28x%29+%5Cvskip5pt+z%3Df%28y%29%24%0A%5Cend%7Bdocument%7D)

Các lệnh TeX (nguyên thủy) khác không được phép khi TeX ở trong chế độ toán học bao gồm `\par`, `\hrule`, `\unvbox`, `\unvcopy` và `\valign`.

#### Các dòng trống trong toán học

```latex
\documentclass{article}
\begin{document}
\begin{equation}
y=x^3,

z=x^3
\end{equation}
\end{document}
```

[Mở ***gây lỗi*** mã trên Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Math+error+demo+1\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cbegin%7Bequation%7D%0Ay%3Dx%5E3%2C%0A%0Az%3Dx%5E3%0A%5Cend%7Bequation%7D%0A%5Cend%7Bdocument%7D)

**Nguyên nhân**: Dòng trống giữa các công thức được chuyển thành một `\par` lệnh không được phép trong chế độ toán học. Bạn cũng có thể thấy điều này bằng cách viết

```latex
\documentclass{article}
\begin{document}
\[y=x^3,\par z=x^3\]
\end{document}
```

[Mở ***gây lỗi*** mã trên Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Math+error+demo+2\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cbegin%7Bdocument%7D%0A%5C%5By%3Dx%5E3%2C%5Cpar+z%3Dx%5E3%5C%5D%0A%5Cend%7Bdocument%7D)

Để sửa điều này, hãy xóa các dòng trống hoặc chú thích chúng đi:

```latex
\documentclass{article}
\begin{document}
\begin{equation}
y=x^3,
% Điều này sẽ ngăn dòng trống
z=x^3
\end{equation}
\end{document}
```

[Mở ***phiên bản đã sửa*** trên Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Math+error+demo+1\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cbegin%7Bequation%7D%0Ay%3Dx%5E3%2C%0A%25+This+will+suppress+the+blank+line%0Az%3Dx%5E3%0A%5Cend%7Bequation%7D%0A%5Cend%7Bdocument%7D)

#### Sử dụng $ bên trong môi trường toán học

Một số môi trường LaTeX, chẳng hạn như các `align` và `equation` môi trường, không yêu cầu toán học phải được đặt trong các `$` ký hiệu, hoặc dùng cú pháp toán học của LaTeX: `\(...\)` hoặc `\[...\]`. Mã LaTeX triển khai những môi trường đó sẽ tự lo việc vào và ra khỏi chế độ toán học.

Ví dụ sau cho thấy việc dùng ký hiệu `$` trong một môi trường `amsmath` `align` sẽ kích hoạt một `Thiếu ký hiệu $ được chèn vào` lỗi, cùng nhiều lỗi khác....

```latex
\documentclass{article}
\usepackage{amsmath}
\begin{document}
\begin{align*}
$2x - 5y &=  8 \\
3x + 9y &=  -12$
\end{align*}
\end{document}
```

[Mở ***gây lỗi*** mã trên Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Math+error+demo+4\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%7Bamsmath%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cbegin%7Balign%2A%7D%0A%242x+-+5y+%26%3D++8+%5C%5C+%0A3x+%2B+9y+%26%3D++-12%24%0A%5Cend%7Balign%2A%7D%0A%5Cend%7Bdocument%7D)

Cách đúng để viết các phương trình này là:

```latex
\documentclass{article}
\usepackage{amsmath}
\begin{document}
\begin{align*}
2x - 5y &=  8 \\
3x + 9y &=  -12
\end{align*}
\end{document}
```

[Mở ***phiên bản đã sửa*** trên Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Math+error+demo+5\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%7Bamsmath%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cbegin%7Balign%2A%7D%0A2x+-+5y+%26%3D++8+%5C%5C+%0A3x+%2B+9y+%26%3D++-12%0A%5Cend%7Balign%2A%7D%0A%5Cend%7Bdocument%7D)

## Bối cảnh của lỗi Missing $ inserted

Phần sau dành cho độc giả muốn hiểu rõ hơn các lý do đằng sau lỗi `Thiếu ký hiệu $ được chèn vào`. Nó không *thiết yếu* để đọc nhưng có thể giúp bạn tìm và sửa lỗi.

### Không có dấu $ nào bị thiếu nhưng tôi vẫn nhận được lỗi

Trong một số trường hợp `Thiếu ký hiệu $ được chèn vào` lỗi có thể rất gây nhầm lẫn vì mã LaTeX của bạn thực ra có thể không có vấn đề gì với các ký tự bị thiếu *rõ ràng* `$` . Ví dụ, đoạn mã LaTeX $$\verb|$$y=f(x)\par$$|$$ trông bề ngoài có vẻ đúng: các $$\verb|$$cặp $$ được cân bằng nhưng nó sẽ kích hoạt lỗi “`thiếu $`”. Ở đây, nguyên nhân là do `\par` lệnh không được phép trong chế độ toán học:

```latex
\documentclass{article}
\begin{document}
Ví dụ này tạo ra lỗi \verb|Missing $ inserted|:
$$y=f(x)\par$$
\end{document}
```

[Mở phần này để xem lỗi Missing $ inserted](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Math+error+example\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cbegin%7Bdocument%7D%0AThis+example+generates+the+error+%5Cverb%7CMissing+%24+inserted%7C%3A+%0A%24%24y%3Df%28x%29%5Cpar%24%24%0A%5Cend%7Bdocument%7D)

Đoạn mã LaTeX ở trên thực ra kích hoạt một *chuỗi* lỗi, như thấy bên dưới, vì vậy rõ ràng bạn không nên dùng `\par` bên trong toán học!

```
! Thiếu dấu $.
<văn bản được chèn>
                $
l.12 $$y=f(x)\par
                 $$
Tôi đã chèn một ký hiệu bắt đầu/kết thúc toán học vì tôi nghĩ
bạn đã bỏ sót một cái. Cứ tiếp tục, và cầu may.

! Toán học hiển thị phải kết thúc bằng $$.
<to be read again>
                   \par
l.12 $$y=f(x)\par
                 $$
Dấu `$' mà tôi vừa thấy dường như khớp với một `$$' trước đó.
Vì vậy tôi sẽ giả định rằng bạn đã gõ `$$' cả hai lần.

! Thiếu dấu $.
<văn bản được chèn>
                $
l.13 \end{document}

Tôi đã chèn một ký hiệu bắt đầu/kết thúc toán học vì tôi nghĩ
bạn đã bỏ sót một cái. Cứ tiếp tục, và cầu may.

! Toán học hiển thị phải kết thúc bằng $$.
<to be read again>
                   \par
l.13 \end{document}

Dấu `$' mà tôi vừa thấy dường như khớp với một `$$' trước đó.
Vì vậy tôi sẽ giả định rằng bạn đã gõ `$$' cả hai lần.
```

Khi `Thiếu ký hiệu $ được chèn vào` lỗi xảy ra khi phần mềm bộ máy TeX đang cố phục hồi và “quay lại đúng hướng” để nó có thể tiếp tục xử lý sau điểm xảy ra lỗi. Mục [Nâng cao: Giải thích cơ chế phục hồi lỗi của TeX](#advanced-an-explanation-of-texs-error-recovery-mechanism) sẽ giúp bạn hiểu vì sao chuỗi lỗi này phát sinh do các nỗ lực sửa lỗi ban đầu của TeX.

### Về các chế độ, và khi nào

Bên trong, các bộ máy TeX hoạt động bằng ba “trạng thái tinh thần”, gọi là *chế độ*, phụ thuộc vào loại vật liệu mà bộ máy TeX đang *hiện tại* dàn trang. Chế độ mà bộ máy TeX đang ở vào bất kỳ thời điểm nào trong quá trình dàn trang được gọi là *hiện tại* chế độ của nó, và nó thay đổi suốt quá trình dàn trang nội dung tài liệu LaTeX của bạn.

Đối với mỗi chế độ của bộ máy TeX, có một số lệnh và ký tự nhất định (hay đúng hơn là mã loại) “không tương thích” với chế độ hiện tại của TeX: chúng không nên được dùng trong khi TeX đang ở chế độ cụ thể đó. Nếu bạn cố dùng những ký tự hoặc lệnh không phù hợp này, TeX sẽ đưa ra một lỗi như `Thiếu ký hiệu $ được chèn vào` để cho bạn biết có điều gì đó sai.

#### Chế độ toán học

Lỗi này `Thiếu ký hiệu $ được chèn vào` có liên quan đến *chế độ toán học*của TeX—tức là, chế độ mà một bộ máy TeX ở trong khi bạn yêu cầu LaTeX dàn trang một số phép toán.

Chỉ để đầy đủ, chúng ta sẽ lưu ý rằng có *hai* các kiểu chế độ toán học, phản ánh việc tạo toán học nội tuyến hoặc hiển thị:

* chế độ toán học nội tuyến
* chế độ toán học hiển thị

TeX cần hai chế độ toán học khác nhau này vì nó áp dụng các quy tắc khác nhau cho khoảng cách, kích thước ký hiệu, v.v. khi dàn trang toán học dùng cho nội tuyến hoặc hiển thị.

#### Kích hoạt các chế độ toán học của TeX

Có nhiều cách để kích hoạt một bộ máy TeX *vào* và sau đó *thoát khỏi* chế độ toán học.

* Bạn có thể dùng đánh dấu tường minh như:
  * Cú pháp LaTeX: `\(...\)` sang *vào* `\(` rồi *thoát khỏi* `\)` chế độ toán học nội tuyến hoặc `\[...\]` sang *vào* `\[` rồi thoát khỏi `\]` chế độ toán học hiển thị;
  * cú pháp TeX (lịch sử): `$...$` để vào (thứ nhất `$`) rồi thoát (thứ hai `$`) chế độ toán học nội tuyến hoặc `$$...$$` để vào (thứ nhất `$$` *cặp*) rồi thoát (thứ hai `$$` *cặp*) chế độ toán học hiển thị;
* hoặc bất kỳ môi trường toán học nào của LaTeX:
  * `\begin{align}...\end{align}` v.v. Đằng sau hậu trường, các môi trường này tự lo việc vào và thoát khỏi chế độ toán học.

Thông báo *text* thực sự của `Thiếu ký hiệu $ được chèn vào` là *được tích hợp sẵn trong* (được “mã hóa cứng” trong) phần mềm bộ máy TeX, đó là lý do bạn vẫn sẽ thấy `Missing $` ngay cả khi bạn không dùng `$` ký tự để dàn trang toán học và chỉ dùng cú pháp LaTeX thuần để đánh dấu toán học trong tài liệu của mình. Điều này có thể gây bối rối cho người dùng LaTeX mới, nhưng không có nhiều cách để thay đổi văn bản thông báo lỗi này nếu không sửa mã nguồn của các bộ máy TeX!

#### Macro: kiểm tra chế độ toán học

Có thể kiểm tra xem TeX hiện có đang ở chế độ toán học hay không bằng lệnh nguyên thủy `\ifmmode`; theo cách đó bạn có thể viết các macro có hành vi thích ứng để tránh tạo ra lỗi liên quan đến chế độ. Đây là một ví dụ rất cơ bản để minh họa nguyên lý, in ra `Có.` hoặc `Không.` tùy thuộc vào việc TeX có đang ở chế độ toán học tại thời điểm “thực thi” macro hay không.

```latex
\documentclass{article}
\begin{document}
\newcommand{\mytest}{\ifmmode \mathrm{Yes}\else No\fi.}

Macro có đang được dùng trong chế độ toán học không? $\mytest$

Macro có đang được dùng trong chế độ toán học không? $$\mytest$$

Macro có đang được dùng trong chế độ toán học không? \(\mytest\)

Macro có đang được dùng trong chế độ toán học không? \[\mytest\]

Macro có đang được dùng trong chế độ toán học không? \mytest
\end{document}
```

[Mở ví dụ này trong Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Testing+for+math+mode\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cnewcommand%7B%5Cmytest%7D%7B%5Cifmmode+%5Cmathrm%7BYes%7D%5Celse+No%5Cfi.%7D%0A%0AIs+the+macro+being+used+in+math+mode%3F+%24%5Cmytest%24%0A%0AIs+the+macro+being+used+in+math+mode%3F+%24%24%5Cmytest%24%24%0A%0AIs+the+macro+being+used+in+math+mode%3F+%5C%28%5Cmytest%5C%29+%0A%0AIs+the+macro+being+used+in+math+mode%3F+%5C%5B%5Cmytest%5C%5D%0A%0AIs+the+macro+being+used+in+math+mode%3F+%5Cmytest%0A%5Cend%7Bdocument%7D)

Hình đồ họa sau cho thấy kết quả do ví dụ trên tạo ra:

![Macro LaTeX để kiểm tra chế độ toán học](/files/e88e531edbcd61de75c7d944204f7de9680e74e4)

## Nâng cao: Giải thích cơ chế phục hồi lỗi của TeX

Thông báo lỗi `Thiếu ký hiệu $ được chèn vào` không được xuất ra bởi Overleaf, LaTeX, hay các gói LaTeX; thực ra nó bắt nguồn từ *bên trong chương trình thực thi* chịu trách nhiệm dàn trang tài liệu LaTeX của bạn: chương trình thực thi đó được gọi là một bộ máy TeX *engine*—bạn có thể xem nó như thứ “điều khiển” quá trình dàn trang.

Trong mã nguồn của phần mềm TeX, tác giả của nó (Donald Knuth) đưa ra nhận xét này về đoạn mã chịu trách nhiệm tạo ra `Thiếu ký hiệu $ được chèn vào` lỗi:

> Đây là danh sách các trường hợp mà người dùng có lẽ đã vô tình vào hoặc thoát khỏi chế độ toán học. TeX sẽ chèn một dấu đô la và quét lại token hiện tại.

Ở trung tâm của `Thiếu ký hiệu $ được chèn vào` lỗi là việc TeX phát hiện “điều gì đó” lẽ ra không được dùng trong chế độ toán học, hoặc “điều gì đó” được thiết kế riêng cho dàn trang toán học nhưng lại được dùng bên ngoài chế độ toán học.

Nhiệm vụ của TeX là: Tôi phục hồi khỏi việc này như thế nào? TeX làm đúng như Knuth viết: nó chèn một dấu đô la và quét lại token hiện tại—một [“token”](/latex/vi/bai-viet-chuyen-sau/53-what-is-a-tex-token.md) là giá trị số (số nguyên) nội bộ của TeX đại diện cho ký tự hoặc lệnh mà nó vừa đọc vào. Tuy nhiên, do ngữ cảnh chính xác của lỗi, chiến lược này có thể thành công hoặc không—như văn bản lỗi tiếp tục nói “Cứ tiếp tục, và cầu may.”!

### Ví dụ minh họa

Hãy khám phá nhận xét của Knuth bằng cách xem kỹ hơn ví dụ sau: $$\verb|$y=f(x)$$\vskip3pt|$$. Nếu bạn mở mã bên dưới, bạn sẽ thấy nó kích hoạt lỗi `Thiếu ký hiệu $ được chèn vào`.

```latex
Việc viết \verb|$y=f(x)$$\vskip3pt| tạo ra...$y=f(x)$$\vskip3pt Bắt đầu dòng mới...
```

[Mở ví dụ này trong Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=A+missing+%24+inserted+example\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cbegin%7Bdocument%7D%0AWriting+%5Cverb%7C%24y%3Df%28x%29%24%24%5Cvskip3pt%7C+produces...%24y%3Df%28x%29%24%24%5Cvskip3pt+Start+new+line...%0A%5Cend%7Bdocument%7D)

Để xem lại vì sao điều này kích hoạt lỗi, hãy viết các chỉ số dưới để xác định từng $$\verb|$|$$ trong biểu thức để thu được $$\verb|$|*{\mathtt1}\verb|y=f(x)|\verb|$|*{\mathtt2}\verb|$|*{\mathtt3}\verb|\vskip3pt|$$. TeX có thể xử lý đúng phần đầu tiên $$\verb|$|*{\mathtt1}\verb|y=f(x)|\verb|$|*{\mathtt2}$$ được xem là một đoạn toán học nội tuyến được định dạng đúng, tạo ra $$y=f(x)$$. Ngay sau khi xử lý $$\verb|$|*{\mathtt2}$$ TeX tạm thời thoát khỏi chế độ toán học nội tuyến—trong ví dụ của chúng ta, ta đang tạo toán học nội tuyến trong một đoạn văn nên nó tạm thời đi vào cái gọi là *chế độ ngang*.

Điều xảy ra tiếp theo mới kích hoạt lỗi. TeX tiếp tục xử lý $$\verb|$|\_{\mathtt3}$$ điều này khiến TeX vào lại chế độ toán học nội tuyến. Bây giờ TeX đọc token tiếp theo, đó là $$\verb|\vskip|$$ lệnh—nó vẫn chưa đọc $$\verb|3pt|$$. Tại thời điểm này, TeX thấy $$\verb|\vskip|$$ nhưng nó đang ở chế độ toán học nội tuyến: $$\verb|\vskip|$$ không được phép ở đó nên nó kích hoạt quá trình xử lý lỗi của TeX như Knuth mô tả:

> TeX sẽ chèn một dấu đô la và quét lại token hiện tại.

Ở đây, token hiện tại là $$\verb|\vskip|$$ lệnh nên điều TeX làm là đặt một *mới* `$` vào đầu vào của nó, hãy gọi nó là $$\verb|$|*{\mathtt4}$$. Lúc này, TeX vẫn đang ở chế độ toán học nội tuyến nhưng bây giờ nó quay lại để đọc tương đương của $$\verb|$|*{\mathtt4}\verb|\vskip|$$ được đọc trong chế độ toán học nội tuyến. Cái $$\verb|$|\_{\mathtt4}$$, được chính TeX chèn vào, giờ đây *đóng* chế độ toán học nội tuyến hiện tại và TeX tiếp tục đọc $$\verb|\vskip|$$ lệnh *bên ngoài* chế độ toán học nội tuyến—ở đây, TeX đang ở trong một đoạn văn nên $$\verb|\vskip3pt|$$ làm kết thúc đoạn văn hiện tại và $$\verb|3pt|$$ khoảng trắng được đặt sau nó.


---

# 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/loi-latex/25-missing-inserted.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.
