Comment présenter du code informatique avec le package tcolorbox ?#
tcolorbox est un package très puissant dédié à l’encadrement du texte. Il
dispose notamment de deux bibliothèques (« library » dans la documentation) utiles pour
présenter du code informatique. Ces deux bibliothèques listings
et minted
utilisent
les packages des mêmes noms et permettent de faire des mises en page élaborées simplement.
1. Bibliothèque listings
#
Info
Pour bien comprendre cette partie, il est conseillé de lire Comment présenter du code informatique avec le package listings ?.
Note
Cette bibliothèque est conseillée si on compile en
pdflatex
L’utilisation de cette bibliothèque charge automatiquement listings
tcolorbox perment de définir (généralement dans le préambule) une boîte de type
tcblisting
utilisant listings pour afficher le code. Le style de cette boîte,
les paramètres optionnels de listings et le nom de la boîte sont alors définis
pour l’ensemble du document.
1.1. Une première boîte#
Dans l’exemple ci-dessous, on reconnaît les options de listings.
Attention
Le réglage pour les accents ne semble pas pouvoir être indiqué dans la définition de la
boîte. Il faut le faire via \lstset{}
.
\documentclass[french]{article}
\usepackage[T1]{fontenc}
\usepackage{xcolor}
\usepackage{babel}
\usepackage{tcolorbox}
\tcbuselibrary{listings}
% Création de ma boîte
\newtcblisting{boxPython}{
colback=black!5!white,
title= Extrait de code Python,
listing only,
listing options={
language=python,
keywordstyle = \color{green!60!black},
keywordstyle = {[2]\color{orange}},
commentstyle = \color{gray}\itshape,
stringstyle = \color{blue},
showstringspaces=false,
numbers = left,
numberstyle = \tiny,
stepnumber=1,
numbersep = 25pt
},
}
% réglage de listings pour les accents
\lstset{
literate=
{é}{{\'e}}1
{è}{{\`{e}}}1
{ê}{{\^{e}}}1
{ë}{{\¨{e}}}1
{É}{{\'{E}}}1
{Ê}{{\^{E}}}1
{û}{{\^{u}}}1
{ù}{{\`{u}}}1
{â}{{\^{a}}}1
{à}{{\`{a}}}1
{Â}{{\^{A}}}1
{ç}{{\c{c}}}1
{Ç}{{\c{C}}}1
{ô}{{\^{o}}}1
{Ô}{{\^{O}}}1
{î}{{\^{i}}}1
{Î}{{\^{I}}}1,
}
\begin{document}
\begin{boxPython}
# Une première boucle
for i in range(0,5):
print(i)
# Une autre boucle
while i != "4":
print("Et on est reparti pour un
tour de plus !!!")
\end{boxPython}
\end{document}
1.2. Une boîte un peu plus élaborée#
Info
Pour la boîte ci-dessous, on utilise un package supplémentaire, fontawesome5 , pour le symbole de
Python
.On utilise également la bibliothèque
skins
qui permet de passer l’optionenhanced
à la boîte et ainsi de pouvoir régler l’aspect du titre.
\documentclass[french]{article}
\usepackage[T1]{fontenc}
\usepackage{xcolor}
\usepackage{fontawesome5}
\usepackage{babel}
\usepackage{tcolorbox}
\tcbuselibrary{skins, listings}
\newtcblisting{boxPython}{
enhanced,
colback=black!3!white,
toprule=1pt,
bottomrule=1pt,
leftrule=0pt,
rightrule=0pt,
arc=0mm,
attach boxed title to top left={yshift=-9pt, xshift=4pt},
title = \textcolor{blue!80!black}{\faPython},
coltitle= black,
boxed title style={colback=white},
listing only,
listing options={
language=python,
breaklines,
keywordstyle = \color{green!60!black},
keywordstyle = {[2]\color{orange}},
commentstyle = \color{gray}\itshape,
stringstyle = \color{blue},
showstringspaces=false,
numbers = left,
numberstyle = \tiny,
stepnumber=1,
numbersep = 20pt
},
}
% pour les accents
\lstset{
literate=
{é}{{\'e}}1
{è}{{\`{e}}}1
{ê}{{\^{e}}}1
{ë}{{\¨{e}}}1
{É}{{\'{E}}}1
{Ê}{{\^{E}}}1
{û}{{\^{u}}}1
{ù}{{\`{u}}}1
{â}{{\^{a}}}1
{à}{{\`{a}}}1
{Â}{{\^{A}}}1
{ç}{{\c{c}}}1
{Ç}{{\c{C}}}1
{ô}{{\^{o}}}1
{Ô}{{\^{O}}}1
{î}{{\^{i}}}1
{Î}{{\^{I}}}1,
}
\begin{document}
\begin{boxPython}
# Une première boucle
for i in range(0,5):
print(i)
# Une autre boucle
while i != 4:
print("Et on est reparti pour un tour de plus !!!")
\end{boxPython}
\end{document}
Astuce
On remarque que lorsque le retour à la ligne se fait manuellement, comme dans Une première boîte, il compte pour une ligne supplémentaire, ne correspondant pas nécessairemente au code voulu.
Pour pallier ce problème, on a passé breaklines
en paramètre optionnel de la boîte.
1.3. Bibliothèque minted#
On procède de manière très similaire à ce qui à été vu ci-dessus, mais on peut constater que moins d’options sont nécessaires.
Info
Pour bien comprendre cette partie, il est conseillé de lire Comment présenter du code informatique avec le package minted ?.
\documentclass[french]{article}
\usepackage[T1]{fontenc}
\usepackage{xcolor}
\usepackage{fontawesome5}
\usepackage{babel}
\usepackage{tcolorbox}
\tcbuselibrary{minted, skins}
% Création de ma box
\newtcblisting{boxPython}{
enhanced,
colback=black!3!white,
toprule=1pt,
bottomrule=1pt,
leftrule=0pt,
rightrule=0pt,
arc=0mm,
attach boxed title to top left={yshift=-9pt, xshift=4pt},
title = \textcolor{blue!80!black}{\faPython},
coltitle= black,
boxed title style={colback=white},
listing engine=minted,
listing only,
minted language=python,
minted options={breaklines, autogobble, linenos, numbersep=8mm},
}
\begin{document}
\begin{boxPython}
# Une première boucle
for i in range(0,5):
print(i)
# Une autre boucle
while i != "4":
print("Encore ? Eh bien oui, on est reparti pour un tour de plus !!!")
\end{boxPython}
\end{document}
La compilation du code donne :