\chapter{Tableaux \& boîtes}

\label{chap_table_anx}

\section{Un autre format de cellules}

Dans la partie précédente de ce guide, j'ai présenté les formats par défaut pour les cellules d'un \verb?tabular? : \verb?l?, \verb?c? et \verb?r?. Il en existe un 4\up{ème}, qui prend en compte un argument : le format \verb?p{longueur}?.

\verb?p? permet de définir une colonne de largeur définie par \verb?longueur? et dont le contenu est aligné à gauche par défaut.

Si, comme nous le verrons par la suite, la commande \verb?linebreak? est utile pour écrire du texte sur une nouvelle ligne (dans la même cellule), elle peut parfois créer de grandes espaces blancs entre les mots (pour justifier le texte). \\

Du coup, il existe une commande spécifique au format \verb?p? qui permet d'éviter tous ces désagréments : \verb?\newline?. Comme toujours, un exemple sera bien plus explicite :

\begin{code}{Le format de cellule \texttt{p}}
\documentclass[a4paper, 12pt]{report}

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[french]{babel}
\usepackage{lmodern}

\usepackage{array}


\begin{document}

\begin{center}
\begin{tabular}{p{0.2\linewidth}|p{0.4\linewidth}}
Du texte \linebreak Un très très très long texte & \hfil Titre centré \hfil \\ \hline
Nouvel essai \newline Plus joli \newline Espacement correct \newline Utile pour des dates : \newline XXXX \newline YYYY & \begin{center} Ok ? Mieux centré ! Mais pas encore top \dots{} \end{center}
\end{tabular}
\end{center}

\end{document}
\end{code}

\begin{attentionbox}{\textit{Nota Bene}}
Pour une raison que j'ignore, le centrage du texte dans une cellule au format \verb?p? ne fonctionne pas avec la commande usuelle \verb?\hfill?, qui encadre le texte. \\

Une commande équivalente, \verb?\hfil? ou \verb?\hspace*{\stretch{1}}?, fonctionne parfaitement, ainsi que l'environnement \verb?center?. La première commande possède l'avantage d'être la plus concise à écrire. Il s'agit toutefois d'un point encore délicat donc cette solution peut encore être améliorée.
\end{attentionbox}

\section{Cellules centrées verticalement et horizontalement}

Au lieu d'utiliser la lettre \verb?c?, une commande plus complexe permet de satisfaire un centrage vertical et horizontal du contenu de la case : \begin{center} \verb?>{\centering\arraybackslash}m{taille_case}? \end{center}

Dès lors, l'agencement peut se faire de la manière suivante :

\begin{code}{Un exemple avec un SWOT}
\documentclass[a4paper, 12pt]{report}

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[french]{babel}
\usepackage{lmodern}

\usepackage{graphicx} % Pour la commande rotatebox
\usepackage{array}


\begin{document}

\begin{center}
\begin{tabular}{>{\centering\arraybackslash}m{0.5cm}|>{\centering\arraybackslash}m{7cm}|>{\centering\arraybackslash}m{7cm}}
~& {\Large Atouts} & {\Large Handicaps} \\ \hline
\rotatebox{90}{{\Large Interne}} & \vspace{\baselineskip} \textbf{Forces (Strengths)} \linebreak \linebreak - rapidité de production \linebreak - etc. \linebreak & \vspace{\baselineskip} \textbf{Faiblesses (Weaknesses)} \linebreak \linebreak - idem \linebreak \\ \hline
\rotatebox{90}{{\Large Marché}} & \vspace{\baselineskip} \textbf{Opportunités (Opportunities)} \linebreak \linebreak - idem \linebreak & \vspace{\baselineskip} \textbf{Menaces (Threats)} \linebreak \linebreak - idem \linebreak
\end{tabular}
\end{center}

\end{document}
\end{code}

Le raccourci pour définir $N$ colonnes identiques est toujours utilisable. La formulation ne change pas : c'est toujours \verb?*{nbre_col}{commande}?. Un exemple est donné plus loin. \\

En revanche, il peut vite être pénible d'écrire (ou de copier-coller) cette ligne à chaque fois. C'est pourquoi il existe une commande pour définir de nouveaux formats de colonne : \begin{center} \verb?\newcolumntype{nom_format}[nbre_arg]{def_format}? \end{center}

