想在latex中以这样的版式描述算法:

1 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx|

xxxxxxxxxxxxxxxxxxxxxxx/

2 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/

3 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/

4     xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/

5     xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx|

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx|

xxxxxxxxxxxxxxxxxx/

6     xxxxxxxxxxxxxxx/

7 xxxxxxxxxxxxx/

8 xxxxxxxxx/

说明:

1)“算法行”指带标号的行,“文本行”指行文产生的行,如上段算法描述中有8个算法行,11个文本行。

2)“|”表示右边界(自动换行),“/”表示硬回车(手动换行)。

(将上述算法版式复制到记事本中,可发现右边界实际上都是垂直对齐的。)

要求:

1)算法不浮动,能够跨页;

2)每个算法行的行号都在最左端,垂直对齐,连续编号;

3)每个算法行到达右边界(用“|”表示)后,自动换行;且该算法行的后续文本行均向右缩进若干(比如2个字符)距离,其版式类似于Word中的“悬挂缩进”;参见第1、第5算法行;

4)每产生一次嵌套,嵌套的算法行除标号外,均整体向右缩进若干(比如4个字符)距离;参见第4、第5、第6算法行。

说明:为什么没有使用algorithm2e和clrscode宏包。

1)algorithm2e产生的算法像图片和表格一样,是浮动的;

2)algorithm2e产生的算法不能跨页;

3)algorithm2e产生的算法,处理超长行时能自动换行,但不能实现悬挂缩进;

4)clrscode产生的算法风格很好很独特,但个人还是喜欢在for、while、if之后有end的算法书写方式;

5)clrscode产生的算法不能处理超长行;

6)clrscode产生的算法不能跨页。

在bbs.ctex.org上发帖询问,经过LeoLiu的帮助,终于实现所要求的算法版式。原帖见http://bbs.ctex.org/forum.php?mod=viewthread&tid=62650。下面贴出代码及排版效果图,与大家共享。

\documentclass{article}

% Thanks to LeoLiu at http://www.ctex.org.

\newcounter{algleo}

\newlength{\lefttab}

\newlength{\numberoffset}

\setlength{\numberoffset}{-1em}

\newenvironment{algleo}%

{\trivlist

\topsep=0pt\parsep=0pt\itemsep=0pt

\def\li{\item\refstepcounter{algleo}\makebox[0.8em][r]{\thealgleo\hspace{\numberoffset}}

\hangafter1\hangindent1.8em\noindent}%

\def\linonumber{\item\makebox[0.8em][r]{\hspace{\numberoffset}}

\hangafter1\hangindent1.8em\noindent}%

\def\linooffset{\item\hangafter1\hangindent1em\noindent}%

\addtolength{\lefttab}{1.25em}

\addtolength{\numberoffset}{1.25em}

\leftskip=\lefttab}%

{\endtrivlist}

\begin{document}

\section{The Algorithm}

\setcounter{algleo}{0}

\begin{algleo}

\linonumber Algorithm $\cal A$.

\li \label{step - alga init}This is a normal line.

\li This is a very long line. How to use \LaTeX~to deal with this line? This is a

very long line. How to use \LaTeX~to deal with this line?

\li {\bf while} I want to continue {\bf do}

\begin{algleo}

\li This is a nested normal line.

\li This is a very long line. How to use \LaTeX~to deal with this line?

This is a very long line. How to use \LaTeX~to deal with this line?

\li {\bf for} $i \leftarrow 1$ {\bf to} 100 {\bf do}

\begin{algleo}

\li This is a nested normal line.

\li This is a very long line. How to use \LaTeX~to deal with this line?

This is a very long line. How to use \LaTeX~to deal with this line?

\end{algleo}

\li {\bf end}

\end{algleo}

\li {\bf end}

\li {\bf return} nothing.

\end{algleo}

In step \ref{step - alga init}, the algorithm does some initializing work.

In step \ref{step - alga init}, the algorithm does some initializing work.

\end{document}

(请使用WORD的全角半角转换功能将上述代码转成半角。方法:WORD“开始”按钮栏中点击“大小写转换”,在下拉菜单中选择“全角”或“半角”。)

最后实现的排版效果如下所示:

转载本文请联系原作者获取授权,同时请注明本文来自张鹏科学网博客。

链接地址:http://blog.sciencenet.cn/blog-482332-417364.html

下一篇:用Latex写线性规划

