我正在使用 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
打印Input
并Output
通过添加在序言中:
\renewcommand{\algorithmicrequire}{\textbf{Input:}}
\renewcommand{\algorithmicensure}{\textbf{Output:}}