可以定制 lstlisting 环境吗?

可以定制 lstlisting 环境吗?

我想向我的 LaTeX 文档添加一些 Python 源代码,但我想应用一些自定义。目前,我有这样的内容:

\documentclass{article}
\usepackage[utf8]{inputenc}

\usepackage{listings}
\usepackage{color}

\definecolor{codegreen}{rgb}{0,0.6,0}
\definecolor{codegray}{rgb}{0.5,0.5,0.5}
\definecolor{codepurple}{rgb}{0.58,0,0.82}
\definecolor{backcolour}{rgb}{0.95,0.95,0.92}

\lstdefinestyle{mystyle}{
    backgroundcolor=\color{backcolour},   
    commentstyle=\color{codegreen},
    keywordstyle=\color{magenta},
    numberstyle=\tiny\color{codegray},
    stringstyle=\color{codepurple},
    basicstyle=\footnotesize,
    breakatwhitespace=false,         
    breaklines=true,                 
    captionpos=b,                    
    keepspaces=true,                 
    numbers=left,                    
    numbersep=5pt,                  
    showspaces=false,                
    showstringspaces=false,
    showtabs=false,                  
    tabsize=2
}

\lstset{style=mystyle}

\begin{document}

\begin{lstlisting}[language=Python, caption=Python example]
# Importing the sys package
import sys

def testfunc(a):
    return a + a

print "Testing:", str(testfunc(3))
\end{lstlisting}

\end{document}

关键是,我上面的自定义在某种程度上是有效的,但我想通过两种方式进一步自定义它。首先,我想将特定的颜色应用于源代码中的所有数字。例如,在上面的例子中,里面的数字 3str(testfunc(3))应该具有我设置的特定颜色(比如说蓝色)。所以我只是希望所有数字都有我设置的自定义颜色。其次,我希望我选择的某些关键字具有另一种颜色(比如说黄色)。例如,我希望testfunc和关键字为黄色。那么可以在环境中添加这些类型的自定义吗?如果可以,怎么做printstrlstlisting

答案1

以下代码对这三个关键字起了作用;据我所记得,该listings包没有为代码中的数字着色。

\documentclass[a4paper]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}

\usepackage{listings}
\usepackage{color}

\definecolor{codegreen}{rgb}{0,0.6,0}
\definecolor{codegray}{rgb}{0.5,0.5,0.5}
\definecolor{codepurple}{rgb}{0.58,0,0.82}
\definecolor{codeyellow}{rgb}{0.67,0.67,0.0}
\definecolor{backcolour}{rgb}{0.95,0.95,0.92}

\lstdefinestyle{mystyle}{
    language=Python,
    backgroundcolor=\color{backcolour},   
    commentstyle=\color{codegreen},
    keywordstyle=\color{magenta},
    emph={testfunc,print,src},
    emphstyle=\color{codeyellow},
    numberstyle=\tiny\color{codegray},
    stringstyle=\color{codepurple},
    basicstyle=\footnotesize,
    breakatwhitespace=false,         
    breaklines=true,                 
    captionpos=b,                    
    keepspaces=true,                 
    numbers=left,                    
    numbersep=5pt,                  
    showspaces=false,                
    showstringspaces=false,
    showtabs=false,                  
    tabsize=2
}

\lstset{style=mystyle}

\begin{document}

\begin{lstlisting}[style=mystyle, caption=Python example]
# Importing the sys package
import sys

def testfunc(a):
    return a + a

print "Testing:", str(testfunc(3))
\end{lstlisting}

\end{document}

答案2

我通过使用literate我使用-key(手册第 6.4 节)

literate=   {0}{{{\color{blue}0}}}1
            {1}{{{\color{blue}1}}}1
            {2}{{{\color{blue}2}}}1 
            {3}{{{\color{blue}3}}}1 
            {4}{{{\color{blue}4}}}1 
            {5}{{{\color{blue}5}}}1 
            {6}{{{\color{blue}6}}}1 
            {7}{{{\color{blue}7}}}1 
            {8}{{{\color{blue}8}}}1 
            {9}{{{\color{blue}9}}}1 
            {testfunc}{{{\color{yellow}testfunc}}}8

添加这个mystyle就可以了。

(我无法解释为什么需要这么多花括号)

注意:我想不出一种方法,让小数点也变成蓝色,同时保持正常句号不变。事实上,只有数字受到影响。

相关内容