请考虑以下 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}
输出: