lstdefinelanguage 中字符串的颜色

lstdefinelanguage 中字符串的颜色

我有一个像这样的乳胶文档,在其中我定义了自己的列表语言:

\documentclass{article}

\usepackage{listings}
\usepackage{xcolor}

\definecolor{backcolour}{rgb}{0.95,0.95,0.92}
\definecolor{keywords1}{RGB}{193,89,45}
\definecolor{keywords2}{RGB}{55,80,146}
\definecolor{string}{RGB}{72,94,70}
 
\lstdefinelanguage{Python}{
    backgroundcolor=\color{backcolour},   
    commentstyle=\color{codegreen},
    keywords=[1]{class, import},
    keywordstyle=[1]\color{keywords1},
    keywords=[2]{print},
    keywordstyle=[2]\color{keywords2},
    numberstyle=\tiny\color{codegray},
    stringstyle=\color{string}\ttfamily,
    basicstyle=\footnotesize,
    breakatwhitespace=false,         
    breaklines=true,                 
    captionpos=b,                    
    keepspaces=true,                 
    numbers=none,                    
    numbersep=5pt,                  
    showspaces=false,                
    showstringspaces=false,
    showtabs=false,                  
    tabsize=2
}


\begin{document}

\begin{lstlisting}[language=Python]
import pandas as pd
import qnorm

df = pd.DataFrame({'C1': {'A': 5, 'B': 2, 'C': 3, 'D': 4},
                   'C2': {'A': 4, 'B': 1, 'C': 4, 'D': 2},
                   'C3': {'A': 3, 'B': 4, 'C': 6, 'D': 8}})

print(qnorm.quantile_normalize(df, axis=1))

         C1        C2        C3
A  5.666667  5.166667  2.000000
B  2.000000  2.000000  3.000000
C  3.000000  5.166667  4.666667
D  4.666667  3.000000  5.666667
\end{lstlisting}
\end{document}

结果是: 在此处输入图片描述

如何确保撇号 (') 之间的文本按我定义的字符串颜色着色?我尝试添加字符串样式,但似乎撇号无法识别为字符串。其他符号,例如“

我究竟做错了什么...?

答案1

您需要指定新定义的语言中使用的字符串字符。通过添加

string = [b]{'}

添加到您的选项列表中。从listings 文档(部分4.7 语言定义):

字符串

string=[⟨b|d|m|bd|s⟩]{⟨delimiter (character)⟩}
morestring=[⟨b|d|m|bd|s⟩]{⟨delimiter⟩}
deletestring=[⟨b|d|m|bd|s⟩]{⟨delimiter⟩}

定义、添加或删除字符串分隔符列表中的分隔符。起始和结束分隔符相同,即在源代码中分隔符必须相互匹配。

可选参数是类型,它控制分隔符本身在字符串或字符文字中的表示方式:用 ackslash 转义bdoubled(或两者通过 允许bd)。或者,类型可以指一种不常见的分隔符形式:字符串分隔符(类似于s注释类型)或 matlab 样式分隔符。后者是 Ada 和 Matlab 的特殊类型,可能还有其他语言,其中字符串分隔符也用于其他目的。它等同于d,只是字符串不是以字母、右括号、右方括号或其他字符开头。

在此处输入图片描述

\documentclass{article}

\usepackage{listings}
\usepackage{xcolor}

\definecolor{backcolour}{rgb}{0.95,0.95,0.92}
\definecolor{keywords1}{RGB}{193,89,45}
\definecolor{keywords2}{RGB}{55,80,146}
\definecolor{string}{RGB}{72,94,70}
 
\lstdefinelanguage{Python}{
    backgroundcolor=\color{backcolour},   
    commentstyle=\color{codegreen},
    keywords=[1]{class, import},
    keywordstyle=[1]\color{keywords1},
    keywords=[2]{print},
    keywordstyle=[2]\color{keywords2},
    numberstyle=\tiny\color{codegray},
    string=[b]{'},
    stringstyle=\color{string}\ttfamily,
    basicstyle=\footnotesize,
    breakatwhitespace=false,         
    breaklines=true,                 
    captionpos=b,                    
    keepspaces=true,                 
    numbers=none,                    
    numbersep=5pt,                  
    showspaces=false,                
    showstringspaces=true,
    showtabs=false,                  
    tabsize=2
}


\begin{document}

\begin{lstlisting}[language=Python]
import pandas as pd
import qnorm

df = pd.DataFrame({'C1': {'A': 5, 'B': 2, 'C': 3, 'D': 4},
                   'C2': {'A': 4, 'B': 1, 'C': 4, 'D': 2},
                   'C3': {'A': 3, 'B': 4, 'C': 6, 'D': 8}})

print(qnorm.quantile_normalize(df, axis=1))

         C1        C2        C3
A  5.666667  5.166667  2.000000
B  2.000000  2.000000  3.000000
C  3.000000  5.166667  4.666667
D  4.666667  3.000000  5.666667
\end{lstlisting}
\end{document}

相关内容