latex缩进与对齐_科学网—Latex算法排版,不同行缩进不同 - 张鹏的博文相关推荐

  1. latex文献怎么弄_科学网—Latex 中如何制作参考文献 (以ApJ为例) - 刘禾阳的博文...

    写学术论文时,最后一般要加上参考文献,如果手动输入,不仅繁琐,而且容易出错,那么用BibTex来管理参考文献就显得很有必要. BibTeX是LaTex中管理参考文献的工具,其文件后缀名为.bib.我们 ...

  2. latex中文小标题_科学网—一个较为完整的中文图书Latex模板 - 张金龙的博文

    用Latex编写中文书是让人头疼的工作.如果不是需要输入很多公式,很多人是不愿意用latex排版中文书的. 在ctex宏包发布之前, latex系统对中文排版的支持一直不太理想.虽然中文能够正常显示, ...

  3. matlab nan 无色_科学网—Matlab 关于NaN值的填充 - 肖鑫的博文

    以前认为很麻烦的事往往一行命令就能搞定,代码如下 figure('position',[100 100 600 500],'PaperPositionMode', 'auto') m_proj('Sa ...

  4. g2 折线图点与点之间直线_科学网—ggplot2实现散点折线图 - 肖斌的博文

    准备的数据: 第一列是时间,第二列是样本,第三列是具体数值.横轴标为时间,纵坐标为具体数值,图中不同颜色展示不同样本. 具体的代码: library(ggplot2) png("./xyz. ...

  5. python字母频率_科学网-Python统计字母频数和频率-吕波的博文

    方案一 统计字符串中的字母频数 import collections import re d = collections.defaultdict(int) S = "testTypecopy ...

  6. ieee期刊的科技写作思路曹文平_科学网—怎样向IEEE期刊投稿* - 吴雄君的博文

    * 作者郭更生教授:曾任IEEE Transactions on Communications Magazine总编,IEEE Communications Magazine高级技术编辑,台湾某大学教 ...

  7. Java对象的两大特征_科学网—Java 面向对象的四个特征 - 李玖栋的博文

    1.抽象: 抽象--就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面.(就是把现实世界中的某一类东西,提取出来,用程序代码表示,抽象出来一般叫做类或者接口.)抽象并不打 ...

  8. r语言做绘制精美pcoa图_科学网—R语言 PCA PCoA ggplot2 - 靳泽星的博文

    这一篇是衔接上一篇的,就是要用ggplot2程序包对PCA和PCoA进行可视化.代码我直接照搬过来了,只是绘图的时候用ggplot函数.ggplot2包实现了一个在R中基于全面一致的语法创建图形时的系 ...

  9. pfamscan 的使用_科学网—[转载]InterProScan的使用教程 - 黄顺谋的博文

    InterPro是一个数据库,其提供蛋白序列的功能分析并归纳为一个个蛋白家族,同时还预测了presence of domains和important sites.为了将蛋白分类,InterPro使用先 ...

  10. mh采样算法推导_科学网—MCMC中的Metropolis Hastings抽样法 - 张金龙的博文

    Metropolis Hastings抽样法示例 jinlongzhang01@gmail.com Metropolis Hasting(下面简称MH)是蒙特卡罗马尔科夫链中一种重要的抽样方法.本文简 ...

最新文章

  1. Tomcat软件的目录结构、作用
  2. python pandas rename_使用Pandas重命名文件
  3. 前端学习(2818):小程序学习之新建页面
  4. 手机音视频应用开发(专注于Symbian、iPhone、Android等跨平台音视频应用开发方案)
  5. python3ubunton安装视频_ubuntu16.04安装python3的包报错
  6. PB中实现备份数据库/还原数据库
  7. 用truffle部署智能合约到以太坊网络(truffle+infura)的简易方法
  8. SpringCloud→分布式解决方案、包含主要工具、启动流程、web发展阶段、实现配置中心
  9. Django 创建model的一些注意事项
  10. Selenium自动化测试——计算器加法测试
  11. 实验五:py求函数驻点极大小值凹凸区间拐点
  12. @Zabbix报表系统ZbxTable
  13. matlab中ode的用法,关于matlab 的ode45用法
  14. java-php-python-ssm新生报到管理系统计算机毕业设计
  15. 如何更有效的进行面试
  16. 使用Google身份验证进行ssh二次验证
  17. 查询出部门名称、部门的员工数、部门的平均工资、部门的最低收入雇员姓名和最高收入雇员的姓名
  18. 计及需求侧响应日前、日内两阶段鲁棒备用优化(Matlab代码实现)
  19. Chrome教程(一)NetWork面板分析网络请求
  20. 推荐算法!基于隐语义模型的协同过滤推荐之用户商品推荐列表

热门文章

  1. iOS 内购详解及遇到的坑
  2. leecode第二百九十二题(Nim游戏)
  3. web.xml的简单解释以及Hello1中web.xml的简单分析
  4. Linux下计算进程的CPU占用和内存占用的编程方法[转]
  5. 走进JavaScript
  6. iOS项目开发实战——通过Http Get方式与server通信
  7. Spring IoC — 基于Java类的配置
  8. css3中的文字效果
  9. ASP.NET MVC3 中整合 NHibernate3.3、Spring.NET2.0 使用AOP执行事务处理
  10. ExtJs + Struts2 + JSON 程序总结