成品
加载宏包
\documentclass[UTF8,fontset=macnew]{ctexart}
\usepackage{amsmath}
\usepackage[algoruled]{algorithm2e}
\usepackage{xcolor}
\usepackage{enumitem}
老样子,macnew只是为了texstudio看到我要的字体.
排版算法有许多的宏包.其中有用制表位的tabbing,algorithm,algorithm2e.我是看到刘海洋大师推荐的algorithm2e,读了1个晚上documentation排出来的.
当然这是我用"所见即所得的方法"排版出来的,不建议学…其实用tikz或者用box也能排版…只是强迫症有点难受…
Algorithm2e宏包
你如果在terminal(cmd)输入texdoc Algorithm的话出来的是另外的宏包我也读过.但是效果不大好…还是建议用Algorithm2e.
一开始在读的时候以为不支持中文字体.但是还是尝试了下,还是支持的…
\begin{algorithm}[H]
\SetAlgoLined
\KwData{this text}
\KwResult{how to write algorithm with \LaTeX2e }
initialization\;
\While{not at end of this document}{
read current\;
\eIf{understand}{
go to next section\;
current section becomes this one\;
}{
go back to the beginning of current section\;
}
}
\caption{How to write algorithms}
\end{algorithm}
先看看doc里面一开始写了啥.咋写的…Algorithms是一个浮动题环境.浮动题吗…麻烦…所以可选参数里面有[h]…
\caption标题…\label{吧啦啦啦}可以之后引用了.
由于我在加载宏包的时候设置了ruled所以外面会有边框.\SetAlgoLined是能够显示竖直的线…具体还有好多得读documentation…
plus: 宏包里说了,如果你在某个环境里想要换行的话一定要加;否则不行.\KwData{this text}里面放入参数.\KwInput .\KwOutput也一样…有许多关键词.
\eIf{understand}{
go to next section\;
current section becomes this one\;
}
在某一个环境里面输入的话.出来会在关键词的下面也会缩进…但是括号一定要匹配…
如何修改中文
\renewcommand{\algorithmcfname}{算法}
\SetKw{KwData}{\textcolor{red}{\textbf{变量和参数:}}}{}
注意的是你在SetKw的时候最后的{}必须要有.否则会一直出现小括号.我找了半天没找到为啥…就是试了试.读了1小时多试了doc里面的方法才出来了…
\SetKw{argname}{format}{}
同样你也可以自己设置关键词编译会自动识别.不过如果要换行的话要自己手动加…
最后的代码
\documentclass[UTF8,fontset=macnew]{ctexart}
\usepackage{amsmath}
\usepackage[algoruled]{algorithm2e}
\usepackage{xcolor}
\usepackage{enumitem}
\setlist{noitemsep}
\begin{document}
\renewcommand{\algorithmcfname}{算法}
\SetKw{KwData}{\textcolor{red}{\textbf{变量和参数:}}}{}
\begin{algorithm}[htp]
%\SetAlgoLined
%\SetAlgoVlined
\SetAlgoSkip{smallskip}
\KwData{ \\ \hspace{2.5em} \small {$\mathbf{x}(n)=m+1$ 维输入向量} \\
\hspace{5.2em} \small {$=[+1,x_1(n),x_n, \dots x_m(n)]^T$}\\
\hspace{2.7em} \small {$\mathbf{w}(n) = m+1 $ 维权值向量} \\
\hspace{5.2em} \small{$ = [b,w_1(n),w_n, \dots w_m(n)]^T$} \\
\hspace{4.5em} \small{$b =$ 偏置 }\\
\hspace{3.0em} \small {$y(n) = $ 实际响应$\left(\text{量化的} \right)$ } \\
\hspace{3.0em} \small{$d(n) = $数学期望} \\
\hspace{4.4em} \small{$\eta =$ 学习效率参数,一个比$1$小的正常数} \\
\begin{enumerate}[left= 0pt]
\item \fontsize{8pt}{1.25}初始化. 设$\mathbf{w}(0) = \mathbf{0}.$ 对时间步 $n = 1,2 \cdots$执行下列计算
\item \fontsize{8pt}{1.25}激活.在时间步$n$,通过提供连续输入向量 $\mathbf{x}(n)$ 和期望响应 $d(n)$ 来激活感知器
\item {计算实际响应.计算感知器的实际响应:
\vspace{-1em}
\begin{center}
$y(n) = sgn[ \mathbf{w}^T(n) \mathbf{x}(n) ] $
\end{center}
\vspace{-1em}这里sgn$\left(·\right)$ 是符号函数 }
\item {权值向量的自适应.更新感知器的权值向量:
\vspace{-0.5em}
\begin{center}
$ \mathbf{w}(n+1) = \mathbf{w}(n) + \eta[d(n) - y(n)] \mathbf{x}(n)$
\end{center}
\vspace{-1em}这里
\[ d(n) = \begin{cases}
+1 & \text{若} \mathbf{x}(n) \text{属于类别} \psi_1\\
-1 & \text{若} \mathbf{x}(n) \text{属于类别} \psi_2
\end{cases}
\]
\item 继续.时间步$n$增加1,返回第$2$步
}
\end{enumerate}
}
\caption{感知器收敛算法概述}
\end{algorithm}
\end{document}
这里面我设置了enumerate环境的间距,很多换行也是手动的.我还得多学习学习…大佬的建议是把公式排外面,但是我是所见即所得…其实是被诟病的 …但是只是看到华章<<神经网络和机器学习>>里面的算法描述很想排排看.
结语
Still on the way! 每周六尽量从考研复习中抽出点时间写写python和LaTeX.