I am currently using the texlipse 1.5. I have not looked into the texlipse build code yet, but from my experience it seems to follow the traditional aproach: recompile as long as there are undefined references or undefined citation keys in the error log or a limit is reached.
This may be better than the static "compile twice" approach, but still there are some problems:
it may not notice a change in page numbers. The table of contents lags behind.
it makes compilation terribly slow if there is an error in the TeX code. (a forgotten \end or a misspelled reference)
it makes compilation terribly slow if the user makes a reference to a label in another file and saves the file with the reference before saving the file with the label.
A better build system
Some years ago I used a different approach for my own documents that I would love to see implemented in a way that can be used by all latex-authors. My build system was based on GNU make. The idea follows the same principles as a Makefile for c code: generate dependencies and rebuild every file that is older than any of its input files. A latex file will be rebuilt until all the page numbers / references / bookmarks have reached a stable value. It will not be built more often than necessary.
Here is how I addressed some of the tex specific problems that occur in this approach:
Replace timestamps with checksums
There is a cyclic dependency on auxiliary files like .aux, .toc, .out, .bbl. To generate these files we take these files as input. Therefore we cannot use a timestamp to check for a change. I used a checksum, saved the checksum in a file and updated the checksum file only when the checksum changed. This way I had timestamp of the last change of the auxiliary files.
Analyse dependencies
In my system I just parsed the .tex files for \input, \include and \includegraphics. This worked for me, but more general system should not fail just because someone defines \myinput. Instead you should parse the tex console output for the names of input files and also for input files that yet don't exist (No file example.aux).
What can go wrong?
The system clearly fails if someone outputs a precise time stamp or compilation counter in an auxiliary file. The maximum number of compilations would always be reached. (Some builder configuration options could help)
In rare cases the output will not settle because of some oscillation cycles. E.g. with varioref: \vref inserts more text when the label is on the next page than when it appears two pages later. Therefore the long text may push the label a page further, leading to a shorter text and the label pulled back again. This should be reported to the user because the reference will never be correct! (This is not a drawback of the build system, but it will detect a wrong reference that would exist anyway)
It may be a nice feature if the build system automatically tries to delete auxiliary files that produce errors after a change in the .tex file.
Sometimes the user may want to have a quick compilation rather than correct page numbers. There should be a draft mode to compile only once.
Conclusio
Since there is active development on texlipse now, I hope that the developers consider my suggestions for a new build system.
The problem
I am currently using the texlipse 1.5. I have not looked into the texlipse build code yet, but from my experience it seems to follow the traditional aproach: recompile as long as there are undefined references or undefined citation keys in the error log or a limit is reached.
This may be better than the static "compile twice" approach, but still there are some problems:
\end
or a misspelled reference)A better build system
Some years ago I used a different approach for my own documents that I would love to see implemented in a way that can be used by all latex-authors. My build system was based on GNU make. The idea follows the same principles as a Makefile for c code: generate dependencies and rebuild every file that is older than any of its input files. A latex file will be rebuilt until all the page numbers / references / bookmarks have reached a stable value. It will not be built more often than necessary.
Here is how I addressed some of the tex specific problems that occur in this approach:
Replace timestamps with checksums
There is a cyclic dependency on auxiliary files like .aux, .toc, .out, .bbl. To generate these files we take these files as input. Therefore we cannot use a timestamp to check for a change. I used a checksum, saved the checksum in a file and updated the checksum file only when the checksum changed. This way I had timestamp of the last change of the auxiliary files.
Analyse dependencies
In my system I just parsed the .tex files for
\input
,\include
and\includegraphics
. This worked for me, but more general system should not fail just because someone defines\myinput
. Instead you should parse the tex console output for the names of input files and also for input files that yet don't exist (No file example.aux
).What can go wrong?
Conclusio
Since there is active development on texlipse now, I hope that the developers consider my suggestions for a new build system.