基于LaTeX的伪代码书写
一、相关基础知识
1)本文编写伪代码调用的是'algorithmic'+'algorithm'宏包,而Latex也存在其他的宏包,像是'algorithm2e'等宏包(更加灵活的排版方式,更多的控制选项和更加优美的输出效果,以后有机会会去介绍)。
2)一个标准的LaTex文档由如下部分组成:
1、导言区(Preamble):在'\begin{document}'命令之前的部分。导言区可以设置文档的格式和样式,以及引入其他必要的宏包和设置(document class、packages、commands等)。
2、正文(Body):在'\begin{document}'和'\end{document}'命令之间的部分。正文部分包括文档的实际内容,如段落、章节、公式、表格、图片等
3、参考文献(Bibliography):一个单独的部分,包含在文档中引用的所有来源完整引用信息。
4、附录(Appendix):额外信息的补充,像是代码、公式推导等
5、注释(Comments):对文档的说明和解释,一般不会被编译。
二、Example
1)如下给出一个简单的例子,以引出本文的重点——基于Latex的伪代码书写(仅解释伪代码相关内容,其余部分请自行查找相关资料)
\documentclass{article}
\usepackage{algorithm}
\usepackage{algorithmic}
\title{Pseudocode}
\author{Huang}
\date{\today}
\begin{document}
\maketitle
\begin{algorithm}
\caption{Example Pseudocode}
\end{algorithm}
\end{document}
可以发现这里在引言区引入宏包 algorithm 和 algorithmic ,两者用于帮助我们编写结构化和可读性更好的算法代码。
在正文部分引入本文所需要编写的伪代码部分,如下所示:

2)上文我们构造了一个algorithm块,接下来会去其中嵌入algorithmic块,实现一些变量之前的基本运算。如下所示:
\begin{algorithm}
\caption{Example Pseudocode}
\begin{algorithmic}
\STATE $x\gets0$
\end{algorithmic}
\end{algorithm}
编译之后的结果如下所示:

3)代码常见的判断结构(if-else)和循环结构(for, while)是最常见的算法逻辑,下文通过Latex实现一个简单的判断结构:
\IF{$x\leq 0$} \STATE $x\gets x+1$ \ELSIF{$ x\geq 1$} \STATE $x\gets x-1$ \ELSE \STATE $x\gets 2x$ \ENDIF
生成伪代码如下所示:

这里可以发现我们只需要'\IF'和'\ENDIF'限制判断结构的范围即可。
3)类似于if判断结构,我们可以编写相关的循环结构(for、forall等循环结构体):
\begin{algorithmic} % while循环 \WHILE{$ x\leq 0$} \STATE $x\gets x+1$ \ENDWHILE \end{algorithmic} \begin{algorithmic} % for循环 \FOR{$ x\leq 0$} \STATE $x\gets x+2$ \ENDFOR \end{algorithmic} \begin{algorithmic} % forall循环 \FORALL{$ x\leq 0$} \STATE $x\gets x+3$ \ENDFOR \end{algorithmic}
生成的伪代码如下所示:

4)算法的伪代码中通常会说明算法的输入和输出,帮助读者更好地理解代码。在 algorithmic 中,输入对应\REQUIRE,输出对应\ENSURE,但若是偏爱INPUT和OUTPUT,可以对关键字重定义:
\renewcommand{\algorithmicrequire}{\textbf{Input:}}
\renewcommand{\algorithmicensure}{\textbf{Output:}}
之后在算法段书写如下代码:
\begin{algorithmic} \ENSURE{$y$} \REQUIRE{$x$} % while循环 \WHILE{$ x\leq 0$} \STATE $y\gets x+1$ \ENDWHILE \end{algorithmic}
生成我们想要的伪代码:

至此,我们可以在Overleaf上基于Latex实现简单的伪代码编写,仍需多多练习!!!!!!!!
三、参考资料
1、https://welts.xyz/2022/01/17/pseudocode/
本文仅记录本人学习过程,如有不正之处,敬请指正!谢谢!!

浙公网安备 33010602011771号