问题描述
- 使用 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 的效果