在 algorithm2e 中使用方程式时行号的缩进

在 algorithm2e 中使用方程式时行号的缩进

我使用包编写了一些算法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}

在此处输入图片描述

相关内容