使用 listing 包对数字文字进行语法高亮

使用 listing 包对数字文字进行语法高亮

我正在处理一个包含大量 Python 代码片段的文档,其中许多代码片段都包含数字文字。例如:

var_a = 3
var_b = 20000
var_c = 1.75e12
var_d = 0.1415

在本文档中很常见。请注意,StackExchange 的语法突出显示将数值呈现为橙色。我试图listings重现这种行为。我有一个样式声明,如下所示:

\lstdefinestyle{mystyle}{
    language=python,
    alsoletter={1234567890},
    emph={1,2,3,4,5,6,7,8,9,0},
    emphstyle=\color{orange}
}

这似乎几乎可以正常工作。我正确地将个位数以橙色突出显示,但多位数则不能(当然浮点数或科学计数法中的数字也不能)。因此,在上面的示例代码片段中,只有第一行可以正确突出显示。

是否有可能listings以更符合预期的方式突出显示数字?如果浮点数和科学计数法不可用,那么如果可以让它仅处理多位整数,我会很高兴。

答案1

试试这个代码。这是一个非常简单的解决方案。请参阅评论中提到的链接,以及更改数字和特殊单词的颜色以获得更全面的解决方案。

b

\documentclass{article}

\usepackage{listings}
\usepackage{xcolor} 

\renewcommand{\lstlistingname}{Phyton code}

\lstdefinestyle{mystyle}{
    language=Python,            
    captionpos=b,             
}   

\lstset{style=mystyle}

\newcommand\digitstyle{\textcolor{orange}}
    {0}{{{\digitstyle0}}}1
    {1}{{{\digitstyle1}}}1
    {2}{{{\digitstyle2}}}1
    {3}{{{\digitstyle3}}}1
    {4}{{{\digitstyle4}}}1
    {5}{{{\digitstyle5}}}1
    {6}{{{\digitstyle6}}}1
    {7}{{{\digitstyle7}}}1
    {8}{{{\digitstyle8}}}1
    {9}{{{\digitstyle9}}}1
    {.}{{{\digitstyle.}}}1
}


\begin{document}
    
    \begin{lstlisting}[language=Python, caption=Highlighting  numeric literals.]    
        var_a = 3
        var_b = 20000
        var_c = 1.75e12
        var_d = 0.1415      
    \end{lstlisting}    

\end{document}

相关内容