我正在编写一个包含 \begin{equation} 的算法。我希望整个方程式左对齐,因为任何典型的文本块如果在算法环境中编写都会对齐。
我目前正在处理的 LaTeX 代码是这样的:
\begin{algorithm}
\caption{Algorithm}
\label{alabel}
\KwData{
Lots of stuff written here.
}
\For{$i = 1, \ldots, n$} {
\If{something} {
do this
}
\Else {
do that
}
$\epsilon = $ simple equation
\If{$\epsilon < 0$} {
\begin{equation} %align me to the left
\begin{matrix}
\text{Choose } \theta \in
\left\{
\begin{array}{l l}
\left[f_k(x_i), f_k(x_{i+1}) \right) \text{ if } i < m\\
\left[f_k(x_m), +\infty \right) \text{ if } i = m\\
\end{array}
\right.\\
\end{matrix}
\end{equation}
An aditional step.
}
}
\Return the result
\end{algorithm}
我正在使用 algorithm2e 和 amsmath。
答案1
不要使用equation
,而是使用标准内联数学模式$...$
(或\(...\)
):
\documentclass{article}
\usepackage{algorithm2e}
\usepackage{amsmath}
\begin{document}
\begin{algorithm}
\caption{Algorithm}
\label{alabel}
\KwData{Lots of stuff written here.}
\For{$i = 1, \ldots, n$} {
\If{something} {
do this
}
\Else {
do that
}
$\epsilon = $ simple equation
\If{$\epsilon < 0$} {
$
\text{Choose } \theta \in
\begin{cases}
[f_k(x_i), f_k(x_{i+1}) ), & \text{if } i < m.\\
[f_k(x_m), +\infty ), & \text{if } i = m.\\
\end{cases}
$
An aditional step.
}
}
\end{algorithm}
\end{document}
我对代码做了一些其他更改:
您可以使用
cases
来自的环境amsmath
;这将提供更好的间距并简化代码。我抑制了
\left
,\right
构造;它们在您的代码中没有任何作用,因为没有任何内容会强制分隔符拉伸。如果您想稍微增加外部分隔符的大小,您可以改用\bigl
,\bigr
(如\bigl( ... \bigr)
)。
答案2
flalign
如果您想要方程编号,也可以使用。顺便说一句,我使用cases
环境简化了您的代码:
\begin{algorithm}
\caption{Algorithm}
\label{alabel}
\KwData{
Lots of stuff written here.
}
\For{$i = 1, \ldots, n$} {
\If{something} {
do this
}
\Else {
do that
}
$\epsilon = $ simple equation
\If{$\epsilon < 0$} {
\begin{flalign} %align me to the left
& \text{Choose } \theta \in
\smash[t]{\begin{cases}
[f_k(x_i), f_k(x_{i+1}) ) & \text{ if } i < m\\[3pt]
[f_k(x_m), +\infty ) & \text{ if } i = m
\end{cases}} & &
\end{flalign}
An additional step.
}
}
\Return the result
\end{algorithm}