突出显示列表算法中的命令

突出显示列表算法中的命令

我正在用 lstlisting 编写一个算法

这是输出

在此处输入图片描述

代码如下:

\begin{figure}
\begin{lstlisting}[mathescape=true]
INPUT: Insieme $C$ di cubi che coprono una funzione $f$
OUTPUT: Insieme $D$ di cubi disgiunti che coprono $f$

$D = \emptyset$
while($C \neq \emptyset$):
    BUILD-SOP($C$, $P$) # crea SOP e la inserisce in $P$
    $A\ = \{d\in P\ |\ \forall c \in P \backslash \{d\} : d \cap c = \emptyset \}$
    $D = D \cup A$
    $P = P \backslash A$
    WEIGHT($P$)
    SORP($P$)
    $B = \emptyset$
    while($P\neq \emptyset$):
        $p = P[0]$
        $P = P \backslash \{p\}$
        $D = D \cup \{p\}$
        forall $q \in P\ :\ p \cap q = \emptyset$:
            $P = P \backslash \{q\}$
            BREAK($q$,$p$,$Q$)
            OPT($q$,$Q$,$P$,$B$)
        forall $r \in B\ :\ p \cap r \neq \emptyset$:
            $B = B \backslash \{r\}$
            BREAK($r$,$p$,$Q$)
            $B = B \cup Q$
    $C = B$

\end{lstlisting}
\caption{Algoritmo DSOP}
\end{figure}

我怎样才能使“while”、“if”和“forall”等命令以粗体显示,并以大写字母显示函数,以区别于其余代码?

答案1

正如评论中提到的,对于排版伪代码或算法,有更好的选择。如果您仍然想坚持使用该listings软件包,则可以使用以下选项进行格式化:

\lstset{
    alsoletter={-},
    keywords=[1]{while,if,forall},
    keywords=[2]{BUILD-SOP,WEIGHT,SORP,BREAK, OPT},
    keywordstyle=[1]{\bfseries},
    keywordstyle=[2]{\slshape},
    columns=flexible
}

alsoletter={-}使listings连字符被视为字母,这样您就可以更轻松地在关键字/标识符中使用它。然后,该keywords选项定义一组特殊关键字(每组用方括号中的数字表示),可以通过该keywordstyle选项为其分配不同的样式。可以有更多花哨的样式;listings例如,允许为定义的关键字之外的所有单词/标识符提供单独的样式。

最后,我建议使用columns=flexible比例字体的列表,因为这会使标识符具有其自然宽度,从而防止出现不良的字内间距。

上述设置应用于您的示例会导致:

在此处输入图片描述

相关内容