如何在算法流程前添加输入和输出

如何在算法流程前添加输入和输出

我正在使用 ACM 格式撰写论文。我使用从此表格中获取的以下算法示例。我想添加输入输出在 MyProcedure 之前。我尝试了很多方法,但都失败了。有人可以指导我吗?谢谢

\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}

答案1

回答:

要在 MyProcedure 之前添加输入和输出,可以在之前添加\begin{algorithmic}带星号的文本\hspace*{}文本(参见 6.3.3 水平空间)和缩进\algorithmicindent参见 4.1 块和循环)。LaTeX 通常会删除行首的水平空格,若要保留此空格,请使用带星号的版本。

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

在此处输入图片描述

完成完整的 MWE: 一个最小的工作示例(平均能量损失) 以 开头\documentclass,以 结尾\end{document}

为了完成 MWE 并避免以下错误:

! 未定义控制序列。\BState ->\State \algbackskip l.24 \BState

您必须使用以下定义(解决方案来自@Werner,请参阅:未定义控制序列。\BState ->\State \algbackskip \BState):

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

梅威瑟:

\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} 

在此处输入图片描述

选择MyProcedure:您可以在后面添加输入和输出\Procedure{MyProcedure}{$x,y$}...

在此处输入图片描述

或者\Comment{Input: x}/ \Comment{Output: y}

在此处输入图片描述

答案2

如果正在使用algorithmic环境,则可以制作\REQUIRE\ENSURE打印InputOutput通过添加在序言中:

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

相关内容