我正在寻找一种可能的方法,来为数据着色。如果文本从 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
换行符更改为其他在定义环境之前。之后,您可能想将旧的含义改回来:)下面的代码可以解决问题。它看起来很丑陋,因为所有内容都在一行上,但必须如此,因为这里的换行符不是换行符!顺便说一句,如果您愿意,您可以将^^M
s 替换为实际的换行符。
{\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