问题描述
- 使用 TexStudio 编辑 latex 时插入算法伪代码描述块一直报错:Missing \endcsname inserted. \While,如下图:
原因分析
- 谷歌了很多资料,该删的文件也删了,该重建的也重建了,该替换的包也都替换了,算法伪代码描述块也换了很多样式,但是一直报这个错,或者解决了一个,又出现另一个,就是无法编译成功
- 最后回过头观察 latex 文档模板,最后发现在导言区模板已经引入了 \usepackage{algorithmic} 包,这个包与添加算法伪代码所要使用的
\usepackage{algorithm}
\usepackage{algorithmicx}
\usepackage{algpseudocode} % 如果不想在算法伪代码模块中显示 end for 和 end while,则使用 %\usepackage[noend]{algpseudocode}
解决方法
- 注释掉模板预先导入的 \usepackage{algorithmic} 包
- 导入 \usepackage{algorithm}、\usepackage{algorithmicx}、\usepackage{algpseudocode} 包
- 实例代码 1:
\begin{algorithm}[t]\caption{Name of your Algrithm}\label{alg:reference label}{\bf Require:}\\ % Input\hspace*{0.05in} Input1: $X$\\\hspace*{0.05in} Input2: $Y$\\{\bf Require:}\\ % Output\hspace*{0.05in} Output1: $A$\\\hspace*{0.05in} Output2: $B$\\\hspace*{0.05in} Output2: $Z$\\\begin{algorithmic}[1] % remove [1] if you do not need row number in your algorithm\While{The algorithm has not converged}\For{$i in range(N)$}\State Sample $x_{i}$ from $X$.\State Sample $y_{i}$ from $Y$.\State $A = \sqrt{x^{2} + y^{2}}$\State $B = \sum_{1}^{N}x_{i}*y_{i}$\EndFor\State $Z = A + B$\EndWhile\end{algorithmic}
\end{algorithm}
-
实例代码1 效果
-
实例代码 2:
\begin{algorithm}[t]\caption{Name of your Algrithm}\label{alg:reference label}{\bf Require:}\\ % Input\hspace*{0.05in} Input1: $X$\\\hspace*{0.05in} Input2: $Y$\\{\bf Require:}\\ % Output\hspace*{0.05in} Output1: $A$\\\hspace*{0.05in} Output2: $B$\\\hspace*{0.05in} Output2: $Z$\\\begin{algorithmic}\While{The algorithm has not converged}\For{$i in range(N)$}\State Sample $x_{i}$ from $X$.\State Sample $y_{i}$ from $Y$.\State $A = \sqrt{x^{2} + y^{2}}$\State $B = \sum_{1}^{N}x_{i}*y_{i}$\EndFor\State $Z = A + B$\EndWhile\end{algorithmic}
\end{algorithm}
- 实例代码 2 的效果