我对编写简单“算法”的软件包感到困惑。选项太多了,不知道什么时候该用什么。例如,如果我使用algpseudocode
,那么我无法添加,algorithmic
因为它已经包含在algorithm
软件包中。
有没有关于简化方法的明确指南?任何建议都将不胜感激。
答案1
TL;DR 版本:
- 算法- 算法的浮点包装器。
- 算法的- 第一个算法排版环境。
- 算法- 第二种算法排版环境。
- 算法伪代码- 布局
algorithmicx
。 - 算法2e- 第三算法排版环境。
我使用algorithmicx
with ,algpseudocode
因为它们优于algorithmic
。我认为algorithmicx
与 相比提供了相同的功能algorithm2e
,但我发现它的语法比 提供的语法更清晰algorithm2e
。
详细版本
算法
算法的浮点包装器。它类似于块命令table
或figure
,您可以将它们包装在表格/图形周围以赋予其编号并防止其被分成两页。文档说:
如果将环境放置在文本中而不将其封装在浮动环境中,
algorithmic
则环境可能会跨页面边界分割,从而大大影响其外观。此外,对算法进行编号以供参考以及将算法列表附加到内容列表中也很有用。该algorithm
环境旨在通过为算法提供浮动环境来解决这些问题。
例子:
\begin{algorithm}
\caption{Algorithm caption}
\label{alg:algorithm-label}
\begin{algorithmic}
... Your pseudocode ...
\end{algorithmic}
\end{algorithm}
算法的
这是您编写伪代码的环境。您已为常见结构预定义了命令,例如if
,,while
。procedure
所有命令均大写,例如\IF{cond} ... \ELSE ...
。文档1说:
环境
algorithmic
提供了一个描述算法的环境,algorithm
环境提供了一个用于算法的“浮点”包装器(使用algorithmic
或用户选择的其他方法实现)。提供两个环境的原因是为了给用户提供最大的灵活性。
例子:
\begin{algorithmic}
\IF{some condition is true}
\STATE do some processing
\ELSIF{some other condition is true}
\STATE do some different processing
\ELSE
\STATE do the default actions
\ENDIF
\end{algorithmic}
算法
这个包就像algorithmic
升级版一样。它使您可以定义自定义命令,这是以前 algorithmic
无法做到的。因此,如果您不想编写(疯狂的)自定义命令,那么使用 就没问题了algorithmic
。使用algorithmicx
方法与使用 相同algorithmic
,只是语法和细节略有不同。有关详细信息,请参阅下面的示例。文档说:
algorithmicx 包本身没有定义任何算法命令,但提供了一组宏来定义这样的命令集。您可以只使用 algorithmicx,并自行定义命令,也可以使用预定义的命令集之一
例子:
\begin{algorithm}
\caption{Euclid’s algorithm}
\label{euclid}
\begin{algorithmic}[1] % The number tells where the line numbering should start
\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
\end{algorithmic}
\end{algorithm}
算法伪代码
这只是一种布局,algorithmicx
尽量与 相似algorithmic
。还有其他布局,例如:
algcompatible
(与算法包完全兼容),algpascal
(旨在创建格式化的 pascal 程序,您可以algpascal
使用一些基本替换规则将 pascal 程序转换为算法描述)。algc
(就像 algpascal,但是用于 c。此布局不完整)。
这文档说:
如果您熟悉 algorithmic 包,那么您会发现切换很容易。您可以将旧算法与布局一起使用
algcompatible
,但请使用algpseudocode
新算法的布局。要使用algpseudocode
,只需使用\usepackage{algpseudocode}
。您不需要手动加载algorithmicx
包,因为这已由 完成algpseudocode
。
参见示例algorithmicx
,它使用了algpseudocode
布局。
算法2e
这是另一个算法环境,就像algorithmic
或algorithmicx
算法环境。文档说:
Algorithm2e 是一个使用 LaTeX2e 编写算法的环境。
algorithm
被定义为类似图形的浮动对象。 它提供了宏,允许您创建不同类型的关键字,从而给出了一组预定义的关键字。 您还可以更改关键字的排版。
例子:
\begin{algorithm}[H]
\SetAlgoLined
\KwData{this text}
\KwResult{how to write algorithm with \LaTeX2e }
initialization\;
\While{not at end of this document}{
read current\;
\eIf{understand}{
go to next section\;
current section becomes this one\;
}{
go back to the beginning of current section\;
}
}
\caption{How to write algorithms}
\end{algorithm}
答案2
- 我发现最近
algpseudocodex
包裹朝着统一各种algorithm*
软件包迈出了良好的一步。 - 该包很好地结合了 的一些特性(例如通用性、模板)
algorithmicx
和 的精益布局algorithm2e
,即垂直范围线。