algorithm2e 包的控制序列未定义

algorithm2e 包的控制序列未定义

我在使用过程中遇到了一些主要问题和一些小问题algorithm2e

主要问题是,虽然包本身定义了一些控件,如\input\Fn等等,但是当我使用它们时,却收到一个错误,提示这些控件没有定义。

对于小问题,考虑到以下 MWE,首先,if 子句没有结尾,我想知道我应该如何修复它;其次,对于每一行注释,;在行的开头都有一个奇怪的内容:

    \documentclass{article}

\usepackage{algorithm2e}
%\usepackage[linesnumbered,lined,boxed,commentsnumbered]{algorithm2e}
\usepackage{algpseudocode}
\usepackage{pifont}
\usepackage{program}
\begin{document}
\IncMargin{1em}
\begin{algorithm}[H]

%\Input{A bitmap $Im$ of size $w\times l$}
%\Output{A partition of the bitmap}

  \uIf{domain.equals(keyword) AND id=0}{
  \tcc*[r]{occurrence at the root node (first layer)}
      setAttribute(D,PN)\; 
   }\uElseIf{domain.equals(keyword) AND $id\not=0$}{ \tcc*[r]{occurrence at the second layer}
        setAttribute(D,SL)\;
  }
  \uElseIf{path.equals(keyword) AND id=0}{ \tcc*[r]{occurrence at path of root node}
    setAttribute($P_a$, PN)\;
    }

 \caption{How to write algorithms}
\end{algorithm}
\end{document} 

答案1

在其文档, 包裹算法2e使用宏\SetKwInOut定义\Input\Output。以下示例还使用\If而不是\uIf来获取结束标记(不确定我的问题是否正确)。此外,还使用普通注释来删除分号。

\documentclass{article}
\usepackage[linesnumbered,lined,boxed,commentsnumbered]{algorithm2e}
\usepackage{algpseudocode}
\usepackage{pifont}
\usepackage{program}
\begin{document}
\IncMargin{1em}
\begin{algorithm}[H]
  \SetKwInOut{Input}{input}
  \SetKwInOut{Output}{output}

  \Input{A bitmap $Im$ of size $w\times l$}
  \Output{A partition of the bitmap}
  \BlankLine

  \uIf{domain.equals(keyword) AND id=0}{
    \tcc{occurrence at the root node (first layer)}
    setAttribute(D,PN)\;
   }\uElseIf{domain.equals(keyword) AND $id\not=0$}{
      \tcc{occurrence at the second layer}
      setAttribute(D,SL)\;
  }
  \ElseIf{path.equals(keyword) AND id=0}{
    \tcc{occurrence at path of root node}
    setAttribute($P_a$, PN)\;
    }

 \caption{How to write algorithms}
\end{algorithm}
\end{document}

结果

右对齐的注释不符合我的口味。源代码的缩进提供了结构信息,而移到右侧的注释破坏了这些信息。

示例插入\hspace{0pt plus 1filll}移动注释。

\documentclass{article}
\usepackage[linesnumbered,lined,boxed,commentsnumbered]{algorithm2e}
\usepackage{algpseudocode}
\usepackage{pifont}
\usepackage{program}
\newcommand\HFilll{\hspace{0pt plus 1filll}}
\begin{document}
\IncMargin{1em}
\begin{algorithm}[H]
  \SetKwInOut{Input}{input}
  \SetKwInOut{Output}{output}

  \Input{A bitmap $Im$ of size $w\times l$}
  \Output{A partition of the bitmap}
  \BlankLine

  \uIf{domain.equals(keyword) AND id=0}{
    \HFilll\tcc{occurrence at the root node (first layer)}
    setAttribute(D,PN)\;
   }\uElseIf{domain.equals(keyword) AND $id\not=0$}{
      \HFilll\tcc{occurrence at the second layer}
      setAttribute(D,SL)\;
  }
  \ElseIf{path.equals(keyword) AND id=0}{
    \HFilll\tcc{occurrence at path of root node}
    setAttribute($P_a$, PN)\;
    }

 \caption{How to write algorithms}
\end{algorithm}
\end{document}

结果

相关内容