\documentclass[a4paper,12pt]{article}

\usepackage{graphicx}
\usepackage{url}
\usepackage{listings}
\usepackage{listingsutf8}
\usepackage[frenchb]{babel} 
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{xcolor}
\usepackage{textcomp}
\usepackage{framed}
\usepackage{fourier}
\usepackage[colorlinks=true]{hyperref}

%Formatage de la page :

\usepackage[a4paper,tmargin=1cm]{geometry}
\def\euro{\mbox{\raisebox{.25ex}{{\it =}}\hspace{-.5em}{\sf C}}}
\setlength{\oddsidemargin}{-1cm}
\setlength{\evensidemargin}{-1cm}
\setlength{\topmargin}{-3cm}
\setlength{\textheight}{27cm}
\setlength{\textwidth}{18.5cm}

%Pour ne pas copier les numeros de ligne : (ne fonctionne pas avec hyperref)
%\usepackage[space=true]{accsupp}
%\renewcommand{\thelstnumber}{
%  \protect\BeginAccSupp{ActualText={}}\arabic{lstnumber}\protect\EndAccSupp{}%
%}

%lignes vides
\input{glyphtounicode}
\pdfglyphtounicode{visiblespace}{A0}
\pdfglyphtounicode{~}{A0}
%\pdfgentounicode=1



