Algorithms
Introduction
(To write program code listings, please refer to this help page instead.)
To typeset algorithms or pseudocode in LaTeX you can use one of the following options:
- Choose ONE of the (
algpseudocode
ORalgcompatible
ORalgorithmic
) packages to typeset algorithm bodies, and thealgorithm
package for captioning the algorithm. - The
algorithm2e
package.
Note that you should choose only one of the above groups of packages, and use only the commands and syntax provided by the package you choose. These packages cannot be loaded simultaneously; otherwise you will get lots of errors.
The algpseudocode
and algorithm
packages
The algpseudocode
package provides a algorithmic
environment and some useful commands. You can open a full example on Overleaf
, and we'll go into some details in this section.
Here's our first algorithm, using environments and commands from the algpseudocode
package:
\documentclass{article}
\usepackage{algpseudocode}
\begin{document}
\begin{algorithmic}
\State $i \gets 10$
\If{$i\geq 5$}
\State $i \gets i-1$
\Else
\If{$i\leq 3$}
\State $i \gets i+2$
\EndIf
\EndIf
\end{algorithmic}
\end{document}
Open this algpseudocode short example in Overleaf
Here's the result output:
You should not load the algorithm2e
, algcompatible
, algorithmic
packages if you have already loaded algpseudocode
.
Note that the command names provided by algpseudocode
are typically title-cased, e.g. \State
, \While
, \EndWhile
.
If you would like to add line numbers to the algorithm, you can add the first line number to the algorithmic
environment like this: \begin{algorithmic}[1]
and get this output:
The above algorithm example is not captioned nor numbered. If you need a captioned algorithm, you will also need to load the algorithm
package, and add
\begin{algorithm}
\caption{...}
...
\end{algorithm}
around your algorithmic
environment. You can use \label{...}
after the \caption{...}
, so that the algorithm number can be cross-referenced with \ref{...}
.
\documentclass{article}
\usepackage{algorithm}
\usepackage{algpseudocode}
\begin{document}
\begin{algorithm}
\caption{An algorithm with caption}\label{alg:cap}
\begin{algorithmic}
\Require $n \geq 0$
\Ensure $y = x^n$
\State $y \gets 1$
\State $X \gets x$
\State $N \gets n$
\While{$N \neq 0$}
\If{$N$ is even}
\State $X \gets X \times X$
\State $N \gets \frac{N}{2}$ \Comment{This is a comment}
\ElsIf{$N$ is odd}
\State $y \gets y \times X$
\State $N \gets N - 1$
\EndIf
\EndWhile
\end{algorithmic}
\end{algorithm}
\end{document}
Open this algorithm+algpseudocode short example in Overleaf
The algorithm
environment is a float like table
and figure
, so you can add float placement modifiers [hbt!]
after \begin{algorithm}
if necessary. This also means that while a long algorithmic
environment on its own can break across pages, an algorithm
environment won't.
The algorithm
package also provides a \listofalgorithms
command that works like \listoffigures
, but for captioned algorithms, like this.
Open a full example on Overleaf
The algcompatible
/algorithmic
and algorithm
packages
The algorithmic
package uses syntax similar to algpseudocode
; but its command names are uppercased, e.g. \STATE
, \WHILE
, \ENDWHILE
.
On the other hand, algcompatible
will recognise uppercased and title-cased command names, so \STATE
, \WHILE
, \ENDWHILE
, \State
, \While
, \EndWhile
are all recognised. Apart from the command names, algcompatible
and algorithmic
commands use the same arguments syntax as algpseudocode
.
\documentclass{article}
\usepackage{algcompatible}
% OR \usepackage{algorithmic}
\begin{document}
\begin{algorithmic}
\STATE $i\gets 10$
\IF {$i\geq 5$}
\STATE $i\gets i-1$
\ELSE
\IF {$i\leq 3$}
\STATE $i\gets i+2$
\ENDIF
\ENDIF
\end{algorithmic}
\end{document}
Open this short algcompatible example in Overleaf
Some older templates or document classes may have loaded algorithmic
, so you will have to follow the syntax and command names provided.
You should not load the algorithm2e
, algpseudocode
packages if the algorithmic
or algcompatible
package is already loaded.
The algorithm
package can be used with algorithmic
/algcompatible
to add numbered captions to the algorithms.
Open a full example on Overleaf
The algorithm2e
package
The algorithm2e
package has quite different syntax structure from the algpseudocode
, algcompatible
and algorithmic
packages, so you will need to be careful about which package you want to use, or which package your template has loaded.
The algorithm2e
package provides an algorithm
environment:
\documentclass{article}
\usepackage{algorithm2e}
\begin{document}
\begin{algorithm}
$i\gets 10$\;
\eIf{$i\geq 5$}
{
$i\gets i-1$\;
}{
\If{$i\leq 3$}
{
$i\gets i+2$\;
}
}
\end{algorithm}
\end{document}
Open this short algorithm2e example in Overleaf
Every line in your source code must end with \;
otherwise your algorithm will continue on the same line of text in the output. Only lines with a macro beginning a block should not end with \;
.
When using algorithm2e
you can use \caption{...}\ref{...}
inside this algorithm
environment directly, without needing to load any other packages. However if you want to add comments in your algorithm, you'll have to declare the command name to use first:
%% This declares a command \Comment
%% The argument will be surrounded by /* ... */
\SetKwComment{Comment}{/* }{ */}
\begin{algorithm}
\caption{An algorithm with caption}\label{alg:two}
\KwData{$n \geq 0$}
\KwResult{$y = x^n$}
$y \gets 1$\;
$X \gets x$\;
$N \gets n$\;
\While{$N \neq 0$}{
\eIf{$N$ is even}{
$X \gets X \times X$\;
$N \gets \frac{N}{2}$ \Comment*[r]{This is a comment}
}{\If{$N$ is odd}{
$y \gets y \times X$\;
$N \gets N - 1$\;
}
}
}
\end{algorithm}
Open this captioned algorithm2e example in Overleaf
By default, the plain
algorithm style is used. But if you prefer lines around the algorithm and caption, you can add the ruled
package option when loading algorithm2e
, or write \RestyleAlgo{ruled}
in your document. Your captioned algorithms will then be typeset like this:
The algorithm2e
package provides many customisation options. For example, if you want to remove the vertical lines that mark the while—end while, if—end if blocks, you can add the noline
package option when loading algorithm2e
, or write \SetNoline
. A \listofalgorithms
command is also available in algorithm2e
.
Open a full example on Overleaf
Further Reading
Overleaf guides
- Creating a document in Overleaf
- Uploading a project
- Copying a project
- Creating a project from a template
- Using the Overleaf project menu
- 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
- Using the History feature
- Debugging Compilation timeout errors
- How-to guides
- Guide to Overleaf’s premium features
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
- Matrices
- 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
- Using the Symbol Palette in Overleaf
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 with bibtex
- Bibliography management with natbib
- Bibliography management with biblatex
- Bibtex bibliography styles
- Natbib bibliography styles
- Natbib citation styles
- Biblatex bibliography styles
- Biblatex citation styles
Languages
- Multilingual typesetting on Overleaf using polyglossia and fontspec
- Multilingual typesetting on Overleaf using babel 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, equations and floats
- 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
- Typesetting 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