列表中的正则表达式

列表中的正则表达式

我正在寻找一种可能的方法,来为数据着色。如果文本从 XYZ 行开始,从该点到下一个空白行,文本应该设置为定义的颜色。使用注释功能,如

comment=[s]{^XYZ}{

}

这不可能。

comment=[s]{XYZ}{</end>}

可以,但不能满足我的需求。至少,XYZ 也可以出现在普通文本中,但只有当一行以它开头时,文本块才应该是彩色的。有没有带列表的解决方案?

以下是一个例子:

\documentclass{report}
\usepackage{listings,xcolor}
\lstdefinelanguage{text}{}
\lstnewenvironment{mylang}{\lstset{language=text,
    comment=[s]{XYZ}{</end>},%
    commentstyle=\color{green},%
    basicstyle=\footnotesize\ttfamily,%
    showstringspaces=false,%
    showspaces=false,%
  }}{}

\begin{document}
\begin{mylang}
Only a test, this is not a comment
XYZ this should colored as a comment
and this line too

this is not a command, because only lines starting with XYZ
are comments </end>

This is not a comment, too
\end{mylang}
\end{document}

以下是一个例子:

\documentclass{report}
\usepackage{listings,xcolor}
\lstdefinelanguage{text}{}
\lstnewenvironment{mylang}{\lstset{language=text,
    comment=[s]{XYZ}{</end>},%
    commentstyle=\color{green},%
    basicstyle=\footnotesize\ttfamily,%
    showstringspaces=false,%
    showspaces=false,%
  }}{}

\begin{document}
\begin{mylang}
Only a test, this is not a comment
XYZ this should colored as a comment
and this line too

this is not a command, because only lines starting with XYZ
are comments </end>

This is not a comment, too
\end{mylang}
\end{document}

答案1

您必须将\catcode换行符更改为其他在定义环境之前。之后,您可能想将旧的含义改回来:)下面的代码可以解决问题。它看起来很丑陋,因为所有内容都在一行上,但必须如此,因为这里的换行符不是换行符!顺便说一句,如果您愿意,您可以将^^Ms 替换为实际的换行符。

{\catcode`\^^M=12 \def\marshal{\lstnewenvironment{mylang}{\lstset{language=text,comment=[s]{^^MXYZ}{^^M^^M},commentstyle=\color{green},basicstyle=\footnotesize\ttfamily,showstringspaces=false,showspaces=false,}}{}}\expandafter}\marshal

相关内容