Algorithm2e 编写具有多种功能的简单伪代码

Algorithm2e 编写具有多种功能的简单伪代码

我是新手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}打印,并以参数排版打印其参数,并用一对括号括起来。Fnarg

具体来说,\FMainFTest都只有一个参数。它们用于正确排版函数名称,而不是定义新函数。要排版函数定义, 使用\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}

给出

输出

相关内容