不要在评论中应用文学选项

不要在评论中应用文学选项

我使用并定义了自己的编程语言listings,为此,我必须literate在定义中大量使用该选项。例如,为了使括号变粗并变绿,我这样做了:

\definecolor{darkgreen}{rgb}{0, 0.65, 0.2}
\lstdefinelanguage{lang}{
  comment=[l]{\#},
  literate=
    {(}{{{\textbf{\color{darkgreen}(}}}}1
    {)}{{{\textbf{\color{darkgreen})}}}}1
}

literate它工作正常。但是,我希望在选项中定义替换项不是应用于注释中。例如:

(a b c)   # These parentheses should be green
# (a b c) # These shouldn't

这可能吗?

答案1

这不是一个正确的解决方法,但您可以在特定情况下通过退出列表环境来解决该问题。

\lstset{
  escapeinside={(*@}{@*)},
}

% ...

\begin{lstlisting}[language=lang]
    (a b c)
    # (*@{\color{black} (}@*)a b c(*@{\color{black} )}@*)
\end{lstlisting}

(您可能需要将“黑色”更改为与评论中使用的相同颜色。)

答案2

添加星号字符应该会有所帮助。忽略注释和字符串。

\definecolor{darkgreen}{rgb}{0, 0.65, 0.2}
\lstdefinelanguage{lang}{
    comment=[l]{\#},
    literate=
    *{(}{{{\textbf{\color{darkgreen}(}}}}1
    {)}{{{\textbf{\color{darkgreen})}}}}1
}

在此处找到:如何将星号 (*) 应用于列表环境中的少数识字者?

相关内容