Ошибка или особенность механизма поплавков

Ошибка или особенность механизма поплавков

Если я наберу $\section{Second section}$или

\begin{enumerate}
\item first bla bla 
\item second bla bla
$\item last bla bla$
\end{enumerate}

Я получаю сообщение об ошибке ! Missing $ inserted...или! LaTeX Error: Command \item invalid in math mode.

Но если я скомпилирую следующий код, я получу (правильный) вывод, но, скажем, строковый вывод.

\documentclass{article}
\usepackage{lipsum}

\begin{document}
\section{First section}
\lipsum[1]
\begin{table}
\section{Second section}
\caption{Just a table}
\end{table}
\begin{enumerate}
\item first bla bla
\item second bla bla
\begin{table}
\item last bla bla
\caption{Just a table}
\end{table}
\end{enumerate}
\section{Last section}
\lipsum[1]

\end{document}

введите описание изображения здесь

Это ошибка?Плавающие объекты могут располагаться (где угодно), например, располагаться \itemперед предыдущими элементами или, что еще хуже, внутри элементов других enumerate.

Это особенность?нумерация все еще верна, и это может понадобиться.

главный вопрос:почему латекс не препятствует командам \section, \item, ... попадать внутрь плавающей среды, и мы знаем, что наоборот, это \captionне работает вне плавающей среды. т.е. почему нет

\gdef\@infloaterr#1{%
   \relax
   \ifx\@captype\@undefined
   \else
 \@latex@error{Command \protect#1  inside float}
   \fi}

похожий на \@inmatherr.

решение1

Существует множество неверных вводов, которые не приводят к появлению сообщения об ошибке ( \section[z]{\section{aa}}например).

\sectionвнутри float является ошибкой, она просто не перехватывается системой (на момент разработки latex для этого потребовалось бы неоправданно большое количество памяти).

Различие между математическими и нематематическими операциями встроено в tex, и его гораздо проще проверить, чем каждую команду проверять в каждом месте, где она не имеет смысла.

Аналогично \captionнеобходимо знать, какой тип субтитров создать (хранится внутри \@captype), поэтому проверка там намного проще, поскольку определение по умолчанию заключается в том, что он генерирует ошибку, \captionпросто локально работает в контекстах, которые включают субтитры.

Связанный контент