# LaTeX/Modular Documents

(Redirected from LaTeX/General Guidelines)

LaTeX

Getting Started

Common Elements

Mechanics

Technical Texts

Special Pages

Special Documents

Creating Graphics

Programming

Miscellaneous

1. Modular Documents
2. Collaborative Writing of LaTeX Documents
3. Export To Other Formats

Help and Recommendations

Appendices

edit this boxedit the TOC

During this guide we have seen what is possible to do and how this can be achieved, but the question is: I want to write a proper text with LaTeX, what to do then? Where should I start from? This is a short step-by-step guide about how to start a document properly, keeping a good high-level structure. This is all about organizing your files using the modular capabilities of LaTeX. This way it will be very easy to make modifications even when the document is almost finished. These are all just suggestions, but you might take inspiration from that to create your own document.

## Project structure

Create a clear structure of the whole project this way:

1. create a directory only for the project. We'll refer to that in the following parts as the root directory
2. create two other directories inside the root, one for LaTeX documents, the other one for images. Since you'll have to write their name quite often, choose short names. A suggestion would be simply tex and img.
3. create your document (we'll call it document.tex, but you can use the name you prefer) and your own package (for example mystyle.sty); this second file will help you to keep the code cleaner.

If you followed all those steps, these files should be in your root directory, using "/" for each directory:

./document.tex
./mystyle.sty
./tex/
./img/


nothing else.

## Getting LaTeX to process multiple files

As your work grows, your LaTeX file can become unwieldy and confusing, especially if you are writing a long article with substantial, discrete sections, or a full-length book. In such cases it is good practice to split your work into several files. For example, if you are writing a book, it makes a lot of sense to write each chapter in a separate .tex file. LaTeX makes this very easy thanks to two commands:

\input{filename}


and

\include{filename}


The differences between these two ways to include files will be explained below. What they have in common is that they process the contents of filename.tex before continuing with the rest of the base file. When the compiler processes your base file (the file that contains these statements) and reaches the command \input or \include, it reads filename.tex and processes its content in accordance with the formatting commands specified in the base file. This way you can put all the formatting options in your base file and then \input or \include the files which contain the actual content of your work. This means that the important part of your working process, i.e. writing, is kept largely separate from formatting choices (which is one of the main reasons why LaTeX is so good for serious writing!). You will thus be dealing solely with text and very basic commands such as \section, \emph etc. Your document will be uncluttered and much easier to work with.

The second method of including a file, \include{filename}, differs from the first in some important ways. You cannot nest \include statements within a file added via \include, whereas \input, on the other hand, allows you to call files which themselves call other files, ad infinitum (well, nearly!). You can, however, \include a file which contains one or more \input commands. Please resist the temptation to nest files in this way simply because the system can do it: you will end up with just another kind of complexity!

Another important difference is that using \include will force a page break (which makes it ideal for a book's chapters), whereas the \input command does not (which in turn makes it ideal for, say, a long article with discrete sections, which of course are not normally set on a new page).

In either case the .tex filename extension is optional.

Working on discrete parts of your documents has consequences for how the base file is compiled; these will be dealt with below.

### Using different paths

When the LaTeX compiler finds a reference to an external file in the base file, it will look for it in the same directory. However, you can in principle refer to any file on your system, using both absolute and relative paths.

An absolute path is a full path- and filename with every element specified. So, filename.tex might have the full path,

\input{/home/user/texfiles/filename.tex}


If you had created the directory myfiles for your writing project, in your texfiles directory, its full path would be,

\input{/home/user/texfiles/myfiles/filename.tex}


Obviously, using absolute paths is inefficient if you are referring to a file in the current directory. If, however, you need to include a file which is always kept at a specific place in your system, you may refer to it with an absolute path, for example,

\input{/home/user/documents/useful/foo.tex}


In practice, an absolute file path is generally used when one has to refer to a file which is quite some way away in the file system (or perhaps even on a different server!). One word of warning: do not leave empty spaces in the filenames, they can cause ambiguous behaviour. Either leave no spaces or use underscores _ instead.

You may, however, need to make your source portable (to another computer or to a different location of your harddisk), in which case relative paths should be used if you wish to avoid unnecessary rewriting of path names. Or, a relative path may simply be a more efficient and elegant way of referring to a file. A relative path is one which is defined in relation to the current directory, in our case the one which contains the base file. LaTeX uses the standard UNIX notation: with a simple dot . you refer to the current directory, and by two dots .. you refer to the previous directory, that is the one above the current directory in the file system tree. The slash / is used to separate the different components of a pathname: directories and filenames. So by ./ you refer to the current directory, by ../ you refer to the previous directory, by ../../ you refer to a directory which is two steps upwards in the filesystem tree. Writing

\input{./filename.tex}


will have exactly the same effect as writing

\input{filename.tex}


but if you found it more convenient to put all your files in a sub-directory of your current directory, called myfiles, you would refer to that file by specifying

\input{./myfiles/filename.tex}


Indeed, in our example of the absolute path above, you could refer to that file relatively, too:

\input{../../documents/useful/foo.tex}


Of course, all commonly used file systems – Linux, Mac OS X and Windows – also feature the UNIX ./, ../ facility outlined above. Do note, however, that LaTeX uses forward slashes / even on Microsoft Windows platforms, which use backslashes \ in pathnames. LaTeX implementations for Windows systems perform this conversion for you, which ensures that your document will be valid across all installations.

This flexibility, inherent in the way in which LaTeX is integrated with modern file systems, lets you input files in a way which suits your particular set-up.

### Compiling the base file

When you compile your document, page references and the like will change according to your use of the \input and \include commands. Normally LaTeX users only run the compiler on parts of the document to check that an individual chapter is syntactically correct and looks as the writer intended. A full run is generally only performed for producing a full draft or the final version. In such cases, it is invariably necessary to run LaTeX twice or more to resolve all the page numbers, references, etc. (especially if you are using bibliographic software such as BiBTeX, too).

The simplest way to check that one or more of the various components of your work is syntactically robust, is to comment out the command with a percentage sign, for example:

\documentclass{article}
\begin{document}
%\input{Section_1}
%\input{Section_2}
%\input{Section_3}
\input{Section_4}
%\input{Section_5}
\end{document}


This code will process your base file with the article conventions but only the material in the file Section_4.tex will be processed. If that was, say, the last thing you needed to check before sending off to that major journal, you would then simply remove all the percentage signs and rerun LaTeX, repeating the compiling process as necessary to resolve all references, page numbers and so on.

### Using \includeonly

Using this command provides more complex, and hence more useful possibilities. If you include the following command in your preamble, i.e. before \begin{document},

\includeonly{filename1,filename2,...}


only the files specified between the curly braces will be included. Note that you can have one or more files as the argument to this command: separate them with a comma, no spaces.

This requires that there are \include commands in the document which specify these files. The filename should be written without the .tex file extension:

\documentclass{book}
\includeonly{Chapter_1,Chapter_4}  % compile just chapters 1 and 4, space characters not permitted
\begin{document}
\include{Chapter_1}                % omit the '.tex' extension
\include{Chapter_2}
\include{Chapter_3}
\include{Chapter_4}
\end{document}


This code would process the base file but only include the content of the author's first and fourth chapters (Chapter_1.tex and Chapter_4.tex). Importantly, this alternative retains as much of the .aux information as possible from the previous run, so messes up your cross-references much less than the makeshift suggestion above.

### Subfiles package

A disadvantage of using \input and \include is that only the "root" document can be compiled and not the "child" documents individually. The package subfiles resolves this problem.

In the "root" document the package must be loaded as:

\usepackage{subfiles}


Instead of using \input and \include, "child" documents must be loaded as follows:

\subfile{filename}


\documentclass[rootdocument.tex]{subfiles}
\begin{document}


and end with:

\end{document}


In summary, root document (main.tex) looks like:

\documentclass{book}
\usepackage{subfiles}
\begin{document}
%% my document content
\subfile{chapter1}
%% more of my document content
\end{document}


and chapter 1 (chapter1.tex) looks like:

\documentclass[main.tex]{subfiles}
\begin{document}
%% my chapter 1 content
%%
%% more of my chapter 1 content
\end{document}


Some linux distributions don't have subfiles package in their latex distributions, since it was not included until TeXLive 2012. You can download subfiles.zip to generate subfiles.cls and subfiles.sty files:

wget http://mirror.ctan.org/macros/latex/contrib/subfiles.zip
unzip subfiles.zip
cd subfiles
latex subfiles.dtx
latex subfiles.ins


This will generate two files subfiles.cls and subfiles.sty. Move these files to a directory under the name subfiles in the path /usr/share/texmf/tex/latex. This still won't make the package available. A very important keyword should be used from the terminal in order for the latex packages to be updated: sudo texhash. Now you are good to go!

### Inserting PDF files

If you need to insert an existing, possibly multi-page, PDF file into your LaTeX document, whether or not the included PDF was compiled with LaTeX or another tool, consider using the pdfpages package. In the preamble, include the package:

\usepackage[final]{pdfpages}


This package also allows you to specify which pages you wish to include: for example, to insert pages 3 to 6 from some file insertme.pdf, use:

\includepdf[pages=3-6]{insertme.pdf}


To insert the whole of insertme.pdf:

\includepdf[pages=-]{insertme.pdf}


For full functionality, compile the output with pdflatex.

Additional information can be found in the chapter Export To Other Formats.

## The file mystyle.sty

Instead of putting all the packages you need at the beginning of your document as you could, the best way is to load all the packages you need inside another dummy package called mystyle you will create just for your document. The good point of doing this is that you will just have to add one single \usepackage in your document, keeping your code much cleaner. Moreover, all the info about your style will be within one file, so when you will start another document you'll just have to copy that file and include it properly, so you'll have exactly the same style you have used.

Creating your own style is very simple: create a file called mystyle.sty (you could name it as you wish, but it has to end with ".sty"). Write at the beginning:

\ProvidesPackage{mystyle}


Then add all the packages you want with the standard command \usepackage{...} as you would do normally, change the value of all the variables you want, etc. It will work like the code you put here would be copied and pasted within your document.

While writing, whenever you have to take a decision about formatting, define your own command for it and add it to your mystyle.sty:let LaTeX work for you. If you do so, it will be very easy to change it if you change your mind.

This is actually the beginning of the process of writing a package. See LaTeX/Macros for more details.

For a list of several packages you can use, see the List of Packages section.

## The main document document.tex

Then create a file called document.tex; this will be the main file, the one you will compile, even if you shouldn't need to edit it very often because you will be working on other files. It should look like this (it's the sample code for a report, but you might easily change it to article or whatever else):

\documentclass[12pt,a4paper]{report}
\usepackage{graphicx}
\usepackage{ifpdf}
\ifpdf
% put here packages only for the PDF:
\DeclareGraphicsExtensions{.pdf,.png,.jpg,.mps}
\usepackage{hyperref}
\else
% put here packages only for the DVI:
\fi

% put all the other packages here:

\usepackage{mystyle}

\begin{document}

\input{./tex/title.tex}
%\maketitle
\tableofcontents
\listoffigures
\listoftables

\input{./tex/intro.tex}
\input{./tex/main_part.tex}
\input{./tex/conclusions.tex}

\appendix
\input{./tex/myappendix.tex}

% Bibliography:
\clearpage