Management in a large project
In large projects, such as books, keeping parts of your document in several .tex files makes the task of correcting errors and making further changes easier. It's simpler to locate a specific word or element in a short file. For this purpose this article explains how to manage big projects.
Introduction
Below is an example of a book whose sections and user-defined commands are stored in separate files.
\documentclass[a4paper,11pt]{book}
\usepackage{import}
\usepackage{example}
\usepackage{makeidx}
\makeindex
\begin{document}
\frontmatter
\import{./}{title.tex}
\clearpage
\thispagestyle{empty}
\tableofcontents
\mainmatter
\chapter{First chapter}
\import{sections/}{section1-1.tex}
\import{sections/}{section1-2.tex}
\chapter{Additional chapter}
\import{sections/}{section2-1.tex}
\chapter{Last chapter}
\import{sections/}{section3-1.tex}
\backmatter
\import{./}{bibliography.tex}
\end{document}
As you see, the example is a book with three chapters and several sections in a neat main file that pulls external files to generate the final document. The command \frontmatter
in the book document class is used for the first pages of the document, the page numbering style is set to Roman numerals by this command; the command \mainmatter
resets the page numbering and changes the style to Arabic, \backmatter
disables the chapter numbering (suitable for the bibliography and appendices).
In the subsequent sections each part will be more clearly explained.
Open an example of the import package in Overleaf
Preamble in a separate file
If the preamble of your document has many user-defined commands or term definitions for the glossary, you can put it in a separate file. The right way is to create a custom package, which is a file with the .sty extension. Let's see an example:
\ProvidesPackage{example}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage[latin1]{inputenc}
\usepackage[spanish, english]{babel}
\usepackage{graphicx}
\usepackage{blindtext}
\usepackage{textcomp}
\usepackage{pgfplots}
\pgfplotsset{width=10cm,compat=1.9}
%Header styles
\usepackage{fancyhdr}
\setlength{\headheight}{15pt}
\pagestyle{fancy}
\renewcommand{\chaptermark}[1]{\markboth{#1}{}}
\renewcommand{\sectionmark}[1]{\markright{#1}{}}
\fancyhf{}
\fancyhead[LE,RO]{\thepage}
\fancyhead[RE]{\textbf{\textit{\nouppercase{\leftmark}}}}
\fancyhead[LO]{\textbf{\textit{\nouppercase{\rightmark}}}}
\fancypagestyle{plain}{ %
\fancyhf{} % remove everything
\renewcommand{\headrulewidth}{0pt} % remove lines as well
\renewcommand{\footrulewidth}{0pt}}
%makes available the commands \proof, \qedsymbol and \theoremstyle
\usepackage{amsthm}
%Ruler
\newcommand{\HRule}{\rule{\linewidth}{0.5mm}}
%Lemma definition and lemma counter
\newtheorem{lemma}{Lemma}[section]
%Definition counter
\theoremstyle{definition}
\newtheorem{definition}{Definition}[section]
%Corolary counter
\newtheorem{corolary}{Corolary}[section]
%Commands for naturals, integers, topology, hull, Ball, Disc, Dimension, boundary and a few more
\newcommand{\E}{{\mathcal{E}}}
\newcommand{\F}{{\mathcal{F}}}
...
%Example environment
\theoremstyle{remark}
\newtheorem{examle}{Example}
%Example counter
\newcommand{\reiniciar}{\setcounter{example}{0}}
All the commands in this file could have been put in the preamble, but the main file would have become confusing because of this large amount of code, and to locate the actual body of the document in such large file would be a cumbersome task.
This file could also be put in a normal .tex file and imported with the command import
(see the next section), but a .sty file prevents possible errors if the file is accidentally imported more than once.
Notice that the first line of the example is
\ProvidesPackage{example}
this means that we have to import this package as example in the main file, i.e. with the command
\usepackage{example}
as shown in the introduction.
Note: A .sty file is far more flexible, it can be used to define your own macros and optional parameters can be passed, see Writing your own package.
Open an example of the import package in Overleaf
Importing files
The standard tools to insert a LaTeX file into another are \input
and \include
(see below), but these are prone to errors if nested file importing is needed. For this reason the recommended option is the package import.
\chapter{First chapter}
\import{sections/}{section1-1.tex}
\import{sections/}{section1-2.tex}
First, add this line to the preamble of your document:
\usepackage{import}
Then use \import{ }{ }
. The first parameter inside braces is the directory where the file is located, it can be relative to the current working directory or absolute. The second parameter is the name of the file to be imported
There is also available the command \subimport
that has the same syntax, but if used in one of the files that are imported in the main file, the path will be relative to that sub-file. For instance, below is the contents of the file "section1-1.tex" that was imported in the previous example:
\section{First section}
Below is a simple 3d plot
\begin{figure}[h]
\centering
\subimport{img/}{plot1.tex}
\caption{Caption}
\label{fig:my_label}
\end{figure}
[...]
As you see, this file imports a pgf plot file called "plot1.tex" that creates a 3d plot. This file is imported by
\subimport{img/}{plot1.tex}
from the "img" folder, contained in the folder "sections".
If \import
were used instead, the path img/ would be relative to the main file, instead of the folder "sections" where "section1-1.tex" is saved.
Open an example of the import package in Overleaf
Inputting and including files
Short description of the commands input and include.
input
command\input{filename}
Use this command in the document body to insert the contents of another file named filename.tex
. LaTeX won't start a new page before processing the material in filename.tex
. input
allows you to nest input
commands, in files that are already being inputted by the root file.
include
command\include{filename}
Use this command in the document body to insert the contents of another file named filename.tex
.
LaTeX will start a new page before processing the material input from filename.tex
.
Make sure not to include the extension .tex
in the filename, as this will stop the file from being input (the extension can optionally be included with input
and import
). It is not possible to nest include
commands. Each file that gets \include
d has its own .aux file storing information of created labels and contents for the table of contents, list of figures, etc. You can use \includeonly
with a comma separated list of file names (make sure that there are no leading or trailing spaces). If you do this LaTeX will only process the files contained in that list. This can be used to enhance compilation speed if you're only working on a small part of a bigger document. Page numbers and cross references will however still work, as the .aux files of left out files will still be processed.
Open an example of the import package in Overleaf
Further reading
For more information see:
- Multi-file LaTeX projects
- Cross referencing sections and equations
- Indices
- Glossaries
- Hyperlinks
- Page numbering
- Single sided and double sided documents
- Multiple columns
- Paragraph formatting
- Page size and margins
- Counters
- Margin notes
- Bold, italics and underlining
- Font sizes, families, and styles
- Font typefaces
- Supporting modern fonts with XeLaTeX
- International language support
- Font sizes, families, and styles
- Writing your own package
- Writing your own class
- The not so short introduction to LaTeX2ε
import
package documentation
Overleaf guides
- Creating a document in Overleaf
- Uploading a project
- Copying a project
- Creating a project from a template
- Including images in Overleaf
- Exporting your work from Overleaf
- Working offline in Overleaf
- Using Track Changes in Overleaf
- Using bibliographies in Overleaf
- Sharing your work with others
- Debugging Compilation timeout errors
- How-to guides
LaTeX Basics
- Creating your first LaTeX document
- Choosing a LaTeX Compiler
- Paragraphs and new lines
- Bold, italics and underlining
- Lists
- Errors
Mathematics
- Mathematical expressions
- Subscripts and superscripts
- Brackets and Parentheses
- Fractions and Binomials
- Aligning Equations
- Operators
- Spacing in math mode
- Integrals, sums and limits
- Display style in math mode
- List of Greek letters and math symbols
- Mathematical fonts
Figures and tables
- Inserting Images
- Tables
- Positioning Images and Tables
- Lists of Tables and Figures
- Drawing Diagrams Directly in LaTeX
- TikZ package
References and Citations
- Bibliography management in LaTeX
- Bibliography management with biblatex
- Biblatex bibliography styles
- Biblatex citation styles
- Bibliography management with natbib
- Natbib bibliography styles
- Natbib citation styles
- Bibliography management with bibtex
- Bibtex bibliography styles
Languages
- Multilingual typesetting on Overleaf using polyglossia and fontspec
- International language support
- Quotations and quotation marks
- Arabic
- Chinese
- French
- German
- Greek
- Italian
- Japanese
- Korean
- Portuguese
- Russian
- Spanish
Document structure
- Sections and chapters
- Table of contents
- Cross referencing sections and equations
- Indices
- Glossaries
- Nomenclatures
- Management in a large project
- Multi-file LaTeX projects
- Hyperlinks
Formatting
- Lengths in LaTeX
- Headers and footers
- Page numbering
- Paragraph formatting
- Line breaks and blank spaces
- Text alignment
- Page size and margins
- Single sided and double sided documents
- Multiple columns
- Counters
- Code listing
- Code Highlighting with minted
- Using colours in LaTeX
- Footnotes
- Margin notes
Fonts
Presentations
Commands
Field specific
- Theorems and proofs
- Chemistry formulae
- Feynman diagrams
- Molecular orbital diagrams
- Chess notation
- Knitting patterns
- CircuiTikz package
- Pgfplots package
- Typing exams in LaTeX
- Knitr
- Attribute Value Matrices
Class files
- Understanding packages and class files
- List of packages and class files
- Writing your own package
- Writing your own class
- Tips