使用算法包在 Latex 中创建子算法

使用算法包在 Latex 中创建子算法

我想做这样的事情(见下图),这样我就可以以较小的步骤或“阶段”来描述我的算法,正如这个人所说的那样。我以前使用过算法和算法包,但我不知道如何执行这些“子算法”,而且我似乎在任何教程中都找不到它。 在此处输入图片描述

答案1

您可以使用algpseudocode打包并定义一个简单的命令,让您格式化阶段;一个简单的例子:

\documentclass{article}
\usepackage{algorithm}
\usepackage{algpseudocode}

\newcommand\Algphase[1]{%
\vspace*{-.7\baselineskip}\Statex\hspace*{\dimexpr-\algorithmicindent-2pt\relax}\rule{\textwidth}{0.4pt}%
\Statex\hspace*{-\algorithmicindent}\textbf{#1}%
\vspace*{-.7\baselineskip}\Statex\hspace*{\dimexpr-\algorithmicindent-2pt\relax}\rule{\textwidth}{0.4pt}%
}
\begin{document}

\begin{algorithm}
\caption{Euclid’s algorithm}\label{euclid}
\begin{algorithmic}[1]
\Require something
\Ensure something
\Procedure{Euclid}{$a,b$}\Comment{The g.c.d. of a and b}
\State $r\gets a\bmod b$
\While{$r\not=0$}\Comment{We have the answer if r is 0}
\State $a\gets b$
\State $b\gets r$
\State $r\gets a\bmod b$
\EndWhile\label{euclidendwhile}
\State \textbf{return} $b$\Comment{The gcd is b}
\EndProcedure%
\Algphase{Phase 1 - Gossip piece ids}
\Require something
\Function{somename}{someparams}
\While{$x>-5$}
\State $x\gets x-1$
\EndWhile
\EndFunction
\Algphase{Phase 2 - Require chunks}
\Ensure something
\Procedure{somename}{someparams}
\While{$x>-5$}
\State $x\gets x-1$
\EndWhile
\EndProcedure
\end{algorithmic}
\end{algorithm}

\end{document}

在此处输入图片描述

答案2

相位旁边的水平线将超出边距。要使其适应边距,只需删除命令中的 \rule{\textwidth}{0.4pt} 并输入 \hrule。命令变为:

\newcommand\Algphase[1]{% \vspace*{-.7\baselineskip}\Statex\hspace*{\dimexpr-\algorithmicindent-2pt\relax}\hrule% \Statex\hspace*{-\algorithmicindent}\textbf{#1}% \vspace*{-.7\baselineskip}\Statex\hspace*{\dimexpr-\algorithmicindent-2pt\relax}\hrule% }

相关内容