> 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/zh-cn/latex-cuo-wu/25-missing-inserted.md).

# 插入了缺少的 $

## 如何修复此错误

此错误可能以不同方式触发，而且，尤其对于 LaTeX 新手来说，并不总是 *立刻* 显而易见地知道它为何发生，或者，更重要的是，如何解决它。我们将先概述 *一般* 会触发此错误的条件，然后列出一些更常见的原因及其修复方法。该 [本文后面的部分](#background-to-the-missing-inserted-error) 为希望加深理解的读者提供更深入的内容。

**注意**：在本文中，我们使用“TeX”、“LaTeX”和“TeX 引擎”这些术语；但如果你不确定它们各自不同的含义，可以在 Overleaf 文章中了解 [名称里有什么：TeX 多种变体指南](/latex/zh-cn/shen-ru-wen-zhang/55-what-s-in-a-name-a-guide-to-the-many-flavours-of-tex.md).

### 插入了缺失的 $ 的主要原因

（La）TeX 生成此错误有三个主要原因：

1. 你在数学标记中犯了一个明确的错误，例如写成 `$y=f(x)$$`——我们将在本文后面看看其他示例。
2. TeX 检测到一个本应用于 **，** 当 TeX 正在排版数学公式时使用的字符或命令，但该字符或命令却在 TeX 正在 **不** 排版数学公式时被使用。
   * **严格来说**：TeX 检测到一个本应在……中工作的字符或命令 *在……内部* [*数学模式*](#math-mode) 但你却试图在 *外部* [*数学模式*](#math-mode)。为澄清那些设计用于在……中工作的“字符”问题， [数学模式](#math-mode)，我们真正指的是使用被分配了某些 [类别码](/latex/zh-cn/geng-duo-zhu-ti/43-table-of-tex-category-codes.md) 的字符，而这些字符本应用于数学内容内部。
3. TeX 检测到一个本应仅在 TeX **不** 排版数学公式时使用的命令，但当 TeX **正在** 排版数学材料时检测到了该命令。
   * **严格来说**：TeX 检测到一个本应在……中工作的命令 *外部* [*数学模式*](#math-mode) 但你却试图在 *在……内部* [*数学模式*](#math-mode).

### 错误示例及其解决方法

以下示例展示了该 `插入了缺少的 $` 错误可能被触发的几种方式，并同时提供了解决该错误的方法。

#### 符号命令必须在数学模式中使用

LaTeX 中许多数学符号通过命令调用，这些命令只能在 TeX 正在排版数学时使用；也就是说，只能在 TeX 处于数学模式时使用。

常用符号命令的示例包括希腊字母对应的命令： `\alpha` $$(\alpha)$$, `\beta` $$(\beta)$$, `\gamma` ($$\gamma)$$, `\delta` $$(\delta)$$, `\Delta` $$(\Delta)$$ 等等。许多其他 LaTeX 命令，例如修饰符命令： `\vec{x}` $$(\vec{x})$$, `\tilde{x}` $$(\tilde{x})$$, `\hat{x}` $$(\hat{x})$$ 等，也都是为在数学模式中使用而设计的。

在排版数学内容之外使用修饰符、符号命令——以及许多其他与数学相关的命令——会生成一个 `插入了缺少的 $` 错误，并强制编译器进入数学模式。

以下示例展示了如果你尝试使用命令 `\alpha` $$(\alpha)$$ 在数学（模式）之外会发生什么：

```latex
在数学模式外写 \verb|\alpha| 会生成一个错误：\alpha，因此这段文字将无法正确排版……
```

[在 Overleaf 中打开此 ***产生错误的*** 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)

下图显示了上述 LaTeX 代码生成的部分输出，演示了因使用 `\alpha` 在数学模式之外而导致的错误：

![\alpha 在数学模式之外](/files/4e1889647f53e967534e5156da262c9601d6ade2)

**修复由 LaTeX 符号命令引起的错误**

要在句子中使用修饰符或希腊数学符号，必须始终将它们包在单个美元符号中 `$...$`，或者包在 LaTeX 的 `\(...\)` 语法中，以便 TeX 将它们处理为 *行内数学模式*，如下所示。

```latex
在句子中写希腊字母 alpha 时，必须写成 \verb|$\alpha$| 以生成 $\alpha$，或者写成 \verb|\(\alpha\)|，后者也会生成 \(\alpha\)。

在句子中写一个向量 x 时，必须写成 \verb|$\vec{x}$| 以生成 $\vec{x}$，或者写成 \verb|\(\vec{x}\)|，后者也会生成 \(\vec{x}\)。
```

[在 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)

**LaTeX 符号列表**

Overleaf 文章 [希腊字母和数学符号列表](/latex/zh-cn/shu-xue/11-list-of-greek-letters-and-math-symbols.md) 提供了仅用于数学模式的符号列表，以及更多有用资源的链接。

#### 在数学模式之外使用仅限数学模式的字符

按照惯例，TeX/LaTeX 将某些常用字符保留给数学模式使用：

* `^`：保留用于创建上标
* `_`：保留用于创建下标
* `$`：保留用于开始/结束数学模式

直接在数学模式之外使用它们会触发错误。

* 要输入 `$` 在数学模式之外，请使用 `\$`
* 要输入 `_` 在数学模式之外，请使用 `\_`
* 输入……的多种方式 `^` 在数学模式之外。列表见于 [tex.stackexchange](https://tex.stackexchange.com/a/77647)

**在数学模式之外使用下划线**

的一个常见原因是 `插入了缺少的 $` 错误是使用下划线（`_`），这是一个数学模式字符，却在数学模式之外使用——例如文件名中出现的下划线：下图展示了一个例子。

```latex
在文件名中使用数学字符，例如下划线：math_example.tex。
```

[在 Overleaf 中打开此 ***会产生错误的*** 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)

因为下划线字符被分配了 [类别码 8](/latex/zh-cn/geng-duo-zhu-ti/43-table-of-tex-category-codes.md) 当 TeX 引擎处于数学模式时，它保留用于创建下标。因此，当（La）TeX 检测到 `_` 文件名中的 `math_example.tex` 它是在数学模式之外这样做的，这会触发错误，并导致后续文本排版出错：

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

该 `_` 字符（严格来说是其类别码 8）会触发错误并导致 TeX 进入数学模式：字母 `e` 紧跟在……后面的 `_` 会被视为要作为下标排版的字符。随后处理在数学模式中继续，导致文本变为斜体；此外，TeX 在此处也无法顺利退出数学模式，这将触发更多错误。

为避免这一特定错误，你必须始终在 `_` 数学模式中使用它——也就是说，在 `$..$`, `$$...$$` 或者，更好地，在 LaTeX 的表示法 `\(...\)` 和 `\[...\]`.

在数学模式之外，你需要写成 `\_` 来使用或排版下划线，如修正后的示例所示：

```latex
要在文件名中使用数学模式下的下划线字符，请这样写：math\_example.tex。
```

[在 Overleaf 中打开此 ***修正后的版本*** 在 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)

**在 URL 中使用下划线**

当尝试排版包含下划线的 URL 时，你也可能遇到此错误，例如 `[https://www.overleaf.com/learn/latex/Subscripts_and_superscripts](../02-mathematics/02-subscripts-and-superscripts.md)`。你也许不想逐个转义每个下划线字符，而是 `url` 或 `hyperref` 宏包，然后使用 `\url` 命令，如下：

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

[在 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)

**.bib 文件 URL 中的下划线**

如果这样的 URL 在你的参考文献 `.bib` 文件中，并因此从该 `.bbl` 文件中报告错误，那么请确保你使用 `url` 或 `doi` 字段来在 `.bib` 文件中：

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

并加载 `url` 或 `hyperref` 宏包到你的导言区中，如有必要。大多数参考文献样式文件随后都能自动将这些值包裹在 `\url{...}` 命令。

#### 在数学模式中使用不允许的命令

一些底层的内置 TeX 命令（称为 *原始命令*）在数学模式中是不允许的，在数学模式中使用它们会触发 `插入了缺少的 $` 错误。尽管大多数用户不太可能在日常 LaTeX 代码中使用这些命令，但我们在此注明，因为它们可能被包含在正于数学模式中使用的 LaTeX 命令（宏）里。

以下示例尝试使用 TeX 命令 `\vskip` 在数学内容中使用。这是不允许的，并会生成错误。

```latex
\documentclass{article}
\begin{document}
我想加一点空白，但这不是正确的做法……
\[y=f(x) \vskip5pt z=f(y)\]
$y=f(x) \vskip5pt z=f(y)$
\end{document}
```

[在 Overleaf 中打开此 ***会产生错误的*** 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)

TeX 处于数学模式时不允许的其他 TeX（原始）命令包括 `\par`, `\hrule`, `\unvbox`, `\unvcopy` 和 `\valign`.

#### 数学中的空行

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

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

[在 Overleaf 中打开此 ***会产生错误的*** 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)

**原因**：公式之间的空行会被转换为一个 `\par` 在数学模式中不允许的命令。你也可以通过写成

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

[在 Overleaf 中打开此 ***会产生错误的*** 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)

要修复此问题，要么删除空行，要么将其注释掉：

```latex
\documentclass{article}
\begin{document}
\begin{equation}
y=x^3,
% 这将抑制空行
z=x^3
\end{equation}
\end{document}
```

[在 Overleaf 中打开此 ***修正后的版本*** 在 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)

#### 在数学环境中使用 $

某些 LaTeX 环境，例如 `align` 和 `equation` 环境，不要求将数学内容包裹在 `$` 符号中，也不需要使用 LaTeX 的数学语法： `\(...\)` 或 `\[...\]`。实现这些环境的 LaTeX 代码会负责进入和退出数学模式。

以下示例展示了在 `$` 环境中使用 `amsmath` `align` 符号，这会触发一个 `插入了缺少的 $` 错误，以及许多其他错误……

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

[在 Overleaf 中打开此 ***会产生错误的*** 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)

这些方程的正确写法是：

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

[在 Overleaf 中打开此 ***修正后的版本*** 在 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)

## “插入了缺失的 $” 错误的背景

以下部分面向希望更好理解该错误背后原因的读者 `插入了缺少的 $`。这并非 *必需的* 阅读，但它可能会帮助你查找并修复错误。

### 并没有缺失的 $ 符号，但我仍然遇到这个错误

在某些情况下，该 `插入了缺少的 $` 错误会非常令人困惑，因为你的 LaTeX 代码实际上可能并没有任何 *明显缺失的* `$` 字符问题。例如，LaTeX 片段 $$\verb|$$y=f(x)\par$$|$$ 表面上看起来是正确的： $$\verb|$$|$$ 配对是平衡的，但它会触发“`缺失的 $`”错误。这里，这是由于 `\par` 命令在数学模式中不允许：

```latex
\documentclass{article}
\begin{document}
此示例会生成 \verb|Missing $ inserted| 错误：
$$y=f(x)\par$$
\end{document}
```

[打开此处查看“插入了缺失的 $”错误](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)

上述 LaTeX 代码实际上会触发一连串 *连锁* 错误，如下所示，所以显然你不应使用 `\par` 在数学中！

```
！插入了缺失的 $。
<插入的文本>
                $
l.12 $$y=f(x)\par
                 $$
我已经插入了一个数学开始/结束符号，因为我认为
你漏掉了一个。继续吧，祈祷好运。

！显示数学应以 $$ 结束。
<重新读取>
                   \par
l.12 $$y=f(x)\par
                 $$
我刚看到的 `$' 据说与前面的 `$$' 匹配。
所以我就假定你两次都输入了 `$$'。

！插入了缺失的 $。
<插入的文本>
                $
l.13 \end{document}

我已经插入了一个数学开始/结束符号，因为我认为
你漏掉了一个。继续吧，祈祷好运。

！显示数学应以 $$ 结束。
<重新读取>
                   \par
l.13 \end{document}

我刚看到的 `$' 据说与前面的 `$$' 匹配。
所以我就假定你两次都输入了 `$$'。
```

当 `插入了缺少的 $` 错误发生时，TeX 引擎软件正试图恢复并“回到正轨”，以便在错误发生点之后继续处理。章节 [高级：TeX 错误恢复机制的解释](#advanced-an-explanation-of-texs-error-recovery-mechanism) 将帮助你理解为何由于 TeX 试图修复最初错误而产生这连锁错误。

### 关于模式，以及何时

在内部，TeX 引擎使用三种“心智状态”运行，称为 *模式*，它们取决于 TeX 引擎正在 *当前* 排版的材料类型。TeX 引擎在排版过程中的任意时刻所处的模式称为其 *当前* 模式，它会在排版你的 LaTeX 文档内容的过程中不断变化。

对于 TeX 引擎的每一种模式，都有某些命令和字符（更准确地说，是类别码）与 TeX 当前模式“互不兼容”：当 TeX 处于该特定模式时不应使用它们。如果你尝试使用这些不合适的字符或命令，TeX 将发出诸如 `插入了缺少的 $` 来告诉你出了问题。

#### 数学模式

此错误 `插入了缺少的 $` 与 TeX 的 *数学模式*——也就是说，当你让 LaTeX 排版一些数学内容时，TeX 引擎所处的模式。

为完整起见，我们要说明有 *两个* 两种数学模式，分别对应行内公式和显示公式的创建：

* 行内数学模式
* 显示数学模式

TeX 需要这两种不同的数学模式，因为在排版用于行内或显示的数学内容时，它会应用不同的间距、符号大小等规则。

#### 触发 TeX 数学模式

有多种方式可以触发 TeX 引擎去 *进入* 然后 *离开* 数学模式。

* 你可以使用如下显式标记：
  * LaTeX 语法： `\(...\)` 更改为 *进入* `\(` 然后 *离开* `\)` 行内数学模式，或者 `\[...\]` 更改为 *进入* `\[` 然后离开 `\]` 显示数学模式；
  * （历史上的）TeX 语法： `$...$` 进入（第一个 `$`）然后离开（第二个 `$`）行内数学模式，或者 `$$...$$` 进入（第一个 `$$` *对*）然后离开（第二个 `$$` *对*）显示数学模式；
* 或任何一种 LaTeX 数学环境：
  * `\begin{align}...\end{align}` 等等。在幕后，这些环境会负责进入和离开数学模式。

实际的 *text* 消息的 `插入了缺少的 $` 是 *内置于* （“硬编码”在）TeX 引擎软件中，这就是为什么你仍会看到 `缺失的 $` 即使你没有使用 `$` 字符来排版数学内容，而是纯粹使用 LaTeX 语法来标记文档中的数学内容。这对于 LaTeX 新用户来说可能会令人困惑，但若不修改 TeX 引擎的源代码，几乎无法更改这条错误消息文本！

#### 宏：测试是否处于数学模式

可以使用原始命令来测试 TeX 当前是否处于数学模式 `\ifmmode`；这样你就可以编写行为可自适应的宏，以避免生成与模式相关的错误。下面是一个非常基础的示例，用来演示这一原理，它会输出 `是。` 或 `否。` 具体取决于在“执行”该宏时 TeX 是否处于数学模式。

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

该宏是否在数学模式中使用？ $\mytest$

该宏是否在数学模式中使用？ $$\mytest$$

该宏是否在数学模式中使用？ \(\mytest\)

该宏是否在数学模式中使用？ \[\mytest\]

该宏是否在数学模式中使用？ \mytest
\end{document}
```

[在 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)

下图显示了上述示例生成的输出：

![用于测试数学模式的 LaTeX 宏](/files/231b6827028d3a8c22ab96864b3d96e0f6c17b4d)

## 高级：TeX 错误恢复机制的解释

错误消息 `插入了缺少的 $` 并不是由 Overleaf、LaTeX 或 LaTeX 宏包输出的；它实际上来自 *可执行程序内部* 负责排版你的 LaTeX 文档：这个可执行程序称为 TeX *引擎*——你可以把它看作在“驱动”排版过程。

在 TeX 软件的源代码中，其作者（Donald Knuth）对负责生成该 `插入了缺少的 $` 错误的代码作出了如下说明：

> 以下是一些用户很可能由于误操作而进入或退出数学模式的情况。TeX 会插入一个美元符号，并重新扫描当前标记。

该 `插入了缺少的 $` 错误的核心在于 TeX 检测到了某些不应在数学模式中使用的“东西”，或者检测到了某些专为数学排版设计的“东西”却被用于数学模式之外。

TeX 面临的任务是：我该如何从中恢复？TeX 确实如 Knuth 所写：它插入一个美元符号并重新扫描当前标记——一个 [“标记”](/latex/zh-cn/shen-ru-wen-zhang/53-what-is-a-tex-token.md) 是 TeX 的内部数值（整数）值，用来表示它刚读取的字符或命令。不过，由于错误发生的具体上下文，这一策略可能成功，也可能不成功——正如错误文本后面所说：“继续吧，祈祷好运吧。”！

### 详细示例

让我们通过仔细查看以下示例来探究 Knuth 的评论： $$\verb|$y=f(x)$$\vskip3pt|$$。如果你打开下面的代码，你会看到它会触发错误 `插入了缺少的 $`.

```latex
写成 \verb|$y=f(x)$$\vskip3pt| 会产生……$y=f(x)$$\vskip3pt 新起一行……
```

[在 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)

为了查看为何这会触发错误，让我们写上下标来标识每个 $$\verb|$|$$ 在表达式中的位置，得到 $$\verb|$|*{\mathtt1}\verb|y=f(x)|\verb|$|*{\mathtt2}\verb|$|*{\mathtt3}\verb|\vskip3pt|$$。TeX 能够正确处理第一部分 $$\verb|$|*{\mathtt1}\verb|y=f(x)|\verb|$|*{\mathtt2}$$ ，它被视为格式正确的行内数学，生成 $$y=f(x)$$。在处理完 $$\verb|$|*{\mathtt2}$$ TeX 会暂时退出行内数学模式——在我们的例子中，我们是在段落中创建行内数学，因此它会短暂进入所谓的 *水平模式*.

接下来发生的事情触发了错误。TeX 继续处理 $$\verb|$|\_{\mathtt3}$$ ，这会触发 TeX 重新进入行内数学模式。TeX 现在读取下一个标记，也就是 $$\verb|\vskip|$$ 命令——它尚未读取 $$\verb|3pt|$$。此时，TeX 看到 $$\verb|\vskip|$$ 但它处于行内数学模式： $$\verb|\vskip|$$ 在那里是不允许的，因此它触发了 Knuth 所描述的 TeX 错误处理过程：

> TeX 会插入一个美元符号，并重新扫描当前标记。

这里，当前标记是 $$\verb|\vskip|$$ 命令，因此 TeX 所做的是在其输入中放入一个 *新的* `$` 到其输入中，我们把它称为 $$\verb|$|*{\mathtt4}$$。此时，TeX 仍处于行内数学模式，但现在它会回头读取相当于 $$\verb|$|*{\mathtt4}\verb|\vskip|$$ 的内容，而这是在行内数学模式中读取的。这个 $$\verb|$|\_{\mathtt4}$$，由 TeX 自己插入的，现在 *结束了* 当前的行内数学模式，随后 TeX 继续读取 $$\verb|\vskip|$$ 命令 *外部* 行内数学模式——这里，TeX 处于一个段落中，因此 $$\verb|\vskip3pt|$$ 会导致当前段落结束，并 $$\verb|3pt|$$ 在其后放置一个空格。


---

# 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/zh-cn/latex-cuo-wu/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.
