14

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}
5
  • Input x,y with:\Procedure{Algo name}{$x,y$}. Or \Comment{Input: } and \Comment{Output:}
    – Bobyandbob
    Feb 27 '17 at 6:58
  • 1
    Here is an example: tex.stackexchange.com/a/215651/124842
    – Bobyandbob
    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.
    – Bobyandbob
    Jun 4 '17 at 10:07
  • Does the answer fits your question?
    – Bobyandbob
    Feb 23 '18 at 23:27
14

Answer:

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]
 ...

enter image description here

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} 

enter image description here

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

enter image description here

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

enter image description here

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

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:}}
1
  • 5
    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

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.