![可以定制 lstlisting 环境吗?](https://linux22.com/image/373146/%E5%8F%AF%E4%BB%A5%E5%AE%9A%E5%88%B6%20lstlisting%20%E7%8E%AF%E5%A2%83%E5%90%97%EF%BC%9F.png)
我想向我的 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
和关键字为黄色。那么可以在环境中添加这些类型的自定义吗?如果可以,怎么做print
?str
lstlisting
答案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
就可以了。
(我无法解释为什么需要这么多花括号)
注意:我想不出一种方法,让小数点也变成蓝色,同时保持正常句号不变。事实上,只有数字受到影响。