
Wenn ich tippe $\section{Second section}$
oder
\begin{enumerate}
\item first bla bla
\item second bla bla
$\item last bla bla$
\end{enumerate}
Ich erhalte die Fehlermeldung ! Missing $ inserted...
oder! LaTeX Error: Command \item invalid in math mode.
Aber wenn ich den folgenden Code kompiliere, erhalte ich die (korrekte) Ausgabe, sagen wir aber eine String-Ausgabe.
\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}
Ist das ein Fehler?Schwebende Objekte können (überall hin) gehen, z. B. \item
steht ein vor vorhergehenden Elementen oder, schlimmer noch, innerhalb der Elemente eines anderen enumerate
.
Ist es ein Feature?Nummerierung noch korrekt, und das kann man brauchen.
Hauptfrage:warum Latex nicht verhindert , dass \section
, \item
, ...-Befehle in eine Float-Umgebung gelangen, und wir wissen, dass dies umgekehrt \caption
außerhalb von Float-Umgebungen nicht funktioniert. d. h. warum gibt es keine
\gdef\@infloaterr#1{%
\relax
\ifx\@captype\@undefined
\else
\@latex@error{Command \protect#1 inside float}
\fi}
ähnlich zu \@inmatherr
.
Antwort1
Es gibt viele falsche Eingaben, die keine Fehlermeldung erzeugen ( \section[z]{\section{aa}}
zum Beispiel).
\section
innerhalb eines Floats liegt ein Fehler vor, er wird vom System lediglich nicht abgefangen (zum Zeitpunkt der Entwicklung von Latex hätte dies unverhältnismäßig viel Speicher in Anspruch genommen).
Die Unterscheidung zwischen mathematischen und nicht-mathematischen Werten ist in Tex integriert; es ist viel einfacher, dies zu testen, als bei jedem Befehl jede Stelle zu testen, an der es keinen Sinn ergibt.
Ebenso \caption
muss bekannt sein, welche Art von Untertitel erstellt werden soll (intern in gespeichert \@captype
), sodass der Test dort viel einfacher ist, da die Standarddefinition vorsieht, dass ein Fehler generiert wird. \caption
Funktioniert nur lokal in Kontexten, die Untertitel aktivieren.