我是新手algorithm2e
,即使是最简单的事情我也感到很挣扎。
我想编写一个包含几个互相调用的函数的算法(伪代码)。目前,我有这个最小(不)工作的示例:
\begin{algorithm}
\caption{Some algorithm}
\label{alg:some-algorithm}
\DontPrintSemicolon
\SetKwFunction{FMain}{Main}
\SetKwFunction{FTest}{Test}
\FMain{$f$, $a$, $b$, $\varepsilon$}{
a\;
b\;
\KwRet\;
}
\FTest{$f$, $a$, $b$}{
a\;
b\;
\KwRet\;
}
\end{algorithm}
可以看到,第一行代码a
和函数定义在同一行。而且,没有缩进,整个代码看起来相当丑陋。
我究竟做错了什么?
答案1
正如文档(texdoc algorithm2e
在命令行上尝试或搜索algorithm2e.pdf
)所述:
\SetKwFunction{KwFn}{Fn}
定义一个宏,该宏以函数排版\KwFn{arg}
打印,并以参数排版打印其参数,并用一对括号括起来。Fn
arg
具体来说,\FMain
和FTest
都只有一个参数。它们用于正确排版函数名称,而不是定义新函数。要排版函数定义, 使用\SetKwProg{Prog}{Title}{is}{end}
。
编辑:文档中有以下示例:
\SetAlgoLined
\SetKwProg{Fn}{Function}{ is}{end}
\Fn{afunc(i: int) : int}{return 0\;}
\SetKwProg{Def}{def}{:}{}
\Def{afunc(i: int)}{return 0\;}
导致:
1 Function afunc(i: int) : int is
2 | return 0;
3 end
4 def afunc(i: int):
5 | return 0;
因此,我们的想法是\SetKwProg
定义一个函数模板(例如\Fn
或\Def
)。 \Fn
并且\Def
它们自己现在具有二参数,一个用于函数头,一个用于函数主体。
调整您的示例:
\begin{algorithm}
\DontPrintSemicolon
\SetKwFunction{FMain}{Main}
\SetKwProg{Fn}{Function}{:}{}
\Fn{\FMain{$f$, $a$, $b$, $\varepsilon$}}{
a\;
b\;
\KwRet\;
}
\;
\SetKwProg{Pn}{Function}{:}{\KwRet}
\Pn{\FMain{$f$, $a$, $b$, $\varepsilon$}}{
a\;
b\;
}
\end{algorithm}
给出