1 可用的宏包
常用的排版伪代码包有clrscode, algorithm, algorithmic, algorithmicx, algorithm2e
2 clrscode
clrscode是著名的算法教材 Introduction to Algorithms, 2nd ed. 的作者排版该书时自己制定的。【c l r s 分别是该书四个作者的姓的第一个字母,因此人们常以 clrs 指称该书。】
示例:
该包支持显示行号,加入注释,能够每行 label 及引用。
以下是 Insertion-Sort 算法的 code
egin{codebox} Procname{$proc{Insertion-Sort(A)}$} li For $j gets 2$ To $id{length}[A]$ label{li:for} li Do $id{key} gets A[j]$ label{li:for-begin} li Comment Insert $A[j]$ into the sorted sequence $A[1 wodots j-1]$. li $i gets j-1$ li While $i>0$ and $A[i]>id{key}$ label{li:while} li Do $A[i+1] gets A[i]$ label{li:while-begin} li $i gets i-1$ label{li:while-end} End li $A[i+1] gets id{key}$ label{li:for-end} End end{codebox}
3 algorithm, algorithmic
3.1 Preamble
usepackage{caption} usepackage{algorithm} usepackage{algpseudocode}
3.2 algorithm环境
egin{algorithmic}[1]中的[n]表编号间隔,为1的话表示每行都要有编号 caption{内容}和caption*{内容}前者内容前面会加上Algorithm+编号,而后者不会 State相当于item
示例:
documentclass{article} usepackage{caption} usepackage{algorithm} usepackage{algpseudocode} %usepackage{fontspec,xunicode,xltxtra} %setmainfont[BoldFont=Microsoft YaHei]{FangSong_GB2312} %setsansfont[BoldFont=Microsoft YaHei]{KaiTi_GB2312} %setmonofont{Bitstream Vera Sans Mono} %XeTeXlinebreaklocale "zh" % %XeTeXlinebreakskip = 0pt plus 1pt minus 0.1pt % ewcommandli{fontspec{LiSu}} % ewcommandhei{fontspec{SimHei}} % ewcommandyou{fontspec{YouYuan}} % ewcommandsun{fontspec{SimSun}} % ewcommandfangsong{fontspec{仿宋_GB2312}} % ewcommandkai{fontspec{KaiTi_GB2312}} %% umberwithin %% umberwithin{equation}{section} egin{document} egin{algorithm} caption{A test algorithm (Part I)} egin{algorithmic}[1] Procedure {BellmanKalaba}{$G$, $u$, $l$, $p$} ForAll {$v in V(G)$} State $l(v) leftarrow infty$ EndFor algstore{bkbreak} end{algorithmic} end{algorithm} egin{algorithm} caption*{A test algorithm (Part II)} egin{algorithmic}[1] algrestore{bkbreak} State $p(i) leftarrow v_j$ State $l’(i) leftarrow min$ State $changed leftarrow l ot= l’$ EndProcedure end{algorithmic} end{algorithm} %egin{algorithm} % caption*{线搜索技术算法} % egin{algorithmic}[1] % State 计算$g_{k}=- abla f(x_{k})$,若$parallel g_{k}parallel<epsilon$,则以$x_{k}$作为极小点,停止迭代 % State 确定下降方法$d_{k}$ % State 用精确搜索或非精确搜索方法确定搜索方向$alpha_{k}$ % State 更新迭代点$x_{k+1}=x_{k}+alpha_{k}d_{k}$,$k=k+1$,转至步1 % end{algorithmic} %end{algorithm} % end{document}
3.3 效果
4 Trick
先用Lyx用列表的形式把算法过程编辑好,然后查看TeX源码,把list环境下的item替换成State放到下列模板的xxx位置。
把标题替换自己的标题。
为了以后修改需要,可以把原来编辑好的内容变成Lyx note【或者comment比较好,二者的区别在于前者不会生成TeX源码,所以如果想要再修改的不太方便】(此内容只显示在Lyx编辑器中,不会生成在最终的pdf文件中)【在菜单Insert->Note->Lyx note】
egin{algorithm} caption*{yyyyyyyyyy} egin{algorithmic}[1] xxxxxxxxx end{algorithmic} end{algorithm}