将 amsmath 多行与枚举中的项目顶部对齐

将 amsmath 多行与枚举中的项目顶部对齐

amsmath我正在使用(不需要包)在枚举列表项中编写一个简单的伪代码存根algorithmic,如下所示,但是它显示在项目项目符号下方的几行,我该如何将其与项目符号的级别对齐?

begin{enumerate}[label=(\alph*)]
\item \begin{multline*}s=0\\
for\; i=1\; to\; n\\
\quad for\; j=i\; to\; n\\
\quad if(A[i] > A[j])\; then\; s = s+1\\
return\; s\\
\end{multline*}
\end{enumerate}

其结果如下:

(a)

      s =0
        for i = 1 to n
           for j = i to n
              if (A[i] > A[j]) then s = s + 1
       returns

我怎样才能达到s=0的水平a

答案1

我假设您没有将此代码存根打破页面边界。因此,您没有理由需要数学对齐环境;您可以将其设置为在op 处与枚举标签tabular对齐:[t]

在此处输入图片描述

\documentclass{article}

\usepackage{enumitem}
\newenvironment{codestub}[1][t]
  {\begin{tabular}[#1]{@{}l@{}}}
  {\end{tabular}}
\newcommand{\cind}{\hspace*{1em}}% ...or \quad, or some other length

% Some language/keyword definitions
\newcommand{\kw}{\textbf}
\newcommand{\FOR}{\kw{for}}
\newcommand{\TO}{\kw{to}}
\newcommand{\IF}{\kw{if}}
\newcommand{\THEN}{\kw{then}}
\newcommand{\RETURN}{\kw{return}}

\begin{document}

\begin{enumerate}[label=(\alph*)]
  \item
    \begin{codestub}
      $s = 0$ \\
      for $i = 1$ to $n$ \\
      \cind for $j = i$ to $n$ \\
      \cind\cind if $(A[i] > A[j])$ then $s = s + 1$ \\
      return $s$
    \end{codestub}

  \item
    \begin{codestub}
      $s = 0$ \\
      \FOR{} $i = 1$ \TO{} $n$ \\
      \cind \FOR{} $j = i$ \TO{} $n$ \\
      \cind\cind \IF{} $(A[i] > A[j])$ \THEN{} $s = s + 1$ \\
      \RETURN{} $s$
    \end{codestub}
\end{enumerate}

\end{document} 

项目 (a) 复制您的要求,而 (b) 建议的输出通常与伪代码相匹配,其中关键字为了清晰而突出显示。

答案2

您可以使用multlined环境,来自mathtools(在这种情况下无需加载amsmath)。但是,使用专用包可以获得更好的结果,例如algorithmic

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{enumitem}%
 \usepackage{mathtools}
 \usepackage[noend]{algorithmic} %

\begin{document}

\begin{enumerate}[label=(\alph*)]
  \item $ \begin{multlined}[t]s=0\\
        \text{for}\; i=1\; \text{to}\; n\\
        \quad \text{for}\; j=i\; to\; n\\
        \quad \text{if}(A[i] > A[j])\; \text{then}\; s = s+1\\
        \text{return}\; s\\
  \end{multlined} $

  \item %
        \begin{algorithmic}
          \STATE  $ s ∶= q 0 $
          \FOR{$i=0$ \TO $n$}
          %\IF{some condition is true}
          \IF{$ (A[i] > A[j]) $}
          \STATE  $ s ∶= q s + 1 $
          \RETURN{ $ s $}
          \ENDIF
          \ENDFOR
        \end{algorithmic}
\end{enumerate}

\end{document} 

在此处输入图片描述

相关内容