我正在用 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
比例字体的列表,因为这会使标识符具有其自然宽度,从而防止出现不良的字内间距。
上述设置应用于您的示例会导致: