参考资料:
- 《algorithm, algorithmic算法包到底什么区别?》
- 《Latex写算法的伪代码排版》
- 《Latex 编写算法伪代码,基于algorithmicx包的使用说明(人工翻译自CTAN)》
- 《latex排版原理》
文章目录
一、中文排版
1.1 准备工作
- 设置字符编码为中文排版
\usepackage[UTF8]{ctex}%%%使用中文
UTF8指的是编码包;ctex是参数命令,表示中文排版
%%cetex中提供了四种中文包:ctexart,ctexrep,ctexbook,ctexbeamer对应着article,repoter,book,beamer 具体见:《CTex宏集手册》
- 引入算法包,都写上
\usepackage{algorithm}
\usepackage{algorithmicx} %或者\usepackage{algorithmic}
\usepackage{algpseudocode}
- algorithm : 算法的
float warpper
,类似于table, figure
这样的们命令,你可以在你的表格/图形上加一个数字,防止它被分成两页. - algorithmicx: 是
algorithmic
的升级版。事先已经定义好一些常用的命令语句,有如IF,WHILE
等。需要注意的是所有命令语句必须大写。此外,(升级版)自定义一些命令。
- 算法中可用用到特殊的数学公式或者符号
\usepackage{amsmath,amssymb,amsfonts}
举例
4. 利用\renewcommand
可以对系统已有的命令重新定义
英文举例
algorithmicrequire
是algorithmic
中的原有命令,require意为要求algorithmicensure
是algorithmic
中的原有命令,ensure意为确保\textbf
是字体加粗命令- 黄线下标的
Input:
是新命令的名称
效果图如下
中文的命令重新定义为
\renewcommand{\algorithmicrequire}{\textbf{输入:}}
\renewcommand{\algorithmicensure}{\textbf{输出:}}
1.2 排版
一个栗子:
\begin{document}
\begin{algorithm} %生成浮动式图
\caption{DBSCAN 伪代码} %标题
% 由algorighmic完成代码的编译部分
\begin{algorithmic}[1] %[1]表示每行显示行号 ,且由123..排序
\Require 点集ps,邻域半径eps,邻域的最小个数MinP.
\Ensure 簇 cl.
\For {q in ps}
\State 标记q为unvisited(未拜访的)
\EndFor
\For {q in ps }
\If {q 的标记为visited 或者 q 属于任意簇}:
\State 跳过(continue)
\Else:
\If {q 是 cp(核心点)}
\State 标记q为visited.且创造一个新簇 cl
\For {p 是 q的$\epsilon$的邻域内的点(p $\in n_{\epsilon}(q)$ )}
\If {p 的标记为unvisited}
\State 将p放入簇cl中
\EndIf
\EndFor
\EndIf
\EndIf
\EndFor
\State Return 簇 cl
\end{algorithmic}
\end{algorithm}
\end{document}
图示:
1.3 循环模块语句的书写
A. For语块
\For{<text1>}
\State 循环主体
<body>
\EndFor
\ForAll{<text2>}
\State 循环主体
<body>
\EndFor
\For{$i\gets 1, n$} %%%\gets表示逆箭头
\State $sum\gets sum+i$
\EndFor
B. While语块
\While{<text1>}
\State 循环主体,类似于For
<body>
\EndWhile
\State $sum\gets 0$ (初始设置sumw为0)
\State $i\gets 1$ (初始设置i为1)
\While{$i\le n$}
\State $sum\gets sum+i$
\State $i\gets i+1$
\EndWhile
C. Repeat语块
\Repeat
\State 循环主体在前,条件判断在后
<body>
\Until{<text2>}
\State $sum\gets 0$ (初始设置sumw为0)
\State $i\gets 1$ (初始设置i为1)
\Repeat
\State $sum\gets sum+i$
\State $i\gets i+1$
\Until{$i>n$}
1.4 条件模块的语句书写
\If{$quality\ge 9$}
\State $a\gets perfect$
\ElsIf{$quality\ge 7$}
\State $a\gets good$
\ElsIf{$quality\ge 5$}
\State $a\gets medium$
\ElsIf{$quality\ge 3$}
\State $a\gets bad$
\Else
\State $a\gets unusable$
\EndIf
1.5 输入输出语句
\Require something
\Ensure something
\Statex
\State \Call{Create}{10}
1.6 Procedure语块
\Procedure{<name>}{<params>}
<body>
\EndProcedure
其他的见参考资料