想在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}{-