无法编译 algorithm2e 包手册第 4 节开头的示例代码

无法编译 algorithm2e 包手册第 4 节开头的示例代码

在尝试运行软件包手册中列出的一段代码时algorithm2e,我遇到了编译错误。您能帮我调试一下吗?

该手册可在软件包的 CTAN 页面。我使用的手册版本是当前版本,即 2017 年 7 月 18 日发布的 5.2 版。我尝试运行的代码清单是第 8 页第 4 节开头的代码清单。这是清单后描述的一些补充内容。

\documentclass{article}
\usepackage[boxed,commentsnumbered,longend]{algorithm2e}
\newcommand{\forcond}{$i=0$ \KwTo $n$}
\begin{document}
\begin{algorithm}
\SetKwFunction{FRecurs}{FnRecursive}%
\Fn(\tcc*[h]{algorithm as a recursive function}){\FRecurs{some args}}{
\KwData{Some input data\\these inputs can be displayed on several lines and one
input can be wider than line’s width.}
\KwResult{Same for output data}
\tcc{this is a comment to tell you that we will now really start code}
\If(\tcc*[h]{a simple if but with a comment on the same line}){this is true}{
we do that, else nothing\;
\tcc{we will include other if so you can see this is possible}
\eIf{we agree that}{
we do that\;
}{
else we will do a more complicated if using else if\;
\uIf{this first condition is true}{
we do that\;
}
\uElseIf{this other condition is true}{
this is done\tcc*[r]{else if}
}
\Else{
in other case, we do this\tcc*[r]{else}
}
}
}
\tcc{now loops}
\For{\forcond}{
a for loop\;
}
\While{$i<n$}{
a while loop including a repeat--until loop\;
\Repeat{this end condition}{
do this things\;
}
}
They are many other possibilities and customization possible that you have to
discover by reading the documentation.
}
\end{algorithm}
\end{document}

boxed,commentsnumbered,longend我使用了第 8 页底部所述的包选项。我定义了\forcond第 8 页所述的命令。我向算法中添加了\SetKwFunction{FRecurs}{FnRecursive}第 8 页所述的行。

根据手册,该代码应该按如下方式排版。

预期输出

但是,当我尝试使用 LuaLaTeX 编译代码时,编译失败并显示以下错误消息:

! Undefined control sequence.
l.9 \Fn
     (\tcc*[h]{algorithm as a recursive function}){\FRecurs{some args}}{
? 
! Emergency stop.
l.9 
  
End of file on the terminal!

答案1

您引用的文档(您应该在本地安装它及其 tex 源,而不仅仅是在 ctan 上)说

算法 7 展示了算法以 Python 风格语法的样子。为了实现这种显示,我们需要在算法之前进行以下更改:

\SetStartEndCondition{ }{}{}%
\SetKwProg{Fn}{def}{\string:}{}
\SetKwFunction{Range}{range}%%
\SetKw{KwTo}{in}\SetKwFor{For}{for}{\string:}{}%
\SetKwIF{If}{ElseIf}{Else}{if}{:}{elif}{else:}{}%
\SetKwFor{While}{while}{:}{fintq}%
\renewcommand{\forcond}{$i$ \KwTo\Range{$n$}}
\AlgoDontDisplayBlockMarkers\SetAlgoNoEnd\SetAlgoNoLine%

线

\SetKwProg{Fn}{def}{\string:}{}

将定义\Fn您显示为未定义。

相关内容