- 我有下面的图片,我希望我的论文看起来就像那样。
- 我有下面的示例代码,但突出显示没有填满左边距,并且中间有空白。
- 我已经尝试很久但仍然失败。
- 这篇文章没有解决第 2 点如何使用 algorithm2e 以彩色方式突出显示算法的某些行?所以这不是重复的
\documentclass{article}
\usepackage[ruled]{algorithm2e} % http://www.ctan.org/pkg/algorithm2e
\usepackage{xcolor} % http://www.ctan.org/tex-archive/macros/latex/contrib/xcolor
\def\HiLi{\leavevmode\rlap{\hbox to \hsize{\color{yellow!50}\leaders\hrule height .8\baselineskip depth .5ex\hfill}}}
\begin{document}
\begin{algorithm}[h]
\caption{Evolutionary algorithm}
initialize population \;
\HiLi\For( \emph{Evolutionary loop}){$g := 1$ to $G_{max}$}
{
\HiLi do things \;
evolve population \;
}
celebrate \;
\end{algorithm}
\end{document}
代码给出了下面的图像。我怎样才能像第一张图片一样将高亮部分填充到左边距并删除高亮部分之间的空白?
答案1
我会使用 TikZ 来做到这一点。这个想法是使用 TikZ 标记要标记区域的顶部和底部,然后使用使用该fit
库的装箱宏来制作适合标记节点的节点,并自动计算宽度。
因为这使用了[remember picture]
TikZ 的功能,所以需要两次编译才能将框放在正确的位置。
\documentclass{article}
\usepackage[ruled]{algorithm2e} % http://www.ctan.org/pkg/algorithm2e
\usepackage{xcolor} % http://www.ctan.org/tex-archive/macros/latex/contrib/xcolor
\usepackage{tikz}
\usetikzlibrary{fit,calc}
%define a marking command
\newcommand*{\tikzmk}[1]{\tikz[remember picture,overlay,] \node (#1) {};\ignorespaces}
%define a boxing command, argument = colour of box
\newcommand{\boxit}[1]{\tikz[remember picture,overlay]{\node[yshift=3pt,fill=#1,opacity=.25,fit={(A)($(B)+(.95\linewidth,.8\baselineskip)$)}] {};}\ignorespaces}
%define some colours according to algorithm parts (or any other method you like)
\colorlet{mypink}{red!40}
\colorlet{myblue}{cyan!60}
\begin{document}
\begin{algorithm}[h]
\caption{Evolutionary algorithm}
initialize population \;
\tikzmk{A}\For( \emph{Evolutionary loop}){$g := 1$ to $G_{max}$}
{
do things \;
evolve population \;
}\tikzmk{B}
\boxit{mypink}
celebrate \;
\tikzmk{A}\For( \emph{Evolutionary loop}){$g := 1$ to $G_{max}$}
{
do things \;
evolve population \;
}\tikzmk{B}
\boxit{myblue}
\end{algorithm}
\end{document}