为列表内的 {} 内的所有文本着色

为列表内的 {} 内的所有文本着色

请考虑以下 MWE:

\documentclass{article}

\usepackage[T1]{fontenc}    
\usepackage[utf8]{inputenc}     

\usepackage{xcolor}
\usepackage{listings}

\lstdefinestyle{test}{%
    language={[latex]TeX},
    tabsize=2,
    breaklines,
    basicstyle=\footnotesize\ttfamily,
    texcsstyle=*\color{blue}\bfseries,
    keywordstyle=\color{red}\bfseries,
    morekeywords={environment},
    moretexcs={test},
    moredelim=**[is][\color{red}]{@}{@},
}

\lstset{style=test}

\begin{document}

\begin{lstlisting}
    \begin{environment}
        \test{foo}{bar}
    \end{environment}

    foo bar
\end{lstlisting}

\end{document}

如何自动为所有文本着色{}?我尝试将“foo”和“bar”添加到列表中morekeywords,但它们在外面也被着色了{}

输出应该看起来像

在此处输入图片描述

我不能使用

\begin{lstlisting}
    \begin{environment}
        \test{@foo@}{@bar@}
    \end{environment}

    foo bar
\end{lstlisting}

因为在实际使用中列表的内容是自动呈现的,并且这些@符号会导致编译错误。

答案1

这是强调(颜色)列表中两个分隔符之间的内容,但不强调分隔符本身

由于悬赏,我应提问者的要求写了这篇文章。所有荣誉都应归于 jubobs(和/或 David Carlisle)。


你可以这样做:

\documentclass{article}

\usepackage[T1]{fontenc}    
\usepackage[utf8]{inputenc}     

\usepackage{xcolor}
\usepackage{listings}

\def\beginlstdelim#1#2#3%
{%
    \def\endlstdelim{#2\egroup}%
    \ttfamily#1\bgroup\color{#3}\aftergroup\endlstdelim%
}

\lstdefinestyle{test}{%
    language={[latex]TeX},
    tabsize=2,
    breaklines,
    basicstyle=\footnotesize\ttfamily,
    texcsstyle=*\color{blue}\bfseries,
    keywordstyle=\color{red}\bfseries,
    moretexcs={test},
    moredelim = **[is][\beginlstdelim{\{}{\}}{red}]{\{}{\}}
}

\lstset{style=test}

\begin{document}

\begin{lstlisting}
    \begin{environment}
        \test{foo}{bar}
    \end{environment}

    foo bar
\end{lstlisting}

\end{document}

输出:

彩色输出

相关内容