浮动机制的缺陷或特性

浮动机制的缺陷或特性

如果我输入$\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

这是一个特点吗?编号仍然正确,并且人们可能需要它。

主要问题:为什么 latex 不能阻止\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浮点数内部存在错误,它只是没有被系统捕获(在设计 Latex 时,这样做会占用大量内存。)

数学/非数学区别已内置于 tex 中,因此测试这一点比测试每个命令的每个没有意义的处所要容易得多。

类似地,\caption需要知道要制作什么类型的字幕(内部存储在\@captype),因此测试会容易得多,因为默认定义是它会生成错误,\caption只是在启用字幕的上下文中本地工作。

相关内容