summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/nicematrix/nicematrix-french.tex
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/nicematrix/nicematrix-french.tex
Initial commit
Diffstat (limited to 'macros/latex/contrib/nicematrix/nicematrix-french.tex')
-rw-r--r--macros/latex/contrib/nicematrix/nicematrix-french.tex2121
1 files changed, 2121 insertions, 0 deletions
diff --git a/macros/latex/contrib/nicematrix/nicematrix-french.tex b/macros/latex/contrib/nicematrix/nicematrix-french.tex
new file mode 100644
index 0000000000..70064ad807
--- /dev/null
+++ b/macros/latex/contrib/nicematrix/nicematrix-french.tex
@@ -0,0 +1,2121 @@
+\documentclass[dvipsnames]{article}% dvipsnames is for xcolor (loaded by Tikz, loaded by nicematrix)
+\usepackage{xltxtra}
+\usepackage[french]{babel}
+
+\usepackage{geometry}
+\geometry{left=2.8cm,right=2.8cm,top=2.5cm,bottom=2.5cm,papersize={21cm,29.7cm}}
+
+\usepackage{amsmath}
+\usepackage{color}
+\usepackage{array}
+
+\usepackage{colortbl}
+
+\usepackage{nicematrix}
+
+
+\usepackage{siunitx}
+
+\newbox\ExampleOne
+
+\setbox\ExampleOne\hbox{%
+$\begin{NiceArray}{|*{4}{C|}}[hlines,first-row,first-col]
+ & e & a & b & c \\
+e & e & a & b & c \\
+a & a & e & c & b \\
+b & b & c & e & a \\
+c & c & b & a & e
+\end{NiceArray}$}
+
+\usepackage{arydshln}
+\usepackage{verbatim}
+
+
+\usepackage{fancyvrb}
+\fvset{commandchars=\~\#\@,formatcom={\color{gray}}}
+
+\usepackage{titlesec}
+\titlespacing*{\section}{0pt}{6.5ex plus 1ex minus .2ex}{4.3ex plus .2ex}
+\titlespacing*{\subsection}{0pt}{4.5ex plus 1ex minus .2ex}{2ex plus .2ex}
+
+\usepackage{multicol}
+\setlength{\columnseprule}{0.4pt}
+
+\def\interitem{\vskip 7mm plus 2 mm minus 3mm}
+\def\emphase{\bgroup\color{RoyalPurple}\let\next=}
+
+\usepackage{footnote}
+
+\usepackage[hyperfootnotes = false]{hyperref}
+
+\hypersetup{
+ pdfinfo = {
+ Title = { L’extension nicematrix },
+ Subject = { Une extension LaTeX } ,
+ Author = { F. Pantigny }
+ }
+}
+
+
+\NewDocumentEnvironment {scope} {} {} {}
+
+\NewDocumentCommand {\pkg} {m} {\textsf{#1}}
+\NewDocumentCommand {\cls} {m} {\textsf{#1}}
+
+\setlength{\parindent}{0pt}
+
+
+\begin{document}
+
+\VerbatimFootnotes
+
+\title{L'extension \pkg{nicematrix}\thanks{Ce document correspond à la version~\myfileversion\space of \pkg{nicematrix},
+en date du~\myfiledate.}} \author{F. Pantigny \\ \texttt{fpantigny@wanadoo.fr}}
+
+
+\maketitle
+
+\begin{abstract}
+L'extension LaTeX \pkg{nicematrix} fournit de nouveaux environnements
+similaires aux environnements classiques \verb|{array}| et \verb|{matrix}| mais avec des
+fonctionnalités supplémentaires. Parmi ces fonctionnalités figurent la
+possibilité de fixer la largeur des colonnes et de tracer des traits en
+pointillés continus entre les cases du tableau.
+\end{abstract}
+
+\vspace{1cm}
+\section{Présentation}
+
+Cette extension peut être utilisée avec \verb|xelatex|, \verb|lualatex| et \verb|pdflatex| mais
+aussi avec le cheminement classique \verb|latex|-\verb|dvips|-\verb|ps2pdf| (ou Adobe
+Distiller). Deux ou trois compilations successives peuvent être nécessaires.
+Cette extension nécessite et charge les extensions \pkg{expl3}, \pkg{l3keys2e},
+\pkg{xparse}, \pkg{array}, \pkg{amsmath} et \pkg{tikz} . Elle charge aussi la
+bibliothèque Tikz \pkg{fit}.
+
+
+
+\medskip
+\begin{savenotes}
+\begin{minipage}{0.6\linewidth}
+Cette extension fournit quelques outils supplémentaires pour dessiner des
+matrices (au sens mathématique). Les principales caractéristiques sont les
+suivantes :
+
+\textbullet\ lignes en pointillés continues\footnote{Si l'option de classe
+\texttt{draft} est utilisée, ces lignes en pointillés ne sont pas tracées pour
+accélérer la compilation.} ;
+
+\textbullet\ des rangées et colonnes extérieures pour les labels ;
+
+\textbullet\ un contrôle sur la largeur des colonnes.
+\end{minipage}
+\end{savenotes}
+\hspace{1.4cm}
+$\begin{bNiceArray}{CCCC}[first-row,first-col,
+ code-for-first-col=\color{blue}\scriptstyle,
+ code-for-first-row=\color{blue}\scriptstyle,
+ columns-width = auto]
+ & C_1 & C_2 & \Cdots & C_n \\
+L_1 & a_{11} & a_{12} & \Cdots & a_{1n} \\
+L_2 & a_{21} & a_{22} & \Cdots & a_{2n} \\
+\Vdots & \Vdots & \Vdots & \Ddots & \Vdots\\
+L_n & a_{n1} & a_{n2} & \Cdots & a_{nn}
+\end{bNiceArray}$
+
+
+
+
+\medskip
+Une commande\verb|\NiceMatrixOptions| est fournie pour régler les options (la
+portée des options fixées par cette commande est le groupe TeX courant).
+
+
+\bigskip
+\textbf{Un exemple d'utilisation pour les lignes en pointillés continues}
+
+\medskip
+\begin{minipage}{10cm}
+Considérons par exemple le code suivant qui utilise un environnement
+\verb|{pmatrix}| de l'extension \pkg{amsmath}.
+
+\smallskip
+\begin{BVerbatim}
+$A = \begin{pmatrix}
+1 & \cdots & \cdots & 1 \\
+0 & \ddots & & \vdots \\
+\vdots & \ddots & \ddots & \vdots \\
+0 & \cdots & 0 & 1
+\end{pmatrix}$
+\end{BVerbatim}
+
+\smallskip
+Ce code compose la matrice $A$ représentée à droite.
+\end{minipage}\hspace{1cm}
+$A = \begin{pmatrix}
+1 &\cdots &\cdots &1 \\
+0 &\ddots & &\vdots \\
+\vdots &\ddots &\ddots &\vdots \\
+0 &\cdots &0 &1
+\end{pmatrix}$
+
+
+
+
+\bigskip
+\begin{scope}
+\NiceMatrixOptions{transparent}
+\begin{minipage}{10cm}
+Maintenant, si nous utilisons l'extension \pkg{nicematrix} avec l'option
+\verb|transparent|, le même code va donner le résultat ci-contre à droite.
+\end{minipage}\hspace{1cm}
+$A = \begin{pmatrix}
+1 & \cdots & \cdots & 1 \\
+0 & \ddots & & \vdots \\
+\vdots & \ddots & \ddots & \vdots \\
+0 & \cdots & 0 & 1
+\end{pmatrix}$
+\end{scope}
+
+
+
+
+\section{Les environnements de cette extension}
+
+L'extension \pkg{nicematrix} définit les nouveaux environnements suivants :
+
+\medskip
+\begin{ttfamily}
+\setlength{\tabcolsep}{3mm}
+\begin{tabular}{llll}
+\{NiceMatrix\} & \{NiceArray\} & \{pNiceArray\} \\
+\{pNiceMatrix\} & & \{bNiceArray\} \\
+\{bNiceMatrix\} & & \{BNiceArray\} \\
+\{BNiceMatrix\} & & \{vNiceArray\} \\
+\{vNiceMatrix\} & & \{VNiceArray\} \\
+\{VNiceMatrix\} & & \{NiceArrayWithDelims\} \\
+\end{tabular}
+\end{ttfamily}
+
+
+
+\medskip
+Par défaut, les environnements \verb|{NiceMatrix}|, \verb|{pNiceMatrix}|, \verb|{bNiceMatrix}|, \verb|{BNiceMatrix}|,
+\verb|{vNiceMatrix}| et \verb|{VNiceMatrix}| se comportent quasiment comme les environnements correspondants de
+\pkg{amsmath} : \verb|{matrix}|, \verb|{pmatrix}|, \verb|{bmatrix}|, \verb|{Bmatrix}|, \verb|{vmatrix}| et
+\verb|{Vmatrix}|.
+
+
+\medskip
+L'environnement \verb|{NiceArray}| est similaire à l'environnement \verb|{array}| de l'extension \verb|{array}|.
+Néanmoins, pour des raisons techniques, dans le préambule de l'environnement \verb|{NiceArray}|, l'utilisateur doit
+utiliser les lettres \verb|L|, \verb|C| et~\verb|R| au lieu de \verb|l|, \verb|c| et \verb|r|. Il est possible
+d'utiliser les constructions \verb|w{...}{...}|, \verb|W{...}{...}|\footnote{Pour les colonnes de type \verb|w| et
+ \verb|W|, les cases sont composées en mode mathématique (dans les environnements de \pkg{nicematrix}) alors que
+ dans \verb|{array}| de \pkg{array}, elles sont composées en mode texte.}, \verb+|+, \verb|>{...}|, \verb|<{...}|,
+\verb|@{...}|, \verb|!{...}| et \verb|*{n}{...}| mais les lettres \verb|p|, \verb|m| et \verb|b| ne doivent pas
+être employées. L'environnement \verb|{NiceArray}| et ses variantes fournissent des options qui permettent de
+tracer des rangées et colonnes extérieures. Voir p.~\pageref{NiceArray} la partie concernant \verb|{NiceArray}|.
+
+\section{Les lignes en pointillés continues}
+
+À l'intérieur des environnements de l'extension \pkg{nicematrix}, de nouvelles commandes sont définies :
+\verb|\Ldots|, \verb|\Cdots|, \verb|\Vdots|, \verb|\Ddots|, and \verb|\Iddots|. Ces commandes sont conçues pour
+être utilisées à la place de \verb|\dots|, \verb|\cdots|, \verb|\vdots|, \verb|\ddots| et \verb|\iddots|.\footnote{La
+ commande \verb|\iddots|, définie dans \pkg{nicematrix}, est une variante de \verb|\ddots| avec les points allant
+ vers le haut : \smash{$\iddots$}. Si \pkg{mathdots} est chargée, la version de \pkg{mathdots} est utilisée. Elle
+ correspond à la commande \verb|\adots| de \pkg{unicode-math}.}
+\newcounter{fniddots}
+\setcounter{fniddots}{\thefootnote}
+
+\smallskip
+Chacune de ces commandes doit être utilisée seule dans la case du tableau et elle trace une ligne en pointillés
+entre les premières cases non vides\footnote{La définition précise de ce qui est considéré comme une «case
+ vide» est donnée plus loin (cf. p.~\pageref{empty-cells}).} situées de part et d'autre de la case courante.
+Bien entendu, pour \verb|\Ldots| et \verb|\Cdots|, c'est une ligne horizontale ; pour \verb|\Vdots|, c'est une
+ligne verticale et pour \verb|\Ddots| et \verb|\Iddots|, ce sont des lignes diagonales.\par\nobreak\bigskip
+
+\begin{BVerbatim}[baseline=c,boxwidth=10cm]
+\begin{bNiceMatrix}
+a_1 & \Cdots & & & a_1 \\
+\Vdots & a_2 & \Cdots & & a_2 \\
+ & \Vdots & \Ddots \\
+\\
+a_1 & a_2 & & & a_n
+\end{bNiceMatrix}
+\end{BVerbatim}
+$\begin{bNiceMatrix}
+a_1 & \Cdots & & & a_1 \\
+\Vdots & a_2 & \Cdots & & a_2 \\
+ & \Vdots & \Ddots \\
+\\
+a_1 & a_2 & & & a_n
+\end{bNiceMatrix}$
+
+\interitem
+Pour représenter la matrice nulle, on peut choisir d'utiliser le codage
+suivant :\par\nobreak \bigskip
+\begin{BVerbatim}[baseline=c,boxwidth=10cm]
+\begin{bNiceMatrix}
+0 & \Cdots & 0 \\
+\Vdots & & \Vdots \\
+0 & \Cdots & 0
+\end{bNiceMatrix}
+\end{BVerbatim}
+$\begin{bNiceMatrix}
+0 & \Cdots & 0 \\
+\Vdots & & \Vdots \\
+0 & \Cdots & 0
+\end{bNiceMatrix}$
+
+\bigskip
+On peut néanmoins souhaiter une matrice plus grande. Habituellement, dans un
+tel cas, les utilisateurs de LaTeX ajoutent une nouvelle ligne et une nouvelle
+colonne. Il est possible d'utiliser la même méthode avec \pkg{nicematrix}
+:\par\nobreak \bigskip
+\begin{BVerbatim}[baseline=c,boxwidth=10cm]
+\begin{bNiceMatrix}
+0 & \Cdots & \Cdots & 0 \\
+\Vdots & & & \Vdots \\
+\Vdots & & & \Vdots \\
+0 & \Cdots & \Cdots & 0
+\end{bNiceMatrix}
+\end{BVerbatim}
+$\begin{bNiceMatrix}
+0 & \Cdots & \Cdots & 0 \\
+\Vdots & & & \Vdots \\
+\Vdots & & & \Vdots \\
+0 & \Cdots & \Cdots & 0
+\end{bNiceMatrix}$
+
+\bigskip
+Dans la première colonne de cet exemple, il y a deux instructions \verb|\Vdots| mais
+une seule ligne en pointillés sera tracée (il n'y a pas d'objets qui se
+superposent dans le fichier \textsc{pdf} résultant\footnote{Et il n'est pas
+possible de tracer une ligne \verb|\Ldots| et une ligne \verb|\Cdots| entre les mêmes cases.}).
+
+Néanmoins, des calculs inutiles sont effectués par TeX avant qu'il ne détecte
+que les deux instructions définissent la même ligne en pointillés. C'est
+pourquoi l'extension \pkg{nicematrix} fournit des versions étoilées de
+\verb|\Ldots|, \verb|\Cdots|, etc. : \verb|\Ldots*|, \verb|\Cdots*|, etc. Ces versions sont
+simplement équivalentes à \verb|\hphantom{\ldots}|, \verb|\hphantom{\cdots}|, etc.
+L'utilisateur devrait utiliser des versions étoilées à chaque fois qu'une
+version classique (sans étoile) a déjà été utilisée pour la même ligne en pointillés.\par\nobreak
+
+\bigskip
+\begin{BVerbatim}[baseline=c,boxwidth=10cm]
+\begin{bNiceMatrix}
+0 & \Cdots & ~emphase#\Cdots*@ & 0 \\
+\Vdots & & & \Vdots \\
+~emphase#\Vdots*@ & & & ~emphase#\Vdots*@ \\
+0 & \Cdots & ~emphase#\Cdots*@ & 0
+\end{bNiceMatrix}
+\end{BVerbatim}
+$\begin{bNiceMatrix}
+0 & \Cdots & & 0 \\
+\Vdots & & & \\
+ & & & \Vdots \\
+0 & & \Cdots & 0
+\end{bNiceMatrix}$
+
+\bigskip
+En fait, dans cet exemple, il aurait été possible de tracer la même matrice
+sans commande étoilée avec le codage suivant :\par\nobreak
+\bigskip
+\begin{BVerbatim}[baseline=c,boxwidth=10cm]
+\begin{bNiceMatrix}
+0 & \Cdots & & 0 \\
+\Vdots & & & \\
+ & & & \Vdots \\
+0 & & \Cdots & 0
+\end{bNiceMatrix}
+\end{BVerbatim}
+$\begin{bNiceMatrix}
+0 & \Cdots & & 0 \\
+\Vdots & & & \\
+ & & & \Vdots \\
+0 & & \Cdots & 0
+\end{bNiceMatrix}$
+
+\bigskip
+Il y a aussi d'autres moyens de changer la taille d'une matrice. On pourrait vouloir utiliser l'argument optionnel
+de la commande~\verb|\\| pour l'espacement vertical et la commande~\verb|\hspace*| dans une case pour l'espacement
+horizontal.\footnote{Le meilleur moyen de régler la largeur des colonnes est, de toutes manières, d'utiliser
+ l'environnement \verb|{NiceArray}| (ou une de ses variantes) avec une colonne de type~\verb|w| ou \verb|W|: cf.
+ p.~\pageref{width}}
+
+Toutefois, une commande~\verb|\hspace*| pourrait interférer dans la construction des lignes en pointillés. C'est
+pourquoi l'extension \pkg{nicematrix} fournit une commande~\verb|\Hspace| qui est une variante de \verb|\hspace|
+transparente pour la construction des lignes en pointillés de \pkg{nicematrix}.\par\nobreak
+\bigskip
+\begin{BVerbatim}[baseline=c,boxwidth=10cm]
+\begin{bNiceMatrix}
+0 & \Cdots & ~emphase#\Hspace*{1cm}@ & 0 \\
+\Vdots & & & \Vdots \\~emphase#[1cm]@
+0 & \Cdots & & 0
+\end{bNiceMatrix}
+\end{BVerbatim}
+$\begin{bNiceMatrix}
+0 & \Cdots & \Hspace*{1cm} & 0 \\
+\Vdots & & & \Vdots \\[1cm]
+0 & \Cdots & & 0
+\end{bNiceMatrix}$
+
+\subsection{L'option nullify-dots}
+
+Considérons la matrice suivante qui a été composée classiquement avec l'environnement
+\verb|{pmatrix}| de \pkg{amsmath}.\par\nobreak
+
+\medskip
+\begin{BVerbatim}[baseline=c,boxwidth=8cm]
+$A = \begin{pmatrix}
+a_0 & b \\
+a_1 & \\
+a_2 & \\
+a_3 & \\
+a_4 & \\
+a_5 & b
+\end{pmatrix}$
+\end{BVerbatim}
+$A = \begin{pmatrix}
+a_0 & b \\
+a_1 & \\
+a_2 & \\
+a_3 & \\
+a_4 & \\
+a_5 & b
+\end{pmatrix}$
+
+
+\bigskip
+Si nous ajoutons des instructions \verb|\vdots| dans la seconde colonne, la
+géométrie de la matrice est modifiée.\par\nobreak
+\medskip
+\begin{BVerbatim}[baseline=c,boxwidth=8cm]
+$B = \begin{pmatrix}
+a_0 & b \\
+a_1 & \vdots \\
+a_2 & \vdots \\
+a_3 & \vdots \\
+a_4 & \vdots \\
+a_5 & b
+\end{pmatrix}$
+\end{BVerbatim}
+$B = \begin{pmatrix}
+a_0 & b \\
+a_1 & \vdots \\
+a_2 & \vdots \\
+a_3 & \vdots \\
+a_4 & \vdots \\
+a_5 & b
+\end{pmatrix}$
+
+\bigskip
+Par défaut, avec \pkg{nicematrix}, si nous remplaçons \verb|{pmatrix}| par \verb|{pNiceMatrix}| et \verb|\vdots| par
+\verb|\Vdots| (or \verb|\Vdots*| pour la rapidité de compilation), la géométrie de la matrice n'est pas
+changée.\par\nobreak
+\medskip
+\begin{BVerbatim}[baseline=c,boxwidth=8cm]
+$C = \begin{pNiceMatrix}
+a_0 & b \\
+a_1 & \Vdots \\
+a_2 & \Vdots* \\
+a_3 & \Vdots* \\
+a_4 & \Vdots* \\
+a_5 & b
+\end{pNiceMatrix}$
+\end{BVerbatim}
+$C = \begin{pNiceMatrix}
+a_0 & b \\
+a_1 & \Vdots \\
+a_2 & \Vdots* \\
+a_3 & \Vdots* \\
+a_4 & \Vdots* \\
+a_5 & b
+\end{pNiceMatrix}$
+
+\bigskip
+On pourrait toutefois préférer la géométrie de la première matrice $A$ et
+vouloir avoir la même géométrie avec une ligne en pointillés continue dans la
+seconde colonne. C'est possible en utilisant l'option \verb|nullify-dots| (et une
+seule instruction \verb|\Vdots| suffit).\par\nobreak
+\medskip
+\begin{BVerbatim}[baseline=c,boxwidth=8cm]
+$D = \begin{pNiceMatrix}[~emphase#nullify-dots@]
+a_0 & b \\
+a_1 & \Vdots \\
+a_2 & \\
+a_3 & \\
+a_4 & \\
+a_5 & b
+\end{pNiceMatrix}$
+\end{BVerbatim}
+$D = \begin{pNiceMatrix}[nullify-dots]
+a_0 & b \\
+a_1 & \Vdots \\
+a_2 & \\
+a_3 & \\
+a_4 & \\
+a_5 & b
+\end{pNiceMatrix}$
+
+\medskip
+L'option \verb|nullify-dots| «smashe» les instructions \verb|\Ldots| (et ses variantes)
+verticalement mais aussi horizontalement.
+
+\medskip
+{\bfseries Il doit n'y avoir aucun espace devant le crochet ouvrant (\verb|[|) des
+options de l'environnement.}
+
+\subsection{La commande \textbackslash Hdotsfor}
+
+Certaines personnes utilisent habituellement la commande \verb|\hdotsfor| de
+l'extension \pkg{amsmath} pour tracer des lignes en pointillés horizontales
+dans une matrice. Dans les environnements de \pkg{nicematrix}, il convient
+d'utiliser \verb|\Hdotsfor| à la place pour avoir les lignes en pointillés
+similaires à toutes celles tracées par l'extension \pkg{nicematrix}.
+
+Comme avec les autres commandes de \pkg{nicematrix} (comme \verb|\Cdots|, \verb|\Ldots|, \verb|\Vdots|, etc.), la ligne
+en pointillés tracée par \verb|\Hdotsfor| s'étend jusqu'au contenu des cases de part et d'autre.
+
+\medskip
+\begin{BVerbatim}[baseline=c,boxwidth=7cm]
+$\begin{pNiceMatrix}
+1 & 2 & 3 & 4 & 5 \\
+1 & ~emphase#\Hdotsfor{3}@ & 5 \\
+1 & 2 & 3 & 4 & 5 \\
+1 & 2 & 3 & 4 & 5
+\end{pNiceMatrix}$
+\end{BVerbatim}
+$\begin{pNiceMatrix}
+1 & 2 & 3 & 4 & 5 \\
+1 & \Hdotsfor{3} & 5 \\
+1 & 2 & 3 & 4 & 5 \\
+1 & 2 & 3 & 4 & 5
+\end{pNiceMatrix}$
+
+\bigskip
+Néanmoins, si ces cases sont vides, la ligne en pointillés s'étend seulement dans les cases spécifiées par
+l'argument de \verb|\Hdotsfor| (par conception).
+
+\medskip
+\begin{BVerbatim}[baseline=c,boxwidth=7cm]
+$\begin{pNiceMatrix}
+1 & 2 & 3 & 4 & 5 \\
+ & ~emphase#\Hdotsfor{3}@ \\
+1 & 2 & 3 & 4 & 5 \\
+1 & 2 & 3 & 4 & 5 \\
+\end{pNiceMatrix}$
+\end{BVerbatim}
+$\begin{pNiceMatrix}
+1 & 2 & 3 & 4 & 5 \\
+ & \Hdotsfor{3} \\
+1 & 2 & 3 & 4 & 5 \\
+1 & 2 & 3 & 4 & 5
+\end{pNiceMatrix}$
+
+\bigskip
+La commande \verb|\hdotsfor| de \pkg{amsmath} prend un argument optionnel (entre
+crochets) qui est utilisé pour un réglage fin de l'espace entre deux points
+consécutifs. Par homogénéité, \verb|\Hdotsfor| prend aussi un argument optionnel
+mais cet argument est écarté silencieusement.
+
+Remarque : Contrairement à la commande \verb|\hdotsfor| de \pkg{amsmath}, la commande \verb|\Hdotsfor| est
+utilisable lorsque l'extension \pkg{colortbl} est chargée (mais vous risquez d'avoir des problèmes si vous utilisez
+\verb|\rowcolor| sur la même rangée que \verb|\Hdotsfor|).
+
+\subsection{Comment créer les lignes en pointillés de manière transparente}
+
+L'extension \pkg{nicematrix} fournit une option appelée \verb|transparent| qui permet d'utiliser du code existant
+de manière transparente dans les environnements \verb|{matrix}|. Cette option peut être passée en option du
+\verb|\usepackage| ou bien être fixée avec la commande \verb|\NiceMatrixOptions|.
+
+En fait, cette option est un alias pour la conjonction de deux options : \verb|renew-dots| et \verb|renew-matrix|.
+
+\smallskip
+
+\begin{itemize}
+\item L'option \verb|renew-dots|\par\nobreak Avec cette option, les commandes \verb|\ldots|, \verb|\cdots|,
+\verb|\vdots|, \verb|\ddots|, \verb|\iddots|\footnotemark[\thefniddots] et \verb|\hdotsfor| sont redéfinies dans
+les environnements de \pkg{nicematrix} et agissent comme \verb|\Ldots|, \verb|\Cdots|, \verb|\Vdots|,
+\verb|\Ddots|, \verb|\Iddots| et \verb|\Hdotsfor| ; la commande \verb|\dots| (points de suspension «automatiques»
+de \verb|amsmath|) est aussi redéfinie et se comporte comme \verb|\Ldots|.
+
+\item L'option \verb|renew-matrix|\par\nobreak
+Avec cette option, l'environnement \verb|{matrix}| est redéfini et
+se comporte comme \verb|{NiceMatrix}| et il en est de même pour les cinq variantes.
+\end{itemize}
+
+\bigskip
+Par conséquent, avec l'option \verb|transparent|, un code classique donne directement le résultat fourni par
+\pkg{nicematrix}.\par\nobreak
+\bigskip
+\begin{scope}
+\NiceMatrixOptions{transparent}
+\begin{BVerbatim}[baseline=c,boxwidth=10cm]
+~emphase#\NiceMatrixOptions{transparent}@
+\begin{pmatrix}
+1 & \cdots & \cdots & 1 \\
+0 & \ddots & & \vdots \\
+\vdots & \ddots & \ddots & \vdots \\
+0 & \cdots & 0 & 1
+\end{pmatrix}
+\end{BVerbatim}
+$\begin{pmatrix}
+1 & \cdots & \cdots & 1 \\
+0 & \ddots & & \vdots \\
+\vdots & \ddots & \ddots & \vdots \\
+0 & \cdots & 0 & 1
+\end{pmatrix}$
+\end{scope}
+
+
+
+
+\section{Les nœuds Tikz créés par l'extension nicematrix}
+
+L'extension \pkg{nicematrix} crée un nœud Tikz pour chaque case du tableau considéré. Ces nœuds sont utilisés
+pour tracer les lignes en pointillés entre les cases du tableau. Toutefois, l'utilisateur peut utiliser
+directement ces nœuds. On commence par donner un nom au tableau (avec l'option \verb|name|). Cela étant fait, les
+nœuds sont accessibles à travers les noms «\textsl{nom}-$i$-$j$» où \textsl{nom} est le nom donné au tableau et $i$
+et $j$ les numéros de ligne et de colonne de la case considérée.
+
+\medskip
+\begin{BVerbatim}[baseline=c,boxwidth=11cm]
+$\begin{pNiceMatrix}[name=~emphase#ma-matrice@]
+1 & 2 & 3 \\
+4 & 5 & 6 \\
+7 & 8 & 9
+\end{pNiceMatrix}$
+\tikz[remember picture,overlay]
+ \draw ~emphase#(ma-matrice-2-2)@ circle (2mm) ;
+\end{BVerbatim}
+$\begin{pNiceMatrix}[name=ma-matrice]
+1 & 2 & 3 \\
+4 & 5 & 6 \\
+7 & 8 & 9
+\end{pNiceMatrix}$
+\tikz[remember picture,overlay]
+ \draw (ma-matrice-2-2) circle (2mm) ;
+
+\medskip
+Ne pas oublier les options \verb|remember picture| et \verb|overlay|.
+
+\bigskip
+Dans l'exemple suivant, nous avons surligné toutes les cases de la matrice.
+\begin{scope}
+\tikzset{every node/.style = {fill = red!15, inner sep = 0pt}}
+\[\begin{pNiceMatrix}
+a & a + b & a + b + c \\
+a & a & a + b \\
+a & a & a
+\end{pNiceMatrix}\]
+\end{scope}
+
+
+\bigskip
+En fait, l'extension \pkg{nicematrix} peut créer des nœuds supplémentaires (\emph{extra nodes} en anglais). Ces
+nouveaux nœuds sont créés si l'option \verb|create-extra-nodes| est utilisée. Il y a deux séries de nœuds
+supplémentaires : les «nœuds moyens» (\emph{medium nodes} en anglais) et les «nœuds larges» (\emph{large nodes} en
+anglais).
+
+\medskip
+Les noms des «nœuds moyens» s'obtiennent en ajoutant le suffixe «\verb|-medium|» au nom des nœuds normaux. Dans
+l'exemple suivant, on a surligné tous les «nœuds moyens». Nous considérons que cet exemple se suffit à lui-même
+comme définition de ces nœuds.
+\[\begin{pNiceMatrix}[
+ create-extra-nodes,
+ code-after = {\begin{tikzpicture}
+ [every node/.style = {fill = red!15,
+ blend mode = multiply,
+ inner sep = -\pgflinewidth/2},
+ name suffix = -medium]
+ \node [fit = (1-1)] {} ;
+ \node [fit = (1-2)] {} ;
+ \node [fit = (1-3)] {} ;
+ \node [fit = (2-1)] {} ;
+ \node [fit = (2-2)] {} ;
+ \node [fit = (2-3)] {} ;
+ \node [fit = (3-1)] {} ;
+ \node [fit = (3-2)] {} ;
+ \node [fit = (3-3)] {} ;
+ \end{tikzpicture}}]
+a & a + b & a + b + c \\
+a & a & a + b \\
+a & a & a
+\end{pNiceMatrix}\]
+
+
+\medskip
+Les noms des «nœuds larges» s'obtiennent en ajoutant le suffixe «\verb|-large|» au nom des nœuds normaux. Dans l'exemple
+suivant, on a surligné tous les «nœuds larges». Nous considérons que cet exemple se suffit à lui-même comme
+définition de ces nœuds.\footnote{Il n'y a pas de «nœuds larges» créés dans les lignes et colonnes extérieures
+ (pour ces lignes et colonnes, voir p.~\pageref{exterior}).}
+
+\[\begin{pNiceMatrix}[
+ create-extra-nodes,
+ code-after = {\begin{tikzpicture}
+ [every node/.style = {blend mode = multiply,
+ inner sep = -\pgflinewidth/2},
+ name suffix = -large]
+ \node [fit = (1-1),fill = red!15] {} ;
+ \node [fit = (1-3),fill = red!15] {} ;
+ \node [fit = (2-2),fill = red!15] {} ;
+ \node [fit = (3-1),fill = red!15] {} ;
+ \node [fit = (3-3),fill = red!15] {} ;
+ \node [fit = (1-2),fill = blue!15] {} ;
+ \node [fit = (2-1),fill = blue!15] {} ;
+ \node [fit = (2-3),fill = blue!15] {} ;
+ \node [fit = (3-2),fill = blue!15] {} ;
+ \end{tikzpicture}}]
+a & a + b & a + b + c \\
+a & a & a + b \\
+a & a & a
+\end{pNiceMatrix}\]
+
+
+\medskip
+Les «nœuds larges» de la première colonne et de la dernière colonne peuvent apparaître trop petits pour certains
+usages. C'est pourquoi il est possible d'utiliser les options \verb|left-margin| et \verb|right-margin| pour
+ajouter de l'espace des deux côtés du tableau et aussi de l'espace dans les «nœuds larges» de la première colonne et
+de la dernière colonne. Dans l'exemple suivant, nous avons utilisé les options \verb|left-margin| et \verb|right-margin|.
+\footnote{Les options \verb|left-margin| et \verb|right-margin| prennent des dimensions comme valeurs mais, si
+ aucune valeur n'est donnée, c'est la valeur par défaut qui est utilisée et elle est égale à \verb|\arraycolsep|.}
+\[\begin{pNiceMatrix}[
+ create-extra-nodes,left-margin,right-margin,
+ code-after = {\begin{tikzpicture}
+ [every node/.style = {blend mode = multiply,
+ inner sep = -\pgflinewidth/2},
+ name suffix = -large]
+ \node [fit = (1-1),fill = red!15] {} ;
+ \node [fit = (1-3),fill = red!15] {} ;
+ \node [fit = (2-2),fill = red!15] {} ;
+ \node [fit = (3-1),fill = red!15] {} ;
+ \node [fit = (3-3),fill = red!15] {} ;
+ \node [fit = (1-2),fill = blue!15] {} ;
+ \node [fit = (2-1),fill = blue!15] {} ;
+ \node [fit = (2-3),fill = blue!15] {} ;
+ \node [fit = (3-2),fill = blue!15] {} ;
+ \end{tikzpicture}}]
+a & a + b & a + b + c \\
+a & a & a + b \\
+a & a & a
+\end{pNiceMatrix}\]
+
+\medskip
+Il est aussi possible d'ajouter de l'espace sur les côtés du tableau avec les options
+\verb|extra-left-margin| et \verb|extra-right-margin|. Ces marges ne sont pas incorporées dans les «nœuds larges».
+Dans l'exemple suivant, nous avons utilisé \verb|extra-left-margin| et \verb|extra-right-margin| avec la valeur $3$~pt.
+\[\begin{pNiceMatrix}[
+ create-extra-nodes,left-margin,right-margin,extra-right-margin=3pt,extra-left-margin=3pt,
+ code-after = {\begin{tikzpicture}
+ [every node/.style = {blend mode = multiply,
+ inner sep = -\pgflinewidth/2},
+ name suffix = -large]
+ \node [fit = (1-1),fill = red!15] {} ;
+ \node [fit = (1-3),fill = red!15] {} ;
+ \node [fit = (2-2),fill = red!15] {} ;
+ \node [fit = (3-1),fill = red!15] {} ;
+ \node [fit = (3-3),fill = red!15] {} ;
+ \node [fit = (1-2),fill = blue!15] {} ;
+ \node [fit = (2-1),fill = blue!15] {} ;
+ \node [fit = (2-3),fill = blue!15] {} ;
+ \node [fit = (3-2),fill = blue!15] {} ;
+ \end{tikzpicture}}]
+a & a + b & a + b + c \\
+a & a & a + b \\
+a & a & a
+\end{pNiceMatrix}\]
+
+\medskip
+Dans le cas présent, si on veut un contrôle sur la hauteur des rangées, on peut ajouter un \verb|\strut| dans
+chaque rangée du tableau.
+\[\begin{pNiceMatrix}[
+ create-extra-nodes,left-margin,right-margin,extra-right-margin=3pt,extra-left-margin=3pt,
+ code-after = {\begin{tikzpicture}
+ [every node/.style = {blend mode = multiply,
+ inner sep = -\pgflinewidth/2},
+ name suffix = -large]
+ \node [fit = (1-1),fill = red!15] {} ;
+ \node [fit = (1-3),fill = red!15] {} ;
+ \node [fit = (2-2),fill = red!15] {} ;
+ \node [fit = (3-1),fill = red!15] {} ;
+ \node [fit = (3-3),fill = red!15] {} ;
+ \node [fit = (1-2),fill = blue!15] {} ;
+ \node [fit = (2-1),fill = blue!15] {} ;
+ \node [fit = (2-3),fill = blue!15] {} ;
+ \node [fit = (3-2),fill = blue!15] {} ;
+ \end{tikzpicture}}]
+\strut a & a + b & a + b + c \\
+\strut a & a & a + b \\
+\strut a & a & a
+\end{pNiceMatrix}\]
+
+\bigskip
+On explique plus loin comment surligner les nœuds créés par Tikz (cf. p. \pageref{highlight}).
+
+\section{Le code-after}
+
+L'option \verb|code-after| peut être utilisée pour indiquer du code qui sera exécuté après la construction de la
+matrice (et donc, en particulier, après la construction de tous les nœuds).
+
+Dans le \verb|code-after|, les nœuds Tikz doivent être désignés sous la forme $i$-$j$ (sans le préfixe
+correspondant au nom de l'environnement).
+
+De plus, une commande spéciale, nommée \verb|\line| est disponible pour tracer directement des lignes en pointillés
+entre les nœuds).
+
+\medskip
+\begin{BVerbatim}[baseline=c,boxwidth=12cm]
+$\begin{pNiceMatrix}[~emphase#code-after = {\line {1-1} {3-3}}@]
+0 & 0 & 0 \\
+0 & & 0 \\
+0 & 0 & 0
+\end{pNiceMatrix}$
+\end{BVerbatim}
+$\begin{pNiceMatrix}[code-after = {\line {1-1} {3-3}}]
+0 & 0 & 0 \\
+0 & & 0 \\
+0 & 0 & 0
+\end{pNiceMatrix}$
+
+
+\section{L'environnement \{NiceArray\}}
+\label{NiceArray}
+
+L'environnement \verb|{NiceArray}| est similaire à l'environnement \verb|{array}|. Comme pour \verb|{array}|,
+l'argument obligatoire est le préambule du tableau. Néanmoins, pour des raisons techniques, l'utilisateur doit
+utiliser les lettres \verb|L|, \verb|C| et \verb|R|\footnote{Les types de colonnes \verb|L|, \verb|C| et \verb|R|
+ sont définis localement à l'intérieur de \verb|{NiceArray}| avec la commande \verb|\newcolumntype| de
+ \pkg{array}. Cette définition masque une éventuelle définition précédente. En fait, les types de colonnes
+ \verb|w| and \verb|W| sont également redéfinis.} au lieu de \verb|l|, \verb|c| et \verb|r|.
+
+Il est possible d'utiliser les constructions \verb|w{...}{...}|, \verb|W{...}{...}|, \verb+|+, \verb|>{...}|,
+\verb|<{...}|, \verb|@{...}|, \verb|!{...}| et \verb|*{n}{...}| mais les lettres \verb|p|, \verb|m| et \verb|b| ne
+doivent pas être employées.\footnote{Dans une commande \verb|\multicolumn|, on doit également utiliser les lettres
+ \verb|L|, \verb|C| et
+ \verb|R|.}
+
+\medskip
+L'environnement \verb|{NiceArray}| accepte les options classiques \verb|t|, \verb|c| et \verb|b| de \verb|{array}|
+mais aussi d'autres options définies par \pkg{nicematrix} (\verb|renew-dots|, \verb|columns-width|, etc.).
+
+
+\vspace{1cm}
+Un exemple avec un système linéaire (on a besoin de \verb|{NiceArray}| pour le trait vertical):
+
+\bigskip
+\begin{BVerbatim}[baseline=c,boxwidth=10cm]
+$\left[\begin{NiceArray}{CCCC|C}
+a_1 & ? & \Cdots & ? & ? \\
+0 & & \Ddots & \Vdots & \Vdots\\
+\Vdots & \Ddots & \Ddots & ? \\
+0 & \Cdots & 0 & a_n & ?
+\end{NiceArray}\right]$
+\end{BVerbatim}
+$\left[\begin{NiceArray}{CCCC|C}
+a_1 & ? & \Cdots & ? & ? \\
+0 & & \Ddots & \Vdots & \Vdots\\
+\Vdots & \Ddots & \Ddots & ? \\
+0 & \Cdots & 0 & a_n & ?
+\end{NiceArray}\right]$
+
+\vspace{1cm}
+Il existe également des variantes pour l'environnement \verb|{NiceArray}|:
+\verb|{pNiceArray}|, \verb|{bNiceArray}|, \verb|{BNiceArray}|, \verb|{vNiceArray}| et
+\verb|{VNiceArray}|.
+
+
+Dans l'exemple suivant, on utilise un environnment \verb|{pNiceArray}| (on n'utilise pas \verb|{pNiceMatrix}| car
+on souhaite utiliser les types de colonne \verb|L| et \verb|R| --- avec \verb|{pNiceMatrix}|, toutes les
+colonnes sont de type \verb|C|).
+
+
+\bigskip
+\begin{BVerbatim}[baseline=c,boxwidth=10cm]
+$\begin{pNiceArray}{LCR}
+a_{11} & \Cdots & a_{1n} \\
+a_{21} & & a_{2n} \\
+\Vdots & & \Vdots \\
+a_{n-1,1} & \Cdots & a_{n-1,n}
+\end{pNiceArray}$
+\end{BVerbatim}
+$\begin{pNiceArray}{LCR}
+a_{11} & \Cdots & a_{1n} \\
+a_{21} & & a_{2n} \\
+\Vdots & & \Vdots \\
+a_{n-1,1} & \Cdots & a_{n-1,n}
+\end{pNiceArray}$
+
+\vspace{1cm}
+L'environnement \verb|{NiceArray}| et ses variantes permettent de composer des rangées et des colonnes «extérieures» grâce aux options
+\verb|first-row|, \verb|last-row|, \verb|first-col| et \verb|last-col|.
+\label{exterior}
+
+Il n'y a pas de spécification de colonne à fournir pour l'éventuelle «première colonne» (qui sera automatiquement
+une colonne de type \verb|R|) ou pour l'éventuelle «dernière colonne» (qui sera automatiquement de type \verb|L|).
+
+
+\begin{Verbatim}
+$\begin{pNiceArray}{CCCC}[~emphase#first-row,last-row,first-col,last-col@]
+ & C_1 & C_2 & C_3 & C_4 & \\
+L_1 & a_{11} & a_{12} & a_{13} & a_{14} & L_1 \\
+L_2 & a_{21} & a_{22} & a_{23} & a_{24} & L_2 \\
+L_3 & a_{31} & a_{32} & a_{33} & a_{34} & L_3 \\
+L_4 & a_{41} & a_{42} & a_{43} & a_{44} & L_4 \\
+ & C_1 & C_2 & C_3 & C_4 &
+\end{pNiceArray}$
+\end{Verbatim}
+%
+\[\begin{pNiceArray}{CCCC}[first-row,last-row,first-col,last-col]
+ & C_1 & C_2 & C_3 & C_4 & \\
+L_1 & a_{11} & a_{12} & a_{13} & a_{14} & L_1 \\
+L_2 & a_{21} & a_{22} & a_{23} & a_{24} & L_2 \\
+L_3 & a_{31} & a_{32} & a_{33} & a_{34} & L_3 \\
+L_4 & a_{41} & a_{42} & a_{43} & a_{44} & L_4 \\
+ & C_1 & C_2 & C_3 & C_4 &
+\end{pNiceArray}\]
+
+\bigskip
+
+Néanmoins, il y a une particularité avec l'option \verb|last-row| : quand LaTeX compose un tableau \verb|{array}|
+(via une commande \verb|\halign| de TeX), il le compose rangée par rangée et il n'y a pas de moyen direct de savoir
+que l'on est arrivé à la dernière rangée avant la composition de celle-ci. Pour remédier à ce problème,
+\pkg{nicematrix} écrit dans le fichier \verb|aux| le nombre de rangées du tableau pour pouvoir l'utiliser à la
+compilation suivante. Il est néanmoins également possible de passer directement le nombre de rangées en argument de
+l'option \verb|last-row| et, ainsi, \pkg{nicematrix} le connaîtra dès la première compilation.
+
+\bigskip
+On peut contrôler l'apparence de ces rangées et colonnes avec les options \verb|code-for-first-row|,
+\verb|code-for-last-row|, \verb|code-for-first-col| et \verb|code-for-last-col|. Ces options sont des listes de
+tokens qui seront insérées au début de chaque case de la rangée ou de la colonne considérée.
+
+\begin{Verbatim}
+\NiceMatrixOptions{~emphase#code-for-first-row@ = \color{red},
+ ~emphase#code-for-first-col@ = \color{blue},
+ ~emphase#code-for-last-row@ = \color{green},
+ ~emphase#code-for-last-col@ = \color{magenta}}
+$\begin{pNiceArray}{CC|CC}[first-row,last-row=5,first-col,last-col]
+ & C_1 & C_2 & C_3 & C_4 & \\
+L_1 & a_{11} & a_{12} & a_{13} & a_{14} & L_1 \\
+L_2 & a_{21} & a_{22} & a_{23} & a_{24} & L_2 \\
+\hline
+L_3 & a_{31} & a_{32} & a_{33} & a_{34} & L_3 \\
+L_4 & a_{41} & a_{42} & a_{43} & a_{44} & L_4 \\
+ & C_1 & C_2 & C_3 & C_4 &
+\end{pNiceArray}$
+\end{Verbatim}
+%
+\begin{scope}
+\NiceMatrixOptions{code-for-first-row = \color{red},
+ code-for-first-col = \color{blue},
+ code-for-last-row = \color{green},
+ code-for-last-col = \color{magenta}}
+\[\begin{pNiceArray}{CC|CC}[first-row,last-row=5,first-col,last-col]
+ & C_1 & \multicolumn1C{C_2} & C_3 & C_4 & \\
+L_1 & a_{11} & a_{12} & a_{13} & a_{14} & L_1 \\
+L_2 & a_{21} & a_{22} & a_{23} & a_{24} & L_2 \\
+\hline
+L_3 & a_{31} & a_{32} & a_{33} & a_{34} & L_3 \\
+L_4 & a_{41} & a_{42} & a_{43} & a_{44} & L_4 \\
+ & C_1 & \multicolumn1C{C_2} & C_3 & C_4 &
+\end{pNiceArray}\]
+\end{scope}
+
+
+
+\emph{Remarques}
+\begin{itemize}
+\item Comme on peut le voir dans l'exemple précédent, un filet horizontal (tracé avec \verb|\hline|) ne s'étend pas
+dans les colonnes extérieures et un filet vertical (spécifié par un caractère «\verb+|+» dans le préambule du
+tableau) ne s'étend pas dans les rangées extérieures.\footnote{Ce dernier point n'est pas valable si on a chargé,
+ en plus de \pkg{nicematrix}, l'extension \pkg{arydshln}. Les extensions \pkg{nicematrix} et \pkg{arydshln} ne
+ sont pas parfaitement compatibles car \pkg{arydshln} redéfinit beaucoup de structures internes à \pkg{array}.}
+\item La «première rangée» d'un environnement \verb|{pNiceArray}| porte le numéro $0$, et non $1$ (de même pour la
+«première colonne»). Ce numéro est utilisé, par exemple, pour les noms des nœuds Tikz (les noms de ces nœuds sont
+utilisés, par exemple, par la commande \verb|\line| dans le \verb|code-after|).
+\item Sans surprise, une éventuelle option \verb|columns-width| (décrite p.~\pageref{width}) ne s'applique pas à la
+«première colonne» ni à la «dernière colonne».
+\item Pour des raisons techniques, il n'est pas possible d'utiliser l'option de la commande \verb|\\| après la
+«première rangée» ou avant la «dernière rangée» (le placement des délimiteurs serait erroné).
+\end{itemize}
+
+
+\bigskip
+En fait, l'environnement \verb|{pNiceArray}| et ses variantes sont fondés sur un environnement plus général, appelé
+\verb|{NiceArrayWithDelims}|. Les deux premiers arguments obligatoires de cet environnement sont les délimiteurs
+gauche et droit qui seront utilisés dans la construction de la matrice. Il est possible d'utiliser
+\verb|{NiceArrayWithDelims}| si on a besoin de délimiteurs atypiques.
+
+\medskip
+\begin{BVerbatim}[baseline=c,boxwidth=11cm]
+$\begin{~emphase#NiceArrayWithDelims@}
+ {\downarrow}{\downarrow}{CCC}[last-col]
+1 & 2 & 3 & L_1 \\
+4 & 5 & 6 & L_2 \\
+7 & 8 & 9 & L_3
+\end{~emphase#NiceArrayWithDelims@}$
+\end{BVerbatim}
+$\begin{NiceArrayWithDelims}
+ {\downarrow}{\downarrow}{CCC}[last-col]
+1 & 2 & 3 & L_1 \\
+4 & 5 & 6 & L_2 \\
+7 & 8 & 9 & L_3
+\end{NiceArrayWithDelims}$
+
+
+
+
+\section[Les lignes en pointillés pour séparer les rangées et les colonnes]{Les lignes en pointillés pour séparer les rangées\\ et les colonnes}
+
+
+Dans les environnements de \pkg{nicematrix}, il est possible d'utiliser la commande \verb|\hdottedline| (fournie
+par \pkg{nicematrix}) qui est l'équivalent pour les pointillés des commandes \verb|\hline| et \verb|\hdashline|
+(cette dernière étant une commande de \pkg{arydshln}).
+
+\medskip
+\begin{BVerbatim}[baseline=c,boxwidth=9.5cm]
+\begin{pNiceMatrix}
+1 & 2 & 3 & 4 & 5 \\
+~emphase#\hdottedline@
+6 & 7 & 8 & 9 & 10 \\
+11 & 12 & 13 & 14 & 15
+\end{pNiceMatrix}
+\end{BVerbatim}
+$\begin{pNiceMatrix}
+1 & 2 & 3 & 4 & 5 \\
+\hdottedline
+6 & 7 & 8 & 9 & 10 \\
+11 & 12 & 13 & 14 & 15
+\end{pNiceMatrix}$
+
+
+\bigskip
+Dans les environnements avec un préambule explicite (comme \verb|{NiceArray}|, \verb|{pNiceArray}|, etc.), il est
+possible de dessiner un trait vertical en pointillés avec le spécificateur «\verb|:|».
+
+\medskip
+\begin{BVerbatim}[baseline=c,boxwidth=9.5cm]
+\begin{pNiceArray}{CCCC~emphase#:@C}
+1 & 2 & 3 & 4 & 5 \\
+6 & 7 & 8 & 9 & 10 \\
+11 & 12 & 13 & 14 & 15
+\end{pNiceArray}
+\end{BVerbatim}
+$\begin{pNiceArray}{CCCC:C}
+1 & 2 & 3 & 4 & 5 \\
+6 & 7 & 8 & 9 & 10 \\
+11 & 12 & 13 & 14 & 15
+\end{pNiceArray}$
+
+
+\bigskip
+Ces lignes en pointillés ne s'étendent pas dans les rangées et colonnes extérieures.
+
+
+\medskip
+\begin{BVerbatim}[baseline=c,boxwidth=9.5cm]
+$\begin{pNiceArray}{CCC:C}%
+ [first-row,last-col,
+ code-for-first-row = \color{blue}\scriptstyle,
+ code-for-last-col = \color{blue}\scriptstyle ]
+C_1 & C_2 & C_3 & C_4 \\
+1 & 2 & 3 & 4 & L_1 \\
+5 & 6 & 7 & 8 & L_2 \\
+9 & 10 & 11 & 12 & L_3 \\
+\hdottedline
+13 & 14 & 15 & 16 & L_4
+\end{pNiceArray}$
+\end{BVerbatim}
+$\begin{pNiceArray}{CCC:C}%
+ [first-row,last-col,
+ code-for-first-row = \color{blue}\scriptstyle,
+ code-for-last-col = \color{blue}\scriptstyle ]
+C_1 & C_2 & C_3 & C_4 \\
+1 & 2 & 3 & 4 & L_1 \\
+5 & 6 & 7 & 8 & L_2 \\
+9 & 10 & 11 & 12 & L_3 \\
+\hdottedline
+13 & 14 & 15 & 16 & L_4
+\end{pNiceArray}$
+
+\bigskip
+Il est possible de changer dans \pkg{nicematrix} la lettre utilisée pour indiquer dans le préambule un trait
+vertical en pointillés avec l'option \verb|letter-for-dotted-lines| disponible dans \verb|\NiceMatrixOptions|. Par
+exemple, dans ce document, nous avons chargé l'extension \pkg{arydshln} qui utilise la lettre «\verb|:|» pour
+indiquer un trait vertical en tiretés. Par conséquent, en utilisant l'option \verb|letter-for-dotted-lines|, on
+peut utiliser les traits verticaux fournis à la fois par \pkg{arydshln} et par \pkg{nicematrix}.
+
+
+\medskip
+\begin{BVerbatim}[baseline=c,boxwidth=9.5cm]
+\NiceMatrixOptions{letter-for-dotted-lines = V}
+\begin{pNiceArray}{~emphase#C|C:CVC@}
+1 & 2 & 3 & 4 \\
+5 & 6 & 7 & 8 \\
+9 & 10 & 11 & 12
+\end{pNiceArray}
+\end{BVerbatim}
+\begin{scope}
+\NiceMatrixOptions{letter-for-dotted-lines = V}
+$\begin{pNiceArray}{C|C:CVC}
+1 & 2 & 3 & 4 \\
+5 & 6 & 7 & 8 \\
+9 & 10 & 11 & 12
+\end{pNiceArray}$
+\end{scope}
+
+\section{La largeur des colonnes}
+\label{width}
+
+Dans les environnements avec un préambule explicite (comme \verb|{NiceArray}|, \verb|{pNiceArray}|, etc.), il est
+possible de fixer la largeur d'une colonne avec les lettres classiques \verb|w| et \verb|W| de l'extension
+\pkg{array}. Dans les environnements de \pkg{nicematrix}, les cases des colonnes de ce type sont composées en mode
+mathématique (alors que dans \verb|{array}| de \pkg{array}, elles sont composées en mode texte).
+
+\medskip
+\begin{BVerbatim}[baseline=c,boxwidth=10cm]
+$\begin{pNiceArray}{~emphase#Wc{1cm}@CC}
+1 & 12 & -123 \\
+12 & 0 & 0 \\
+4 & 1 & 2
+\end{pNiceArray}$
+\end{BVerbatim}
+$\begin{pNiceArray}{Wc{1cm}CC}
+1 & 12 & -123 \\
+12 & 0 & 0 \\
+4 & 1 & 2
+\end{pNiceArray}$
+
+
+\bigskip
+Avec \pkg{nicematrix}, il est aussi possible de fixer la largeur de toutes les colonnes de la matrice directement
+avec l'option \verb|columns-width| (disponible dans tous les environnements de \pkg{nicematrix}).
+
+\medskip
+\begin{BVerbatim}[baseline=c,boxwidth=10cm]
+$\begin{pNiceMatrix}[~emphase#columns-width = 1cm@]
+1 & 12 & -123 \\
+12 & 0 & 0 \\
+4 & 1 & 2
+\end{pNiceMatrix}$
+\end{BVerbatim}
+$\begin{pNiceMatrix}[columns-width = 1cm]
+1 & 12 & -123 \\
+12 & 0 & 0 \\
+4 & 1 & 2
+\end{pNiceMatrix}$
+
+\medskip
+Noter que l'espace inséré entre deux colonnes (égal à 2 \verb|\arraycolsep|) n'est pas supprimé (il est évidemment
+possible de le supprimer en mettant \verb|\arraycolsep| à~$0$).
+
+\bigskip
+Il est possible de donner la valeur \verb|auto| à l'option \verb|columns-width| : toutes les colonnes du tableau
+auront alors une largeur égale à la largeur de la case la plus large du tableau. \textbf{Deux ou trois
+ compilations successives peuvent être nécessaires.}\par\nobreak
+
+\medskip
+\begin{BVerbatim}[baseline=c,boxwidth=10cm]
+$\begin{pNiceMatrix}[~emphase#columns-width = auto@]
+1 & 12 & -123 \\
+12 & 0 & 0 \\
+4 & 1 & 2
+\end{pNiceMatrix}$
+\end{BVerbatim}
+$\begin{pNiceMatrix}[columns-width = auto]
+1 & 12 & -123 \\
+12 & 0 & 0 \\
+4 & 1 & 2
+\end{pNiceMatrix}$
+
+\bigskip
+Il est possible de fixer la largeur de toutes les colonnes de toutes les matrices dans une certaine portion de
+document avec la commande \verb|\NiceMatrixOptions|.\par\nobreak
+\medskip
+\begin{BVerbatim}[baseline=c,boxwidth=8.5cm]
+~emphase#\NiceMatrixOptions{columns-width=10mm}@
+$\begin{pNiceMatrix}
+a & b \\ c & d
+\end{pNiceMatrix}
+=
+\begin{pNiceMatrix}
+1 & 1245 \\ 345 & 2
+\end{pNiceMatrix}$
+\end{BVerbatim}
+\begin{scope}
+\NiceMatrixOptions{columns-width=10mm}
+$\begin{pNiceMatrix}
+a & b \\
+c & d
+\end{pNiceMatrix}
+=
+\begin{pNiceMatrix}
+1 & 1245 \\
+345 & 2
+\end{pNiceMatrix}$
+\end{scope}
+
+
+\bigskip
+Mais il est aussi possible de fixer une zone dans laquelle toutes les matrices auront leurs colonnes de la même
+largeur, égale à la largeur de la case la plus large de toutes les matrices de la zone. Cette construction
+utilise l'environnement \verb|{NiceMatrixBlock}| avec l'option \verb|auto-columns-width|.\footnote{Pour le moment,
+ c'est le seul usage de l'environnement \verb|{NiceMatrixBlock}| mais il pourrait y en avoir davantage dans le futur.}
+
+\medskip
+\begin{BVerbatim}[baseline=c,boxwidth=8.5cm]
+~emphase#\begin{NiceMatrixBlock}[auto-columns-width]@
+$\begin{pNiceMatrix}
+a & b \\ c & d
+\end{pNiceMatrix}
+=
+\begin{pNiceMatrix}
+1 & 1245 \\ 345 & 2
+\end{pNiceMatrix}$
+~emphase#\end{NiceMatrixBlock}@
+\end{BVerbatim}
+\begin{NiceMatrixBlock}[auto-columns-width]
+$\begin{pNiceMatrix}
+a & b \\ c & d
+\end{pNiceMatrix}
+=
+\begin{pNiceMatrix}
+1 & 1245 \\ 345 & 2
+\end{pNiceMatrix}$
+\end{NiceMatrixBlock}
+
+
+\section{L'option hlines}
+
+Dans les environnements de \pkg{nicematrix}, on peut bien entendu ajouter des filets horizontaux entre les lignes
+avec la commande~\verb|\hline|. Par souci de commodité, l'extension \pkg{nicemarix} fournit l'option \verb|hlines|
+qui impose directement que tous les filets horizontaux soient tracés (à l'exception, très naturelle, du
+filet avant l'éventuelle «première rangée» et après l'éventuelle «dernière rangée»).
+
+\medskip
+\begin{BVerbatim}[baseline=c,boxwidth=10.6cm]
+$\begin{NiceArray}{|*{4}{C|}}[~emphase#hlines@,first-row,first-col]
+ & e & a & b & c \\
+e & e & a & b & c \\
+a & a & e & c & b \\
+b & b & c & e & a \\
+c & c & b & a & e
+\end{NiceArray}$
+\end{BVerbatim}
+\raisebox{-5mm}{\box\ExampleOne}
+
+
+\section{Utilisation du type de colonne S de siunitx}
+
+Si l'extension \pkg{siunitx} est chargée (avant ou après \pkg{nicematrix}), il est possible d'utiliser les colonnes
+de type \verb|S| de \pkg{siunitx} dans les environnements de \pkg{nicematrix}. L'implémentation n'utilise
+explicitement aucune macro privée de \pkg{siunitx}. Les colonnes \verb|d| de \pkg{dcolumn} ne sont pas prises en
+charge par \pkg{nicematrix}.
+
+\medskip
+\begin{BVerbatim}[baseline = c, boxwidth = 10.5cm]
+$\begin{pNiceArray}{~emphase#S@CWc{1cm}C}[nullify-dots,first-row]
+{C_1} & \Cdots & & C_n \\
+2.3 & 0 & \Cdots & 0 \\
+12.4 & \Vdots & & \Vdots \\
+1.45 \\
+7.2 & 0 & \Cdots & 0
+\end{pNiceArray}$
+\end{BVerbatim}
+$\begin{pNiceArray}{SCWc{1cm}C}[nullify-dots,first-row]
+{C_1} & \Cdots & & C_n \\
+2.3 & 0 & \Cdots & 0 \\
+12.4 & \Vdots & & \Vdots \\
+1.45 \\
+7.2 & 0 & \Cdots & 0
+\end{pNiceArray}$
+
+
+\section{Remarques techniques}
+
+\subsection{Lignes diagonales}
+
+Par défaut, toutes les lignes diagonales\footnote{On parle des lignes créées par \verb|\Ddots| et non des lignes
+ créées par une commande \verb|\line| dans le \verb|code-after|.} d'un même tableau sont «parallélisées». Cela signifie que la première
+diagonale est tracée et que, ensuite, les autres lignes sont tracées parallèlement à la première (par rotation
+autour de l'extrémité la plus à gauche de la ligne). C'est pourquoi la position des instructions \verb|\Ddots| dans
+un tableau peut avoir un effet marqué sur le résultat final.
+
+\medskip
+Dans les exemples suivants, la première instruction \verb|\Ddots| est marquée en couleur :
+
+\medskip
+\begin{scope}
+\begin{minipage}{9.5cm}
+Exemple avec parallélisation (comportement par défaut):
+\begin{Verbatim}
+$A = \begin{pNiceMatrix}
+1 & \Cdots & & 1 \\
+a+b & ~emphase#\Ddots@~ & & \Vdots \\
+\Vdots & \Ddots & & \\
+a+b & \Cdots & a+b & 1
+\end{pNiceMatrix}$
+\end{Verbatim}
+\end{minipage}
+$A = \begin{pNiceMatrix}
+1 & \Cdots & & 1 \\
+a+b & \Ddots & & \Vdots \\
+\Vdots & \Ddots & & \\
+a+b & \Cdots & a+b & 1
+\end{pNiceMatrix}$
+
+\bigskip
+\NiceMatrixOptions{parallelize-diags=true}%
+\begin{minipage}{9.5cm}
+\begin{Verbatim}
+$A = \begin{pNiceMatrix}
+1 & \Cdots & & 1 \\
+a+b & & & \Vdots \\
+\Vdots & ~emphase#\Ddots@~ & \Ddots & \\
+a+b & \Cdots & a+b & 1
+\end{pNiceMatrix}$
+\end{Verbatim}
+\end{minipage}
+$A = \begin{pNiceMatrix}
+1 & \Cdots & & 1 \\
+a+b & & & \Vdots \\
+\Vdots & \Ddots & \Ddots & \\
+a+b & \Cdots & a+b & 1
+\end{pNiceMatrix}$
+
+\bigskip
+Il est possible de désactiver la parallélisation avec l'option
+\verb|parallelize-diags| mise à \verb|false|: \par\nobreak
+
+\medskip
+\NiceMatrixOptions{parallelize-diags=false}%
+\begin{minipage}{9.5cm}
+Le même exemple sans parallélisation :
+\end{minipage}
+$A = \begin{pNiceMatrix}
+1 & \Cdots & & 1 \\
+a+b & \Ddots & & \Vdots \\
+\Vdots & \Ddots & & \\
+a+b & \Cdots & a+b & 1
+\end{pNiceMatrix}$
+
+
+\end{scope}
+
+\subsection{Les cases «vides»}
+
+\label{empty-cells}
+Une instruction comme
+\verb|\Ldots|, \verb|\Cdots|, etc. essaye de déterminer la première case vide de part et d'autre de la case
+considérée. Néanmoins, une case vide n'est pas nécessairement sans contenu dans le codage TeX (c'est-à-dire sans
+aucun token entre les deux esperluettes~\verb|&|). En effet, une case dont le contenu est \verb|\hspace*{1cm}| peut
+être considérée comme vide.
+
+\interitem
+Pour \pkg{nicematrix}, les règles précises sont les suivantes :
+
+\begin{itemize}
+\item Une case implicite est vide. Par exemple, dans la matrice suivante
+
+\begin{Verbatim}
+\begin{pmatrix}
+a & b \\
+c \\
+\end{pmatrix}
+\end{Verbatim}
+
+la dernière case (deuxième rangée et deuxième colonne) est vide.
+
+\medskip
+\item Chaque case avec un rendu par TeX de largeur inférieure à 0.5~pt est vide.
+
+\medskip
+\item Une case qui contient une commande \verb|\Ldots|, \verb|\Cdots|, \verb|\Vdots|, \verb|\Ddots|
+ou \verb|\Iddots| (ou une des versions étoilées) est vide. On rappelle que ces commandes doivent être employées seules
+dans une case.
+
+
+\medskip
+\item Une case avec une commande \verb|\Hspace| (ou \verb|\Hspace*|) est vide. Cette commande
+\verb|\Hspace| est une commande définie par l'extension \pkg{nicematrix} avec la même signification
+que \verb|\hspace| excepté que la case où cette commande est utilisée est considérée comme vide.
+Cette commande peut être utilisée pour fixer la largeur des colonnes sans interférer avec le tracé des lignes en
+pointillés par \pkg{nicematrix}.
+
+\end{itemize}
+
+
+\subsection{L'option exterior-arraycolsep}
+
+L'environnement \verb|{array}| insère un espace horizontal égal à \verb|\arraycolsep|
+avant et après chaque colonne. En particulier, il y a un espace égal à
+\verb|\arraycolsep| avant et après le tableau. Cette caractéristique de l'environnement \verb|{array}|
+n'était probablement pas une bonne idée.\footnote{Dans la documentation de
+\verb|{amsmath}|, on peut lire : {\itshape The extra space of \verb|\arraycolsep| that
+\pkg{array} adds on each side is a waste so we remove it [in \verb|{matrix}|]
+(perhaps we should instead remove it from array in general, but that's a
+harder task).} Il est possible de supprimer les espaces pour un environnement \verb|{array}| donné par une
+construction du type \verb|\begin{array}{@{}ccccc@{}}|.}
+
+L'environnement \verb|{matrix}| et ses variantes (\verb|{pmatrix}|, \verb|{vmatrix}|, etc.)
+de \pkg{amsmath} prefèrent supprimer ces espaces avec des instructions explicites
+\verb|\hskip -\arraycolsep| et \verb|{NiceArray}| agit de même.
+
+Néanmoins, l'utilisateur peut changer ce comportement avec l'option
+\verb|exterior-arraycolsep| de la commande \verb|\NiceMatrixOptions|. Avec cette option,
+\verb|{NiceArray}| va insérer le même espacement horizontal que \verb|{array}|.
+
+Cette option est seulement pour la «compatibilité» puisque l'extension \pkg{nicematrix}
+fournit un contrôle plus précis avec les options \verb|left-margin|,
+\verb|extra-left-margin|, etc.
+
+
+\subsection{L'option de classe draft}
+
+L'extension \pkg{nicematrix} est relativement lente pour tracer les lignes en pointillés
+(créées par \verb|\Cdots|, \verb|\Ldots|, \verb|\Ddots|, etc. mais aussi par le spécificateur
+«\verb|:|»).\footnote{La principale raison est que nous voulons des lignes
+ en pointillés avec des points ronds et non carrés. Pour atteindre ce
+ but, il a fallu construire notre propre système de lignes en pointillés.}
+
+
+C'est pourquoi, avec l'option de classe \verb|draft|, les lignes en pointillés ne sont pas tracées,
+pour accélérer la compilation.
+
+
+\subsection{Un problème technique avec l'argument de \textbackslash\textbackslash}
+
+
+Pour des raisons techniques, si vous utilisez l'argument optionnel de la commande \verb|\\|,
+l'espace vertical sera aussi ajouté au nœud («normal») correspondant à la case précédente.
+
+
+\medskip
+\begin{BVerbatim}[baseline=c,boxwidth=11cm]
+ \begin{pNiceMatrix}
+ a & \frac AB \\~emphase#[2mm]@
+ b & c
+ \end{pNiceMatrix}
+\end{BVerbatim}
+$\begin{pNiceMatrix}[
+ code-after = {\tikz \node [inner sep = 0pt,
+ fill = red!15,
+ blend mode = multiply,
+ fit = (1-2) ] {} ; } ]
+a & \frac AB \\[2mm]
+b & c
+\end{pNiceMatrix}$
+
+\bigskip
+Il y a deux solutions pour résoudre ce problème. La première solution est d'utiliser une commande TeX pour insérer
+ l'espace entre les deux rangées.
+
+\medskip
+\begin{BVerbatim}[baseline=c,boxwidth=11cm]
+ \begin{pNiceMatrix}
+ a & \frac AB \\
+ ~emphase#\noalign{\kern2mm}@
+ b & c
+ \end{pNiceMatrix}
+\end{BVerbatim}
+$\begin{pNiceMatrix}[
+ code-after = {\tikz \node [inner sep = 0pt,
+ fill = red!15,
+ blend mode = multiply,
+ fit = (1-2) ] {} ; } ]
+a & \frac AB \\
+\noalign{\kern2mm}
+b & c
+\end{pNiceMatrix}$
+
+
+\bigskip
+L'autre solution est d'utiliser la commande \verb|\multicolumn| dans la case précédente :
+
+\medskip
+\begin{BVerbatim}[baseline=c,boxwidth=11cm]
+ \begin{pNiceMatrix}
+ a & ~emphase#\multicolumn1C{\frac AB}@ \\[2mm]
+ b & c
+ \end{pNiceMatrix}
+\end{BVerbatim}
+$\begin{pNiceMatrix}[
+ code-after = {\tikz \node [inner sep = 0pt,
+ fill = red!15,
+ blend mode = multiply,
+ fit = (1-2) ] {} ; } ]
+a & \multicolumn1C{\frac AB} \\[2mm]
+b & c
+\end{pNiceMatrix}$
+
+\subsection{Environnements obsolètes}
+
+La version 3.0 de \pkg{nicematrix} a introduit l'environnement
+\verb|{pNiceArray}| (et ses variantes) avec les options \verb|first-row|, \verb|last-row|,
+\verb|first-col| et \verb|last-col|.
+
+Par conséquent, les environnements suivants, présents dans les versions précédentes de \pkg{nicematrix} sont devenus
+obsolètes :
+%
+\begin{itemize}
+\item \verb|{NiceArrayCwithDelims}| ;
+\item \verb|{pNiceArrayC}|, \verb|{bNiceArrayC}|, \verb|{BNiceArrayC}|, \verb|{vNiceArrayC}|,
+\verb|{VNiceArrayC}| ;
+\item \verb|{NiceArrayRCwithDelims}| ;
+\item \verb|{pNiceArrayRC}|, \verb|{bNiceArrayRC}|, \verb|{BNiceArrayRC}|, \verb|{vNiceArrayRC}|,
+\verb|{VNiceArrayRC}|.
+\end{itemize}
+
+Ils seront peut-être supprimés dans une version future de \pkg{nicematrix}.
+
+
+\section{Exemples}
+
+\subsection{Lignes en pointillés}
+
+\medskip
+Une matrice tridiagonale :
+
+\bigskip
+\begin{BVerbatim}[baseline=c]
+$\begin{pNiceMatrix}[nullify-dots]
+a & b & 0 & & \Cdots & 0 \\
+b & a & b & \Ddots & & \Vdots \\
+0 & b & a & \Ddots & & \\
+ & \Ddots & \Ddots & \Ddots & & 0 \\
+\Vdots & & & & & b \\
+0 & \Cdots & & 0 & b & a
+\end{pNiceMatrix}$
+\end{BVerbatim}
+\hspace{1.5cm}
+$\begin{pNiceMatrix}[nullify-dots]
+a & b & 0 & & \Cdots & 0 \\
+b & a & b & \Ddots & & \Vdots \\
+0 & b & a & \Ddots & & \\
+ & \Ddots & \Ddots & \Ddots & & 0 \\
+\Vdots & & & & & b \\
+0 & \Cdots & & 0 & b & a
+\end{pNiceMatrix}$
+
+\vspace{2cm}
+
+Une matrice de permutation :
+
+\bigskip
+\begin{BVerbatim}[baseline=c]
+$\begin{pNiceMatrix}
+0 & 1 & 0 & & \Cdots & 0 \\
+\Vdots & & & \Ddots & & \Vdots \\
+ & & & \Ddots & & \\
+ & & & \Ddots & & 0 \\
+0 & 0 & & & & 1 \\
+1 & 0 & & \Cdots & & 0
+\end{pNiceMatrix}$
+\end{BVerbatim}
+\hspace{2.5cm}
+$\begin{pNiceMatrix}
+0 & 1 & 0 & & \Cdots & 0 \\
+\Vdots & & & \Ddots & & \Vdots \\
+ & & & \Ddots & & \\
+ & & & \Ddots & & 0 \\
+0 & 0 & & & & 1 \\
+1 & 0 & & \Cdots & & 0
+\end{pNiceMatrix}$
+
+\vspace{2cm}
+
+Un exemple avec \verb|\Iddots|: \par\nobreak
+\bigskip
+\begin{BVerbatim}[baseline=c]
+$\begin{pNiceMatrix}
+1 & \Cdots & & 1 \\
+\Vdots & & & 0 \\
+ & ~emphase#\Iddots@ & ~emphase#\Iddots@ & \Vdots \\
+1 & 0 & \Cdots & 0
+\end{pNiceMatrix}$
+\end{BVerbatim}
+\hspace{4cm}
+$\begin{pNiceMatrix}
+1 & \Cdots & & 1 \\
+\Vdots & & & 0 \\
+ & \Iddots & \Iddots & \Vdots \\
+1 & 0 & \Cdots & 0
+\end{pNiceMatrix}$
+
+
+\vspace{2cm}
+Un exemple avec \verb|\multicolumn|:\par\nobreak
+\bigskip
+\begin{BVerbatim}
+\begin{BNiceMatrix}[nullify-dots]
+1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10\\
+1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10\\
+\Cdots & & ~emphase#\multicolumn{6}{C}{10 \text{ autres lignes}}@ & \Cdots \\
+1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10
+\end{BNiceMatrix}
+\end{BVerbatim}
+
+\bigskip
+\[\begin{BNiceMatrix}[nullify-dots]
+1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10\\
+1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10\\
+\Cdots & & \multicolumn{6}{C}{10 \text{ autres lignes}} & \Cdots \\
+1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10
+\end{BNiceMatrix}\]
+
+\vspace{2cm}
+Un exemple avec \verb|\Hdotsfor|:\par\nobreak
+\bigskip
+\begin{BVerbatim}[baseline=c,boxwidth=11cm]
+\begin{pNiceMatrix}[nullify-dots]
+0 & 1 & 1 & 1 & 1 & 0 \\
+0 & 1 & 1 & 1 & 1 & 0 \\
+\Vdots & ~emphase#\Hdotsfor{4}@ & \Vdots \\
+ & ~emphase#\Hdotsfor{4}@ & \\
+ & ~emphase#\Hdotsfor{4}@ & \\
+ & ~emphase#\Hdotsfor{4}@ & \\
+0 & 1 & 1 & 1 & 1 & 0
+\end{pNiceMatrix}
+\end{BVerbatim}
+$\begin{pNiceMatrix}[nullify-dots]
+0 & 1 & 1 & 1 & 1 & 0 \\
+0 & 1 & 1 & 1 & 1 & 0 \\
+\Vdots & \Hdotsfor{4} & \Vdots \\
+ & \Hdotsfor{4} & \\
+ & \Hdotsfor{4} & \\
+ & \Hdotsfor{4} & \\
+0 & 1 & 1 & 1 & 1 & 0
+\end{pNiceMatrix}$
+
+\vspace{2cm}
+Un exemple pour le résultant de deux polynômes :
+\par\nobreak
+\bigskip
+\begin{BVerbatim}
+\setlength{\extrarowheight}{1mm}
+\[\begin{vNiceArray}{CCCC:CCC}[columns-width=6mm]
+a_0 & && &b_0 & & \\
+a_1 &\Ddots&& &b_1 &\Ddots& \\
+\Vdots&\Ddots&& &\Vdots &\Ddots&b_0 \\
+a_p & &&a_0 & & &b_1 \\
+ &\Ddots&&a_1 &b_q & &\Vdots\\
+ & &&\Vdots & &\Ddots& \\
+ & &&a_p & & &b_q
+\end{vNiceArray}\]
+\end{BVerbatim}
+
+\bigskip
+
+\begin{scope}
+\setlength{\extrarowheight}{1mm}
+\[\begin{vNiceArray}{CCCC:CCC}[columns-width=6mm]
+a_0 & && &b_0 & & \\
+a_1 &\Ddots&& &b_1 &\Ddots& \\
+\Vdots&\Ddots&& &\Vdots &\Ddots&b_0 \\
+a_p & &&a_0 & & &b_1 \\
+ &\Ddots&&a_1 &b_q & &\Vdots\\
+ & &&\Vdots & &\Ddots& \\
+ & &&a_p & & &b_q
+\end{vNiceArray}\]
+\end{scope}
+
+\vspace{2cm}
+Un exemple avec un système linéaire:\par\nobreak
+
+\begin{Verbatim}
+$\begin{pNiceArray}{*6C|C}[nullify-dots,last-col,code-for-last-col={\scriptstyle}]
+1 & 1 & 1 &\Cdots & & 1 & 0 & \\
+0 & 1 & 0 &\Cdots & & 0 & & L_2 \gets L_2-L_1 \\
+0 & 0 & 1 &\Ddots & & \Vdots & & L_3 \gets L_3-L_1 \\
+ & & &\Ddots & & & \Vdots & \Vdots \\
+\Vdots & & &\Ddots & & 0 & \\
+0 & & &\Cdots & 0 & 1 & 0 & L_n \gets L_n-L_1
+\end{pNiceArray}$
+\end{Verbatim}
+
+\[\begin{pNiceArray}{*6C|C}[nullify-dots,last-col,code-for-last-col={\scriptstyle}]
+1 & 1 & 1 &\Cdots & & 1 & 0 & \\
+0 & 1 & 0 &\Cdots & & 0 & & L_2 \gets L_2-L_1 \\
+0 & 0 & 1 &\Ddots & & \Vdots & & L_3 \gets L_3-L_1 \\
+ & & &\Ddots & & & \Vdots & \Vdots \\
+\Vdots & & &\Ddots & & 0 & \\
+0 & & &\Cdots & 0 & 1 & 0 & L_n \gets L_n-L_1
+\end{pNiceArray}\]
+
+
+
+\subsection{Largeur des colonnes}
+
+\medskip
+Dans l'exemple suivant, nous utilisons
+\verb|{NiceMatrixBlock}| avec l'option \verb|auto-columns-width| parce que
+nous voulons la même largeur (automatique) pour toutes les colonnes.
+
+\bigskip
+\begin{BVerbatim}
+~emphase#\begin{NiceMatrixBlock}[auto-columns-width]@
+\NiceMatrixOptions{code-for-last-col = \color{blue}\scriptstyle}
+\setlength{\extrarowheight}{1mm}
+\quad $\begin{pNiceArray}{CCCC:C}[last-col]
+1&1&1&1&1&\\
+2&4&8&16&9&\\
+3&9&27&81&36&\\
+4&16&64&256&100&
+\end{pNiceArray}$
+...
+~emphase#\end{NiceMatrixBlock}@
+\end{BVerbatim}
+
+\bigskip
+
+\begin{multicols}{2}
+\begin{NiceMatrixBlock}[auto-columns-width]
+\NiceMatrixOptions{code-for-last-col = \color{blue}\scriptstyle}
+\setlength{\extrarowheight}{1mm}
+
+\quad $\begin{pNiceArray}{CCCC:C}[last-col]
+1&1&1&1&1&\\
+2&4&8&16&9&\\
+3&9&27&81&36&\\
+4&16&64&256&100&
+\end{pNiceArray}$
+
+\medskip
+
+\enskip $\begin{pNiceArray}{CCCC:C}[last-col]
+1&1&1&1&1&\\
+0&2&6&14&7&L_2\gets-2L_1+L_2 \\
+0&6&24&78&33&L_3\gets-3L_1+L_3 \\
+0&12&60&252&96&L_4\gets-4L_1+L_4
+\end{pNiceArray}$
+
+\medskip
+
+\enskip $\begin{pNiceArray}{CCCC:C}[last-col]
+1&1&1&1&1&\\
+0&1&3&7&\frac72&L_2\gets\frac12L_2\\
+0&3&12&39&\frac{33}2&L_3\gets\frac12L_3 \\
+0&1&5&21&8&L_4\gets\frac1{12}L_4
+\end{pNiceArray}$
+
+\medskip
+
+\enskip $\begin{pNiceArray}{CCCC:C}[last-col]
+1&1&1&1&1&\\
+0&1&3&7&\frac72&\\
+0&0&3&18&6&L_3 \gets -3L_2+L_3 \\
+0&0&-2&-14&-\frac92&L_4 \gets L_2-L_4
+\end{pNiceArray}$
+
+\medskip
+
+\enskip $\begin{pNiceArray}{CCCC:C}[last-col]
+1&1&1&1&1&\\
+0&1&3&7&\frac72&\\
+0&0&1&6&2&L_3 \gets \frac13L_3\\
+0&0&-2&-14&-\frac92&
+\end{pNiceArray}$
+
+\medskip
+
+\enskip $\begin{pNiceArray}{CCCC:C}[last-col]
+1&1&1&1&1&\\
+0&1&3&7&\frac72&\\
+0&0&1&6&2& \\
+0&0&0&-2&-\frac12 & L_4 \gets 2L_3+L_4
+\end{pNiceArray}$
+\end{NiceMatrixBlock}
+\end{multicols}
+
+
+\subsection{Comment surligner les cases}
+
+\label{highlight}
+
+\medskip
+Pour mettre en évidence une case, il est possible de «dessiner» l'un des nœuds (le «nœud normal», le «nœud
+moyen» ou le «nœud large»). Dans l'exemple suivant, on utilise les «nœuds larges» de la diagonale de la matrice
+(avec la clé de Tikz «\verb|name suffix|», il est facile d'utiliser les «nœuds larges»). Pour avoir la continuité
+des lignes, on doit fixer \verb|inner sep = -\pgflinewidth/2|.
+
+\begin{Verbatim}
+$\begin{pNiceArray}{>{\strut}CCCC}%
+ [create-extra-nodes,margin,extra-margin=2pt,
+ code-after = {\begin{tikzpicture}
+ [~emphase#name suffix = -large@,
+ every node/.style = {draw,
+ ~emphase#inner sep = -\pgflinewidth/2@}]
+ \node [fit = (1-1)] {} ;
+ \node [fit = (2-2)] {} ;
+ \node [fit = (3-3)] {} ;
+ \node [fit = (4-4)] {} ;
+ \end{tikzpicture}}]
+a_{11} & a_{12} & a_{13} & a_{14} \\
+a_{21} & a_{22} & a_{23} & a_{24} \\
+a_{31} & a_{32} & a_{33} & a_{34} \\
+a_{41} & a_{42} & a_{43} & a_{44}
+\end{pNiceArray}$
+\end{Verbatim}
+
+
+\[\begin{pNiceArray}{>{\strut}CCCC}[
+ create-extra-nodes,margin,extra-margin=2pt,
+ code-after = {\begin{tikzpicture}[name suffix = -large,
+ every node/.style = {draw,
+ inner sep = -\pgflinewidth/2}]
+ \node [fit = (1-1)] {} ;
+ \node [fit = (2-2)] {} ;
+ \node [fit = (3-3)] {} ;
+ \node [fit = (4-4)] {} ;
+ \end{tikzpicture}}]
+a_{11} & a_{12} & a_{13} & a_{14} \\
+a_{21} & a_{22} & a_{23} & a_{24} \\
+a_{31} & a_{32} & a_{33} & a_{34} \\
+a_{41} & a_{42} & a_{43} & a_{44}
+\end{pNiceArray}\]
+
+
+\vspace{1cm}
+
+L'extension \pkg{nicematrix} est construite au-dessus de l'environnement \verb|{array}| et, par conséquent, il est
+possible d'utiliser l'extension \pkg{colortbl} dans les environnements de \pkg{nicematrix}. Les possibilités de
+réglage de \pkg{colortbl} sont néanmoins assez limitées. C'est pourquoi nous proposons une autre méthode pour
+surligner une rangée de la matrice. Nous créons un nœud Tikz rectangulaire qui englobe les nœuds de la deuxième
+rangée en utilisant les outils de la bibliothèque Tikz \pkg{fit}. Ce nœud est rempli après la construction de la
+matrice. Pour que l'on puisse voir le texte \emph{sous} le nœud, nous devons utiliser la transparence avec le
+\verb|blend mode| égal à \verb|multiply|. Attention : certains lecteurs de \textsc{pdf} ne sont pas capables de
+rendre la transparence correctement.
+
+
+\tikzset{highlight/.style={rectangle,
+ fill=red!15,
+ blend mode = multiply,
+ rounded corners = 0.5 mm,
+ inner sep=1pt}}
+
+\medskip
+\begin{Verbatim}
+\tikzset{highlight/.style={rectangle,
+ fill=red!15,
+ ~emphase#blend mode = multiply@,
+ rounded corners = 0.5 mm,
+ inner sep=1pt}}
+
+$\begin{bNiceMatrix}[~emphase#code-after = {\tikz \node[highlight, fit = (2-1) (2-3)] {} ;}@]
+0 & \Cdots & 0 \\
+1 & \Cdots & 1 \\
+0 & \Cdots & 0
+\end{bNiceMatrix}$
+\end{Verbatim}
+
+\[\begin{bNiceMatrix}[code-after = {\tikz \node[highlight, fit = (2-1) (2-3)] {} ;}]
+0 & \Cdots & 0 \\
+1 & \Cdots & 1 \\
+0 & \Cdots & 0
+\end{bNiceMatrix}\]
+
+
+\bigskip
+Ce code échoue avec
+\verb|latex|-\verb|dvips|-\verb|ps2pdf| parce que Tikz pour \verb|dvips|, pour le moment, ne prend pas en charge
+les \emph{blend modes}. Néanmoins, le code suivant, dans le préambule du document LaTeX, devrait activer les \emph{blend modes}
+pour ce mode de compilation.
+
+
+\begin{scope} \small
+\verb|\ExplSyntaxOn|
+
+\verb|\makeatletter|
+
+\verb|\tl_set:Nn \l_tmpa_tl {pgfsys-dvips.def}|
+
+\verb|\tl_if_eq:NNT \l_tmpa_tl \pgfsysdriver|
+
+\verb| {\cs_set:Npn\pgfsys@blend@mode#1{\special{ps:~/\tl_upper_case:n #1~.setblendmode}}}|
+
+\verb|\makeatother|
+
+\verb|\ExplSyntaxOff|
+\end{scope}
+
+\vspace{1cm}
+On considère maintenant la matrice suivante que l'on a appelée \verb|exemple|.
+
+\medskip
+\begin{Verbatim}
+$\begin{pNiceArray}{CCC}[~emphase#name=exemple@,create-extra-nodes,last-col]
+a & a + b & a + b + c & L_1 \\
+a & a & a + b & L_2 \\
+a & a & a & L_3
+\end{pNiceArray}$
+\end{Verbatim}
+
+\[\begin{pNiceArray}{CCC}[last-col]
+a & a + b & a + b + c & L_1 \\
+a & a & a + b & L_2 \\
+a & a & a & L_3
+\end{pNiceArray}\]
+
+\bigskip
+Si on veut surligner chaque rangée de la matrice, on peut utiliser la technique précédente trois fois.
+
+\begin{Verbatim}
+\tikzset{mes-options/.style={remember picture,
+ overlay,
+ name prefix = exemple-,
+ every node/.style = {fill = red!15,
+ blend mode = multiply,
+ inner sep = 0pt}}}
+\end{Verbatim}
+
+
+\tikzset{mes-options/.style={remember picture,
+ overlay,
+ name prefix = exemple-,
+ every node/.style = {fill = red!15,
+ blend mode = multiply,
+ inner sep = 0pt}}}
+
+
+\begin{Verbatim}
+\begin{tikzpicture}[mes-options]
+\node [fit = (1-1) (1-3)] {} ;
+\node [fit = (2-1) (2-3)] {} ;
+\node [fit = (3-1) (3-3)] {} ;
+\end{tikzpicture}
+\end{Verbatim}
+
+\medskip
+On obtient la matrice suivante.
+
+\[\begin{pNiceArray}{CCC}[
+ last-col,
+ create-extra-nodes,
+ code-after = {\begin{tikzpicture}[every node/.style = {fill = red!15,
+ blend mode = multiply,
+ inner sep = 0pt}]
+ \node [fit = (1-1) (1-3)] {} ;
+ \node [fit = (2-1) (2-3)] {} ;
+ \node [fit = (3-1) (3-3)] {} ;
+ \end{tikzpicture}}]
+a & a + b & a + b + c & L_1 \\
+a & a & a + b & L_2 \\
+a & a & a & L_3
+\end{pNiceArray}\]
+
+\medskip
+Le résultat peut paraître décevant. On peut l'améliorer en utilisant les «nœuds moyens» au lieu des «nœuds normaux».
+
+\begin{Verbatim}
+\begin{tikzpicture}[mes-options, ~emphase#name suffix = -medium@]
+\node [fit = (1-1) (1-3)] {} ;
+\node [fit = (2-1) (2-3)] {} ;
+\node [fit = (3-1) (3-3)] {} ;
+\end{tikzpicture}
+\end{Verbatim}
+
+\medskip
+On obtient la matrice suivante.
+
+\[\begin{pNiceArray}{CCC}[
+ last-col,
+ create-extra-nodes,
+ code-after = {\begin{tikzpicture}[every node/.style = {fill = red!15,
+ blend mode = multiply,
+ inner sep = 0pt},
+ name suffix = -medium]
+ \node [fit = (1-1) (1-3)] {} ;
+ \node [fit = (2-1) (2-3)] {} ;
+ \node [fit = (3-1) (3-3)] {} ;
+ \end{tikzpicture}}]
+a & a + b & a + b + c & L_1 \\
+a & a & a + b & L_2 \\
+a & a & a & L_3
+\end{pNiceArray}\]
+
+
+\vspace{1cm}
+
+Dans l'exemple suivant, on utilise les «nœuds larges» pour surligner une zone de la matrice.\par\nobreak
+\begin{Verbatim}
+\left(\,\begin{NiceArray}{>{\strut}CCCC}%
+ [create-extra-nodes,left-margin,right-margin,
+ code-after = {\tikz \path [~emphase#name suffix = -large@,
+ fill = red!15,
+ blend mode = multiply]
+ (1-1.north west)
+ |- (2-2.north west)
+ |- (3-3.north west)
+ |- (4-4.north west)
+ |- (4-4.south east)
+ |- (1-1.north west) ; } ]
+A_{11} & A_{12} & A_{13} & A_{14} \\
+A_{21} & A_{22} & A_{23} & A_{24} \\
+A_{31} & A_{32} & A_{33} & A_{34} \\
+A_{41} & A_{42} & A_{43} & A_{44}
+\end{NiceArray}\,\right)
+\end{Verbatim}
+
+\[\left(\,\begin{NiceArray}{>{\strut}CCCC}[
+ create-extra-nodes,left-margin,right-margin,
+ code-after = {\tikz \path [name suffix = -large,
+ fill = red!15,
+ blend mode = multiply]
+ (1-1.north west)
+ |- (2-2.north west)
+ |- (3-3.north west)
+ |- (4-4.north west)
+ |- (4-4.south east)
+ |- (1-1.north west) ; } ]
+A_{11} & A_{12} & A_{13} & A_{14} \\
+A_{21} & A_{22} & A_{23} & A_{24} \\
+A_{31} & A_{32} & A_{33} & A_{34} \\
+A_{41} & A_{42} & A_{43} & A_{44}
+\end{NiceArray}\,\right)\]
+
+
+\subsection{Utilisation directe des nœuds Tikz}
+
+Dans l'exemple suivant, on souhaite illustrer le produit mathématique de deux matrices.
+
+\medskip
+L'utilisation de \verb|{NiceMatrixBlock}| avec l'option \verb|auto-columns-width| va permettre que toutes les
+colonnes aient la même largeur ce qui permettra un alignement des deux matrices superposées.
+\begin{Verbatim}
+\begin{NiceMatrixBlock}[auto-columns-width]
+\end{Verbatim}
+
+\begin{Verbatim}
+\NiceMatrixOptions{nullify-dots}
+\end{Verbatim}
+
+Les trois matrices vont être disposées les unes par rapport aux autres grâce à un tableau de LaTeX.
+\begin{Verbatim}
+$\begin{array}{cc}
+&
+\end{Verbatim}
+
+La matrice $B$ a une ``première rangée'' (pour $C_j$) d'où l'option \verb|first-row|.
+\begin{Verbatim}
+\begin{bNiceArray}{C>{\strut}CCCC}[name=B,first-row]
+ & & C_j \\
+b_{11} & \Cdots & b_{1j} & \Cdots & b_{1n} \\
+\Vdots & & \Vdots & & \Vdots \\
+ & & b_{kj} \\
+ & & \Vdots \\
+ b_{n1} & \Cdots & b_{nj} & \Cdots & b_{nn}
+\end{bNiceArray} \\ \\
+\end{Verbatim}
+
+La matrice $A$ a une ``première colonne'' (pour $L_i$) d'où l'option \verb|first-col|.
+\begin{Verbatim}
+\begin{bNiceArray}{CC>{\strut}CCC}[name=A,first-col]
+ & a_{11} & \Cdots & & & a_{nn} \\
+ & \Vdots & & & & \Vdots \\
+L_i & a_{i1} & \Cdots & a_{ik} & \Cdots & a_{in} \\
+ & \Vdots & & & & \Vdots \\
+ & a_{n1} & \Cdots & & & a_{nn} \\
+\end{bNiceArray}
+&
+\end{Verbatim}
+
+Dans la matrice produit, on remarquera que les lignes en pointillés sont «semi-ouvertes».
+\begin{Verbatim}
+\begin{bNiceArray}{CC>{\strut}CCC}
+ & & & & \\
+ & & \Vdots \\
+\Cdots & & c_{ij} \\
+\\
+\\
+\end{bNiceArray}
+\end{array}$
+
+\end{NiceMatrixBlock}
+\end{Verbatim}
+
+\begin{Verbatim}
+\begin{tikzpicture}[remember picture, overlay]
+ \node [highlight, fit = (A-3-1) (A-3-5) ] {} ;
+ \node [highlight, fit = (B-1-3) (B-5-3) ] {} ;
+ \draw [color = gray] (A-3-3) to [bend left] (B-3-3) ;
+\end{tikzpicture}
+\end{Verbatim}
+
+
+\begin{NiceMatrixBlock}[auto-columns-width]
+\NiceMatrixOptions{nullify-dots}
+$\begin{array}{cc}
+&
+\begin{bNiceArray}{C>{\strut}CCCC}[name=B,first-row]
+ & & C_j \\
+b_{11} & \Cdots & b_{1j} & \Cdots & b_{1n} \\
+\Vdots & & \Vdots & & \Vdots \\
+ & & b_{kj} \\
+ & & \Vdots \\
+ b_{n1} & \Cdots & b_{nj} & \Cdots & b_{nn}
+\end{bNiceArray} \\ \\
+\begin{bNiceArray}{CC>{\strut}CCC}[name=A,first-col]
+ & a_{11} & \Cdots & & & a_{nn} \\
+ & \Vdots & & & & \Vdots \\
+L_i & a_{i1} & \Cdots & a_{ik} & \Cdots & a_{in} \\
+ & \Vdots & & & & \Vdots \\
+ & a_{n1} & \Cdots & & & a_{nn} \\
+\end{bNiceArray}
+&
+\begin{bNiceArray}{CC>{\strut}CCC}
+ & & & & \\
+ & & \Vdots \\
+\Cdots & & c_{ij} \\
+\\
+\\
+\end{bNiceArray}
+\end{array}$
+
+\end{NiceMatrixBlock}
+
+\begin{tikzpicture}[remember picture, overlay]
+ \node [highlight, fit = (A-3-1) (A-3-5) ] {} ;
+ \node [highlight, fit = (B-1-3) (B-5-3) ] {} ;
+ \draw [color = gray] (A-3-3) to [bend left] (B-3-3) ;
+\end{tikzpicture}
+
+
+
+
+\subsection{Matrices par blocs}
+
+\medskip
+Dans l'exemple suivant, on utilise les «nœuds larges» pour construire une matrice par blocs (les lignes en tiretés
+ont été tracées avec \pkg{arydshln}).
+\begin{Verbatim}
+\NiceMatrixOptions{letter-for-dotted-lines = V}
+\begin{pNiceArray}{CC:CC}% ici, % est obligatoire
+ [create-extra-nodes,
+ ~emphase#code-after = { \tikz \node [fit = (1-1-large) (2-2-large), inner sep = 0 pt]@
+ ~emphase# {$0_{22}$} ; }@ ]
+ & & a_{13} & a_{14} \\
+ & & a_{23} & a_{24} \\
+\hdashline
+a_{31} & a_{32} & a_{33} & a_{34} \\
+a_{41} & a_{42} & a_{34} & a_{44}
+\end{pNiceArray}
+\end{Verbatim}
+
+
+\begin{scope}
+\NiceMatrixOptions{letter-for-dotted-lines = V}
+\[D = \begin{pNiceArray}{CC:CC}%
+ [create-extra-nodes,
+ code-after = { \tikz \node [fit = (1-1-large) (2-2-large), inner sep = 0 pt]
+ {$0_{22}$} ; } ]
+ & & a_{13} & a_{14} \\
+ & & a_{23} & a_{24} \\
+\hdashline
+a_{31} & a_{32} & a_{33} & a_{34} \\
+a_{41} & a_{42} & a_{34} & a_{44}
+\end{pNiceArray}\]
+\end{scope}
+
+
+\end{document}