\makeatletter %copier les lignes vides... ne fonctionne pas
\lst@AddToHook{OnEmptyLine}{\newline \# \newline \vspace{-0.25cm}}
\makeatother

%Copier-coller indentation
\makeatletter
\def\lst@outputspace{{\ifx\lst@bkgcolor\empty\color{white}\else\lst@bkgcolor\fi\lst@visiblespace}}
\makeatother




%========================================================================================

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

\usepackage{color}
\definecolor{fond}{RGB}{136,136,136}
\definecolor{fondgris}{rgb}{0.95,0.95,0.95}
\definecolor{deepblue}{rgb}{0,0,0.5}
\definecolor{deepred}{rgb}{0.8,0,0}
\definecolor{deepgreen}{rgb}{0,0.5,0}
\definecolor{deepvert}{rgb}{0.02,0.7,0.04}
\definecolor{deeprouge}{rgb}{0.7,0.0,0.0}
\definecolor{deepbleu}{rgb}{0.02,0.01,0.63}
\definecolor{deepviolet}{rgb}{0.6,0.0,0.85}%121, 28, 248
\definecolor{deepciel}{rgb}{0.15,0.77,0.92}%(38, 196, 236)
\definecolor{deepcanard}{rgb}{0.00,0.62,0.65}%(1, 159, 167)
\definecolor{deepgrisclair}{rgb}{0.9,0.9,0.9}
\definecolor{deeprose}{rgb}{0.8,0,0.4}
\definecolor{deepjaune}{rgb}{0.8,0.6,0}
\definecolor{deepgris}{rgb}{0.5,0.5,0.5}
\definecolor{couleuroperations}{rgb}{0.6,0.2,1}%121, 28, 248 roseclair ou deepviolet
\definecolor{couleurkeyword}{rgb}{1,0,0.4}%deeprose
\definecolor{couleurstring}{rgb}{0.8,0.5,0}%deepjaune


%============================================ Python style==============================

\newcommand\pythonstyle{
\lstset{
inputencoding=utf8/latin1,
%frame=single,
%====================Frame exotique:
framexleftmargin=3mm, 
frame=shadowbox, 
rulesepcolor=\color{deepgris},
%=============================
backgroundcolor=\color{fondgris},
language=Python,
%===================numeros de ligne======
numbers=none,%left,
numbersep=2.5em,
numberstyle=\tiny,
upquote=true,
basicstyle=\ttfamily\small, %\ttfamily,
%otherkeywords={self},             % Ajouter des mots clés
keywordstyle=\ttfamily\small\color{couleurkeyword},
emph={self,KeyBoard},
escapechar=\~,         
emphstyle=\ttm\color{deepvert},   
commentstyle=\it\color{deepgris},
stringstyle=\color{couleurstring},           
columns=flexible,	%Pour l'indentation
keepspaces=true,	%Pour l'indentation
showstringspaces=false,
emptylines=1,         %
%breaklines,
%breakatwhitespace,
literate=%
    *{+}{{{\color{couleuroperations}+}}}1
    {-}{{{\color{couleuroperations}-}}}1
    {/}{{{\color{couleuroperations}/}}}1
    {*}{{{\color{couleuroperations}*}}}1
    {=}{{{\color{couleuroperations}=}}}1
    {<}{{{\color{couleuroperations}<}}}1
    {>}{{{\color{couleuroperations}>}}}1
    {\%}{{{\color{couleuroperations}\%}}}1
    {(}{{{\color{couleuroperations}(}}}1
    {)}{{{\color{couleuroperations})}}}1
    {[}{{{\color{couleuroperations}[}}}1
    {]}{{{\color{couleuroperations}]}}}1
    {.}{{{\color{couleuroperations}.}}}1
    {,}{{{\color{couleuroperations},}}}1,
}}




%=================resultat=====option [s]{titre}==========
\newsavebox{\mybox}
\newenvironment{resultat}[1][\texwidth]
{\begin{lrbox}{\mybox}\begin{minipage}{#1}\pythonstyle\lstset{}\ttm}
{\end{minipage}\end{lrbox}\colorbox{grisclair}{\usebox{\mybox}}}


% Python environment
\lstnewenvironment{python}[1][]
{%\footnotesize\begin{center}\begin{minipage}{0.7cm}\includegraphics[width=0.6cm]{IMG/python.png}\end{minipage}\begin{minipage}{3cm}\textit{#1}\end{minipage}\end{center}\vspace{-0.2cm}
\pythonstyle
%\lstset{}%===Une option ici que je ne connais pas
}
{}

% Fichiers extérieurs Python
\newcommand\pythonexternal[2][]{{
%\footnotesize\begin{center}\begin{minipage}{0.7cm}\includegraphics[width=0.6cm]{IMG/python.png}\end{minipage}\begin{minipage}{3cm}\textit{#2}\end{minipage}\end{center}\vspace{-0.2cm}
\pythonstyle
\lstinputlisting[#1]{#2}}}

% Python inline
\newcommand\pythoninline[1]{{\pythonstyle\lstinline!#1!}}

%=================================================================================

%=====================================================Entete et pied de page====================================
\usepackage{fancyhdr}
\pagestyle{fancy}

\renewcommand{\headrulewidth}{0pt}
\fancyhead{}

\renewcommand{\footrulewidth}{0.7pt}
\fancyfoot[C]{\textbf{\thepage}}
\fancyfoot[R]{Lyc\'ee BdA : Python Fiche 1}

%====================================================Interligne========================================

\renewcommand{\baselinestretch}{1}

\begin{document}

%===================================================Titre============================================



\begin{center}
\Huge \bf 
\fontshape{it}
\selectfont

\textcolor{black}{Du code Python dans vos fichiers \LaTeX}

\end{center}

%================================================Contenu==============================================

Ce fichier n'est qu'un exemple, il y a surement d'autres possibilités.

Le but étant de conserver l'indentation lors d'un copier/coller.

Hélàs, cela dépend du lecteur pdf. Ici, cela fonctionne avec Adobe Reader.

Les lignes vides seront remplacées par un \# lors du copier/coller pour conserver l'espace.\bigskip

\textbf{Imporation d'un fichier Python externe :}

\begin{center}
\begin{minipage}{16cm}
\pythonexternal{balle.py}{}
\end{minipage}
\end{center}

\textbf{Un programme inséré directement dans le source tex :}

\begin{center}
\begin{minipage}{8cm}
\begin{python}
#Fonction ensorcelle :
def ensorcelle(x):
    resultat=-1/x+1
    return resultat

a=int(input("Entrez un nombre : "))
a=ensorcelle(a)
print(a)
\end{python}
\end{minipage}
\end{center}

\textbf{Du code dans une ligne :} \pythoninline{print(3+4)}

\end{document}
