Utiliser listings pour définir Python et avoir caption et label
Je souhaiterais créer un environnement Python avec le package `listings` (tout en ayant la possibilité d'en créer d'autres avec d'autres langages) et pouvoir référencer ce langage en faisant appel aux commandes `\caption` et `\label`. Voici le code que j'ai pu avoir sur le net :
\documentclass[a4paper]{article}
\usepackage{listings}
\usepackage[margin=1cm]{geometry}
\setlength{\parindent}{0pt}
\usepackage{caption}
\captionsetup[prog]{
font={bf,footnotesize},
margin=0pt,
skip=0pt
}
\makeatletter
\newcounter{prog}
\lstnewenvironment{prog}[1][]
{
\noindent\minipage{0.3\linewidth}
\def\lstlistingname{Programme}
\def\lstlistingautorefname{Programme}
\let\c@lstlisting=\c@prog
\let\thelstlisting=\theprog
\clearcaptionsetup{lstlisting}
\lstset{#1,
language=Python,
basicstyle=\ttfamily,
numberstyle=\tiny,
framexleftmargin=5mm,
xleftmargin=5mm,
frame=single,
captionpos=bc
}
\captionsetup{options=prog}
}
{\endminipage}
\makeatother
\begin{document}
Cas1 - avec compteur et légende :
\begin{prog}[caption=MaLegende]
s=0
for i in range(1,10):
s=s+i
print(s)
\end{prog}
\label{MonLabel}
Cas2 - sans légende ni compteur :
\begin{prog}[]
s=0
for i in range(1,10):
s=s+i
print(s)
\end{prog}
Cas3 - avec compteur et sans légende :
\begin{prog}[caption=~] %ce test n'a pas donné ce que je souhaitais !
s=0
for i in range(1,10):
s=s+i
print(s)
\end{prog}
Le programme ~\ref{MonLabel} se trouve à la page~\pageref{MonLabel}.
\end{document}
Plus précisément, je voudrais :
1- que le nom défini "Programme" et les commandes `\caption` et `\label` se réfèrent au style défini "prog". Cela me permet plus tard de définir d'autres langages.
2- ne pas afficher les : dans le Cas3 (le cas où la légende n'existe pas).
3- avoir un espace normal entre le texte et le programme.