
Если я наберу $\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
просто локально работает в контекстах, которые включают субтитры.