\end
occurred inside a groupThe actual error we observe is:
(\end occurred inside a group at level <
n
>)
and it tells us that something we started in the document never got
finished before we ended the document itself. The things involved
('groups') are what TeX uses for restricting the scope of things:
you see them, for example, in the "traditional" font selection
commands: {\it stuff\/}
- if the closing brace is left off such a
construct, the effect of \it
will last to the end of the document,
and you'll get the diagnostic.
TeX itself doesn't tell you where your problem is, but you can
often spot it by looking at the typeset output in a previewer.
Otherwise, you can usually find mismatched braces using an intelligent
editor (at least emacs
and winedt offer this facility).
However, groups are not only created by matching {
with }
:
other grouping commands are discussed elsewhere in these FAQs,
and are also a potential source of unclosed group.
\begin{<environment>}
encloses the environment's body
in a group, and establishes its own diagnostic mechanism. If you end
the document before closing some other environment, you get the
'usual' LaTeX diagnostic
! LaTeX Error: \begin{blah} on input line 6 ended by \end{document}.which (though it doesn't tell you which file the
\begin{blah}
was in) is usually enough to locate the
immediate problem. If you press on past the LaTeX error, you get
the "occurred inside a group" message before LaTeX finally exits.
In the absence of such information from LaTeX, you need to use "traditional" binary search to find the offending group. Separate the header from the body of your file, and process each half on its own with the header; this tells you which half of the file is at fault. Divide again and repeat. The process needs to be conducted with care (it's obviously possible to split a correctly-written group by chopping in the wrong place), but it will usually find the problem fairly quickly.
e-TeX (and elatex - LaTeX run on e-TeX) gives you further diagnostics after the traditional infuriating TeX one - it actually keeps the information in a similar way to LaTeX:
(\end occurred inside a group at level 3) ### semi simple group (level 3) entered at line 6 (\begingroup) ### simple group (level 2) entered at line 5 ({) ### simple group (level 1) entered at line 4 ({) ### bottom levelThe diagnostic not only tells us where the group started, but also the way it started:
\begingroup
or {
(which is an alias of
\bgroup
, and the two are not distinguishable at the TeX-engine
level).