是否可以使用“listings”包中的“literate”替换带有空格的文本?

是否可以使用“listings”包中的“literate”替换带有空格的文本?

请考虑这个MWE:

\documentclass{article}

\usepackage{listings}
\usepackage{textcomp}
\usepackage{xcolor}

\lstset{
    columns=flexible,
    literate=
      {Public Class}{{Public Class\color{red}}}{12}
      {.Object}{{.\color{red}Object\color{black}}}{6}
}

\begin{document}

\begin{lstlisting}
Public Class Example

.Object = A
\end{lstlisting}

\end{document}

MWE 输出

我想要Example红色的,但我做不到。

我想

{Public Class}{{Public Class\color{red}}}{12}

将填充任意字符序列 Public Class, 喜欢

{.Object}{{.\color{red}Object}}{6}

在此处输入图片描述

(请注意,我删除了\color{black}= A用红色填充。)

重要的 Example可以改变,即红色应该适用于任何字符序列同一条线Public Class。下一行将删除此效果。

编辑哦,我意识到了空格{Public Class}是个问题。不过我会搜索一下这是否重复。

编辑2我找不到重复的。我还编辑了这个问题,因为我忘了添加columns=flexible,这让事情变得有点困难,因为@Robert 指出这样做{Public\ Class}可以解决问题,但添加columns=flexible不再起作用。

答案1

除了literate密钥之外,您还可以使用moredelim(基于这个技巧):

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

\lstset{
    columns=flexible,
    moredelim=**[il][\PublicClass]{Public\ Class},
}
\newcommand\PublicClass{Public Class\color{red}}

\begin{document}
\begin{lstlisting}
Public Class Example
\end{lstlisting}
\end{document}

相关内容