我使用并定义了自己的编程语言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
}