\noindent{}soit, dans notre cas : \begin{center} \verb?\newcolumntype{C}[1]{>{\centering\arraybackslash}m{#1}}? \end{center}

Cette \textbf{commande se place dans le préambule} du document \LaTeX{}. Il faut donc procéder de la manière suivante :

\begin{code}{Application}
\documentclass[a4paper, 12pt]{report}

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[french]{babel}
\usepackage{lmodern}

\usepackage{array}
\newcolumntype{C}[1]{>{\centering\arraybackslash}m{#1}} % L'argument #1 est une longueur (2cm, etc.)


\begin{document}

\begin{tabular}{|C{2.5 cm}||C{0.5\linewidth}|}
Ligne bidon 1 & Ligne bidon 2
\end{tabular}

C'est plus pratique, n'est-ce pas ?

\end{document}
\end{code}

\section{Fusion et coloriage de cellules}

Si la fusion des colonnes et des lignes est comprise de base avec le package \verb?array?, la fusion des lignes laisse un peu à désirer. C'est pourquoi il vaut mieux charger le package \verb?multirow?. \\

La fusion des colonnes a lieu grâce à la commande  : \begin{center} \verb?\multicolumn{nbre_col}{position}{texte}? \end{center}

\noindent{}et la ligne du tableau s'achève par la commande \verb?\cline{col_debut-col_fin}?. \\

Quant à la fusion des lignes, elle est possible grâce à la commande : \begin{center} \verb?\multirow{nbre_ligne}*{texte}? \end{center}

Afin de pouvoir colorier les cellules, il faut ajouter le package \verb?makecell? dans le préambule. Grâce à la commande \verb?\rowcolor{couleur}?, tu peux colorier une ligne entière mais il existe d'autres commandes pour cibler les cases. Pour connaître les dites commandes, il faut aller se documenter sur Internet. Pour le reste, un exemple sera plus clair :

\begin{code}{Coloriage et fusion}
\documentclass[a4paper, 12pt]{report}

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[french]{babel}
\usepackage{lmodern}

\usepackage{array, multirow, makecell} % Packages pour la fusions des lignes et le coloriage
\newcolumntype{C}[1]{>{\centering\arraybackslash}m{#1}}
\renewcommand{\arraystretch}{1.3} % Pour augmenter la hauteur d'une ligne - Meilleur lisibilité
\usepackage[table, dvipsnames]{xcolor} % Ajout de table pour appliquer dvipsnames aux tableaux


\begin{document}

\begin{center}
\begin{tabular}{|*{4}{C{3cm}|}}
\hline
\rowcolor{Peach} \multicolumn{4}{|c|}{\textbf{Comparaison des configurations}} \linebreak \\ \hline
\multirow{2}*{\textbf{Critères}} & \multicolumn{3}{c|}{\textbf{Structures}} \linebreak \\ \cline{2-4}
~& \textbf{Fonctionnelle} & \textbf{Divisionnelle} & \textbf{Matricielle} \\ \hline \hline
Stabilité & ++ & + & - \\ \hline
Flexibilité - Adaptabilité & - & - & ++ \\ \hline
\rowcolor{black} ~ & ~ & ~ & ~ \\ \hline
\textbf{Cas pratiques} & \multicolumn{3}{|c|}{\textbf{Qui réussira le mieux à répondre aux besoins ?}} \\ \hline
Projet (long) à réaliser & - & - & ++ \\ \hline
Fabrication en grande série & ++ & - & -- \\ \hline
\end{tabular}
\end{center}

\end{document}
\end{code}

Il se peut que la visualisation des bordures noires du tableau ne s'affiche pas bien avec la cellule colorée. Il s'agit juste d'un problème d'affichage avec ton écran d'ordinateur, tellement la ligne est fine.

\section{\texttt{longtable} \& \texttt{booktabs}}

Il s'agit de deux packages que j'ai découverts en 2017. Le premier se révèle très utile pour des tableaux dont la longueur dépasse une page. Il suffit juste de remplacer l'environnement \verb?tabular? par \verb?longtable? et tout le reste fonctionne exactement pareil, y compris les nouveaux formats de colonnes définies par l'utilisateur, comme abordé précédemment. 

D'autres options existent aussi pour rappeler lors d'un changement de page les titres des colonnes. Si tu es intéressé, je te renvoie à la documentation officielle. \\

Quant au second package, c'est le seul à ma connaissance qui permette d'obtenir des tableaux suffisamment aérés. En théorie, la commande : \begin{center} \verb?\renewcommand{\arraystretch}{1.3}? \end{center}

\noindent{}permet de modifier la hauteur de ligne, pour tous les tableaux créés après cette commande. Mais, avec des fractions, impossible de modifier quoi que ce soit \dots{} sauf avec \verb?booktabs? ! Pourquoi ? Je n'en sais rien. Hormis l'absence de barres verticales, le rendu est meilleur et convient.

\begin{code}{Un exemple d'application}
\documentclass[a4paper, 12pt]{report}

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[french]{babel}
\usepackage{lmodern}

\usepackage{array, longtable, booktabs}
\newcolumntype{C}[1]{>{\centering\arraybackslash}m{#1}}
\renewcommand{\arraystretch}{1.3} % Pour augmenter la hauteur de ligne des tableaux


\begin{document}

\everymath{\displaystyle}

Allons faire un peu de maths \dots{} Mais avant, mangeons un peu de place : \\

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi venenatis orci vitae odio varius ultrices. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vivamus eget interdum ipsum. Ut et odio nec ipsum luctus tempor. In dapibus sapien ut sagittis congue. Suspendisse scelerisque molestie leo vel tempus. Vivamus facilisis ipsum quis hendrerit vestibulum. Fusce malesuada dictum nunc non molestie. Proin maximus neque neque, eu molestie nulla condimentum eget. Integer tincidunt ut velit at tristique. Suspendisse quis erat ac ligula facilisis commodo quis sit amet est. Maecenas a nulla nec lorem vehicula tempor. Donec tristique purus vitae nibh pretium venenatis. Fusce pellentesque convallis neque eu sagittis. Sed eu ante egestas felis sagittis tincidunt. 

\begin{center}
\begin{longtable}{C{0.3\linewidth}C{0.3\linewidth}}
$f(x)$ & $\int f(x)\,dx$ \\ \midrule % \midrule : commande propre à booktabs - Création d'une ligne horizontale (= \hline)
$x^\alpha$, avec $\alpha \neq -1$ & $\frac{x^{\alpha + 1}}{\alpha + 1}$ \\ \midrule
$\frac{1}{x}$ & $\ln \module{x}$ \\ \midrule
$\cos (ax)$, avec $a \neq 0$ & $\frac{\sin (ax)}{a}$ \\ \midrule
$\sin x$ & $-\cos x$ \\ \midrule
$\frac{1}{1 + x^2}$ & $\arctan x$ \\ \midrule
$\cosh x$ & $\sinh x$ \\ \midrule
$\sinh x$ & $\cosh x$ \\ \midrule
$e^{\omega x}$, avec $\omega \neq 0$ & $\frac{e^{\omega x}}{\omega}$ \\ \midrule
$\frac{u'}{u}$ & $\ln \module{u}$ \\ \midrule
$\tan x$ & $-\ln ( \module{\cos x})$ \\ \midrule
$\frac{1}{\sqrt{1 - x^2}}$ & $\arcsin x$ \\ \midrule
$\frac{-1}{\sqrt{1 - x^2}}$ & $\arccos x$ \\ \midrule
$\frac{1}{\sqrt{x^2 + 1}}$ & $\mathrm{argsinh}~x$ \\ \midrule
$\frac{1}{\sqrt{x^2 - 1}}$ & $\mathrm{argcosh}~x$ \\ \midrule
$\frac{1}{1 - x^2}$ & $\mathrm{argtanh}~x$
\end{longtable}
\end{center}

\end{document}
\end{code}

Ici, j'ai cumulé l'emploi de \verb?longtable? et de \verb?booktabs? pour optimiser l'exemple mais rien n'empêche d'utiliser uniquement l'un ou l'autre.

\section{Créer sa propre boîte}

Le package \verb?tcolorbox? propose de très nombreux outils pour créer des boîtes. Il propose même une commande pour créer soi-même son propre environnement, et donc sa propre boîte entièrement personnalisable.

La structure est très particulière et propre à \verb?tcolorbox? mais permet de respecter la philosophie \LaTeX{} : créer des commandes. Un changement sur la commande entraîne un changement sur tout le document. Tu admettras que c'est vachement plus pratique que de devoir tout passer en revue ! \\

Le code fonctionne selon le format suivant : \begin{center} \verb?\newtcolorbox{nom}[nbre][]{options, #1}? \end{center}

\noindent{}avec :

\begin{itemize}[label = \ding{213}]
\item \verb?nom? : nom de l'environnement,

\item \verb?nbre? : le nombre de paramètres, supérieur ou égal à 1 (et probablement inférieur à 9),

\item \verb?[]? : obligatoire pour permettre le changement ou l'ajout d'options,

\item \verb?options? : les options disponibles avec \verb?tcolorbox?,

\item \verb?#1? : formulation particulière mais correspond tout simplement au texte de l'environnement. \\
\end{itemize}

Nous avons donc le code complet suivant, avec quelques exemples :

\begin{code}{Ma petite boîte personnelle}
\documentclass[a4paper, 12pt]{report} 

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[french]{babel}
\usepackage{lmodern}

\usepackage[dvipsnames]{xcolor}

\usepackage[breakable]{tcolorbox}

\newtcolorbox{boite}[3][]{breakable, before upper = {\parindent17pt}, beforeafter skip = \baselineskip, colframe = #3, colback = White, boxrule = 2pt, arc = 6pt, title = \textbf{#2}, coltitle = Black, #1} % Commande pour créer sa boite
% breakable : pour casser la boîte si elle arrive en fin de page
% before upper : pour contrôler la taille de l'alinéa
% beforeafter skip : longueur à appliquer avant et après la boite
% colframe : couleur du contour
% colback : couleur du fond
% boxrule : épaisseur du contour
% arc : rayon des bords
% title et coltitle : obvious !


\begin{document}

\begin{boite}{Un premier exemple}{Orchid}
C'est pratique, n'est-ce pas ?
\end{boite}

\begin{boite}[colback = Apricot]{Un deuxième exemple}{Orange}
Apportons un petit changement, juste pour cette fois.
\end{boite}

\begin{boite}{Un troisième exemple}{Cyan}
Retour sur un cas normal d'utilisation.
\end{boite}

\end{document}
\end{code}

Le principe est donc de créer une nouvelle boîte (même schéma que pour une commande) pour chaque cas (boîte pour les définitions, boîte pour les remarques, etc.) au lieu de devoir changer les options à chaque fois. 

Utiliser \LaTeX{}, c'est tout automatiser pour se concentrer sur le fond et moins sur la forme, une fois qu'elle est définie en tout cas.

\section{Afficher du code \LaTeX{}}

Il n'y a pas 13 000 façons d'afficher du code \LaTeX{} simplement (oui, parce qu'écrire \verb?\texttt{\textbackslash}? pour produire \texttt{\textbackslash}, ce n'est vraiment pas pratique). La première est d'utiliser l'environnement \verb?verbatim? : tout ce qui est compris dans cet environnement ne sera pas interprété par \LaTeX{} et sera recopié tel quel. Cependant, une trop longue commande sort des marges voire de la page \dots{} C'est donc vite compliqué de lire la fin ou même de copier un morceau de code.

Toutefois, il existe déjà un moyen simple pour les ``petites'' formules : la commande \verb!\verb?\commande?!. Il faut juste écrire \verb?\verb? et tout ce qui est compris entre les deux délimiteurs (ici, des \verb!?!) subit le même traitement que sous l'environnement \verb?verbatim?. \verb!?! n'est pas le seul délimiteur envisageable : \verb?!? convient tout à fait par exemple. \\

Autrement, le seul package qui permette de mettre en forme du code (\LaTeX{}, mais aussi Python, Perl, C, C++, Java, SQL, HTML, \dots{}) avec un retour à la ligne s'appelle \verb?listings?. Beaucoup d'options de mise en forme sont possible (numéro de ligne de code sur le côté, commandes en couleur selon le langage, \dots{}) mais il y a mieux. Et oui, c'est maintenant que revient le Saint Graal : \verb?tcolorbox? ! Ce dernier intègre le package \verb?listings? et permet de faire pas mal de trucs sympathiques.

Malgré tout, \LaTeX{} est loin d'être parfait et renvoie une erreur si des accents sont présents dans le code. Cela peut déjà s'expliquer parce que la programmation est généralement en anglais et ne comporte pas d'accents donc il n'y a aucun souci. Mais je suis Français et donc, personnellement, il m'arrive de rédiger mes commentaires de code en français. Pour résoudre ce problème, il faut soit compiler sous \verb?XeLaTeX? soit sous \verb?PDFLaTeX? sous réserve d'introduire les accents. \\

Un exemple sera sûrement plus clair et m'évitera de longues explications :

\begin{code}{\'Ecrire du code sous \LaTeX{}}
\documentclass[a4paper, 12pt]{report}

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[french]{babel}
\usepackage{lmodern}

\usepackage[dvipsnames]{xcolor}
\usepackage[breakable, listings]{tcolorbox} % Ajout de listings en option

% Création d'une boite avec listings
\newtcblisting{codeLaTeX}[2][]{breakable, beforeafter skip = \baselineskip, colframe = LimeGreen, colback = White, boxrule = 2pt, arc = 6pt, title = \textbf{#2}, coltitle = Black, listing options = {basicstyle = \ttfamily\small, keepspaces = true, columns = flexible, breaklines = true, inputencoding = utf8, language = TeX, numbers = none}, listing only, #1} % options tcolorbox : OK

% listing options : options du package listings
% Ici, dans l'ordre : petite police de type "machine à écrire" (ttfamily) ; conserver les espaces ; nécessaire pour les espaces ; retour à la ligne du code ; UTF-8 ; pour le LaTeX ; pas de numéro

% Pour les accents
\lstset{literate = {à}{{\`a}}1 {â}{{\^a}}1 {é}{{\'e}}1 {è}{{\`e}}1 {ê}{{\^e}}1 {î}{{\^i}}1 {ô}{{\^o}}1 {ç}{{\c{}c}}1} % Format : {lettre UTF8}{{lettre LaTeX}}1
% A compléter si besoin


\begin{document}

\begin{verbatim}
Très pratique d'écrire du code sous \LaTeX{} \\

Mais c'est encore plus compliqué quand le code en question est extrêmement long \dots{}
\end{verbatim}

\begin{codeLaTeX}{Titre}
Très pratique d'écrire du code sous \LaTeX{} \\

Mais c'est encore plus compliqué quand le code en question est extrêmement long \dots{} Ah non, là c'est mieux !
\end{codeLaTeX}

Le dernier résultat est mieux, non ? Tu peux même le personnaliser (changement ponctuel) :

\begin{codeLaTeX}[colframe = BrickRed}{Second test}
Code vraiment important qui demande de changer de couleur. Juste pour lui.
\end{codeLaTeX}

\end{document}
\end{code}

Il est possible d'aller encore plus loin, toujours grâce aux packages \verb?tcolorbox? et \verb?listings?, et de compléter le précédent code pour avoir les options suivantes :

\begin{itemize}[label = \ding{213}]
\item numérotation automatique des boîtes,

\item coloriage syntaxique du code (mots clés, chaînes de caractères, commentaires, numéros de ligne),

\item création d'un sommaire dédié à ces boîtes. \\
\end{itemize}

La documentation \verb?tcolorbox? fournit toutes les indications nécessaires. Comme c'est difficile de tout faire tenir avec l'environnement verbatim, je vais balancer le code et allègrement tout commenter : 

\begin{code}{Intégrer du code - Aller plus loin}
\documentclass[a4paper, 12pt]{report} 

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[french]{babel}
\usepackage{lmodern}

\usepackage[dvipsnames]{xcolor} % Pour les couleurs

\usepackage[breakable, listings]{tcolorbox} % Pour des boîtes arrondies - breakable : pour couper les boîtes - listings : pour le code

\usepackage[hidelinks, breaklinks, linktoc = all]{hyperref}

% Création d'une boîte numérotée pour le code
% Utilisation de Python pour changer
\newtcblisting[auto counter, number within = chapter, list inside = pythoncode]{codePython}[2][]{breakable, beforeafter skip = \baselineskip, colframe = LimeGreen, colback = White, boxrule = 2pt, arc = 6pt, title = \textbf{Code Python \thetcbcounter{} : #2}, list entry = {\protect\numberline{\thetcbcounter}#2}, coltitle = Black, listing options = {basicstyle = \ttfamily\small, keepspaces = true, breaklines = true, inputencoding = utf8, language = Python, tabsize = 4, xleftmargin = 17pt, numbers = left, numbersep = 13pt, numberstyle = \ttfamily\footnotesize\color{OrangeRed}, showstringspaces = false, commentstyle = \color{Gray}, keywordstyle = \color{Blue}, stringstyle = \color{Orange}}, listing only, #1}

\lstset{literate = {à}{{\`a}}1 {â}{{\^a}}1 {é}{{\'e}}1 {è}{{\`e}}1 {ê}{{\^e}}1 {î}{{\^i}}1 {ô}{{\^o}}1 {ç}{{\c{}c}}1} % Pour résoudre le problème des accents dans le code listings (tcolorbox)

% --- Les explications ---
% Intégration d'un compteur dans l'en-tête et liste des codes : [auto counter, number within = chapter, list inside = pythoncode] <==> numérotation automatique ; numéro de chapitre utilisé ; étiquette pour le sommaire dédié
%\newtcblisting[...] : création d'un environnement pour le code avec tcolorbox + listings

% Options tcolorbox : inchangées
% \thetcbcounter{} : compteur tcolorbox
% Intégrer une entrée dans le sommaire dédié : list entry = {\protect\numberline{\thetcbcounter}#2} (dans les options tcolorbox)

% Options listings : début inchangé
% Options listings propre au langage : {language = Python, tabsize = 4, xleftmargin = 17pt, numbers = left, numbersep = 13pt, numberstyle = \ttfamily\footnotesize\color{OrangeRed}, showstringspaces = false, commentstyle = \color{Gray}, keywordstyle = \color{Blue}, stringstyle = \color{Orange}}
% Détails : langage utilisé ; taille de l'indentation (nbre d'espaces) ; marge à gauche ; numéro de ligne à gauche ; séparation entre le code et les numéros ; style des numéros ; bonus pour les chaînes de caractères ; mise en couleur du code

% Affichage uniquement du code : listing only --> "listing and text" = code et résultat (utile pour du code LaTeX mais que du code pur : pas de préambule ou de \begin{document})


\begin{document}

\renewcommand{\contentsname}{Sommaire} % Renommer le sommaire
\tableofcontents % Pour créer le sommaire - Penser à compiler deux fois

\newpage

\phantomsection % Renvoi correct (hyperref)
\addcontentsline{toc}{chapter}{Liste des codes Python} % Ajout dans le sommaire
\tcblistof[\chapter*]{pythoncode}{Liste des codes Python} % Sommaire dédié --> cf. aide tcolorbox
% Ajout de "Liste des codes Python" en tant que chapitre non numéroté (chapter*)

\newpage

% Enlever le commentaire ci-dessous
%\chapter{Codes Python}

Blablabla

\begin{codePython}{Essai}
#!/usr/bin/python3
# -*- coding: utf-8 -*-

S = 0
for i in range(215):
	S += i
print(S)
\end{codePython}

\begin{codePython}[colframe = Red]{Essai important}
#!/usr/bin/python3
# -*- coding: utf-8 -*-

S = 0
for i in range(13):
	for j in range(13):
		S += i + j
print(S)
\end{codePython}

Alors ? Plutôt propre, n'est-ce pas ?

\end{document}
\end{code}

Il existe un autre package que \verb?listings? qui s'occupe automatiquement du coloriage du code : \verb?minted?. Il fonctionne grâce à \verb?pygments?, une bibliothèque Python. Par contre, même après son installation, je n'ai toujours pas réussi à le faire fonctionner \dots{}