【Latex】如何在Latex中插入伪代码 —— clrscode3e
1. 简介
clrscode3e是《算法导论(第三版)》使用的伪代码的宏包,clrs其实表示的是Cormen、Leiserson、Rivest和Stein。
它有个更老的版本clrscode,这个宏包CTEX自带。《算法导论》中的伪代码风格与clrscode3e的风格完全一致,要比lstlistings更适合写伪代码。
源码及手册链接http://www.cs.dartmouth.edu/~thc/clrscode/
2. 安装
clrscode3e并没有预装在CTEX中,因此需要手动加入DB中。其实很简单。
首先,下载clrscode3e.sty,将其放置在XXX\CTEX\MiKTeX\tex\latex\clrscode3e文件夹下,注意这里可能需要创建clrscode3e文件夹。
这里,可以将clrscode3e.pdf放置在XXX\CTEX\MiKTeX\source\latex\clrscode3e文件夹方便检索。
然后,打开WinEdt,依次点击Tex $\rightarrow$ MikTex $\rightarrow$ MikTex Options,将它打开后,单机FNDB,会更新宏包的数据库。
等待完成即可,如下图所示:
3. 基本类型
CLRS3e风格的伪代码包含四种基本类型:
(1)\id:变量;
(2)\proc:函数;
(3)\const:常量,如nil、true等;
(4)\func:可以将其理解成库函数,如sin、sqrt等。
这四种类型可以在使用模式下使用,也可以在非公式编辑模式下使用。如下图:
4. 基本属性
CLRS3e将对象的属性主要可以分成三类:
- $\textit{i-string}$,主要指使用\id修饰的字符串,并且不包含希腊字母;
- $\textit{x-string}$,主要指使用\id修饰的字符串,包含希腊字母或者公式下表;
- 不属于上述两种,有时会把$i-string$用作$x-string$。
\attrib命令是对象名是$x-string$,属性名是$i-string$的常用命令。如
此外,\attribxi、\attribxx、\attribii、\attribix用来表示这两个参数是$i-string$或$x-string$的全排列组合。(第一个字符表示对象的类型,第二字符表示属性的类型)
使用的时候,要注意的是$i-string$可以当做$x-string$用,但是一般来说$x-string$不会用作$i-string$。如
\attribb命令包含三个参数,用来表示级联属性,如
此外,\attribe用来表示边$(u,v)$的属性信息,\attribe表示属性是$i-string$,\attribex表示属性是$x-string$,如:
5. 杂项
下面三个命令仅适用于公式编辑模式
- \twodots 表示".."(\cdtos等表示$\cdots$)
- \gets 表示赋值运算符
- \isequal 表示相等运算发,3e中等价于$==$但是长度略小于
6. codebox环境
codebox是编写伪代码的主要环境:
- 使用\Procname指定函数名
- 使用\li表示有编号的新行
- 使用\zi表示不使用编号的行
\begin{codebox}
\Procname{$\proc{Insertion-Sort}(A)$}
\li \For $j \gets 2$ \To $\attrib{A}{length}$
\li \Do
$\id{key} \gets A[j]$
\li \Comment Insert $A[j]$ into the sorted sequence
\li $i \gets j-1$
\li \While $i > 0$ and $A[i] > \id{key}$
\li \Do
$A[i+1] \gets A[i]$
\li $i \gets i-1$
\End
\li $A[i+1] \gets \id{key}$
\End
\end{codebox}
生成的伪代码如下图所示:
codebox环境定义了一些关键字,具体实现可以参考源代码,可以定制自己喜欢的关键字。
- Loop相关:\For, \To, \By, \Downto, \Do, \While, \Repeat, \Until
- Selection相关:\If, \Then, \Else, \ElseIf, \ElseNoIf
- Jumps相关:\Return, \Error, \Goto
- Multithreading相关:\Spawn, \Sync, \Parfor
- Comments相关:\Comment(注释"//"),\RComment(右对齐注释),\CommentSymbol(注释符号)
- Indentation相关:\Indentmore(增加缩进),\Startalign(后续行从指定字符串开始对齐),\Stopalign(停止前面的\Startalign命令)
其中,\Do与\Then表示的命令是完全一样的(详见源码)并增加1单位的缩进,都可与\End(减少1单位的缩进)配合使用。
需要注意的是使用\li对\Do和\Then所在行编号,但是它们的下一行不编号(因为\Do与\Then及\End都仅仅修改缩进并不实际显示)。
\begin{codebox}
\Procname{$\proc{KMP-Matcher}(T,P)$}
\li $n \gets \attrib{T}{length}$
\li $m \gets \attrib{P}{length}$
\li $\pi \gets \proc{Compute-Prefix-Function}(P)$
\li $q \gets 0$ \RComment number of characters matched
\li \For $i \gets 1$ \To $n$ \RComment scan the text from left to right
\li \Do
\While $q > 0$ and $P[q+1] \neq T[i]$
\li \Do $q \gets \pi[q]$ \RComment next character does not match
\End
\li \If $P[q+1] \isequal x[i]$
\li \Then $q \gets q+1$ \RComment next character matches
\End
\li \If $q \isequal m$ \RComment is all of $P$ matched?
\li \Then
print ``Pattern occurs with shift'' $i-m$
\li $q \gets \pi[q]$ \RComment look for the next match
\End
\End
\end{codebox}
上面代码实际运行效果:
可以使用\label{li:xxx}给某行伪代码做标记,然后在正文交叉引用该行所在编号。
同时可以使用\setlinenumber{li:xxx}直接设定伪代码中的当前行所引用的行号。
CLRS居然是没有break、continue这些关键词的,除了自己定制新关键词外也可以使用\kw命令实现$\texttt{break}$、$\texttt{continue}$的效果。
【Latex】如何在Latex中插入伪代码 —— clrscode3e的更多相关文章
- 如何在html中插入视频
如何在html中插入视频 1,插入优酷视频: 在优酷分享界面有个html代码,直接复制放入body中,定义div的align居中即可 2.插入本地视频:用video属性 用mp4格式 <vid ...
- 如何在github中插入图片,链接,图片链接(给图片加上链接),文字+图片链接,的实战分享!
如何在github中插入图片,链接,图片链接(给图片加上链接),文字+图片链接,的实战分享! markdown 1.文字链接: [link-Text](link-URL) [home](https:/ ...
- 如何在Visio 中插入各种数学公式?
在Visio 2007老版本中,插入公式可以直接在插入图片中选择,但是在后来的Visio2013中却无法直接通过插入图片的方法插入,那么该如何在visio 2013中插入公式呢? 具体的操作步骤如下: ...
- 关于如何在mysql中插入一条数据后,返回这条数据的id
简单的总结一下如何在mysql中出入一条数据后,返回该条数据的id ,假如之后代码需要这个id,这样做起来就变得非常方便,内容如下: <insert id="insertAndGetI ...
- TWaver初学实战——如何在EasyUI中插入TWaver
TWaver是一款强大的图形界面开发组件,可以很方便地集成到其他开发工具中.今天就用一个小例子来操练如何结合TWaver和EasyUI进行网页开发. 准备工作 俗话说他山之玉可以直接拿来,EasyUI ...
- 如何在office2007中插入MathType教学
很多人在安装MathType数学公式编辑器时可能会遇到这个问题,MathType安装好了,可是在office2007的菜单栏中没有MathType这个选项卡,也就是说MathType没有成功加载在of ...
- HTML——如何在html中插入视频
1,插入优酷视频: 在优酷分享界面有个html代码,直接复制放入body中,定义div的align居中即可 2.插入本地视频:用video属性 用mp4格式 <video>标签的属性 s ...
- 如何在word中插入代码
本文使用的是word2007,在网上查阅资料,可以使用如下方法: 1. 插入一个1行1列的表格,然后将代码写在里面,完成之后选中表格: 2. 将样式改为"HTML代码". 其实只是 ...
- TWaver初学实战——如何在EasyUI中插入TWaver(续)
上次文章虽然简单易懂,但很有些小伙伴不满意:你这TWaver和EasyUI结合,只不过生硬地把TWaver图形插进去了,数据和人家EasyUI没一毛钱关系.嘿嘿,不就是想发生关系嘛,没问题啊!咱就还用 ...
随机推荐
- 一次失败的面试——IBM电话面试
前几天接到IBM的电话面试了,虽然被PASS了,还是发个博记录一下吧.这大概是我第一次比较正式的面试了,虽然只是通过电话,但是还是暴露出了自己的很多问题,总结下,前事不忘,后事之师嘛.:) 一号上午接 ...
- 复习JS和jQuery
复习JS和jQuery 近些时日,以前学过的东西忘了好多.今天且写一点复习一下JS和jQuery.希冀与某年某月某日,忘却的时候,能看一下自己写的博文,尚可记起一二. 现在有需求如下:有两个按钮,一个 ...
- Ui设计哪里有好的素材
刚看到花瓣网,的确不错,以后得多逛逛了.(不喷广告,只留作笔记)
- Eclipse配置默认的编码集为utf-8
既然开了博,那就来点有用的. 可以使用下面的方法,让Eclipse对所有的项目里所有文件都按照指定的编码解析. Eclipse安装目录下有一个eclipse.ini文件, 用记事本打开即可,在最后一行 ...
- dbutils 执行sql返回的数据类型
//ArrayHandler: 把结果集中的第一行数据转成对象数组 //ArrayListHandler:把结果集中的每一行数据都转成一个对象数组,再存放到List中 //BeanHandler:将结 ...
- Eclipse maven工程 Missing artifact com.sun:tools:jar:1.5.0:system 解决方法
今天同事在使用eclipse,引入一个新的maven工程时报错: Missing artifact com.sun:tools:jar:1.6.0:system 这个问题很奇怪,相同的代 ...
- 新建标准mavenWeb工程以及Maven的web应用标准目录结构建议
到现在为止,使用Maven结构的Web工程越来越多,因此在此介绍一下通过Maven来构建项目的相关知识. 文档主要分为两部分: 1.如何通过maven来构建多模块的web项目 ...
- C# mongodb [下]
概述 传统的关系数据库一般由数据库(database).表(table).记录(record)三个层次概念组成,MongoDB是由数据库(database).集合(collection).文档对象(d ...
- 项目中libevent几个问题
几个问题: .libevent到底用的是select还是iocp,然后是如何突破64限制的 typedef struct fd_set { u_int fd_count; /* how many ar ...
- 以“图片渐入渐出”为例讲述jQuery插件的具体实现
首先声明,此代码以网友“斯迈欧”原创作为此例的讲解: 在这之前我们先看看我们要做的效果是什么样的: 解析下面的样式:我们要图片在过“一定时间”后自动切换,在右下角处有小方块似数字1,2,3,4,这些数 ...