我想自动显示以下子步骤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
的一部分*。环境是使用以下方法构建的substeps
environ
,以便于使用。
\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}
缩进应该明确分组/块。
*
此环境取自amsmath
的subequations
环境。