latex首行不自動縮進怎么辦,latex縮進與對齊_科學網—Latex算法排版,不同行縮進不同 - 張鵬的博文

 2023-12-10 阅读 24 评论 0

摘要:想在latex中以這樣的版式描述算法:1 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx|xxxxxxxxxxxxxxxxxxxxxxx/2 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/3 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/4 ? ? xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/5 ? ? xxxxxxxxxxxxxxxxxxxxxxxxxxxx

想在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寫線性規劃

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/3/194233.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息