我在使用过程中遇到了一些主要问题和一些小问题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}