有关 algorithm2e 格式的帮助

有关 algorithm2e 格式的帮助

最近我开始接触一些更高级的 LaTeX 格式,也就是算法。我选择的包是 algorithm2e 包,但是我在操作它时遇到了一些困难。

所以我想使用 algorithm2e 包创建一个算法,但我无法完全理解它的运行方式。

这是我的代码。

至于软件包,我用过的只有

\usepackage{amsmath}
\usepackage[linesnumbered]{algorithm2e}

amsmath 用于数学库并重新设置 algorithm2e 来枚举我的算法的行

\SetAlgoNoLine
\begin{algorithm}[H] 
    \DontPrintSemicolon
    \KwIn{$X_{t-1}, u_t. z_t$}
    \KwOut{$X_t$}
    $\overline{X_t} = X_t = 0$\;
    \For{$k = 1$ to $M$}{
        $x^{[k]}_t = sample\_motion\_model(u_t, x^{[k]}_{t-1})$\;
        $w^{[k]}_t = measurement\_model(z_t, x^{[k]}_t, m_{t-1})$\;
        $m^{[k]}_t = updated\_occupancy\_grid(z_t, x^{[k]}_t, m^{[k]}_{t-1})$\;
        $\overline{X_t} = \overline{X_t} + \langle x_x^{[m]}, w_t^{[m]} \rangle $\;
        }
    \For {$k = 1$ to $M$}{
        draw i with probability $\approx w_t^{[i]}$\;
        add $\langle x_x^{[m]}, w_t^{[m]} \rangle$ to $X_t$\;
        }
    \Return $X_t$
    \caption{FastSLAM}
\end{algorithm}

由此产生了如下结果:

防守结果

我想要的结果是:

期望

所以我有 5 个问题。

1)我如何重新定义 algorithm2e 以在我的标题处打印“Algoritmus”而不是 Algorithm? *已在评论中回答
2) 可能有与 1) 类似的解决方案,但是我的算法是否可以打印结束而不是只打印结束?
3)如何将标题放在算法的顶部而不是底部?
4)如何<hr>在算法的特定部分添加相似的换行符?
\For5) 在循环中将其定义为是否是一种好的做法\For{$k = 1$ to $M$}{ code.. }?在我看来,在那里添加这个词有点不自然。难道没有内置函数可以做到这一点吗?

编辑:找到了问题 3 和问题 4 的解决方案。研究了 algorithm2e.sty 文件并找到了解决方案。

对于那些想知道的人来说,将包定义更改为\usepackage[linesnumbered, ruled, vlined]

产生以下内容:

編輯

但其余问题仍然存在。

答案1

假设您的文档是德语的,通过文档类加载babelgerman即可。要替换end和,请用endfor覆盖 的定义:For\SetKwFor

\documentclass[german] {article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{babel} \usepackage[linesnumbered, ruled, vlined]{algorithm2e}

\SetKwFor{For}{for}{do}{endfor for}%

\begin{document}

\SetAlgoNoLine
\begin{algorithm}[H]
  \DontPrintSemicolon
  \KwIn{$X_{t-1}, u_t · z_t$}
  \KwOut{$X_t$}
  $\overline{X_t} = X_t = 0$\;
  \For{$k = 1$ to $M$}{
    $x^{[k]}_t = sample\_motion\_model(u_t, x^{[k]}_{t-1})$\;
    $w^{[k]}_t = measurement\_model(z_t, x^{[k]}_t, m_{t-1})$\;
    $m^{[k]}_t = updated\_occupancy\_grid(z_t, x^{[k]}_t, m^{[k]}_{t-1})$\;
    $\overline{X_t} = \overline{X_t} + \langle x_x^{[m]}, w_t^{[m]} \rangle $\;
  }
  \For {$k = 1$ to $M$}{
    draw $ i $ with probability $\approx w_t^{[i]}$\;
    add $\langle x_x^{[m]}, w_t^{[m]} \rangle$ to $X_t$\;
  }
  \Return $X_t$
  \caption{FastSLAM}
\end{algorithm}

\end{document} 

在此处输入图片描述

答案2

遗憾的是,没有人真正回答,而当所有人都回答时,我已经找到了大部分问题的答案。

因此要逐一检查。

要设置显示在顶部的算法名称(标题)、在块之间添加行以及将算法的名称更改为 Algoritmus,您必须在声明中编辑设置\usepackage

我强烈建议下载并研究“algorithm2e.sty”文件,其中有精彩的记录,您几乎可以找到所有问题的答案。

因此我们将声明修改如下:\usepackage[linesnumbered, ruled, vlined, slovak]{algorithm2e}

显然,您将根据自己的个人喜好设置语言选项。除此之外,如果您不喜欢默认选项,您可以编辑原始 algorithm2e.sty 文件以根据个人喜好更改本地化定义/声明。

至于将 end 的定义改为 print end for,这是一个棘手的问题,我花了几个小时来搜索这个问题,但在文档中我找到了 \SetKw 命令。

在这个特殊情况下,我们将其改为\SetKwFor{For}{for}{do}{end~for}

我无法回答我的最后一个问题,手动添加到 for 条件是否是一种好的做法,必须有人来回答我。

这是最终的代码

    \SetAlgoNoLine
\begin{algorithm}[H] 
    \DontPrintSemicolon
    \SetKwFor{For}{for}{do}{end~for}
    \KwIn{$X_{t-1}, u_t. z_t$}
    \KwOut{$X_t$}
    $\overline{X_t} = X_t = 0$\;
    \For{$k = 1$ to $M$}{
        $x^{[k]}_t = sample\_motion\_model(u_t, x^{[k]}_{t-1})$\;
        $w^{[k]}_t = measurement\_model(z_t, x^{[k]}_t, m_{t-1})$\;
        $m^{[k]}_t = updated\_occupancy\_grid(z_t, x^{[k]}_t, m^{[k]}_{t-1})$\;
        $\overline{X_t} = \overline{X_t} + \langle x_x^{[m]}, w_t^{[m]} \rangle $\;
        }
    \For {$k = 1$ to $M$}{
        draw i with probability $\approx w_t^{[i]}$\;
        add $\langle x_x^{[m]}, w_t^{[m]} \rangle$ to $X_t$\;
        }
    \Return $X_t$
    \caption{FastSLAM}
    \label{alg:alg1}
\end{algorithm}

包定义如上所述\usepackage[linesnumbered, ruled, vlined, slovak]{algorithm2e} 将产生以下内容

回答

相关内容