> For the complete documentation index, see [llms.txt](https://ayakaleaf-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://ayakaleaf-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-du-wen-zhang/55-what-s-in-a-name-a-guide-to-the-many-flavours-of-tex.md).

### “Missing $ inserted”的主要原因

（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 中的示例](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 上的代码](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 中](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 上的代码](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 上的代码](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 上的代码](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 中](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 上的代码](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 中](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)

## “Missing $ inserted”错误的背景

以下部分适用于希望更好理解该错误背后原因的读者 `缺少插入的 $`。这不是 *必需的* 读物，但它可能有助于你查找并修复错误。

### 虽然没有缺少 $ 符号，但我仍然遇到该错误

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

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

[展开此处查看 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)

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

```
! Missing $ inserted.
<inserted text>
                $
l.12 $$y=f(x)\par
                 $$
我插入了一个开始-数学/结束-数学符号，因为我认为
你漏掉了一个。继续吧，祝你好运。

！显示数学应以 $$ 结束。
<to be read again>
                   \par
l.12 $$y=f(x)\par
                 $$
我刚看到的 `$' 理应与前面的 `$$' 相匹配。
因此我将假定你两次都输入了 `$$'。

! Missing $ inserted.
<inserted text>
                $
l.13 \end{document}

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

！显示数学应以 $$ 结束。
<to be read again>
                   \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}` 等等。在幕后，这些环境会负责进入和离开数学模式。

实际的 *文本* 消息的 `缺少插入的 $` 是 *内置于* （在）TeX 引擎软件中“硬编码”了，因此即使你没有使用 `Missing $` 即使你没有使用 `$` 字符来排版数学内容，而是纯粹使用 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 *engine*——你可以把它看作是“驱动”排版过程。

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

> 下面列出了用户很可能因误操作而进入或退出数学模式的情况。TeX 将插入一个美元符号并重新扫描当前标记。

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

TeX 面临的任务是：我该如何从中恢复？TeX 正如 Knuth 所写那样做：它插入一个美元符号并重新扫描当前标记——一个 [“标记”](/latex/zh-cn/shen-du-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|$$ 在那里是不允许的，因此会触发 TeX 的错误处理过程，正如 Knuth 所描述的那样：

> 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://ayakaleaf-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.
