\EndIf 和 \EndFor 的问题

\EndIf 和 \EndFor 的问题

我正在使用 algpseudocode 包,我想编写一个伪代码。这是我的代码

\documentclass[conference]{IEEEtran}

\usepackage[spanish, es-tabla]{babel}
\usepackage{graphicx, times, amsmath, colortbl, psfrag}
\usepackage[ruled, vlined, english, boxed, linesnumbered, lined]{algorithm2e}
\usepackage{algpseudocode}
\usepackage{multirow}
\usepackage{amsfonts}
\usepackage{amsmath}
\usepackage{float}

\begin{document}
...
\begin{algorithm}
    \caption{Buscar elemento en una lista}
    \KwData{$lista[1,...,x_n]$: lista en la que se va a buscar, $elem$: elemento que se va a buscar}
    \KwResult{$encontrado$: booleano que indica si se encontr\'o el elemento}
    \begin{algorithmic}[1]
        \Procedure{Buscar}{$lista$, $elem$}
            \State $encontrado \gets False$
            \For{i}{1}{n}
                \If{$lista[i]=elem$}
                    \State $encontrado \gets True$
                \EndIf
            \EndFor
            \Return $encontrado$
        \EndProcedure
    \end{algorithmic}
\end{algorithm}
...
\end{document}

但是当我尝试编译它时出现以下错误

! Missing number, treated as zero.
<to be read again> 
               \ALG@b@2@EndIf@0 
l.113           \EndIf
?

! Missing number, treated as zero.
<to be read again> 
               \ALG@b@2@EndFor@0 
l.114           \EndFor
?

有谁知道我该如何编译它?

谢谢回答。

答案1

您正在使用包algorithm2e和中不兼容的命令algpseudocode;您只能使用algpseudocode并将\KwData替换\KwResult\Require\Ensure

\documentclass[conference]{IEEEtran}
\usepackage[spanish, es-tabla]{babel}
\usepackage{amsmath}
\usepackage{algorithm} 
\usepackage{algpseudocode}  


\begin{document}

\begin{algorithm}
    \caption{Buscar elemento en una lista}
    \begin{algorithmic}[1]
\Require $lista[1,...,x_n]$: lista en la que se va a buscar, $elem$: elemento que se va a buscar
\Ensure $encontrado$: booleano que indica si se encontr\'o el elemento
        \Procedure{Buscar}{$lista$, $elem$}
            \State $encontrado \gets False$
            \For{i}{1}{n}
                \If{$lista[i]=elem$}
                    \State $encontrado \gets True$
                \EndIf
            \EndFor
            \Return $encontrado$
        \EndProcedure
    \end{algorithmic}
\end{algorithm}

\end{document}

在此处输入图片描述

然而,请注意IEEEtran HowTo文件建议不是algorithm从包中使用algorithm

B.算法

IEEE 出版物使用figure环境来包含不属于正文流的算法。Peter Williams 和 Rogerio Brito 的algorithmic.sty软件包 [24] 或 Szász János 的 algorithmicx.sty软件包 [25](后者的设计比前者更具可定制性)可能有助于生成类似算法的结构(尽管作者当然可以自由使用他们在这方面最熟悉的任何 LaTeX 命令)。但是,不是使用(也是由 Williams 和 Brito 编写的)或(由 Christophe Fiorio 编写的)algorithm的 浮动环境,因为 IEEE 使用的唯一浮动结构是图形和表格。此外,IEEEtran 不会控制由或 浮动环境生成的(非 IEEE)标题样式。algorithm.styalgorithm2e.styalgorithm.styalgorithm2e.sty

在这种情况下,按照课程的建议,您可以将算法封闭在figure环境中:

\documentclass[conference]{IEEEtran}
\usepackage[spanish, es-tabla]{babel}
\usepackage{amsmath}
\usepackage{algpseudocode}  

\begin{document}

\begin{figure}
    \caption{Pseudocódigo para el algoritmo que busca un elemento en una lista}
    \begin{algorithmic}[1]
\Require $lista[1,...,x_n]$: lista en la que se va a buscar, $elem$: elemento que se va a buscar
\Ensure $encontrado$: booleano que indica si se encontr\'o el elemento
        \Procedure{Buscar}{$lista$, $elem$}
            \State $encontrado \gets False$
            \For{i}{1}{n}
                \If{$lista[i]=elem$}
                    \State $encontrado \gets True$
                \EndIf
            \EndFor
            \Return $encontrado$
        \EndProcedure
    \end{algorithmic}
\end{figure}

\end{document}

在此处输入图片描述

相关内容