如何在算法中突出显示我的代码部分?

如何在算法中突出显示我的代码部分?

在此处输入图片描述

\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}

在此处输入图片描述

相关内容