为列表创建“正则表达式”语言

为列表创建“正则表达式”语言

一位同事目前正在撰写一篇长篇文档,重点介绍正则表达式。我们希望能够将正则表达式格式化为列表语言,并带有语法突出显示等功能。

主要的困难在于,守则中需要强调的要素是“特别的“ 等字符? + { } ( ) ^ [ ]

我尝试过以下定义:

\documentclass[12pt]{article}

\usepackage{listings}

\lstdefinelanguage{regex}{
  commentstyle=\color{gray},
  keywords={},
  otherkeywords={^, \{, \}, ?, +},
  alsoletter={},
  basicstyle=\ttfamily,
  keywordstyle=\bfseries\color{green},
  breakatwhitespace=false,
  breaklines=true,
  captionpos=b,
  showspaces=false,
  showstringspaces=true,
  literate=%
  *{0}{{{\color{red}0}}}1
  {1}{{{\color{red}1}}}1
  {2}{{{\color{red}2}}}1
  {3}{{{\color{red}3}}}1
  {4}{{{\color{red}4}}}1
  {5}{{{\color{red}5}}}1
  {6}{{{\color{red}6}}}1
  {7}{{{\color{red}7}}}1
  {8}{{{\color{red}8}}}1
  {9}{{{\color{red}9}}}1
  {(}{{{\bfseries\color{blue}(}}}1
  {)}{{{\bfseries\color{blue}\)}}}1
}

\begin{document}

\begin{lstlisting}[language=regex]
  ((a+b){4,5})*c? + [^ab{?]{3}
\end{lstlisting}

\end{document}

这看起来有点奇怪,但几乎可以正常工作。我有两个主要问题:

  1. 只有开头的圆括号有颜色,结尾的圆括号没有颜色,我该如何解决这个问题?我尝试将括号设置为关键字,但没有成功。
  2. 是否可以使这个定义更加符合/优化 $\LaTeX$ 标准?

答案1

由于我无法使用找到该问题的答案listings,因此我决定尝试一下minted,通过为正则表达式创建自定义词法分析器,这似乎是最好的解决方案。

词法分析器目前在 PyPi 上不可用,并且还不完善(但欢迎提出任何建议)。您可以从以下位置克隆 repo这里。可以使用经典方式进行安装pip install .,然后词法分析器在minted和中均可用Pygments

相关内容