Rubber: a LaTeX building system for documents.
Rubber is based on a routine that compiles a LaTeX source the right number of times to resolve all references and to create tables of contents, list of figures, and more. In addition, Rubber provides a modular system to handle various tasks that are required outside of compilations, including the processing of bibliographic references or indices, and the compilation or conversion of figures. Modules can even perform a post-processing of the document, such as converting a DVI to PostScript or PDF.
Dependency analysis is performed by parsing the source files, ensuring that modifying any source, user package, or graphics file will lead to appropriate compilations. Modules can be triggered either explicitly using command-line options, or implicitly when the sources are parsed. For instance, BibTeX support is activated whenever the source contains commands that generate a bibliography, graphics support is activated by usepackage{graphics}, and so on. With Rubber's modular approach, any additional feature can be supported by simply writing a module to support it.
Rubber is written entirely in Python, using features from version 2.2. A supported TeX compiler must be present, as well as additional tools like bibtex and dvips if they are used. The latest release of Rubber adds support for user-defined file conversion rules, support for xindy and sam2p, improved fig2dev support, an experimental cache system, and bug fixes for better parsing of log files, error reporting (including for BibTeX and Metapost), and handling of verbatim environments. Overall, Rubber is a highly efficient and valuable tool for anyone who frequently compiles LaTeX documents.
Version 1.1: N/A