pdfcompiler-errorslatexpdf-generation

why is LaTeX / pdflatex compiler so 'funky' with multiple compiles necessary and bogus error messages, etc, compared to c++?


Is there a simple explanation for why the latex / pdflatex compiler is funky in the following two ways:

1) N multiple compiles are necessary until you reach a "steady state" version. N seems to grow up to around 5 or 6 if I use many packages and references.

2) Error messages are almost always worthless. The actual error is not flagged. Example:

  \begin{itemize} % Line 499
   \begin{enumerate}
    % Comment: error: forgot to close the enumerate block 
    \item This is a bullet point. 
  \end{itemize}   % Line 503

result: "Error on line 1 while scanning \begin{document}", not very useful.

I realize there is a separate "tex exchange" but I'm wondering if someone knowledgeable about c++, java, or other compilers can provide some insight on how those seem to support single-compile and proper error localization.

Edit: this document seems like a rant justifying the hacks in latex's implementation, but what about latex's syntax/language properties make the weird implementation necessary? http://tug.org/texlive/Contents/live/texmf-dist/doc/generic/knuth/tex/tex.pdf


Solution

  • From a LaTeX point of view:

    1. You should at most require 3 (...maybe 4) to reach a steady state. This depends not on the number of packages, but possible layout changes within your document. Layout changes cause references to move, and these references need to be correct (hence the recompile until they don't move).

    2. Nesting of environments is allowed (although this does not address your problem directly). Also, macro definitions act as replacement text for your input. So, even though you write \end{itemize}, it is actually transformed into a bunch of other/different (primitive) macros, removing the obvious-to-humans structure and consequently also the bizarre error message. That's why some of the error messages are difficult to interpret.