我正在尝试使用 hack 来突出显示本文讨论的两个分隔符之间的代码(但不包括这两个分隔符)。问题,但我产生了重复的分隔符。
我的目标是用橙色突出显示介于by
(包括单词“by”)和(但不包括)分号之间的所有内容。因此理想情况下thus X by a,b,c;
应突出显示为thus X \textcolor{orange}{by a,b,c};
。
这是一个包含该错误的最小工作示例:
\documentclass[varwidth=6.75in]{standalone}
\usepackage{listings}
\usepackage{xcolor}
\definecolor{citeOrange}{HTML}{fb7640}
\newcommand{\mizarByStyle}[1]{\ \textcolor{citeOrange}{by} \textcolor{citeOrange}{#1};}
\lstdefinelanguage{mizar}{
morekeywords=[0]{->,(\#,\#),.=)},
moredelim=[is][\mizarByStyle]{\ by}{;}
}
\lstnewenvironment{mizar}[1][]%
{\lstset{language=mizar,
basicstyle=\ttfamily,
upquote=true}}%
{}
\begin{document}
\begin{mizar}
theorem Th3:
for f being Element of Aut G
holds f is Automorphism of G
proof
let f be Element of Aut G;
f is bijective Homomorphism of G,G by AUTGROUP:def 1;
thus thesis;
end;
\end{mizar}
\end{document}
它看起来是这样的:
附录:我怀疑发生的事情是 listings 将其视为在和thus X by a:def 3;
之间分隔的几个“标记” ,然后将 应用于每个“标记”。如果这个by
;
\mizarByStyle
是那么,有什么办法可以补救这种情况吗?
几乎可以肯定,我需要突出显示类似情况,并且、和thus X by a, b, c;
之间的空格会再次产生这个“错误” :(a
b
c
答案1
事实证明,我不是唯一遇到此问题的人,解决方案可以在另一篇帖子对于我的问题,最小的工作解决方案:
\documentclass[varwidth=6.75in]{standalone}
\usepackage{listings}
\usepackage{xcolor}
\definecolor{citeOrange}{HTML}{fb7640}
\def\beginlstdelim#1#2#3%
{%
\def\endlstdelim{#2\egroup}%
\textcolor{#3}{#1}\bgroup\color{#3}\aftergroup\endlstdelim%
}
\lstdefinelanguage{mizar}%
{
keepspaces=true,
alsoletter={\&,^,\\,\:,1234567890},
morekeywords=[0]{->,(\#,\#),.=)},
moredelim = **[is][{\beginlstdelim{\ by}{;}{citeOrange}}]{\ by}{;}
}
% everything else as before
这在空白方面存在一些问题(如另一篇文章中所讨论的)并且不像我希望的那样强大(老实说,我不明白为什么需要这样做**[is]
但必须这样做,将其更改为无星标[is]
不起作用),但这是对当前问题的“快速修复”。