如何在列表中突出显示关键字前缀?

如何在列表中突出显示关键字前缀?

好吧,这就是我每次尝试排版源代码时都会遇到的问题。到目前为止,我还没有在网上找到有人问同样的问题。

我想添加一个keywordsprefix,以便所有以 a 开头的词&都会突出显示为关键字。以下是说明我的问题的 MWE

\documentclass{article}
\usepackage{listings, xcolor}

\begin{document}

\definecolor{lispgreen}{RGB}{154, 228, 151}
\definecolor{lightgray}{gray}{0.97}
\definecolor{violet}{rgb}{0.8, 0, 0.7}

\lstset{language=Lisp,
        basicstyle=\ttfamily\small,
        numbers=left,
        numberstyle=\tiny,
        keywordsprefix=&,
        keywordstyle=\color{lispgreen!70!black},
        stringstyle=\color{violet},
        showstringspaces=false,
        backgroundcolor=\color{lightgray},
        frame=single}

\begin{lstlisting}
(defmacro simple-incf (var &optional (amount 1)) 
    (list setq var (list + var amount)))
\end{lstlisting}

\end{document}

现在,在类似这样的声明中&optional,一切除了“&”符号被高亮显示,这对我来说看起来非常奇怪。也许其他人使用其他编辑器或设置,但默认情况下,我的 vim 也会高亮显示关键字前缀本身,所以这就是我每天看到的情况。

我现在的问题是,我是否可以以某种方式告诉listings要么扩展突出显示以包括前缀,要么只是粗暴地使一个字符&在所有地方突出显示(在这种情况下也可以解决问题)?

答案1

如果你也想突出显示关键字前缀,则必须将类别从其他参见表2:上市文件标准特征表。

为了实现这一点,您可以使用以下选项alsoletter

\documentclass{article}
\usepackage{listings, xcolor}

\begin{document}

\definecolor{lispgreen}{RGB}{154, 228, 151}
\definecolor{lightgray}{gray}{0.97}
\definecolor{violet}{rgb}{0.8, 0, 0.7}

\lstset{language=Lisp,
        basicstyle=\ttfamily\small,
        numbers=left,
        numberstyle=\tiny,
        keywordsprefix=\&,alsoletter=\&,% 
        keywordstyle=\color{lispgreen!70!black},
        stringstyle=\color{violet},
        showstringspaces=false,
        backgroundcolor=\color{lightgray},
        frame=single}

\begin{lstlisting}
(defmacro simple-incf (var &optional (amount 1)) 
    (list setq var (list + var amount)))
\end{lstlisting}

\end{document}

在此处输入图片描述

相关内容