算法是技术报告、学术论文、学位论文等文体中一个重要的构成元素,在 LaTeX 中,可以使用 algorithm2e 宏包实现算法排版。
引入宏包algorithm2e 宏包已包含在 TeXLive 发行版中(其它发行版请自查),无需再独立安装。在导言区中引入宏包:
\usepackage{algorithm2e}
之后,便可以使用该宏包提供的环境和命令实现算法排版。
算法环境algorithm2e宏包提供了3组环境用于实现算法排版:
algorithm(algorithm*)环境该环境是算法排版的主要环境,带星号环境用于在双栏排版中实现跨栏算法排版。
procedure(procedure*)环境procedure环境用于算法中的过程排版,带星号环境用于在双栏排版中实现跨栏算法排版。
function(function*)环境function环境用于算法中的函数排版,带星号环境用于在双栏排版中实现跨栏算法排版。
这些算法环境都是基于浮动体实现的,可以像使用figure和table浮动体环境一样设置浮动参数、添加标题、添加标签,也能够使用交叉引用。并且可以像使用类似\listoffigures和\listoftables命令一样,使用\listofalgorithms命令排版算法目录。
排版设置使用algorithm2e宏包提供的功能,可以方便地对算法排版样式进行必要的个性化设置。
宏包参数在引入宏包时,可以通过为宏包指定必要的可选参数,以实现需求的排版样式,详情请参阅宏包手册第7节。
设置命令在算法排版中,可以使用宏包提供的命令在导言区进行全局样式设置,也可以在算法排版环境中随时使用命令对算法排版样式进行局部修改,详情请参阅宏包手册排版样例及命令详解。
关键字自定义在算法排版中,也可以通过宏包提供的命令设置个性化的关键字命令和语言,从而实现本地化排版,详情请参阅宏包手册第11节。
排版样例例如如下代码:
\documentclass{ctexart}
\usepackage{algorithm2e}
\usepackage{xfrac} % \sfrac斜分式命令
% 框线颜色设置
\usepackage{xcolor}
\makeatletter
\newcommand{\setalgotoprulecolor}[1]{\colorlet{toprulecolor}{#1}}
\let\old@algocf@pre@ruled\@algocf@pre@ruled % Adjust top rule colour
\renewcommand{\@algocf@pre@ruled}{\textcolor{toprulecolor}{\old@algocf@pre@ruled}}
\newcommand{\setalgobotrulecolor}[1]{\colorlet{bottomrulecolor}{#1}}
\let\old@algocf@post@ruled\@algocf@post@ruled % Adjust middle rule colour
\renewcommand{\@algocf@post@ruled}{\textcolor{bottomrulecolor}{\old@algocf@post@ruled}}
\newcommand{\setalgomidrulecolor}[1]{\colorlet{midrulecolor}{#1}}
\renewcommand{\algocf@caption@ruled}{%
\box\algocf@capbox{\color{midrulecolor}\kern\interspacetitleruled\hrule
width\algocf@ruledwidth height\algotitleheightrule depth0pt\kern\interspacealgoruled}}
\makeatother
\setalgotoprulecolor{blue!90}% Default
\setalgobotrulecolor{red!90}% Default
\setalgomidrulecolor{green!90}% Default
\begin{document}
计算分数累加和的for循环实现如算法\ref{algo:sumwithfor}所示。
\begin{algorithm}[htp]
\SetAlgoLined % 绘制区域垂直线
\LinesNumbered % 排版行号
\KwIn{$x_i=\{1,\sfrac{1}{2},\sfrac{1}{3},\sfrac{1}{4},\sfrac{1}{5},\cdots,\sfrac{1}{100}\}$}
\KwOut{$sum=\sum\limits_{i=1}^{100} x_i$}
\BlankLine % 空白线
Initialize $sum=0$\;
\For{$i\leftarrow1$ \KwTo $100$}{
$sum=sum+\sfrac{1}{i}$\;
$i=i+1$\;
}
Output $sum$\;
\caption{sum of frac}\label{algo:sumwithfor} % 标题
\end{algorithm}
计算分数累加和的while循环实现如算法\ref{algo:sumwithwhile}所示。
\RestyleAlgo{ruled} % 设置排版样式
% 设置文字关键字
\SetAlgorithmName{算法}{算法}{算法列表}
\SetKwInput{KwIn}{输入}
\SetKwInput{KwOut}{输出}
\begin{algorithm}[htp]
\KwIn{$x_i=\{1,\sfrac{1}{2},\sfrac{1}{3},\sfrac{1}{4},\sfrac{1}{5},\cdots,\sfrac{1}{100}\}$}
\KwOut{$sum=\sum\limits_{i=1}^{100} x_i$}
\AlgoDisplayBlockMarkers
\SetAlgoBlockMarkers{begin}{end}%
\SetAlgoNoEnd
\SetKwFunction{FSum}{getSum}%
\SetKwProg{Fn}{}{}{}
\Fn{}{
$sum = 0$\;
$i = 1$\;
\While{i <= 100}{
$sum = sum + \sfrac{1}{i}$\;
$i = i + 1$\;
}
print $sum$\;
}
\caption{计算分数累加和}\label{algo:sumwithwhile}
\end{algorithm}
\end{document}
其排版结果为:
有关 algorithm2e 宏包的使用细节,请在命令行通过texdoc algorithm2e命令查阅其使用手册。
Happy LaTeXing!
点击阅读原文,与大神零距离