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

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

我想通过列表排版一些 LaTeX 源代码。我试过这个:

\documentclass{article}
\usepackage{listings}
\usepackage{xcolor}
\lstset{
    delim = [s][\ttfamily\color{orange}]{$}{$}
}
\begin{document}
\begin{lstlisting}
\documentclass{article}
\usepackage{amsmath}
\begin{document}
$E = mc^2$
\end{document}
\end{lstlisting}
\end{document}

在此处输入图片描述

公式变成橙色。但是,两个美元符号也以橙色突出显示。如果我只希望两个美元符号中的内容变成橙色,我该怎么办?

答案1

以下方法直接改编自 David Carlisle 对代码片段中占位符的可维护排版

在此处输入图片描述

\documentclass{article}

\usepackage[usenames,dvipsnames]{xcolor}
\usepackage{listings}


\def\beginlstdelim#1#2#3%
{%
    \def\endlstdelim{#2\egroup}%
    \ttfamily#1\bgroup\color{#3}\aftergroup\endlstdelim%
}
\lstset
{%
    moredelim = **[is][\beginlstdelim{\$}{\$}{orange}]{\$}{\$},
    moredelim = **[is][\beginlstdelim{\{}{\}}{ForestGreen}]{\{}{\}},
    moredelim = **[is][\beginlstdelim{[}{]}{red}]{[}{]},
}

\begin{document}
\begin{lstlisting}
\documentclass{article}
\usepackage{amsmath}
\begin{document}
$E = mc^2$
{E = mc^2}
[E = mc^2]
\end{document}
\end{lstlisting}
\end{document}

相关内容