我想创建一个“范围: ...”部分,类似于“输入: ...“ 和 ”输出: ...”部分。参数是全局的、用户定义的常量,在算法运行之前已知。
我试图用文本“参数”定义一个新关键字,但这样做当然是错误的(其中包括:该行已编号但不应该这样,“参数:”后面的所有内容都是斜体,但我不希望这样)。
如何创建类似于输入和输出的参数部分?
Gonzalo Medina 的回答几乎做了正确的事情,但是我在单独的行上得到了一个多余的冒号。
代码:
\documentclass[preprint,3p,12pt,times]{elsarticle}
\usepackage{ecrc}
\usepackage[linesnumbered,algoruled,boxed,lined]{algorithm2e}
\volume{00}
\firstpage{1}
\journalname{Some journal}
% Would work correctly with these lines:
% \documentclass{article}
% \usepackage[linesnumbered,algoruled,boxed,lined]{algorithm2e}
\SetKwInOut{Parameter}{Parameters}
\begin{document}
\begin{algorithm}[H]
\KwIn{Some input}
\Parameter{Some parameter}
\KwOut{Some output}
\caption{Some algorithm}\label{alg.mainLoop}
\end{algorithm}
\end{document}
我猜是软件包之间存在一些宏冲突。任何解决方法都将不胜感激。
答案1
您可以使用
\SetKwInOut{Parameter}{parameter}
进而
\Parameter{<text>}
在你的算法中。完整的例子:
\documentclass{article}
\usepackage{algorithm2e}
\SetKwInOut{Parameter}{parameter}
\begin{document}
\begin{algorithm}
\SetKwData{Left}{left}
\SetKwData{This}{this}
\SetKwData{Up}{up}
\SetKwFunction{Union}{Union}
\SetKwFunction{FindCompress}{FindCompress}
\SetKwInOut{Input}{input}
\SetKwInOut{Output}{output}
\Input{A bitmap $Im$ of size $w\times l$}
\Output{A partition of the bitmap}
\Parameter{A parameter for the algorithm}
\BlankLine
\emph{special treatment of the first line}\;
\For{$i\leftarrow 2$ \KwTo $l$}{
\emph{special treatment of the first element of line $i$}\;
\For{$j\leftarrow 2$ \KwTo $w$}{\label{forins}
\Left$\leftarrow$ \FindCompress{$Im[i,j-1]$}\;
\Up$\leftarrow$ \FindCompress{$Im[i-1,]$}\;
\This$\leftarrow$ \FindCompress{$Im[i,j]$}\;
\If(\tcp*[h]{O(\Left,\This)==1}){\Left compatible with \This}{\label{lt}
\lIf{\Left $<$ \This}{\Union{\Left,\This}}\;
\lElse{\Union{\This,\Left}\;}
}
\If(\tcp*[f]{O(\Up,\This)==1}){\Up compatible with \This}{\label{ut}
\lIf{\Up $<$ \This}{\Union{\Up,\This}}\;
\tcp{\This is put under \Up to keep tree as flat as possible}\label{cmt}
\lElse{\Union{\This,\Up}}\tcp*[r]{\This linked to \Up}\label{lelse}
}
}
\lForEach{element $e$ of the line $i$}{\FindCompress{p}}
}
\caption{disjoint decomposition}\label{algo_disjdecomp}
\end{algorithm}
\end{document}
在编辑问题后,elsarticle
与新定义之间存在一些不兼容性;在这种情况下,您可以在环境内移动新定义algorithm
,这可以逐个进行,也可以沃纳建议his comment
,可以使用自动化
\makeatletter
\g@addto@macro{\@algocf@init}{\SetKwInOut{Parameter}{Parameters}}
\makeatother
完整示例:
\documentclass[preprint,3p,12pt,times]{elsarticle}
\usepackage[linesnumbered,algoruled,boxed,lined]{algorithm2e}
\makeatletter
\g@addto@macro{\@algocf@init}{\SetKwInOut{Parameter}{Parameters}}
\makeatother
\begin{document}
\begin{algorithm}[H]
\KwIn{Some input}
\Parameter{Some parameter}
\KwOut{Some output}
\caption{Some algorithm}\label{alg.mainLoop}
\end{algorithm}
\end{document}