# a good python ambient for my latex code

I am looking for a latex preamble in order to have a good python script. Here I found this

\documentclass[a4paper,12pt]{article}
\usepackage[utf8]{inputenc}

% Default fixed font does not support bold face
\DeclareFixedFont{\ttb}{T1}{txtt}{bx}{n}{12} % for bold
\DeclareFixedFont{\ttm}{T1}{txtt}{m}{n}{12}  % for normal

% Custom colors
\usepackage{color}
\definecolor{deepblue}{rgb}{0,0,0.5}
\definecolor{deepred}{rgb}{0.6,0,0}
\definecolor{deepgreen}{rgb}{0,0.5,0}

\usepackage{listings}

% Python style for highlighting
\newcommand\pythonstyle{\lstset{
language=Python,
basicstyle=\ttm,
keywordstyle=\ttb\color{deepblue},
emph={MyClass,__init__},          % Custom highlighting
emphstyle=\ttb\color{deepred},    % Custom highlighting style
stringstyle=\color{deepgreen},
frame=tb,                         % Any extra options here
showstringspaces=false
}}

% Python environment


which looks great but I find noway to apply it into my latex code, phereaps I'm lost into the complexity of it and what I am looking for is just a sample code such as

\begin{document}

here some python codes

\begin{listings}
\pythonstyle
import numpy as np
class __init__(self, a, b):
self.a = a
self.b = b
\end{listings}
\end{document}


or the like, in order to have a proper python ambient. Could you help me, please?

• Have a look at minted package Sep 6, 2022 at 19:04
• I tried one of that codes. The compiler says: "you must invoke latex with the shell escape flag..." Still issues Sep 6, 2022 at 19:11
• yes, you should use pdflatex -shell-escape FILENAME Sep 6, 2022 at 19:12
• I'm sorry, I still do not understand. Why and how should I do that? Sep 6, 2022 at 19:24
• @StefanoFedele it depends on how you are compiling your document. I use arara like this: arara: pdflatex: {options: -shell-escape} when I need to shell escape. Minted and other packages/programmes (like makeindex I believe) require -shell-escape to run. Look at arara or latexmk depending upon what you like, the documentation explains it better then I. Sep 6, 2022 at 19:29

You're doing two things wrong:

1. the code environment of the listings package is not called listing, but lstlisting
2. the \pythonstyle macro should go before the code environment

So if you do

\pythonstyle
\begin{lstlisting}
import numpy as np
class __init__(self, a, b):
self.a = a
self.b = b
\end{lstlisting}


it will work.

I do think it's a bit odd to define a macro like that, instead of for example defining a new listings style with \lstdefinestyle. See example below.

\documentclass[a4paper,12pt]{article}
\usepackage[utf8]{inputenc}

% Default fixed font does not support bold face
\DeclareFixedFont{\ttb}{T1}{txtt}{bx}{n}{12} % for bold
\DeclareFixedFont{\ttm}{T1}{txtt}{m}{n}{12}  % for normal

% Custom colors
\usepackage{color}
\definecolor{deepblue}{rgb}{0,0,0.5}
\definecolor{deepred}{rgb}{0.6,0,0}
\definecolor{deepgreen}{rgb}{0,0.5,0}

\usepackage{listings}

% Python style for highlighting
\newcommand\pythonstyle{\lstset{
language=Python,
literate={-}{-}1 {*}{*}1,% {xxx}{\textrm{   }}1,
basicstyle=\ttm,
keywordstyle=\ttb\color{deepblue},
emph={MyClass,__init__},          % Custom highlighting
emphstyle=\ttb\color{deepred},    % Custom highlighting style
stringstyle=\color{deepgreen},
frame=tb,                         % Any extra options here
showstringspaces=false
}}

\lstdefinestyle{pythonstyling}{
language=Python,
basicstyle=\ttm,
keywordstyle=\ttb\color{deepblue},
emph={MyClass,__init__},          % Custom highlighting
emphstyle=\ttb\color{deepred},    % Custom highlighting style
stringstyle=\color{deepgreen},
frame=tb,                         % Any extra options here
showstringspaces=false
}

% Python
\begin{document}
here some python codes

\begin{lstlisting}[style=pythonstyling]
import numpy as np
class __init__(self, a, b):
self.a = a
self.b = b
\end{lstlisting}

\pythonstyle
\begin{lstlisting}
import numpy as np
class __init__(self, a, b):
self.a = a
self.b = b
\end{lstlisting}
\end{document}

• That looks good, but if you want a pdf with a python code ready to be copied and pasted, than you need to make him understand that a python indentation is present. I tried with that "{xxx}{\textrm{ }}1", but it does not work. Would you suggest anything? Sep 7, 2022 at 9:32
• @StefanoFedele If you set showstringspaces=true that should indicate spaces, but perhaps not what you want? Sep 8, 2022 at 10:09