我使用包编写了一些算法algorithm2e
。我的一些算法还包括对齐公式。我的问题是,以方程式结尾的行下面的行号比其他行号的缩进更大。我想让所有行号对齐。我该怎么做?
我使用 pdflatex。
我已尝试过的一个最小工作示例:
\documentclass[12pt,a4paper,twoside,openright]{scrreprt}
\usepackage[utf8]{inputenc}
\usepackage{amsmath}
\usepackage{mathtools}
\usepackage[ruled,algochapter,linesnumbered]{algorithm2e}
\DontPrintSemicolon
\SetKwInput{Input}{Input}
\SetKwInput{Output}{Output}
\SetKwProg{Fn}{Function}{: }{end}
\begin{document}
%
\begin{algorithm}[ht]
\caption{Test algorithm}
\label{alg:test}
\Input{$i$.}
\Output{$x$.}
Set
\begin{align*}
i &\coloneqq i+1, \\
j &\coloneqq i^2.
\end{align*}%
\nl Set $x \coloneqq j$.
\end{algorithm}
%
\begin{algorithm}[ht]
\caption{Test algorithm 2}
\label{alg:test2}
\Input{$i$.}
\Output{$x$.}
Set
\begin{algomathdisplay}
\begin{aligned}
i &\coloneqq i+1, \\
j &\coloneqq i^3. \;
\end{aligned}
\end{algomathdisplay}
Set $x \coloneqq j$. \;
\end{algorithm}
%
\end{document}
答案1
环境algomathdisplay
实际上不起作用:\nl
在末尾添加会移动行号,\;
添加一个空白行。
直接使用align*
是不可能的,因为它会产生太大的空间。
我可以提出一个补丁,使用\;
和删除空白行。
\documentclass[12pt,a4paper,twoside,openright]{scrreprt}
\usepackage{amsmath}
\usepackage{mathtools}
\usepackage[ruled,algochapter,linesnumbered]{algorithm2e}
\DontPrintSemicolon
\makeatletter
\renewenvironment{algomathdisplay}
{\[}
{\@endalgocfline\vspace{-\baselineskip}\]\;}
\makeatother
\SetKwInput{Input}{Input}
\SetKwInput{Output}{Output}
\SetKwProg{Fn}{Function}{: }{end}
\begin{document}
\begin{algorithm}[ht]
\caption{Test algorithm 2}
\label{alg:test2}
\Input{$i$.}
\Output{$x$.}
Set
\begin{algomathdisplay}
\begin{aligned}
i &\coloneqq i+1, \\
j &\coloneqq i^3.
\end{aligned}
\end{algomathdisplay}
Set $x \coloneqq j$.
\end{algorithm}
\end{document}
我对有和没有的情况都进行了测试linesnumbered
。
答案2
\nl
在第一种情况下,可以通过删除并添加\;
第一行末尾来解决缩进问题。对于第二种情况,algomathdisplay
似乎需要进行修补。
\documentclass[12pt,a4paper,twoside,openright]{scrreprt}
\usepackage[utf8]{inputenc}
\usepackage{amsmath}
\usepackage{mathtools}
\usepackage[ruled,algochapter,linesnumbered]{algorithm2e}
\DontPrintSemicolon
\SetKwInput{Input}{Input}
\SetKwInput{Output}{Output}
\SetKwProg{Fn}{Function}{: }{end}
\makeatletter
\renewenvironment{algomathdisplay}{%
\[%
}{%
\@endalgocfline%
\]%
%\ifthenelse{\boolean{algocf@linesnumbered}}{\nl}{\relax}% <- in the original .sty
}%
\makeatother
\begin{document}
%
\begin{algorithm}[ht]
\caption{Test algorithm}
\label{alg:test}
\Input{$i$.}
\Output{$x$.}
Set
\begin{align*}
i &\coloneqq i+1, \\
j &\coloneqq i^2.
\end{align*}\;
Set $x \coloneqq j$.
\end{algorithm}
%
\begin{algorithm}[ht]
\caption{Test algorithm 2}
\label{alg:test2}
\Input{$i$.}
\Output{$x$.}
Set%
\begin{algomathdisplay}
\begin{aligned}
i &\coloneqq i+1, \\
j &\coloneqq i^3.
\end{aligned}
\end{algomathdisplay}\;
Set $x \coloneqq j$. \;
\end{algorithm}
%
\end{document}
\end{document}