フロート機構のバグまたは機能

フロート機構のバグまたは機能

入力し$\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なぜLaTeXは、、、\item...コマンドがフロート環境内に入ることを防止しないのか、そして逆に\captionフロート環境外ではそれが機能しないことは分かっています。つまり、

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

に似ている\@inmatherr

答え1

エラー メッセージが生成されない誤った入力が多数あります。(\section[z]{\section{aa}}例)

\sectionfloat 内ではエラーになりますが、システムによってトラップされません (LaTeX が設計された時点では、これを行うには膨大な量のメモリが必要だったでしょう)。

数学と非数学の区別は TEX に組み込まれているため、すべてのコマンドで意味をなさない場所をすべてテストするよりも、数学と非数学の区別をテストする方がはるかに簡単です。

同様に、\caption作成するキャプションの種類 ( に内部的に保存\@captype) も知っておく必要があります。デフォルトの定義ではエラーが生成され、\captionキャプションを有効にするコンテキストでローカルに機能するため、ここでのテストははるかに簡単になります。

関連情報