LaTeX记录

在LaTeX中使用算法伪代码

引入宏包

1
2
\usepackage{algorithm}
\usepackage{algorithmic}

创建伪代码环境

1
2
3
\begin{algorithm}[htbp]
\caption{Example Pseudocode} % 可替换为中文
\end{algorithm}

创建伪代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
\begin{algorithm}[htbp]
\caption{Example Pseudocode} % 可替换为中文
\begin{algorithmic}[1] % 这里的[1]代表显示每行的行号,若改为[2],则代表每2行显示一次行号
\STATE $x\gets0$

% if语句
\IF {$x\leq 0$}
\STATE $x\gets x+1$
\ELSIF{$x\geq1$}
\STATE $x\gets x-1$
\ELSE
\STATE $x\gets 2x$
\ENDIF

% for语句
\FOR {$x = 0, 1, ..., 10$}
\STATE $x\gets x+1$
\ENDFOR
\end{algorithmic}
\end{algorithm}

添加输入输出(可选)

首先重定义关键字

1
2
3
\floatname{algorithm}{{Algorithm}} % 可将'Algorithm'修改为'算法'
\renewcommand{\algorithmicrequire}{\textbf{Input:}} % 可将'Input'修改为'输入'
\renewcommand{\algorithmicensure}{\textbf{Output:}} % 可将'Output'修改为'输出'

之后在代码环境中添加相应语句即可,即

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
\begin{algorithm}[htbp]
\caption{Example Pseudocode} % 可替换为中文
\begin{algorithmic}[1] % 这里的[1]代表显示每行的行号,若改为[2],则代表每2行显示一次行号
\REQUIRE{$y$} % 输入
\ENSURE{$x$} % 输出
\STATE $x\gets0$

% if语句
\IF {$x\leq 0$}
\STATE $x\gets x+1$
\ELSIF{$x\geq1$}
\STATE $x\gets x-1$
\ELSE
\STATE $x\gets 2x$
\ENDIF

% for语句
\FOR {$x = 0, 1, ..., 10$}
\STATE $x\gets x+1$
\ENDFOR
\end{algorithmic}
\end{algorithm}

伪代码跨页

当伪代码长度过长时,需要跨页显示,解决方法如下 1. 在usepackage的地方粘贴如下代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
\makeatletter
\newenvironment{breakablealgorithm}
{% \begin{breakablealgorithm}
\begin{center}
\refstepcounter{algorithm}% New algorithm
\hrule height.8pt depth0pt \kern2pt% \@fs@pre for \@fs@ruled
\renewcommand{\caption}[2][\relax]{% Make a new \caption
{\raggedright\textbf{\fname@algorithm~\thealgorithm} ##2\par}%'\fname@algorithm'可替换为'算法',同时可删除'\floatname{algorithm}{{Algorithm}}'语句
\ifx\relax##1\relax % #1 is \relax
\addcontentsline{loa}{algorithm}{\protect\numberline{\thealgorithm}##2}%
\else % #1 is not \relax
\addcontentsline{loa}{algorithm}{\protect\numberline{\thealgorithm}##1}%
\fi
\kern2pt\hrule\kern2pt
}
}{% \end{breakablealgorithm}
\kern2pt\hrule\relax% \@fs@post for \@fs@ruled
\end{center}
}
\makeatother
2. 确保导入了以下宏包
1
2
3
\usepackage{algorithm}
\usepackage{algorithmic} % \usepackage{algorithmicx}
\usepackage{algpseudocode}
3. 将\begin{algorithm}\end{algorithm}替换成\begin{breakablealgorithm}\end{breakablealgorithm}即可。

注意:在实际使用时,可能会出现与正文间距过近的情况,因而可能需要在\begin{breakablealgorithm}前和\end{breakablealgorithm}后添加部分空行,以保证和前后文的间距。

参考文献

  1. LaTeX算法流程中英文伪代码
  2. 基于LaTeX的伪代码书写
  3. LaTeX伪代码跨页展示
  4. LaTeX伪代码跨页展示2