对齐算法内的方程框

对齐算法内的方程框

我正在编写一个包含 \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}

在此处输入图片描述

我对代码做了一些其他更改:

  1. 您可以使用cases来自的环境amsmath;这将提供更好的间距并简化代码。

  2. 我抑制了\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}

在此处输入图片描述

相关内容