如何在算法环境中显示子步骤

如何在算法环境中显示子步骤

我想自动显示以下子步骤1.1。然而我只能手动进行这一操作。

\begin{algorithm}
    \SetKwInOut{Input}{Input}
    \SetKwInOut{Output}{Output}

    Precomputation of multiplier \linebreak
        \textbf{1.1}  $g_0$ = 1 \linebreak
        \textbf{1.2} For $i$ from $1$ to ($2^k-1$) do: $g_i = g_{i-1}\cdot g$\\

    A = 1 \\
    For $i$ from $t$ down to $0$ do the following: \linebreak
        \textbf{3.1}  $A = A^{2^k}$ \linebreak
        \textbf{3.2} $A = A \cdot g_{d_i}$\\
    Return(A)
    \caption{Left-to-right k-ary exponentiation}
\end{algorithm}

这些子步骤的编号可以自动添加吗?

答案1

这里有一个选项,它设置了一个名为的块作为环境\BEGIN的一部分*。环境是使用以下方法构建的substepsenviron,以便于使用。

在此处输入图片描述

\documentclass{article}

\usepackage[linesnumbered,nosemicolon,noline]{algorithm2e}
\usepackage{environ}

\newcounter{parentAlgoLine}
\SetKwBlock{BEGIN}{}{}

\makeatletter
\NewEnviron{substeps}{%
  \refstepcounter{AlgoLine}% <---- remove if necessary
  \protected@edef\theparentequation{\theequation}%
  \setcounter{parentAlgoLine}{\value{AlgoLine}}%
  \setcounter{AlgoLine}{0}%
  \def\theAlgoLine{\theparentAlgoLine.\arabic{AlgoLine}}%
  \BEGIN{\BODY}%
  \setcounter{AlgoLine}{\value{parentAlgoLine}}%
  \ignorespacesafterend
}
\makeatother

\begin{document}

\begin{algorithm}
  Precomputation of multiplier
  \begin{substeps}
  $g_0 = 1$\;
  For $i$ from $1$ to ($2^k-1$) do: $g_i = g_{i-1} \cdot g$\;
  \end{substeps}

  $A = 1$\;
  For $i$ from $t$ down to $0$ do the following:
  \begin{substeps}
    $A = A^{2^k}$ \;
    $A = A \cdot g_{d_i}$ \;
  \end{substeps}
  Return($A$)\;
  \caption{Left-to-right $k$-ary exponentiation}
\end{algorithm}

\end{document}

注意使用\;来作为行尾。这构成了algorithm2e句法。

我宁愿使用更原生的algorithm2e\For构造而不是substeps

在此处输入图片描述

\documentclass{article}

\usepackage[linesnumbered,nosemicolon,noline,noend]{algorithm2e}

\begin{document}

\begin{algorithm}
  %Precomputation of multiplier\;
  $g_0 = 1$\;
  \For{\bfseries\upshape $i$ from $1$ to $(2^k-1)$}{
    $g_i = g_{i-1} \cdot g$
  }

  $A = 1$\;
  \For{\bfseries\upshape $i$ from $t$ down to $0$}{
    $A = A^{2^k}$ \;
    $A = A \cdot g_{d_i}$ \;
  }
  \Return{$A$}\;
  \caption{Left-to-right $k$-ary exponentiation}
\end{algorithm}

\end{document}

缩进应该明确分组/块。

* 此环境取自amsmathsubequations环境。

相关内容