最近我开始接触一些更高级的 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>
在算法的特定部分添加相似的换行符?
\For
5) 在循环中将其定义为是否是一种好的做法\For{$k = 1$ to $M$}{ code.. }
?在我看来,在那里添加这个词有点不自然。难道没有内置函数可以做到这一点吗?
编辑:找到了问题 3 和问题 4 的解决方案。研究了 algorithm2e.sty 文件并找到了解决方案。
对于那些想知道的人来说,将包定义更改为\usepackage[linesnumbered, ruled, vlined]
产生以下内容:
但其余问题仍然存在。
答案1
假设您的文档是德语的,通过文档类加载babel
和german
即可。要替换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}
将产生以下内容