列出产生双分隔符的 moredelim

列出产生双分隔符的 moredelim

我正在尝试使用 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;之间的空格会再次产生这个“错误” :(abc

答案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]不起作用),但这是对当前问题的“快速修复”。

相关内容