Correctly formatting LaTeX-based pseudocode with the ∀ (for all) symbol
Here’s a methodology for using the ‘for all’ symbol (∀) in LaTeX so that subsequent lines of pseudocode are correctly indented.
I recently needed to write some pseudocode in LaTeX that incorporated the ∀ (turned A) symbol, but it proved to be rather difficult. What I required was the treatment of my “for all” in the same manner as a For loop (ie indented lines). To develop my code, I used the algorithmicx (including algpseudocode) and amsmath packages in Visual Studio Code with the LaTeX workshop extension. My preamble was as follows:
\documentclass{article}
\usepackage{algorithm}
\usepackage[noend]{algpseudocode}
\usepackage{amsmath}
To illustrate the problem I faced, I will use Algorithm 2 from Breen & Jones (1996).
LaTex contains a \ForAll
function, but it prints the words “for all” and offers no opportunity to use the ∀ symbol. I was also opposed to using functions such as \quad
to manually indent individual lines.
Here is the code using \ForAll
:
\begin{document}
\begin{algorithm}
\caption{Nonregional Maxima Suppression}\label{eq1}
\text Explanation of variables: \(\textbf{f}\), input gray-scale image; \(\textbf{g}\), output image; \(\textbf{f(x)}\), gray-scale image at position \(\textbf{x}\); \(\textbf{F}\), domain of support for \(\textit{f}$, \(\textbf{mval}\), the minimum allowed value of \(\textit{f}\).
\begin{algorithmic}[1]
\State \(g \leftarrow F\)
\ForAll {\(x \in F\)}
\If {\(g(x) \neq mval\)}
\If {\(a\)}
\State \(g(z) \leftarrow mval, \forall{z} \in \Gamma_x \{w: g(w) = f(x)\} \)
\EndIf
\EndIf
\EndFor
\end{algorithmic}
\end{algorithm}
And here is the result with the words “for all” printed:
The solution was to develop a new command, via the following code:
\algnewcommand\algorithmicforeach{$\forall$}
\algdef{S}[FOR]{ForEach}[1]{\algorithmicforeach #1 \algorithmicdo}
The first line specifies a new function called “foreach”, which will be indicated with the ∀ symbol (\forall
in LaTeX). The second line specifies how it is to be formatted.
The code is then changed to have a \ForEach
argument, which concludes with \EndFor:
\begin{algorithm}
\caption{Nonregional Maxima Suppression}\label{eq2}
\text Explanation of variables: \(\textbf{f}$, input gray-scale image; \(\textbf{g}\), output image; \(\textbf{f(x)}\), gray-scale image at position \(\textbf{x}\); \(\textbf{F}\), domain of support for \(\textit{f}\), \(\textbf{mval}\), the minimum allowed value of \(\textit{f}\).
\begin{algorithmic}[1]
\State \(g \leftarrow F\)
\ForEach {\(x \in F\)}
\If {\(g(x) \neq mval\)}
\If {\(a\)}
\State \(g(z) \leftarrow mval, \forall{z} \in \Gamma_x \{w: g(w) = f(x)\} \)
\EndIf
\EndIf
\EndFor
\end{algorithmic}
The result is as desired:
Comments
No comments have yet been submitted. Be the first!