第一次用latex写算法伪代码,竟然遇到挺多不是很快就能解决的问题······表示很伤神好吗,记录总结一下帮助后来者
导言区
\usepackage{algorithm}
\usepackage{algorithmicx}
\usepackage{algpseudocode} % 这个和algorithmic不兼容,用了就要报错,好多莫名其妙的错误!!!!!
\renewcommand{\algorithmicrequire}{ \textbf{Input:}} %Use Input in the format of Algorithm
\renewcommand{\algorithmicensure}{ \textbf{Output:}} %UseOutput in the format of Algorithm
亲身多次测试发现,algorithmic包和algpseudocode不兼容,网上也有人这么说,导言区同时用这俩会报错
而应该用algorithmicx和algpseudocode搭配,可以得到干净清爽的 Process exited normally,并且下面写算法时各种命令都是驼峰式大写,不是全大写(反而识别不了 unrecognized command)
但是正文写算法的地方还是用的algorithmic哦
注意$美元符号在伪代码环境里用的特别多,如果漏掉也是会报错的,还不容易检查到,毕竟latex报的错总是让人觉得异常懵逼,完全无法起到提示修改方向的作用,应该不止我一个人这么觉得吧,有时会超级抓狂
\begin{algorithm}
\caption{HHS \cite{Branch1998}}
\label{hhsa}
\begin{algorithmic}[1] %1表示每隔一行编号
\Require The original signal $x$.
\Ensure The energy-time-frequency distribution of $x$.
\Function{EMD}{$x, seg\_len$}
\State $ N \gets length(x) / seg\_len$;
\For {$i=1 \to i=N$}
\State $seg(i) \gets x(1+(i-1)*seg\_len : i*seg\_len)$;
\EndFor
\EndFunction
\end{algorithmic}
\end{algorithm}
seg_len中的下划线要用\_哦
procedure 和function
具体区别我没研究,可以看看这个网页
调用格式是一样的,都要俩花括号,第一个放name,第二个放parameters,格式不对又是一堆错
\Function{EMD}{$x, SegLen, MaxNumOfImf$}
\EndFunction
\Procedure{EMD}{$x, SegLen, MaxNumOfImf$}
\EndProcedure