无法使用算法包

无法使用算法包

我正在尝试编写一些简单的伪代码,但就是无法让它工作。这是另一篇论文中的伪代码,我想对它进行一些修改并将其放入我的论文中。

在此处输入图片描述

这是我想编写的伪代码。我尝试了algorithmicxalgorithm2epseudocode,但都无法用它们中的任何一个完成。有没有更简单的伪代码编写包?我花了一上午的时间尝试使用编写另一段伪代码algorithm2e,但花了太长时间,结果看起来仍然很糟糕。

现在我收到一个非常荒谬的错误。

    ! Argument of \algocf@If has an extra }.
    <inserted text> 
                    \par 
    l.98            \If
                 {all variables assigned}

这是我的代码(它应该与图像相同):

    \begin{algorithm}
    \begin{algorithmic}
        \Loop 
            propagate() - propagate unit clauses
            \If {not conflict} 
                \If {all variables assigned} 
                    \return SATISFIABLE
                \Else
                    decide() - pick a new variable and assign it
                \EndIf
            \Else
                analyse() - analyze comflict and add a conflict clause
                \If{top-level conflict found} 
                    \return UNSATISFIABLE
                \Else
                    backtrack() - undo assignments until conflict clause is unit
                \EndIf
            \EndIf
        \EndLoop
    \end{algorithmic}
    \caption{miniSAT\label{lss}}
    \end{algorithm}

唉,真令人沮丧,我非常讨厌乳胶,为什么没有替代品。

无论如何,如果你能帮助我,我将非常感谢,我现在真的很绝望。

答案1

您使用的是什么不太清楚;可能存在软件包冲突,语法也错误。这将产生您想要的输出:

\documentclass{article}

\usepackage{algorithm,algorithmic}

\begin{document}

\begin{algorithm}
\begin{algorithmic}
  \LOOP 
    \STATE  propagate() - propagate unit clauses
    \IF {not conflict} 
      \IF {all variables assigned} 
        \RETURN SATISFIABLE
      \ELSE
        \STATE decide() - pick a new variable and assign it
      \ENDIF
    \ELSE
      \STATE analyse() - analyze comflict and add a conflict clause
      \IF{top-level conflict found} 
        \RETURN UNSATISFIABLE
      \ELSE
        \STATE backtrack() - undo assignments until conflict clause is unit
      \ENDIF
    \ENDIF
  \ENDLOOP
\end{algorithmic}
\caption{miniSAT\label{lss}}
\end{algorithm}

\end{document}

在此处输入图片描述

答案2

代码片段类似于algpseudocode(来自algorithmicx)。我重新定义了所需的\Return命令,并且还定义了\funccall(简称函数称呼)将其参数设置为斜体。似乎每个函数调用都有一个附带的注释,我已使用以下命令进行设置\Comment

在此处输入图片描述

\documentclass{article}
\usepackage{algorithm}% http://ctan.org/pkg/algorithms
\usepackage{algpseudocode}% http://ctan.org/pkg/algorithmicx

\algrenewcommand{\Return}{\State \textbf{return}\ }
\algnewcommand{\funccall}[1]{\textit{#1}}% Function call
\begin{document}
\begin{algorithm}
  \begin{algorithmic}
    \Loop 
      \State \funccall{propagate}() \Comment{propagate unit clauses}
      \If {not conflict}
        \If {all variables assigned}
          \Return SATISFIABLE
        \Else
          \State \funccall{decide}() \Comment{pick a new variable and assign it}
        \EndIf
      \Else
        \State \funccall{analyse}() \Comment{analyze comflict and add a conflict clause}
        \If{top-level conflict found}
          \Return UNSATISFIABLE
        \Else
          \State \funccall{backtrack}() \Comment{undo assignments until conflict clause is unit}
        \EndIf
      \EndIf
    \EndLoop
  \end{algorithmic}
  \caption{miniSAT\label{lss}}
\end{algorithm}
\end{document}

对于要放在新行上的每个代码段,它必须使用某种形式的\State命令。\Loop\If\Else、 ... 都是根据 定义的\State,因此不需要明确地这样调用。但是,您的函数调用对于algorithmic来说是未知的\State,因此您需要手动插入它。

添加行号很简单,只需使用\begin{algorithmic}[1]而不是 即可\begin{algorithmic}

相关内容