一位同事目前正在撰写一篇长篇文档,重点介绍正则表达式。我们希望能够将正则表达式格式化为列表语言,并带有语法突出显示等功能。
主要的困难在于,守则中需要强调的要素是“特别的“ 等字符? + { } ( ) ^ [ ]
。
我尝试过以下定义:
\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}
这看起来有点奇怪,但几乎可以正常工作。我有两个主要问题:
- 只有开头的圆括号有颜色,结尾的圆括号没有颜色,我该如何解决这个问题?我尝试将括号设置为关键字,但没有成功。
- 是否可以使这个定义更加符合/优化 $\LaTeX$ 标准?
答案1
由于我无法使用找到该问题的答案listings
,因此我决定尝试一下minted
,通过为正则表达式创建自定义词法分析器,这似乎是最好的解决方案。
词法分析器目前在 PyPi 上不可用,并且还不完善(但欢迎提出任何建议)。您可以从以下位置克隆 repo这里。可以使用经典方式进行安装pip install .
,然后词法分析器在minted
和中均可用Pygments
。