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

# Отсутствует $ вставлен

## Как исправить эту ошибку

Эта ошибка может быть вызвана разными способами и, особенно для тех, кто только начинает работать с LaTeX, не всегда *сразу* очевидно, почему она возникла, или, что ещё важнее, как её исправить. Мы начнём с обзора *общих* условий, которые вызывают эту ошибку, а затем перечислим некоторые из наиболее распространённых причин и способы их исправления.  [Поздние части этой статьи](#background-to-the-missing-inserted-error) предлагают более глубокий материал для читателей, желающих расширить своё понимание.

**Примечание**: В этой статье мы используем термины «TeX», «LaTeX» и «TeX engine», но если вы не уверены в их различных значениях, вы можете узнать об этом в статье Overleaf [Что в имени: руководство по множеству разновидностей TeX](/latex/ru/podrobnye-stati/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/ru/drugie-temy/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/89a4f3ca01f39ea524899b5a7ef377b12f82cb46)

**Исправление ошибок, вызванных командами символов 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/ru/matematika/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/ru/drugie-temy/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)

**Подчёркивания в URL .bib-файлов**

Если такие 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|$$|$$ сбалансирована, но это вызовет ошибку «`missing $`». Здесь причина в `\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.
<вставленный текст>
                $
l.12 $$y=f(x)\par
                 $$
Я вставил символ начала/конца математики, поскольку думаю, что
вы его пропустили. Продолжайте, скрестив пальцы.

! Display math should end with $$.
<будет прочитано снова>
                   \par
l.12 $$y=f(x)\par
                 $$
Знак `$', который я только что увидел, якобы соответствует предыдущему `$$'.
Поэтому я предполагаю, что в обоих случаях вы набрали `$$'.

! Missing $ inserted.
<вставленный текст>
                $
l.13 \end{document}

Я вставил символ начала/конца математики, поскольку думаю, что
вы его пропустили. Продолжайте, скрестив пальцы.

! Display math should end with $$.
<будет прочитано снова>
                   \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 *войти* и затем *выйти из* математического режима.

* Вы можете использовать явную разметку, например:
  * Синтаксис LaTeX: `\(...\)` на *войти* `\(` затем *выйти из* `\)` встроенный математический режим или `\[...\]` на *войти* `\[` затем выйти из `\]` режима отображаемой математики;
  * (исторический) синтаксис TeX: `$...$` чтобы войти (сначала `$`) затем выйти (вторым `$`) встроенным математическим режимом или `$$...$$` чтобы войти (сначала `$$` *пара*) затем выйти (вторым `$$` *пара*) режимом отображаемой математики;
* или любое из математических окружений LaTeX:
  * `\begin{align}...\end{align}` и т. д. За кулисами эти окружения сами заботятся о входе в математический режим и выходе из него.

Само *text* сообщение `Вставлен отсутствующий $` равно *встроенных в* ('жёстко зашитое' в) программном обеспечении движка 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/81f492cc93b37fd88fe33db6535cbb24ac0dad6c)

## Продвинутый уровень: объяснение механизма восстановления после ошибок TeX

Сообщение об ошибке `Вставлен отсутствующий $` не выводится Overleaf, LaTeX или пакетами LaTeX; на самом деле оно происходит *внутри исполняемой программы* ответственной за набор вашего документа LaTeX: эта исполняемая программа называется движком TeX *движок*— его можно рассматривать как «управляющий» процессом набора.

В исходном коде программного обеспечения TeX его автор (Donald Knuth) делает это замечание о коде, отвечающем за формирование `Вставлен отсутствующий $` ошибки:

> Вот список случаев, когда пользователь, вероятно, по ошибке вошёл в математический режим или вышел из него. TeX вставит знак доллара и повторно просканирует текущий токен.

В основе `Вставлен отсутствующий $` ошибки лежит то, что TeX обнаруживает «что-то», что не следовало использовать внутри математического режима, или «что-то», что было явно предназначено для набора математики, но используется вне математического режима.

Задача TeX такова: как мне восстановиться после этого? TeX делает ровно то, что пишет Кнут: он вставляет знак доллара и повторно сканирует текущий токен — [«токен»](/latex/ru/podrobnye-stati/53-what-is-a-tex-token.md) — это внутреннее числовое (целочисленное) значение TeX, представляющее символ или команду, которую он только что прочитал. Однако из-за точного контекста ошибки эта стратегия может сработать, а может и не сработать — как далее сказано в тексте ошибки: «Продолжайте, скрестив пальцы.»!

### Пример разбора

Давайте исследуем замечания Кнута, более внимательно рассмотрев следующий пример: $$\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, как описано Кнутом:

> 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/ru/oshibki-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.
