为算法的线条着色

为算法的线条着色

我正在为一个班级项目写报告,我需要在报告中突出显示一些算法中的几行。我设法做到了,但我不喜欢我得到的解决方案。这是一张图片(见下面的 MWE 代码)。

在此处输入图片描述

为了实现这一点,我使用了\color{red},然后放入我想要突出显示的文本,然后是\color{black}。我想知道我是否可以用红色突出显示算法的相同行,但不突出显示行号,也不突出显示注释a miracle in polynomial time。有什么解决方案吗?这个答案建议重新定义包的命令,但他们使用的包与我不一样,我想知道是否可以做得更简单。

如果有人能给我一些建议,告诉我如何做到这一点,同时algorithm2e尽可能地坚持这个方案,那就太好了。

代码

\documentclass[12pt]{article}
\pdfoutput=1
\usepackage[linesnumbered,titlenumbered,ruled,vlined,resetcount,algosection]{algorithm2e}
\usepackage[usenames,dvipsnames]{xcolor}
\usepackage{color}

\begin{document}
\title{MWE}
\maketitle
\section{Algorithm}

\begin{algorithm}
    \caption{3-SAT in polynomial time}
    \label{alg:hs}
    \DontPrintSemicolon
    \KwIn{List of clauses}
    \KwOut{The clauses are satisfiable}
    \SetKwProg{Fn}{Function}{ is}{end}
    \Fn{\textsc{IsSatisfiable}($C$)} {
    
        \color{red} %<- my best attempt
        $k\gets 0$ \;
        \For {$i = 1$ \bf{to} $|C|$}
        {
            $c_i \gets $ $i$-th clause \;
            $L \gets$ list of literals of $c_i$ \;
            $k\gets f(k, L)$ \tcp{a miracle in polynomial time}
        }
        \color{black} %<- go back to color black
        
        \If {$k$ is even} {
            \Return true
        }
        \Else {
            \Return false
        }
        
    }
\end{algorithm}

\end{document}

答案1

我从未使用过algorithm2e,但查看其文档(第 9.5.3 节),我认为最明智的做法是重新定义数字和注释的字体,以明确包含将颜色切换为的指令black

\documentclass[12pt]{article}

\usepackage[linesnumbered,titlenumbered,ruled,vlined,resetcount,algosection]{algorithm2e}
\usepackage[usenames,dvipsnames]{xcolor}
\usepackage{color}

%% These three lines  !!!
\SetNlSty{textbf}{\color{black}}{}
\newcommand*{\mycommentfont}[1]{\textcolor{black}{\ttfamily#1}}
\SetCommentSty{mycommentfont}

\begin{document}
\title{MWE}
\maketitle
\section{Algorithm}

\begin{algorithm}
    \caption{3-SAT in polynomial time}
    \label{alg:hs}
    \DontPrintSemicolon
    \KwIn{List of clauses}
    \KwOut{The clauses are satisfiable}
    \SetKwProg{Fn}{Function}{ is}{end}
    \Fn{\textsc{IsSatisfiable}($C$)} {
        \begingroup
        \color{red}
        $k\gets 0$ \;
        \For {$i = 1$ \bf{to} $|C|$}
        {
            $c_i \gets $ $i$-th clause \;
            $L \gets$ list of literals of $c_i$ \;
            $k\gets f(k, L)$ \tcp{a miracle in polynomial time}
        }
        \endgroup            
        \If {$k$ is even} {
            \Return true
        }
        \Else {
            \Return false
        }
        
    }
\end{algorithm}

\end{document}

在此处输入图片描述

的额外定义\mycommentfont是必要的,因为的字体命令需要一个带有一个参数的宏的algorithm2e单个宏名(不带)。\

相关内容