作者:MYJIE2502897603 | 来源:互联网 | 2024-11-15 19:03
本文描述了在使用TexStudio编辑LaTeX时插入算法伪代码块时遇到的“Missing\endcsnameinserted.\While”错误,并提供了详细的解决方案。
问题描述
- 在使用 TexStudio 编辑 LaTeX 时,插入算法伪代码块时经常遇到“Missing \endcsname inserted. \While”错误,如下图所示:
原因分析
- 经过多次尝试,包括删除相关文件、重建项目和替换包等操作,但问题依然存在。
- 最终发现,问题出在文档模板的导言区已经引入了 \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 Algorithm}
\label{alg:reference_label}
{\bf Require:} % 输入
\hspace*{0.05in} Input1: $X$
\hspace*{0.05in} Input2: $Y$
{\bf Ensure:} % 输出
\hspace*{0.05in} Output1: $A$
\hspace*{0.05in} Output2: $B$
\hspace*{0.05in} Output3: $Z$
\begin{algorithmic}[1] % 去掉 [1] 如果不需要行号
\While{算法未收敛}
\For{$i \in \text{range}(N)$}
\State 从 $X$ 中采样 $x_{i}$
\State 从 $Y$ 中采样 $y_{i}$
\State $A = \sqrt{x^2 + y^2}$
\State $B = \sum_{1}^{N} x_{i} \cdot y_{i}$
\EndFor
\State $Z = A + B$
\EndWhile
\end{algorithmic}
\end{algorithm}
- 示例代码 1 的效果:
- 示例代码 2:
\begin{algorithm}[t]
\caption{Name of your Algorithm}
\label{alg:reference_label}
{\bf Require:} % 输入
\hspace*{0.05in} Input1: $X$
\hspace*{0.05in} Input2: $Y$
{\bf Ensure:} % 输出
\hspace*{0.05in} Output1: $A$
\hspace*{0.05in} Output2: $B$
\hspace*{0.05in} Output3: $Z$
\begin{algorithmic}
\While{算法未收敛}
\For{$i \in \text{range}(N)$}
\State 从 $X$ 中采样 $x_{i}$
\State 从 $Y$ 中采样 $y_{i}$
\State $A = \sqrt{x^2 + y^2}$
\State $B = \sum_{1}^{N} x_{i} \cdot y_{i}$
\EndFor
\State $Z = A + B$
\EndWhile
\end{algorithmic}
\end{algorithm}
- 示例代码 2 的效果: