# How to add input and output before algorithm procedure

I am using ACM format for writing a paper. I use the following algorithm sample that is taken from this form. I want to add input and output before MyProcedure. I tried many ways but all fails. Can someone guide me? Thank you

\usepackage{algorithm}
\usepackage[noend]{algpseudocode}
\begin{algorithm}
\caption{My algorithm}\label{euclid}
\begin{algorithmic}[1]
% Input:
% Output:
\Procedure{MyProcedure}{}
\State $\textit{stringlen} \gets \text{length of }\textit{string}$
\State $i \gets \textit{patlen}$
\BState \emph{top}:
\If {$i > \textit{stringlen}$} \Return false
\EndIf
\State $j \gets \textit{patlen}$
\BState \emph{loop}:
\If {$\textit{string}(i) = \textit{path}(j)$}
\State $j \gets j-1$.
\State $i \gets i-1$.
\State \textbf{goto} \emph{loop}.
\State \textbf{close};
\EndIf
\State $i \gets i+\max(\textit{delta}_1(\textit{string}(i)),\textit{delta}_2(j))$.
\State \textbf{goto} \emph{top}.
\EndProcedure
\end{algorithmic}
\end{algorithm}

• Input x,y with:\Procedure{Algo name}{$x,y$}. Or \Comment{Input: } and \Comment{Output:} Feb 27 '17 at 6:58
• Here is an example: tex.stackexchange.com/a/215651/124842 Feb 27 '17 at 8:13
• @Bobyandbob Would you like to write up an answer, or is that question a duplicate? (I didn't look at it.) Jun 3 '17 at 21:46
• @TorbjørnT. No the link is an alternativ with algorithm, but Steven do not respond to comments. Nevertheless i added some ideas. Jun 4 '17 at 10:07
• Does the answer fits your question? Feb 23 '18 at 23:27

To add input and output before MyProcedure a possibility is to add the text before \begin{algorithmic} with starred hspace \hspace*{}(see 6.3.3 Horizontal Space) and the indentation \algorithmicindent (see 4.1 Blocks and loops). LaTeX normally removes horizontal space at the beginning of a line, to preserve this space, use the starred version.

 ...
\hspace*{\algorithmicindent} \textbf{Input} \\
\hspace*{\algorithmicindent} \textbf{Output}
\begin{algorithmic}[1]
...


Complete full MWE: A minimal working example (MWE) starts with \documentclass and ends with \end{document}.

To complete the MWE and to avoid the following error:

! Undefined control sequence. \BState ->\State \algbackskip l.24 \BState

You have to use the following definition (the solution is from @Werner see: Undefined control sequence.\BState ->\State \algbackskip \BState):

\makeatletter
% Reinsert missing \algbackskip
\def\algbackskip{\hskip-\ALG@thistlm}
\makeatother


MWE:

\documentclass{article}
\usepackage{algorithm}
\usepackage[noend]{algpseudocode}

\makeatletter
% Reinsert missing \algbackskip
\def\algbackskip{\hskip-\ALG@thistlm}
\makeatother

\begin{document}
\begin{algorithm}
\caption{My algorithm}\label{euclid}
\hspace*{\algorithmicindent} \textbf{Input} \\
\hspace*{\algorithmicindent} \textbf{Output}
\begin{algorithmic}[1]
\Procedure{MyProcedure}{}
%    \Procedure{MyProcedure}{$x,y$}
%     % Input:
%     \Comment{Input: x}
%     % Output:
%     \Comment{Output:y}
\State $\textit{stringlen} \gets \textit{length of } \textit{string}$
\State $i \gets \textit{patlen}$
\BState \emph{top}:
\If {$i > \textit{stringlen}$} \Return false
\EndIf
\State $j \gets \textit{patlen}$
\BState \emph{loop}:
\If {$\textit{string}(i) = \textit{path}(j)$}
\State $j \gets j-1$.
\State $i \gets i-1$.
\State \textbf{goto} \emph{loop}.
\State \textbf{close};
\EndIf
\State $i \gets i+\max(\textit{delta}_1(\textit{string}(i)),\textit{delta}_2(j))$.
\State \textbf{goto} \emph{top}.
\EndProcedure
\end{algorithmic}
\end{algorithm}
\end{document}


Alternative: You can add the input and output after MyProcedure with \Procedure{MyProcedure}{$x,y$} ...

or \Comment{Input: x}/\Comment{Output: y}.

• How could I add comments in your code, I have tried \tcp*{comment} which did not work Nov 2 '21 at 23:26
• With \Comment{Your comment} for example. See MWE. Nov 15 '21 at 11:00
• What does MWE stand for? Nov 15 '21 at 12:10
• A minimal working example (MWE), shown in the answer. You just have to remove %. Does it help?(\Comment{Your comment}) Nov 15 '21 at 13:04
• yes sir thank you Nov 15 '21 at 15:01

If one is using the algorithmic environment, one can make \REQUIRE and \ENSURE to print Input and Output by adding in the preamble:

\renewcommand{\algorithmicrequire}{\textbf{Input:}}
\renewcommand{\algorithmicensure}{\textbf{Output:}}

• Isn't it a good idea to keep \REQUIRE and \ENSURE as it are, and define custom commands for \INPUT and \OUTPUT?
– hola
Jun 6 '19 at 20:12