Skip to content

MultiFile Documents in LaTeX

One of the very fun features of LaTeX is the ability to split your document into multiple files and work on each of them separately or even include them in multiple documents. This is particularly useful when you are working on a large document, such as a book or a thesis, and you want to keep your files organized or use certain chapters/sections for other things.

There are a few ways to do this in LaTeX, with two in built methods (using \input and \include) and a few package based methods (such as subfiles and standalone).

The in-built methods are simpler and work well for most cases, but lack the elegance and flexibility of the package based methods. The package based methods are more powerful and provide additional features, such as the ability to handle folder structures and preamble sharing for you.

Note

The standalone and subfiles packages should work together but may sometimes have issues. Make sure the standalone package is loaded before the subfiles package. And you need to call the standalone files with \subfile or \subfileinclude instead of \input or \include.

Using the subfiles Package

Note

subfiles sometimes seems to struggle when you have your preamble in a .sty file. If you are having trouble with this, try saving your preamble as a .tex file instead.

The subfiles package is a popular choice for creating multi-file documents in LaTeX. It allows you to create a main document that includes multiple subfiles, each of which can be compiled independently, and pull their preamble from the main document. This makes it easy to work on different parts of a document separately and combine them later maintaining only one preamble.

To use the subfiles package, you need to include it in your main document and use the \subfile command in each of your subfiles. Here is an example of how to use the subfiles package if you have the following file structure:

├─ main.tex                                 # Main document
├─ chapter1/                                # Subfolder for chapter 1
│   └─ chapter1.tex                         # Subfile for chapter 1
% main.tex
\documentclass{article}
\usepackage{subfiles}

\begin{document}
\subfile{chapter1}
\subfile{chapter2}
\end{document}
% chapter1.tex
\documentclass[../main.tex]{subfiles} % Note the path to the main document ../ takes you up one level
\begin{document}
\chapter{Chapter 1}
This is chapter 1.
\end{document}

The subfiles package provides the \subfile command, which is used to include a subfile in the main document. The subfile should be a standalone LaTeX document that can be compiled on its own. When you compile the main document, the contents of the subfiles will be included in the output. It additionally provides the \subfileinclude which behave similar to \include but with the added benefit of being able to compile the subfile independently.

If using a bibliography or some other external files, you may need to place them inside a special command in the main document to ensure they are included in the subfiles. This can be done using the \subfix and ifSubfilesClassLoaded commands as follows:

% main.tex
\documentclass{article}
\usepackage{biblatex}
\usepackage{subfiles}
\ifSubfilesClassLoaded{%
    \addbibresource{\subfix{references.bib}}    % True case
    }{%
    \addbibresource{references.bib}             % False case
    }

This should allow all child documents to access the bibliography file and maintains autocomplete functionality. The \subfix command alone will also work. However, this has a tendency to break autocomplete functionality in some editors so play with it and find what works for your case.

Or for example if you have a central data folder and want to access it from subfiles. For example if you had the following file structure:

├─ main.tex                                 # Main document
├─ preamble.tex                             # Preamble file
├─ data/                                    # Subfolder for data
│   └─ data.csv                             # Data file
├─ chapter1/                                # Subfolder for chapter 1
│   ├─ chapter1.tex                         # Subfile for chapter 1
│   ├─ digarams/                            # Subfolder for diagrams for chapter 1
│   │   └─ diagram1.tex                     # Subfile for diagram 1

You can access the data file from the subfiles by using the \subfix command as follows:

% diagram1.tex
\documentclass[../../main.tex]{subfiles}    % Note the path to the main document ../../ takes you up two levels
\begin{document}

\def\datafile{\subfix{../../data/data.csv}} % Defines the path as a command so we only need to subfix once

\pgfplotstableread[col sep=comma]{\datafile}\data   % Reads the data file into a table

\begin{tikzpicture}

\begin{axis}
\addplot table {\data};                     % Plots the data
\end{axis}

\end{tikzpicture}

\end{document}

If you wanted to make your diagram using the subfile package you would want to keep the formatting of the diagram document the same including the use of \subfix but you would need to change the preamble and class to the following:

% diagram1.tex
\documentclass[tikz,crop]{standalone}

\input{../../preamble.tex}                  % Include the preamble from the main document
....Rest of the document....

For more information on the subfiles package, see the documentation.

Using the standalone Package

The standalone package is another popular choice for creating multi-file documents in LaTeX. It allows you to create standalone versions of your subfiles that can be compiled independently and included in the main document. I find the focus of standalone to be on creating images and figures that can be included in multiple documents, but it can be used for other things as well.

To use the standalone package, you need to include it in your main document and use the \input command to include the standalone versions of your subfiles. Here is an example of how to use the standalone package:

% main.tex
\documentclass{article}
\usepackage{standalone}

\begin{document}
\input{chapter1}
\input{diagram1}
\input{chapter2}
\end{document}
% chapter1.tex
\documentclass[class=article]{standalone}
\begin{document}
\chapter{Chapter 1}
This is chapter 1.
\end{document}
% diagram1.tex
\documentclass[class=article,crop,tikz]{standalone}
\begin{document}
\begin{tikzpicture}
\draw (0,0) -- (1,1);
\end{tikzpicture}
\end{document}

The standalone package provides the standalone document class, which is used to create standalone versions of your subfiles. The class option is used to specify the class of the main document, and the crop option is used to crop the output to the size of the content. The tikz option is used to load the tikz package, which is commonly used for creating diagrams and figures.

You may want to look at using the import package if you have a more complex file structure that has multiple levels of folders. Or you can use the subfiles package in conjunction with the standalone package to get the best of both worlds.

For more information on the standalone package, see the documentation.

Note

For the methods listed below you will need to make sure the document preamble is included in each file. This is because each file is compiled separately and does not have access to the preamble of the main document. The main document should also contain any packages that are used in the included files.

Using \input

The \input command is the simplest way to include another file in your document. It is used as follows:

\input{filename}

This will include the contents of filename.tex in your document at the point where the command is called. The file extension (.tex) is optional, and if not provided, LaTeX will look for a file with the given name and a .tex extension.

The \input command is useful when you want to include the contents of another file as is, without any additional formatting or separation. It is commonly used to include chapters or sections of a larger document.

Using \include

The \include command is similar to \input but provides some additional features. It is used as follows:

\include{filename}

The main difference between \input and \include is that \include forces a page break before and after the included file. This can be useful when you want to include chapters or sections that should start on a new page, but can sometimes be undesirable if you want to include smaller snippets of text.

Another feature of \include is that it allows you to use the \includeonly command to include only specific files in your document. This can be useful when working on a large document, and you only want to compile certain parts.