![将 amsmath 多行与枚举中的项目顶部对齐](https://linux22.com/image/341207/%E5%B0%86%20amsmath%20%E5%A4%9A%E8%A1%8C%E4%B8%8E%E6%9E%9A%E4%B8%BE%E4%B8%AD%E7%9A%84%E9%A1%B9%E7%9B%AE%E9%A1%B6%E9%83%A8%E5%AF%B9%E9%BD%90.png)
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}