我正在尝试编写一些简单的伪代码,但就是无法让它工作。这是另一篇论文中的伪代码,我想对它进行一些修改并将其放入我的论文中。
这是我想编写的伪代码。我尝试了algorithmicx
,algorithm2e
和pseudocode
,但都无法用它们中的任何一个完成。有没有更简单的伪代码编写包?我花了一上午的时间尝试使用编写另一段伪代码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}
。