Eivind Uggedal

Working Effectively with Large LaTeX Documents

I'm currently in the latter stages of writing my master thesis. I've been using LaTeX from the start and have learnt a few tricks for how to work most effectively with large documents like theses and books.

First off, you are digging your own grave if you're not seperating your document into separate files. I tend to use a separate file for each chapter. Long chapters could also be separated into a file for each section. For chapters you should use the \include{} command for including you separate files into you main document. The \input{} command is best suited for including several sections from multiple files as it does not automatically start a new page for every included file. A typical base file that includes all the separate chapters could look like this:

\documentclass[11pt,a4paper]{book}

\title{A Long Master Thesis}

\author{Eivind Uggedal}

\begin{document}

  \frontmatter
    \maketitle
    \tableofcontents
    \listoffigures
    \listoftables
    \include{acknowledgements}

  \mainmatter
    \include{introduction}
    \include{background}
    \include{methodology}
    \include{implementation}
    \include{analysis}
    \include{discussion}
    \include{conclusion}

  \appendix
    \include{questionnaire}
    \include{source.code}

  \backmatter
    \bibliography{bib.items}

\end{document}

Note that we have a separate file for our acknowledgements, every chapter, the appendices, and use BibTeX to separate out our bibliographic information to a separate file. The files are simply named as the argument given to \include{} plus a .tex suffix.

Secondly you need to use a small script or a tool that automates the compilation process of your document. A LaTeX document have to be compiled several times to get citations, lists of figures/tables, table of contents, references, and other items properly formatted and numbered. I wrote my own tool called Rubbr to handle this.

Thirdly the compiling process tends to take several seconds when your document gets large and you've used several packages to implement new features in your document. By using the \includeonly{} command you can decide which of your files that are supposed to be included with \include{} will actually be included. This functions as a white list and should be placed before your document environment. I tend to have every potential included file listed in a commented \includeonly{} structure like this:

%includeonly{%
%acknowledgements,%
%introduction,%
%background,%
%methodology,%
%implementation,%
%analysis,%
%discussion,%
%conclusion,%
%questionnaire,%
%source.code,%
%}

When I'm working on a single chapter I comment out the \includeonly{} command an the chapter in question:

includeonly{%
%acknowledgements,%
%introduction,%
background,%
%methodology,%
%implementation,%
%analysis,%
%discussion,%
%conclusion,%
%questionnaire,%
%source.code,%
}

This way compilation times decreases substantially and you can get more rapid feedback of how your document looks. I have in place a similar construct in my document preamble for easily switch on and off draft mode:

\documentclass[12pt,%
                %draft,%
                a4paper]{book}

A small deletion of the comment character (%) gives me a document in draft mode:

\documentclass[12pt,%
                draft,%
                a4paper]{book}