summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/doc/latex/nicematrix/nicematrix-french.tex
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/doc/latex/nicematrix/nicematrix-french.tex')
-rw-r--r--Master/texmf-dist/doc/latex/nicematrix/nicematrix-french.tex4860
1 files changed, 3368 insertions, 1492 deletions
diff --git a/Master/texmf-dist/doc/latex/nicematrix/nicematrix-french.tex b/Master/texmf-dist/doc/latex/nicematrix/nicematrix-french.tex
index 2d157cce4f1..ef0cd4123bd 100644
--- a/Master/texmf-dist/doc/latex/nicematrix/nicematrix-french.tex
+++ b/Master/texmf-dist/doc/latex/nicematrix/nicematrix-french.tex
@@ -1,4 +1,4 @@
-% -*- coding: utf-8 ; -*-
+% -*- coding: utf-8 ; -*-
\documentclass[dvipsnames]{article}% dvipsnames is for xcolor (loaded by Tikz, loaded by nicematrix)
\usepackage{xltxtra}
\usepackage[french]{babel}
@@ -7,21 +7,13 @@
\usepackage{geometry}
\geometry{left=2.8cm,right=2.8cm,top=2.5cm,bottom=2.5cm,papersize={21cm,29.7cm}}
-\usepackage{amsmath}
-
-\usepackage{array}
-\usepackage{colortbl}
\usepackage{nicematrix}
-\usepackage{tikz}
-\usetikzlibrary{fit}
+\usepackage{tikz}
+\usetikzlibrary{fit,patterns}
\usepackage{enumitem}
-
\usepackage{siunitx}
-
-
-\usepackage{arydshln}
\usepackage{verbatim}
% We use \MakeShortVerb of shortvrb and not \DefineShortVerb of fancyvrb
@@ -39,16 +31,14 @@
\usepackage{multicol}
\setlength{\columnseprule}{0.4pt}
+\def\LetterAt{@}
\def\interitem{\vspace{7mm plus 2 mm minus 3mm}}
\def\emphase{\bgroup\color{RoyalPurple}\let\next=}
\usepackage{footnote}
-
\usepackage{booktabs}
-
\usepackage{varwidth}
-
\usepackage[hyperfootnotes = false]{hyperref}
\hypersetup
@@ -75,48 +65,24 @@
\VerbatimFootnotes
\title{L'extension \pkg{nicematrix}
- \thanks{Ce document correspond à la version~\myfileversion\space of \pkg{nicematrix},
+ \thanks{Ce document correspond à la version~\myfileversion\space de \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
-|{array}| et |{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.
+|{tabular}|, |{array}| et |{matrix}| de \pkg{array} et \pkg{amsmath} mais avec des fonctionnalités plus étendues.
\end{abstract}
-\vspace{1cm}
-\section{Présentation}
-
-Cette extension peut être utilisée avec |xelatex|, |lualatex| et |pdflatex| mais aussi avec le cheminement
-classique |latex|-|dvips|-|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{pgfcore} ainsi que le module \pkg{shapes} de \textsc{pgf} (l'extension
-\pkg{tikz} n'est \emph{pas} chargée). L'utilisateur final n'a qu'à charger l'extension \pkg{nicematrix} avec
-l'instruction habituelle : |\usepackage{nicematrix}|.
-
+\vspace{1cm}
-\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 :
-\begin{itemize}\setlength{\itemsep}{0pt}
-\item des 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.} ;
-\item des rangées et colonnes extérieures pour les labels ;
-\item un contrôle sur la largeur des colonnes.
-\end{itemize}
-\end{minipage}
-\end{savenotes}
-\hspace{1.4cm}
-$\begin{bNiceArray}{CCCC}[first-row,first-col,
+\hspace{1cm}
+$\begin{bNiceArray}{cccc}[first-row,first-col,
code-for-first-col=\color{blue}\scriptstyle,
code-for-first-row=\color{blue}\scriptstyle,
columns-width = auto]
@@ -126,119 +92,1717 @@ 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}$
+\hspace{2cm}
+\begin{NiceTabular}[c]{lSSSS}%
+[code-before = \rowcolor{red!15}{1-2} \rowcolors{3}{blue!15}{}]
+\toprule
+\Block{2-1}{Produit} & \multicolumn{3}{c}{dimensions (cm)} & \Block{2-1}{\rotate Prix} \\
+\cmidrule(rl){2-4}
+ & L & l & h \\
+\midrule
+petit & 3 & 5.5 & 1 & 30 \\
+standard & 5.5 & 8 & 1.5 & 50.5 \\
+premium & 8.5 & 10.5 & 2 & 80 \\
+extra & 8.5 & 10 & 1.5 & 85.5 \\
+spécial & 12 & 12 & 0.5 & 70 \\
+\bottomrule
+\end{NiceTabular}
+\vspace{1cm}
-\medskip
+L'extension \pkg{nicematrix} est entièrement contenue dans le fichier |nicematrix.sty|. Ce fichier peut être placé
+dans le répertoire courant ou dans une arborescence |texmf|. Le mieux reste néanmoins d'installer \pkg{nicematrix}
+avec une distribution TeX comme MiKTeX ou TeXlive.
+
+\bigskip
+Cette extension peut être utilisée avec |xelatex|, |lualatex| et |pdflatex| mais aussi avec le cheminement
+classique |latex|-|dvips|-|ps2pdf| (ou Adobe Distiller). \textsl{Néanmoins, le fichier nicematrix-french.tex de la présente documentation
+ne peut être compilé qu'avec XeLaTeX.}
+
+\bigskip
+Cette extension nécessite et charge les extensions \pkg{l3keys2e}, \pkg{array},
+\pkg{amsmath} et \pkg{pgfcore} ainsi que le module \pkg{shapes} de \textsc{pgf}
+(l'extension \pkg{tikz}, qui est une surcouche de \textsc{pgf}, n'est \emph{pas}
+chargée). L'utilisateur final n'a qu'à charger l'extension \pkg{nicematrix} avec
+l'instruction habituelle : |\usepackage{nicematrix}|.
+
+
+\bigskip
+L'idée de \pkg{nicematrix} est de créer des nœuds \textsc{pgf} derrière les cases et les positions des filets des
+tableaux créés par \pkg{array} et de les utiliser pour développer de nouvelles fonctionnalités. Comme toujours avec
+\textsc{pgf}, les coordonnées de ces nœuds sont écrites dans le fichier |.aux| pour être utilisées à la
+compilation suivante. C'est pourquoi l'utilisation de \pkg{nicematrix} nécessite \textbf{plusieurs compilations
+ successives}.
+
+\bigskip
+La plupart des fonctionnalités de \pkg{nicematrix} sont accessibles sans avoir à utiliser explicitement
+\textsc{pgf} ou Tikz (ce dernier n'est d'ailleurs pas chargé par défaut).
+
+\bigskip
Une commande|\NiceMatrixOptions| est fournie pour régler les options (la portée des options fixées par cette
-commande est le groupe TeX courant).
+commande est le groupe TeX courant : elles sont semi-globales).
+\bigskip
+{\bfseries \color{red} Important
+
+Depuis la version 5.0 de \pkg{nicematrix}, on doit utiliser les lettres |l|, |c| et
+|r| dans les préambules des environnements et non plus les lettres |L|, |C| et
+|R|.
+
+Pour assurer la compatibilité avec les versions précédentes, \pkg{nicematrix}
+doit être chargée avec l'option |define-L-C-R|.
+\begin{Verbatim}
+\usepackage[define-L-C-R]{nicematrix}
+\end{Verbatim}
+}
+
+
+\newpage
+
+\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}
+\{NiceTabular\} & \{NiceArray\} & \{NiceMatrix\} \\
+\{NiceTabular*\} & \{pNiceArray\} & \{pNiceMatrix\} \\
+ & \{bNiceArray\} & \{bNiceMatrix\} \\
+ & \{BNiceArray\} & \{BNiceMatrix\} \\
+ & \{vNiceArray\} & \{vNiceMatrix\} \\
+ & \{VNiceArray\} & \{VNiceMatrix\}
+\end{tabular}
+\end{ttfamily}
+
+
+\medskip
+Les environnements |{NiceArray}|, |{NiceTabular}| et |{NiceTabular*}| sont
+similaires aux environnements |{array}|, |{tabular}| et |{tabular*}| de
+l'extension \pkg{array} (qui est chargée par \pkg{nicematrix}).
+
+\medskip
+Les environnements |{pNiceArray}|, |{bNiceArray}|, etc. n'ont pas d'équivalents
+dans \pkg{array}.
+
+\medskip
+Les environnements |{NiceMatrix}|, |{pNiceMatrix}|, etc. sont similaires aux
+environnements correspondants de l'\pkg{amsmath} (qui est chargée par
+\pkg{nicematrix}) : |{matrix}|, |{pmatrix}|, etc.
+
+\medskip
+Tous les environnements de l'extension \pkg{nicematrix} acceptent, entre
+crochets, une liste optionnelle de paires de la forme \textsl{clé=valeur}.
+{\bfseries Il doit n'y avoir aucun espace devant le crochet ouvrant (|[|) de
+ cette liste d'options.}
+
+\bigskip
+\textbf{Important}
+
+Avant la version 5.0, il fallait, pour des raisons techniques, utiliser les
+lettres |L|, |C| et |R| au lieu de |l|, |c| et |r| dans les préambules des
+environnements de \pkg{nicematrix}.
+
+Pour pouvoir continuer à utiliser ces lettres |L|, |C| et |R|, \pkg{nicematrix}
+doit être chargé avec l'option |define-L-C-R|.
+\begin{Verbatim}
+\usepackage[define-L-C-R]{nicematrix}
+\end{Verbatim}
+
+
+\section{L'espace vertical entre les rangées}
+
+Il est bien connu que certaines rangées des tableaux créés par défaut avec
+LaTeX sont trop proches l'une de l'autre. On en donne ci-dessous un exemple
+classique.
+
+\medskip
+\begin{BVerbatim}[baseline=c,boxwidth=9cm]
+$\begin{pmatrix}
+\frac12 & -\frac12 \\
+\frac13 & \frac14 \\
+\end{pmatrix}$
+\end{BVerbatim}
+$\begin{pmatrix}
+\frac12 & -\frac12 \\
+\frac13 & \frac14 \\
+\end{pmatrix}$
+
+\bigskip
+En s'inspirant de l'extension \pkg{cellspace} qui traite de ce problème,
+l'extension \pkg{nicematrix} propose deux clés |cell-space-top-limit| et
+|cell-space-bottom-limit| qui sont similaires aux deux paramètres
+|\cellspacetoplimit| et |\cellspacebottomlimit| proposés par \pkg{cellspace}.
+
+\colorbox{yellow!50}{\textbf{Nouveau 5.9}}\enskip Il existe aussi une clé
+|cell-space-limits| pour régler simultanément les deux paramètres.
+
+La valeur initiale de ces paramètres est $0$~pt pour que les environnements de
+\pkg{nicematrix} aient par défaut le même comportement que ceux de \pkg{array}
+et de l'\pkg{amsmath} mais une valeur de $1$~pt serait un bon choix. On
+conseille de régler leurs valeurs avec la commande
+|\NiceMatrixOptions|.\footnote{On remarquera que ces paramètres s'appliquent
+ aussi aux colonnes de type |S| de \pkg{siunitx} alors que \pkg{cellspace}
+ n'est pas utilisable avec ces colonnes.}
+
+\medskip
+\begin{Verbatim}
+\NiceMatrixOptions{~emphase#cell-space-limits = 1pt@}
+\end{Verbatim}
+
+\begin{BVerbatim}[baseline=c,boxwidth=9cm]
+$\begin{pNiceMatrix}
+\frac12 & -\frac12 \\
+\frac13 & \frac14 \\
+\end{pNiceMatrix}$
+\end{BVerbatim}
+\begin{scope}
+\NiceMatrixOptions{ cell-space-limits = 1pt }
+$\begin{pNiceMatrix}
+\frac12 & -\frac12 \\
+\frac13 & \frac14 \\
+\end{pNiceMatrix}$
+\end{scope}
\bigskip
-\textbf{Un exemple d'utilisation pour les lignes en pointillés continues}
+\section{La clé baseline}
+
+L'extension \pkg{nicematrix} propose une option |baseline| pour la position
+verticale des tableaux. Cette option |baseline| prend comme valeur un entier qui
+indique le numéro de rangée dont la ligne de base servira de ligne de base pour
+le tableau.
\medskip
-\begin{minipage}{10cm}
-Considérons par exemple le code suivant qui utilise un environnement |{pmatrix}| de l'extension \pkg{amsmath}.
+\begin{BVerbatim}[baseline=c,boxwidth=9cm]
+$A = \begin{pNiceMatrix}[~emphase#baseline=2@]
+\frac{1}{\sqrt{1+p^2}} & p & 1-p \\
+1 & 1 & 1 \\
+1 & p & 1+p
+\end{pNiceMatrix}$
+\end{BVerbatim}
+$A = \begin{pNiceMatrix}[baseline=2]
+\frac{1}{\sqrt{1+p^2}} & p & 1-p \\
+1 & 1 & 1 \\
+1 & p & 1+p
+\end{pNiceMatrix}$
+
+
+\interitem L'option |baseline| peut aussi prendre les trois valeurs spéciales
+|t|, |c| et |b|. Ces trois lettres peuvent aussi être utilisées de manière
+absolue comme pour l'option des environnements |{tabular}| et |{array}| de
+\pkg{array}. La valeur initiale de |baseline| est~|c|.
+
+
+\bigskip
+Dans l'exemple suivant, on utilise l'option |t| (synonyme de |baseline=t|)
+immédiatement après un |\item| de liste. On remarquera que la présence d'un
+|\hline| initial n'empêche pas l'alignement sur la ligne de base de la première
+rangée (avec |{tabular}| ou |{array}| de \pkg{array}, il faut utiliser
+|\firsthline|).
\smallskip
-\begin{BVerbatim}
-$A = \begin{pmatrix}
-1 & \cdots & \cdots & 1 \\
-0 & \ddots & & \vdots \\
-\vdots & \ddots & \ddots & \vdots \\
-0 & \cdots & 0 & 1
-\end{pmatrix}$
+\begin{BVerbatim}[baseline=c,boxwidth=9cm]
+\begin{enumerate}
+\item un item
+\smallskip
+\item \renewcommand{\arraystretch}{1.2}
+$\begin{NiceArray}[t]{lcccccc}
+\hline
+n & 0 & 1 & 2 & 3 & 4 & 5 \\
+u_n & 1 & 2 & 4 & 8 & 16 & 32
+\hline
+\end{NiceArray}$
+\end{enumerate}
\end{BVerbatim}
+%
+\begin{minipage}{5cm}
+\begin{enumerate}
+\item un item
+\smallskip
+\item \renewcommand{\arraystretch}{1.2}
+$\begin{NiceArray}[t]{lcccccc}
+\hline
+n & 0 & 1 & 2 & 3 & 4 & 5 \\
+u_n & 1 & 2 & 4 & 8 & 16 & 32 \\
+\hline
+\end{NiceArray}$
+\end{enumerate}
+\end{minipage}
+
+
+\bigskip
+Il est également possible d'utiliser les outils de \pkg{booktabs}: |\toprule|,
+|\bottomrule|, |\midrule|, etc.\par\nobreak
\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}$
+\begin{BVerbatim}[baseline=c,boxwidth=9cm]
+\begin{enumerate}
+\item an item
+\smallskip
+\item
+$\begin{NiceArray}[t]{lcccccc}
+~emphase#\toprule@
+n & 0 & 1 & 2 & 3 & 4 & 5 \\
+~emphase#\midrule@
+u_n & 1 & 2 & 4 & 8 & 16 & 32
+~emphase#\bottomrule@
+\end{NiceArray}$
+\end{enumerate}
+\end{BVerbatim}
+\begin{minipage}{5cm}
+\begin{enumerate}
+\item an item
+\smallskip
+\item
+$\begin{NiceArray}[t]{lcccccc}
+\toprule
+n & 0 & 1 & 2 & 3 & 4 & 5 \\
+\midrule
+u_n & 1 & 2 & 4 & 8 & 16 & 32 \\
+\bottomrule
+\end{NiceArray}$
+\end{enumerate}
+\end{minipage}
+
+
+\bigskip
+On peut aussi utiliser la clé |baseline| pour aligner une matrice sur un filet
+horizontal (tracé par |\hline|). On doit pour cela donner la valeur
+|line-|\textsl{i} où \textsl{i} est le numéro de la rangée qui suit ce filet
+horizontal.
+
+\smallskip
+\begin{Verbatim}
+\NiceMatrixOptions{cell-space-limits=1pt}
+\end{Verbatim}
+
+\smallskip
+\begin{BVerbatim}[baseline=c,boxwidth=9cm]
+$A=\begin{pNiceArray}{cc|cc}[baseline=line-3]
+\dfrac1A & \dfrac1B & 0 & 0 \\
+\dfrac1C & \dfrac1D & 0 & 0 \\
+\hline
+0 & 0 & A & B \\
+0 & 0 & D & D \\
+\end{pNiceArray}$
+\end{BVerbatim}
+\begin{scope}
+\NiceMatrixOptions{cell-space-limits=1pt}
+\raisebox{-5mm}{$A=\begin{pNiceArray}{cc|cc}[baseline=line-3]
+\dfrac1A & \dfrac1B & 0 & 0 \\
+\dfrac1C & \dfrac1D & 0 & 0 \\
+\hline
+0 & 0 & A & B \\
+0 & 0 & D & D \\
+\end{pNiceArray}$}
+\end{scope}
+
+
+
+\section{Les blocs}
+
+\label{Block}
+
+\subsection{Cas général}
+
+
+Dans les environnements de \pkg{nicematrix}, on peut utiliser la commande
+|\Block| pour placer un élément au centre d'un rectangle de cases fusionnées.
+
+La commande |\Block| doit être utilisée dans la case supérieure gauche du bloc
+avec deux arguments.
+
+\begin{itemize}
+\item Le premier argument est la taille de ce bloc avec la syntaxe $i$-$j$ où
+$i$ est le nombre de rangées et $j$ le nombre de colonnes du bloc.
+Si cet argument est laissé blanc, la valeur par défaut est |1-1|. Si le nombre
+de rangées n'est pas indiqué, ou bien est égal à |*|, le bloc s'étend jusqu'à la
+dernière rangée (idem pour les colonnes).
+
+\item Le deuxième argument est le contenu du bloc. On peut utiliser |\\| dans
+ce contenu pour avoir un contenu sur plusieurs lignes. Dans |{NiceTabular}|, le
+contenu est composé en mode texte tandis que, dans les autres environnements, il
+est composé en mode mathématique.
+\end{itemize}
+\interitem
+Voici un exemple d'utilisation de la commande |\Block| dans une matrice mathématique.
+
+\medskip
+\begin{BVerbatim}[baseline=c,boxwidth=10.6cm]
+$\begin{bNiceArray}{ccc|c}[margin]
+~emphase#\Block{3-3}{A}@ & & & 0 \\
+& \hspace*{1cm} & & \Vdots \\
+& & & 0 \\
+\hline
+0 & \Cdots& 0 & 0
+\end{bNiceArray}$
+\end{BVerbatim}
+$\begin{bNiceArray}{ccc|c}[margin]
+\Block{3-3}{A} & & & 0 \\
+& \hspace*{1cm} & & \Vdots \\
+& & & 0 \\
+\hline
+0 & \Cdots& 0 & 0
+\end{bNiceArray}$
+
\bigskip
+On peut souhaiter agrandir la taille du «$A$» placé dans le bloc de l'exemple
+précédent. Comme il est composé en mode mathématique, on ne peut pas directement
+utiliser une commande comme |\large|, |\Large| ou |\LARGE|. C'est pourquoi une
+option à mettre entre chevrons est proposée par |\Block| pour spécifier du code
+LaTeX qui sera inséré \emph{avant} le début du mode mathématique.\footnote{Cet
+ argument entre chevrons peut aussi être utilisé pour insérer une commande de
+ fonte comme |\bfseries| dans le cas où la commande |\\| est utilisée dans le
+ contenu du bloc.}
+
+\medskip
+\begin{BVerbatim}[baseline=c,boxwidth=10.6cm]
+$\begin{bNiceArray}{ccc|c}[margin]
+\Block{3-3}~emphase#<\LARGE>@{A} & & & 0 \\
+& \hspace*{1cm} & & \Vdots \\
+& & & 0 \\
+\hline
+0 & \Cdots& 0 & 0
+\end{bNiceArray}$
+\end{BVerbatim}
+$\begin{bNiceArray}{ccc|c}[margin]
+\Block{3-3}<\LARGE>{A} & & & 0 \\
+& \hspace*{1cm} & & \Vdots \\
+& & & 0 \\
+\hline
+0 & \Cdots& 0 & 0
+\end{bNiceArray}$
+
+
+\bigskip
+On peut régler le positionnement horizontal du bloc avec l'une des clés |l|, |c| et |r|.
+
+
+\medskip
+\begin{BVerbatim}[baseline=c,boxwidth=10.6cm]
+$\begin{bNiceArray}{ccc|c}[margin]
+\Block~emphase#[r]@{3-3}<\LARGE>{A} & & & 0 \\
+& \hspace*{1cm} & & \Vdots \\
+& & & 0 \\
+\hline
+0 & \Cdots& 0 & 0
+\end{bNiceArray}$
+\end{BVerbatim}
+$\begin{bNiceArray}{ccc|c}[margin]
+\Block[r]{3-3}<\LARGE>{A} & & & 0 \\
+& \hspace*{1cm} & & \Vdots \\
+& & & 0 \\
+\hline
+0 & \Cdots& 0 & 0
+\end{bNiceArray}$
+
+
+\interitem
+\textbf{On doit remarquer que, par défaut, les blocs ne créent pas d'espace}. Il
+n'y a exception que pour les blocs mono-rangée et les blocs mono-colonne comme
+expliqué juste après.
+
+
+\medskip
+Dans l'exemple suivant, on a dû élargir à la main les colonnes 2 et 3 (avec la
+construction |wc{...}| de \pkg{array}).
+
+\medskip
+\begin{BVerbatim}
+\begin{NiceTabular}~emphase#{cwc{2cm}wc{3cm}c}@
+rose & tulipe & marguerite & dahlia \\
+violette
+& \Block[draw=red,fill=red!15]{2-2}{\LARGE De très jolies fleurs} & & souci \\
+pervenche & & & lys \\
+arum & iris & jacinthe & muguet
+\end{NiceTabular}
+\end{BVerbatim}
+
+
+\medskip
+\begin{center}
+\begin{NiceTabular}{cwc{2cm}wc{3cm}c}
+rose & tulipe & marguerite & dahlia \\
+violette & \Block[draw=red,fill=red!15]{2-2}{\LARGE De très jolies fleurs} & & souci \\
+pervenche & & & lys \\
+arum & iris & jacinthe & muguet
+\end{NiceTabular}
+\end{center}
+
+\medskip
+Comme on le voit sur cet exemple, on peut fixer la couleur de fond avec la clé
+|fill| et la couleur du cadre avec la clé |draw|\footnote{Si la clé |draw| est
+ utilisée sans valeur, c'est la couleur par défaut des filets de tableaux qui
+ est utilisée.}. On peut aussi fixer l'épaisseur du trait avec la clé
+|line-width|.
+
+
+
+\subsection{Les blocs mono-colonne}
+
+Les blocs mono-colonne ont un comportement spécial.
+\begin{itemize}
+\item La largeur naturelle du contenu de ces blocs est prise en compte pour la
+largeur de la colonne courante.
+
+\item La spécification d'alignement horizontal donnée par le type de
+colonne (|c|, |r| ou |l|) est prise en compte pour le bloc (mais le bloc peut
+avoir sa propre spécification d'alignement horizontal).
+
+\item Les spécifications de fontes imposées à une colonne via la construction
+|>{...}| dans le préambule du tableau sont prises en compte pour les
+blocs mono-colonne de cette colonne (ce comportement est assez naturel).
+\end{itemize}
+
+
+\medskip
\begin{scope}
-\NiceMatrixOptions{transparent}
-\begin{minipage}{10cm}
-Maintenant, si nous utilisons l'extension \pkg{nicematrix} avec l'option |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}$
+\hfuzz=10cm
+\begin{BVerbatim}[baseline=c,boxwidth=12cm]
+\begin{NiceTabular}{~LetterAt{}>{\color{blue}}lr~LetterAt{}} \hline
+\Block{2-1}{Pierre} & 12 \\
+ & 13 \\ \hline
+Jacques & 8 \\ \hline
+\Block{3-1}{Stéphanie} & 18 \\
+ & 17 \\
+ & 15 \\ \hline
+Amélie & 20 \\ \hline
+Henri & 14 \\ \hline
+\Block{2-1}{Estelle} & 15 \\
+ & 19 \\ \hline
+\end{NiceTabular}
+\end{BVerbatim}
+\begin{NiceTabular}{@{}>{\color{blue}}lr@{}} \hline
+\Block{2-1}{Pierre} & 12 \\
+ & 13 \\ \hline
+Jacques & 8 \\ \hline
+\Block{3-1}{Stéphanie} & 18 \\
+ & 17 \\
+ & 15 \\ \hline
+Amélie & 20 \\ \hline
+Henri & 14 \\ \hline
+\Block{2-1}{Estelle} & 15 \\
+ & 19 \\ \hline
+\end{NiceTabular}
\end{scope}
+\subsection{Les blocs mono-rangée}
+Pour les blocs mono-rangée, la hauteur (\emph{height}) et la profondeur
+(\emph{depth}) naturelles sont prises en compte pour la hauteur et la largeur de
+la rangée en cours (comme le fait la commande standard |\multicolumn| de LaTeX).
-\section{Les environnements de cette extension}
-L'extension \pkg{nicematrix} définit les nouveaux environnements suivants :
+
+
+\subsection{Les blocs mono-case}
+
+Les blocs mono-case héritent des caractéristiques des blocs mono-colonne et
+des blocs mono-rangée.
\medskip
-\begin{ttfamily}
-\setlength{\tabcolsep}{3mm}
-\begin{tabular}{llll}
-\{NiceMatrix\} & \{NiceArray\} & \{pNiceArray\} \\
-\{pNiceMatrix\} & & \{bNiceArray\} \\
-\{bNiceMatrix\} & & \{BNiceArray\} \\
-\{BNiceMatrix\} & & \{vNiceArray\} \\
-\{vNiceMatrix\} & & \{VNiceArray\} \\
-\{VNiceMatrix\} & & \{NiceArrayWithDelims\} \\
+On pourrait penser que des blocs d'une seule case n'ont aucune utilité mais, en
+fait, il y a plusieurs situations où leur utilisation peut présenter des avantages.
+
+\begin{itemize}
+\item Un bloc mono-case permet d'utiliser la commande |\\| pour composer le
+bloc sur plusieurs lignes.
+
+\item On peut utiliser l'option d'alignement horizontal du bloc pour déroger à
+la consigne générale donnée dans le préambule pour cette colonne.
+
+\item On peut tracer un cadre autour du bloc avec la clé |draw| de la commande
+|\Block|.\footnote{Pour colorier le fond d'une case, il n'y a pas besoin
+ d'utiliser un bloc mono-case : on peut utiliser la commande |\cellcolor| si la
+ clé |colortbl-like| est utilisée : voir p.~\pageref{colortbl-like}.}
+\end{itemize}
+
+\medskip
+\begin{BVerbatim}[baseline=c,boxwidth=10cm]
+\begin{NiceTabular}{cc}
+\toprule
+Écrivain
+& ~emphase#\Block[l]{}{année de\\ naissance}@ \\
+\midrule
+Hugo & 1802 \\
+Balzac & 1799 \\
+\bottomrule
+\end{NiceTabular}
+\end{BVerbatim}
+%
+\begin{NiceTabular}{cc}
+\toprule
+Écrivain
+& \Block[l]{}{année de\\ naissance} \\
+\midrule
+Hugo & 1802 \\
+Balzac & 1799 \\
+\bottomrule
+\end{NiceTabular}
+
+\medskip
+On rappelle que si le premier argument obligatoire de |\Block| est laissé
+blanc, alors le bloc est mono-case\footnote{On peut considérer que la valeur par
+défaut de ce premier argument obligatoire est |1-1|.}.
+
+
+
+
+\subsection{Petite remarque}
+
+On remarquera que le centrage horizontal du contenu des blocs est
+correct même si un espacement des colonnes a été demandé par une instruction
+comme |!{\qquad}| dans le préambule (ce n'est pas le cas avec |\multicolumn|).
+Dans l'exemple suivant, l'en-tête «Premier groupe» est correctement centré.
+
+\medskip
+\begin{center}
+\fvset{commandchars=\~\#\+}
+\begin{BVerbatim}
+\begin{NiceTabular}{@{}c!{\qquad}ccc~emphase#!{\qquad}+ccc~@{}}
+\toprule
+& ~emphase#\Block{1-3}{Premier groupe}+ & & & \Block{1-3}{Deuxième groupe} \\
+Rang & 1A & 1B & 1C & 2A & 2B & 2C \\
+\midrule
+ 1 & 0.657 & 0.913 & 0.733 & 0.830 & 0.387 & 0.893\\
+ 2 & 0.343 & 0.537 & 0.655 & 0.690 & 0.471 & 0.333\\
+ 3 & 0.783 & 0.885 & 0.015 & 0.306 & 0.643 & 0.263\\
+ 4 & 0.161 & 0.708 & 0.386 & 0.257 & 0.074 & 0.336\\
+\bottomrule
+\end{NiceTabular}
+\end{BVerbatim}
+\end{center}
+
+\bigskip
+\begin{center}
+\begin{NiceTabular}{@{}c!{\qquad}ccc!{\qquad}ccc@{}}
+\toprule
+& \Block{1-3}{Premier groupe} & & & \Block{1-3}{Deuxième groupe} \\
+Rang & 1A & 1B & 1C & 2A & 2B & 2C \\
+\midrule
+ 1 & 0.657 & 0.913 & 0.733 & 0.830 & 0.387 & 0.893\\
+ 2 & 0.343 & 0.537 & 0.655 & 0.690 & 0.471 & 0.333\\
+ 3 & 0.783 & 0.885 & 0.015 & 0.306 & 0.643 & 0.263\\
+ 4 & 0.161 & 0.708 & 0.386 & 0.257 & 0.074 & 0.336\\
+\bottomrule
+\end{NiceTabular}
+\end{center}
+
+
+
+\section{Les filets horizontaux et verticaux}
+
+Les techniques habituelles pour tracer des filets peuvent être utilisées dans
+les environnements de \pkg{nicematrix}, à l'exception de |\vline|. Il y a
+néanmoins quelques petites différences de comportement avec les environnements
+classiques.
+
+
+\bigskip
+\subsection{Quelques différences avec les environnements classiques}
+
+\subsubsection{Les filets verticaux}
+
+Dans les environnements de \pkg{nicematrix}, les filets verticaux spécifiés par
+\verb+|+ dans le préambule des environnements ne sont jamais coupés, même en cas
+de ligne incomplète ou de double filet horizontal spécifié par |\hline\hline|
+(il n'y a pas besoin d'utiliser \pkg{hhline}).\footnote{Il s'agit là du comportement depuis la version 5.1 de
+ \pkg{nicematrix}. Dans les versions précédentes, le comportement était
+ le comportement par défaut de \pkg{array}.}
+
+\bigskip
+\begin{BVerbatim}[baseline=c,boxwidth=10cm]
+\begin{NiceTabular}{|c|c|} \hline
+Premier & Deuxième \\ ~emphase#\hline\hline@
+Paul \\ \hline
+Marie & Pauline \\ \hline
+\end{NiceTabular}
+\end{BVerbatim}
+%
+\begin{NiceTabular}{|c|c|}[c] \hline
+Premier & Deuxième \\ \hline\hline
+Paul \\ \hline
+Marie & Pauline \\ \hline
+\end{NiceTabular}
+
+
+\bigskip
+En revanche, les filets verticaux ne sont pas tracés à l'intérieur des blocs.
+
+
+\bigskip
+Si vous utilisez \pkg{booktabs} (qui fournit |\toprule|, |\midrule|,
+|\bottomrule|, etc.) et que vous tenez absolument à mettre des filets verticaux
+(ce qui est contraire à l'esprit à \pkg{booktabs}), vous constaterez que les
+filets tracés par \pkg{nicematrix} sont compatibles avec \pkg{booktabs}.
+
+\medskip
+\begin{BVerbatim}[baseline=c,boxwidth=10.5cm]
+$\begin{NiceArray}{~emphase#|cccc|@} \toprule
+a & b & c & d \\ \midrule
+1 & 2 & 3 & 4 \\
+1 & 2 & 3 & 4 \\ \bottomrule
+\end{NiceArray}$
+\end{BVerbatim}
+%
+$\begin{NiceArray}{|cccc|}
+\toprule
+a & b & c & d \\
+\midrule
+1 & 2 & 3 & 4 \\
+1 & 2 & 3 & 4 \\
+\bottomrule
+\end{NiceArray}$
+
+\bigskip
+Il reste néanmoins possible de définir un spécificateur, nommé par exemple
+\verb|I|, pour tracer des filets verticaux avec le comportement standard de
+\pkg{array} :
+%
+\begin{Verbatim}
+\newcolumntype{I}{!{\vrule}}
+\end{Verbatim}
+
+En fait, en l'occurrence, il serait peut-être plus habile d'insérer
+|\OnlyMainNiceMatrix| (cf. p.~\pageref{OnlyMainNiceMatrix}) :
+\begin{Verbatim}
+\newcolumntype{I}{!{\OnlyMainNiceMatrix{\vrule}}}
+\end{Verbatim}
+
+
+
+\subsubsection{La commande \textbackslash cline}
+
+\label{remark-cline}
+
+Les traits verticaux et horizontaux que l'on insère avec |\hline| et le
+spécificateur de colonne «\verb+|+» de \pkg{array} rendent le tableau plus large
+ou plus long d'une quantité égale à la largeur du trait (avec \pkg{array} et
+aussi avec \pkg{nicematrix}).
+
+\smallskip
+Pour des raisons historiques, il n'en est pas de même pour la commande |\cline|,
+comme on peut le voir avec l'exemple suivant.
+
+\medskip
+\begin{BVerbatim}[baseline=c,boxwidth=10cm]
+\setlength{\arrayrulewidth}{2pt}
+\begin{tabular}{cccc} \hline
+A&B&C&D \\ ~emphase#\cline{2-2}@
+A&B&C&D \\ \hline
\end{tabular}
-\end{ttfamily}
+\end{BVerbatim}
+%
+\begin{scope}
+\setlength{\arrayrulewidth}{2pt}
+\begin{tabular}[c]{cccc}
+\hline
+A&B&C&D \\
+\cline{2-2}
+A&B&C&D \\
+\hline
+\end{tabular}
+\end{scope}
+
+\medskip
+Dans les environnements de \pkg{nicematrix}, cette situation est corrigée (il
+est néanmoins possible de revenir au comportement par défaut de |\cline| avec la
+clé |standard-cline|).
+
+\medskip
+\begin{BVerbatim}[baseline=c,boxwidth=10cm]
+\setlength{\arrayrulewidth}{2pt}
+\begin{NiceTabular}{cccc} \hline
+A&B&C&D \\ ~emphase#\cline{2-2}@
+A&B&C&D \\ \hline
+\end{NiceTabular}
+\end{BVerbatim}
+%
+\begin{scope}
+\setlength{\arrayrulewidth}{2pt}
+\begin{NiceTabular}[c]{cccc}
+\hline
+A&B&C&D \\
+\cline{2-2}
+A&B&C&D \\
+\hline
+\end{NiceTabular}
+\end{scope}
+
+
+
+\subsection{L'épaisseur et la couleur des filets}
+
+Les environnements de \pkg{nicematrix} proposent une clé |rules/width| pour
+fixer la largeur (en fait l'épaisseur) des filets dans l'environnement. En fait,
+cette clé ne fait que fixer la valeur de |\arrayrulewidth|.
+
+\smallskip
+On sait que \pkg{colortbl} propose la commande |\arrayrulecolor| pour spécifier
+la couleur de ces filets.
+
+\smallskip
+Avec \pkg{nicematrix}, il est possible de spécifier une couleur même si
+\pkg{colortbl} n'est pas chargé. Par souci de compatibilité, la commande est
+nommée également |\arrayrulecolor|. Les environnements de \pkg{nicematrix}
+proposent également une clé |rules/color| qui permet de fixer cette couleur pour
+l'environnement en question.
+
+\medskip
+\begin{scope}
+\hfuzz=10cm
+\begin{BVerbatim}[baseline=c,boxwidth=9.5cm]
+\begin{NiceTabular}{|ccc|}[~emphase#rules/color=[gray]{0.9},rules/width=1pt@]
+\hline
+rose & tulipe & lys \\
+arum & iris & violette \\
+muguet & dahlia & souci \\
+\hline
+\end{NiceTabular}
+\end{BVerbatim}
+\begin{NiceTabular}{|ccc|}[rules/color=[gray]{0.9},rules/width=1pt]
+\hline
+rose & tulipe & lys \\
+arum & iris & violette \\
+muguet & dahlia & souci \\
+\hline
+\end{NiceTabular}
+\end{scope}
+
+\medskip
+Si on veut définir de nouveaux spécificateurs de colonnes pour des filets (par
+exemple plus épais ou bien d'une couleur spécifique), on aura peut-être intérêt
+à utiliser la commande |\OnlyMainNiceMatrix| décrite
+p.~\pageref{OnlyMainNiceMatrix}.
+
+
+
+
+
+\bigskip
+\subsection{Les clés hlines et vlines}
+
+La clé |hlines| demande un tracé de tous les filets horizontaux et la clé
+|vlines| demande un tracé de tous les filets verticaux (sauf dans les blocs et
+dans les blocs virtuels déterminés par des lignes en pointillés). En fait, dans les
+environnements avec délimiteurs (comme |{pNiceMatrix}| ou |{bNiceArray}|), les
+filets extérieurs ne sont pas tracés (ce qui est le comportement certainement
+attendu).
+
+
+\medskip
+\begin{BVerbatim}[baseline=c,boxwidth=10.6cm]
+$\begin{pNiceMatrix}[~emphase#vlines@,rules/width=0.2pt]
+1 & 2 & 3 & 4 & 5 & 6 \\
+1 & 2 & 3 & 4 & 5 & 6 \\
+1 & 2 & 3 & 4 & 5 & 6
+\end{pNiceMatrix}$
+\end{BVerbatim}
+$\begin{pNiceMatrix}[vlines,rules/width=0.2pt]
+1 & 2 & 3 & 4 & 5 & 6 \\
+1 & 2 & 3 & 4 & 5 & 6 \\
+1 & 2 & 3 & 4 & 5 & 6
+\end{pNiceMatrix}$
+
+
+
+\subsection{La clé hvlines}
+\label{hvlines}
+
+La clé |hvlines| demande le tracé de tous les filets horizontaux et verticaux
+(sauf dans les blocs et dans les blocs virtuels déterminés par des
+lignes en pointillés et sauf les filets correspondants à des clés |draw| de
+commandes |\Block|, filets qui sont tracés avec leurs caractéristiques).
+
+\medskip
+\begin{Verbatim}
+\begin{NiceTabular}{cccc}[~emphase#hvlines@,rules/color=blue,rules/width=1pt]
+rose & tulipe & marguerite & dahlia \\
+violette & \Block[~emphase#draw=red@]{2-2}{\LARGE fleurs} & & souci \\
+pervenche & & & lys \\
+arum & iris & jacinthe & muguet
+\end{NiceTabular}
+\end{Verbatim}
+%
+\begin{center}
+\begin{NiceTabular}{cccc}[hvlines,rules/color=blue,rules/width=1pt]
+rose & tulipe & marguerite & dahlia \\
+violette & \Block[draw=red]{2-2}{\LARGE fleurs} & & souci \\
+pervenche & & & lys \\
+arum & iris & jacinthe & muguet
+\end{NiceTabular}
+\end{center}
+
+
+\subsection{La clé hvlines-except-corners}
+
+La clé |hvlines-except-corners| demande le tracé de tous les filets horizontaux
+et verticaux sauf dans les blocs (y compris dans les blocs virtuels déterminés par des
+lignes en pointillés) et sauf dans les coins vides.
+\medskip
+\begin{Verbatim}
+\begin{NiceTabular}{*{6}{c}}[~emphase#hvlines-except-corners@,cell-space-top-limit=3pt]
+ & & & & A \\
+ & & A & A & A \\
+ & & & A \\
+ & & A & A & A & A \\
+A & A & A & A & A & A \\
+A & A & A & A & A & A \\
+ & \Block{2-2}{B} & & A \\
+ & & & A \\
+ & A & A & A \\
+\end{NiceTabular}
+\end{Verbatim}
+%
+\begin{center}
+\begin{NiceTabular}{*{6}{c}}[hvlines-except-corners,cell-space-top-limit=3pt]
+ & & & & A \\
+ & & A & A & A \\
+ & & & A \\
+ & & A & A & A & A \\
+A & A & A & A & A & A \\
+A & A & A & A & A & A \\
+ & \Block{2-2}{B} & & A \\
+ & & & A \\
+ & A & A & A \\
+\end{NiceTabular}
+\end{center}
+
+Comme on le voit, un «coin vide» est constitué de la réunion de tous les
+rectangles vides partant de la case située exactement dans le coin.
+\bigskip
+On peut passer en argument de |\hvlines-except-corners| une liste de coins à
+prendre en considération, les coins étant désignés par |NW|, |SW|, |NE| et |SE|
+(\emph{north west}, \emph{south west}, \emph{north east} et \emph{south east}).
\medskip
-Par défaut, les environnements |{NiceMatrix}|, |{pNiceMatrix}|, |{bNiceMatrix}|, |{BNiceMatrix}|, |{vNiceMatrix}|
-et |{VNiceMatrix}| se comportent quasiment comme les environnements correspondants de \pkg{amsmath} : |{matrix}|,
-|{pmatrix}|, |{bmatrix}|, |{Bmatrix}|, |{vmatrix}| et |{Vmatrix}|.
+\begin{BVerbatim}[boxwidth=11cm,baseline=c]
+\begin{NiceTabular}{*{6}{c}}%
+ [~emphase#hvlines-except-corners=NE@,cell-space-top-limit=3pt]
+1\\
+1&1\\
+1&2&1\\
+1&3&3&1\\
+1&4&6&4&1\\
+1&5&10&10&5&1
+\end{NiceTabular}
+\end{BVerbatim}
+\begin{NiceTabular}{*{6}{c}}%
+ [c,hvlines-except-corners=NE,cell-space-top-limit=3pt]
+1\\
+1&1\\
+1&2&1\\
+1&3&3&1\\
+1&4&6&4&1\\
+1&5&10&10&5&1
+\end{NiceTabular}
+
+\subsection{La commande \textbackslash diagbox}
+
+La commande |\diagbox| (inspirée par l'extension \pkg{diagbox}) permet, quand
+elle est utilisée dans une case, de couper cette case selon une diagonale
+descendante.\footnote{L'auteur de ce document considère que ce type de
+ construction est un piètre choix graphique.}
+
\medskip
-L'environnement |{NiceArray}| est similaire à l'environnement |{array}| de l'extension |{array}|. Néanmoins, pour
-des raisons techniques, dans le préambule de l'environnement |{NiceArray}|, l'utilisateur doit utiliser les lettres
-|L|, |C| et~|R| au lieu de |l|, |c| et |r|. Il est possible d'utiliser les constructions |w{...}{...}|,
-|W{...}{...}|\footnote{Pour les colonnes de type |w| et |W|, les cases sont composées en mode mathématique (dans
- les environnements de \pkg{nicematrix}) alors que dans |{array}| de \pkg{array}, elles sont composées en mode
- texte.}, \verb+|+, |>{...}|, |<{...}|, |@{...}|, |!{...}| et |*{n}{...}| mais les lettres |p|, |m| et |b| ne
-doivent pas être employées. Voir p.~\pageref{NiceArray} la partie concernant |{NiceArray}|.
+\begin{BVerbatim}[baseline=c,boxwidth=10cm]
+$\begin{NiceArray}{*{5}{c}}[hvlines]
+~emphase#\diagbox{x}{y}@ & 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}
+$\begin{NiceArray}{*{5}{c}}[hvlines]
+\diagbox{x}{y} & 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}$
+
+\medskip
+Cette commande |\diagbox| peut aussi être utilisée dans un |\Block|.
+
+
+
+\subsection{Filets en pointillés}
+
+
+Dans les environnements de \pkg{nicematrix}, il est possible d'utiliser la
+commande |\hdottedline| (fournie par \pkg{nicematrix}) qui est l'équivalent pour
+les pointillés des commandes |\hline| et |\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 |{NiceTabular}|,
+|{NiceArray}|, etc.), il est possible de dessiner un trait vertical en
+pointillés avec le spécificateur «|:|».
+
+\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
+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
+|letter-for-dotted-lines| disponible dans |\NiceMatrixOptions|.
+Ainsi libérée, la lettre «|:|» peut être utilisée par ailleurs (par exemple par
+l'extension \pkg{arydshln}).
+
+
+\bigskip
+\emph{Remarque} : Quand l'extension \pkg{array} (sur laquelle s'appuie
+\pkg{nicematrix}) est chargée, les traits verticaux et horizontaux que l'on
+insère rendent le tableau plus large ou plus long d'une quantité égale à la
+largeur du trait\footnote{En fait, cela est vrai pour |\hline| et «\verb+|+»
+ mais pas pour |\cline| : cf. p.~\pageref{remark-cline}}. Avec
+\pkg{nicematrix}, les lignes en pointillés tracées par |\hdottedline| et «|:|»
+ont ce même effet.
+
+
+
+
+\section{Les couleurs des rangées et des colonnes}
+
+\subsection{Utilisation de colortbl}
+
+Rappelons que l'extension \pkg{colortbl} peut être chargée directement par
+|\usepackage{colortbl}| ou en chargeant l'extension \pkg{xcolor} avec l'option
+|table| : |\usepackage[table]{xcolor}|.
+
+\medskip
+Comme l'extension \pkg{nicematrix} est fondée sur \pkg{array}, il est possible
+d'utiliser \pkg{colortbl} avec \pkg{nicematrix}.
+
+\medskip
+Il y a néanmoins deux inconvénients :
+\begin{itemize}
+\item L'extension \pkg{colortbl} patche \pkg{array}, ce qui entraîne des
+incompatibilités (par exemple avec la commande |\hdotsfor|).
+
+\item L'extension \pkg{colortbl} construit le tableau ligne par ligne, en
+alternant rectangles colorés, filets et contenu des cases. Le \textsc{pdf}
+résultant déroute certains lecteurs de \textsc{pdf} et on a parfois des artefacts
+d'affichage.
+
+\begin{itemize}
+\item Certains filets semblent disparaître. Ce phénomène est dû au fait que les
+lecteurs de PDF donnent souvent la priorité aux éléments graphiques qui ont été
+tracés postérieurement (conformément à l'esprit du «modèle du peintre» de
+PostScript et PDF). De ce point de vue, MuPDF (qui est utilisé par exemple par
+SumatraPDF) donne de meilleurs résultats que Adobe Reader.
+
+\item Une fine ligne blanche semble apparaître entre deux cases de même
+couleur. Ce phénomène se produit quand chaque case est coloriée avec sa
+propre instruction |fill| (opérateur |fill| de PostScript noté |f| en PDF).
+C'est le cas avec \pkg{colortbl} avec lequel chaque case est coloriée
+individuellement, même si on utilise |\columncolor| ou |\rowcolor|.
+
+Concernant ce phénomène, Adobe Reader donne de meilleurs résultats que
+MuPDF.
+\end{itemize}
+
+L'extension \pkg{nicematrix} propose des outils qui permettent d'éviter ces
+inconvénients.
+\end{itemize}
+
+\subsection{Les outils de nicematrix dans le code-before}
+
+L'extension \pkg{nicematrix} proposent des outils (indépendants de
+\pkg{colortbl}) pour tracer d'abord les rectangles colorés, puis le contenu des
+cases et les filets. Cette manière de faire est plus dans l'esprit du «modèle du
+peintre» des formats PostScript et \textsc{pdf} et convient donc mieux aux
+lecteurs de \textsc{pdf}. L'inconvénient est qu'elle nécessite plusieurs
+compilations successives.
+
+\medskip
+L'extension \pkg{nicematrix} fournit une clé |code-before| pour du code qui sera
+exécuté avant le tracé du tableau. De nouvelles commandes y sont disponibles :
+|\cellcolor|, |\rectanglecolor|, |\rowcolor|, |\columncolor|, |\rowcolors| et
+|\chessboardcolors|.
+\label{code-before}
+
+\medskip
+Toutes ces commandes acceptent un argument optionnel (entre crochets et en
+première position) qui est le modèle colorimétrique pour la spécification des
+couleurs.
+
+\medskip
+\begin{itemize}
+\item La commande |\cellcolor| tient son nom de la commande |\cellcolor| de
+\pkg{colortbl}.
+
+Elle prend en arguments obligatoires une couleur et une liste de cases sous le
+format $i$-$j$ où $i$ est le numéro de ligne et $j$ le numéro de colonne.
+
+\medskip
+\begin{scope}
+\hfuzz=10cm
+\begin{BVerbatim}[boxwidth=10cm,baseline=c]
+\begin{NiceTabular}{|c|c|c|}[code-before = ~emphase#\cellcolor{red!15}{3-1,2-2,1-3}@]
+\hline
+a & b & c \\ \hline
+e & f & g \\ \hline
+h & i & j \\ \hline
+\end{NiceTabular}
+\end{BVerbatim}
+\begin{NiceTabular}{|c|c|c|}[code-before = \cellcolor{red!15}{3-1,2-2,1-3}]
+\hline
+a & b & c \\ \hline
+e & f & g \\ \hline
+h & i & j \\ \hline
+\end{NiceTabular}
+\end{scope}
+
+
+\bigskip
+\item La commande |\rectanglecolor| prend trois arguments obligatoires. Le
+premier est la couleur, les deux suivants fournissent la case en haut à gauche
+et la case en bas à droite du rectangle.
+
+\medskip
+\begin{scope}
+\hfuzz=10cm
+\begin{BVerbatim}[boxwidth=10cm,baseline=c]
+\begin{NiceTabular}{|c|c|c|}[code-before = ~emphase#\rectanglecolor{blue!15}{2-2}{3-3}@]
+\hline
+a & b & c \\ \hline
+e & f & g \\ \hline
+h & i & j \\ \hline
+\end{NiceTabular}
+\end{BVerbatim}
+\begin{NiceTabular}{|c|c|c|}[code-before = \rectanglecolor{blue!15}{2-2}{3-3}]
+\hline
+a & b & c \\ \hline
+e & f & g \\ \hline
+h & i & j \\ \hline
+\end{NiceTabular}
+\end{scope}
+
+
+
+\bigskip
+\item La commande |\rowcolor| doit son nom à la commande |\rowcolor| de
+\pkg{colortbl}. Son premier argument obligatoire est la couleur et le deuxième
+est une liste de numéros de rangées ou bien d'intervalles de rangées sous la
+forme $a$-$b$ (un intervalle de la forme $a$- représente toutes les rangées à
+partir de la rangée~$a$).
+
+\medskip
+
+\begin{scope}
+\hfuzz=10cm
+\begin{BVerbatim}[boxwidth=9cm,baseline=c]
+$\begin{NiceArray}{lll}[hvlines, ~emphase#code-before = \rowcolor{red!15}{1,3-5,8-}@]
+a_1 & b_1 & c_1 \\
+a_2 & b_2 & c_2 \\
+a_3 & b_3 & c_3 \\
+a_4 & b_4 & c_4 \\
+a_5 & b_5 & c_5 \\
+a_6 & b_6 & c_6 \\
+a_7 & b_7 & c_7 \\
+a_8 & b_8 & c_8 \\
+a_9 & b_9 & c_9 \\
+a_{10} & b_{10} & c_{10} \\
+\end{NiceArray}$
+\end{BVerbatim}
+%
+$\begin{NiceArray}{lll}%
+[baseline=4,hvlines, code-before = \rowcolor{red!15}{1,3-5,8-}]
+a_1 & b_1 & c_1 \\
+a_2 & b_2 & c_2 \\
+a_3 & b_3 & c_3 \\
+a_4 & b_4 & c_4 \\
+a_5 & b_5 & c_5 \\
+a_6 & b_6 & c_6 \\
+a_7 & b_7 & c_7 \\
+a_8 & b_8 & c_8 \\
+a_9 & b_9 & c_9 \\
+a_{10} & b_{10} & c_{10} \\
+\end{NiceArray}$
+\end{scope}
+
+
+
+\bigskip
+\item La commande |\columncolor| doit son nom à la commande |\columncolor| de
+\pkg{colortbl}. Sa syntaxe est similaire à celle de |\rowcolor|.
+
+\bigskip
+\item La commande |\rowcolors| (avec un \emph{s}) doit son nom à la commande
+|\rowcolors| de \pkg{xcolor}\footnote{La commande |\rowcolors| de \pkg{xcolor}
+ est disponible quand \pkg{xcolor} est chargé avec l'option |table|.}. Le
+\emph{s} rappelle qu'il y a deux couleurs. Elle colorie alternativement les
+rangées avec les deux couleurs à partir de la rangée dont le numéro est donné en
+premier argument (obligatoire), comme le fait la commande |\rowcolors| de
+\pkg{xcolor}.
+
+\colorbox{yellow!30}{Nouveau 5.8}\enskip
+En fait, le premier argument (obligatoire) peut, plus généralement, contenir
+une liste d'intervalles correspondant à l'ensemble des rangées sur lesquelles
+portera l'effet de |\rowcolors| (un intervalle de la forme $i$ désigne en fait
+l'intervalle constitué de toutes les rangées du tableau à partir de la rangée~$i$).
+
+
+\bigskip
+La commande |\rowcolors| accepte une liste de paires clé-valeur comme argument
+optionnel en dernière position (l'argument optionel en première position
+correspond à l'espace colorimétrique). Les clés disponibles sont |cols|,
+|restart| et |respect-blocks|.
+\begin{itemize}
+\item \colorbox{yellow!30}{Nouveau 5.8}\enskip
+La clé |cols| décrit un ensemble de colonnes sur lesquelles portera
+l'effet de |\rowcolors|. Cet ensemble de colonnes est une liste d'intervalles de
+la forme $i$|-|$j$.
+
+\item \colorbox{yellow!30}{Nouveau 5.8}\enskip Avec la clé |restart|, chacun
+des intervalles de rangées spécifié par le premier argument de |\rowcolors|
+recommence avec la même couleur.\footnote{Autrement, la couleur d'une rangée ne
+ dépend que de la partié de son numéro.}
+
+
+\item Avec la clé |respect-blocks|, qui est de type booléen, les ``rangées''
+colorées alternativement peuvent s'étendre sur plusieurs rangées réelles du
+tableau pour englober les blocs (créés par la commande |\Block|).
+\end{itemize}
+
+
+\medskip
+\begin{scope}
+\hfuzz=10cm
+\begin{BVerbatim}[baseline=c,boxwidth=9cm]
+\begin{NiceTabular}{clr}%
+ [hvlines,code-before = ~emphase#{\rowcolors{2}{blue!10}{}[cols=2-3,restart]}@]
+\Block{1-*}{Résultats} \\
+\Block{2-1}{A}& Pierre & 12 \\
+ & Jacques & 8 \\
+\Block{4-1}{B}& Stéphanie & 18 \\
+ & Amélie & 20 \\
+ & Henri & 14 \\
+ & Estelle & 15
+\end{NiceTabular}
+\end{BVerbatim}
+\begin{NiceTabular}{clr}[hvlines,
+ code-before = {\rowcolors{2}{blue!10}{}[cols=2-3,restart]},baseline=2]
+\Block{1-*}{Résultats} \\
+\Block{2-1}{A}& Pierre & 12 \\
+ & Jacques & 8 \\
+\Block{4-1}{B}& Stéphanie & 18 \\
+ & Amélie & 20 \\
+ & Henri & 14 \\
+ & Estelle & 15
+\end{NiceTabular}
+\end{scope}
+
+
+\vspace{1cm}
+
+\begin{scope}
+\hfuzz=10cm
+\begin{BVerbatim}[baseline=c,boxwidth=11cm]
+\begin{NiceTabular}{lr}[hvlines,code-before =
+~emphase#\rowcolors{1}{blue!10}{}[respect-blocks]@]
+\Block{2-1}{Pierre} & 12 \\
+ & 13 \\
+Jacques & 8 \\
+\Block{3-1}{Stéphanie} & 18 \\
+ & 17 \\
+ & 15 \\
+Amélie & 20 \\
+Henri & 14 \\
+\Block{2-1}{Estelle} & 15 \\
+ & 19
+\end{NiceTabular}
+\end{BVerbatim}
+\begin{NiceTabular}{lr}[hvlines,code-before =
+\rowcolors{1}{blue!10}{}[respect-blocks],baseline=c]
+\Block{2-1}{Pierre} & 12 \\
+ & 13 \\
+Jacques & 8 \\
+\Block{3-1}{Stéphanie} & 18 \\
+ & 17 \\
+ & 15 \\
+Amélie & 20 \\
+Henri & 14 \\
+\Block{2-1}{Estelle} & 15 \\
+ & 19
+\end{NiceTabular}
+\end{scope}
+
+
+
+
+\bigskip
+\item \label{chessboardcolors}%
+La commande |\chessboardcolors| prend en arguments obligatoires deux
+couleurs et colorie les cases en quinconces avec les deux couleurs.
+
+\medskip
+\begin{scope}
+\hfuzz=10cm
+\begin{BVerbatim}[baseline=c,boxwidth=9cm]
+$\begin{pNiceMatrix}[r,margin, ~emphase#code-before=\chessboardcolors{red!15}{blue!15}@]
+1 & -1 & 1 \\
+-1 & 1 & -1 \\
+1 & -1 & 1
+\end{pNiceMatrix}$
+\end{BVerbatim}
+$\begin{pNiceMatrix}%
+[baseline=1, r, margin, code-before = \chessboardcolors{red!15}{blue!15}]
+1 & -1 & 1 \\
+-1 & 1 & -1 \\
+1 & -1 & 1
+\end{pNiceMatrix}$
+\end{scope}
+
+\medskip
+On a utilisé la clé |r| qui impose que toutes les colonnes soient alignées à
+droite (cf. p.~\pageref{key-R}).
+\end{itemize}
+
+\bigskip
+On remarquera que ces commandes sont compatibles avec les commandes de
+\pkg{booktabs} (|\toprule|, |\midrule|, |\bottomrule|, etc).
+
+\medskip
+\begin{scope}
+\hfuzz=10cm
+\begin{BVerbatim}[baseline=c,boxwidth=8.5cm]
+\begin{NiceTabular}{lSSSS}%
+[code-before = \rowcolor{red!15}{1-2} \rowcolors{3}{blue!15}{}]
+~emphase#\toprule@
+\Block{2-1}{Produit} &
+\Block{1-3}{dimensions (cm)} & & &
+\Block{2-1}{\rotate Prix} \\
+~emphase#\cmidrule(rl){2-4}@
+ & L & l & h \\
+~emphase#\midrule@
+petit & 3 & 5.5 & 1 & 30 \\
+moyen & 5.5 & 8 & 1.5 & 50.5 \\
+premium & 8.5 & 10.5 & 2 & 80 \\
+extra & 8.5 & 10 & 1.5 & 85.5 \\
+spécial & 12 & 12 & 0.5 & 70 \\
+~emphase#\bottomrule@
+\end{NiceTabular}
+\end{BVerbatim}
+\begin{NiceTabular}[c]{lSSSS}%
+[code-before = \rowcolor{red!15}{1-2} \rowcolors{3}{blue!15}{}]
+\toprule
+\Block{2-1}{Produit} &
+\Block{1-3}{dimensions (cm)} & & &
+\Block{2-1}{\rotate Prix} \\
+\cmidrule(rl){2-4}
+ & L & l & h \\
+\midrule
+petit & 3 & 5.5 & 1 & 30 \\
+moyen & 5.5 & 8 & 1.5 & 50.5 \\
+premium & 8.5 & 10.5 & 2 & 80 \\
+extra & 8.5 & 10 & 1.5 & 85.5 \\
+spécial & 12 & 12 & 0.5 & 70 \\
+\bottomrule
+\end{NiceTabular}
+\end{scope}
+
+\medskip
+On a utilisé le type de colonne |S| de \pkg{siunitx}.
+
+
+\subsection{Outils de coloriage avec la syntaxe de colortbl}
+
+\label{colortbl-like}
+
+On peut accéder aux outils de coloriage précédents avec une syntaxe proche de
+celle proposée par \pkg{colortbl}. On doit pour cela utiliser la clé
+|colortbl-like| dans l'environnement concerné.\footnote{Pour le moment, cette
+ clé n'est pas disponible dans |\NiceMatrixOptions|.}
+
+On a alors accès aux trois commandes suivantes :
+\begin{itemize}
+\item |\cellcolor| qui colorie la case courante ;
+\item |\rowcolor| à utiliser dans une case et qui colorie le reste de la rangée
+;
+\item |\columncolor| à utiliser dans le préambule de la même manière que la
+commande éponyme de \pkg{colortbl} (néanmoins, contrairement à la commande
+|\columncolor| de \pkg{colortbl}, celle-ci peut apparaître à l'intérieur d'une
+autre commande, elle-même utilisée dans le préambule).
+\end{itemize}
+
+\medskip
+\begin{Verbatim}
+\NewDocumentCommand { \Blue } { } {~emphase#\columncolor{blue!15}@}
+\begin{NiceTabular}[colortbl-like]{>{\Blue}c>{\Blue}cc}
+\toprule
+~emphase#\rowcolor{red!15}@
+Nom & Prénom & Année de naissance \\
+\midrule
+Achard & Jacques & 5 juin 1962 \\
+Lefebvre & Mathilde & 23 mai 1988 \\
+Vanesse & Stéphanie & 30 octobre 1994 \\
+Dupont & Chantal & 15 janvier 1998 \\
+\bottomrule
+\end{NiceTabular}
+\end{Verbatim}
+
+
+\begin{center}
+\NewDocumentCommand { \Blue } { } {\columncolor{blue!15}}
+\begin{NiceTabular}[colortbl-like]{>{\Blue}c>{\Blue}cc}
+\toprule
+\rowcolor{red!15}
+Nom & Prénom & Année de naissance \\
+\midrule
+Achard & Jacques & 5 juin 1962 \\
+Lefebvre & Mathilde & 23 mai 1988 \\
+Vanesse & Stéphanie & 30 octobre 1994 \\
+Dupont & Chantal & 15 janvier 1998 \\
+\bottomrule
+\end{NiceTabular}
+\end{center}
+
+
+
+\section{La largeur des colonnes}
+\label{width}
+
+Dans les environnements avec un préambule explicite (comme |{NiceTabular}|,
+|{NiceArray}|, etc.), il est possible de fixer la largeur d'une colonne avec les
+lettres classiques |w| et |W| de l'extension \pkg{array}.
+
+\medskip
+\begin{BVerbatim}[baseline=c,boxwidth=9cm]
+\begin{NiceTabular}{~emphase#W{c}{2cm}@cc}[hvlines]
+Paris & New York & Madrid \\
+Berlin & London & Roma \\
+Rio & Tokyo & Oslo
+\end{NiceTabular}
+\end{BVerbatim}
+\begin{NiceTabular}{W{c}{2cm}cc}[hvlines]
+Paris & New York & Madrid \\
+Berlin & London & Roma \\
+Rio & Tokyo & Oslo
+\end{NiceTabular}
+
+
+\bigskip
+Dans les environnements de \pkg{nicematrix}, il est aussi possible de fixer la
+largeur \emph{minimale} de toutes les colonnes de la matrice directement avec
+l'option |columns-width|.
+
+\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
+Notez que l'espace inséré entre deux colonnes (égal à 2 |\tabcolsep| dans
+|{NiceTabular}| et à 2 |\arraycolsep| dans les autres environnements) n'est pas
+supprimé (il est évidemment possible de le supprimer en mettant |\tabcolsep| ou
+|\arraycolsep| à~$0$ avant).
+
+\bigskip
+Il est possible de donner la valeur spéciale |auto| à l'option |columns-width|:
+toutes les colonnes du tableau auront alors une largeur égale à la largeur de la
+case la plus large du tableau.\footnote{Le résultat est atteint dès la première
+ compilation (mais PGF/Tikz écrivant des informations dans le fichier |.aux|,
+ un message demandant une deuxième compilation apparaîtra).}\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
+Sans surprise, il est possible de fixer la largeur minimale de toutes les
+colonnes de toutes les matrices dans une certaine portion de document avec la
+commande |\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 |{NiceMatrixBlock}| avec l'option
+|auto-columns-width|\footnote{Pour le moment, c'est le seul usage de
+ l'environnement |{NiceMatrixBlock}| mais il pourrait y en avoir davantage dans
+ le futur.}. L'environnement |{NiceMatrixBlock}| n'a pas de rapport direct avec
+la commande |\Block| présentée précédemment dans ce document
+(cf.~p.~\pageref{Block}).
+
+\medskip
+\begin{BVerbatim}[baseline=c,boxwidth=8.5cm]
+~emphase#\begin{NiceMatrixBlock}[auto-columns-width]@
+$\begin{array}{c}
+\begin{bNiceMatrix}
+ 9 & 17 \\ -2 & 5
+ \end{bNiceMatrix} \\ \\
+\begin{bNiceMatrix}
+ 1 & 1245345 \\ 345 & 2
+\end{bNiceMatrix}
+\end{array}$
+~emphase#\end{NiceMatrixBlock}@
+\end{BVerbatim}
+\begin{NiceMatrixBlock}[auto-columns-width]
+$\begin{array}{c}
+\begin{bNiceMatrix}
+ 9 & 17 \\ -2 & 5
+ \end{bNiceMatrix} \\ \\
+\begin{bNiceMatrix}
+ 1 & 1245345 \\ 345 & 2
+\end{bNiceMatrix}
+\end{array}$
+\end{NiceMatrixBlock}
+
+\medskip
+\textbf{Plusieurs compilations peuvent être nécessaires pour obtenir le résultat désiré.}
+
+
+
+\bigskip
+\section{Les rangées et colonnes extérieures}
+Les environnements de \pkg{nicematrix} permettent de composer des rangées et des
+colonnes «extérieures» grâce aux options |first-row|, |last-row|, |first-col| et
+|last-col|.
+\label{exterior}
+
+Si elle est présente, la «première rangée» (extérieure) est numérotée par $0$
+(et non $1$). Il en est de même pour la «première colonne».
+
+\begin{Verbatim}
+$\begin{pNiceMatrix}[~emphase#first-row,last-row,first-col,last-col@,nullify-dots]
+ & C_1 & \Cdots & & C_4 & \\
+L_1 & a_{11} & a_{12} & a_{13} & a_{14} & L_1 \\
+\Vdots & a_{21} & a_{22} & a_{23} & a_{24} & \Vdots \\
+ & a_{31} & a_{32} & a_{33} & a_{34} & \\
+L_4 & a_{41} & a_{42} & a_{43} & a_{44} & L_4 \\
+ & C_1 & \Cdots & & C_4 &
+\end{pNiceMatrix}$
+\end{Verbatim}
+%
+\[\begin{pNiceMatrix}[first-row,last-row,first-col,last-col,nullify-dots]
+ & C_1 & \Cdots & & C_4 & \\
+L_1 & a_{11} & a_{12} & a_{13} & a_{14} & L_1 \\
+\Vdots & a_{21} & a_{22} & a_{23} & a_{24} & \Vdots \\
+ & a_{31} & a_{32} & a_{33} & a_{34} & \\
+L_4 & a_{41} & a_{42} & a_{43} & a_{44} & L_4 \\
+ & C_1 & \Cdots & & C_4 &
+\end{pNiceMatrix}\]
+
+\medskip
+Les lignes pointillées ont été tracées avec les outils présentés p.~\pageref{Cdots}.
+
+
+\bigskip
+Il y a plusieurs remarques à formuler.
+%
+\begin{itemize}[beginpenalty=10000]
+\item Si on utilise un environnement avec préambule explicite (c'est-à-dire
+|{NiceArray}| ou l'une de ses variantes), on ne doit pas mettre dans ce
+préambule de spécification de colonne pour les éventuelles première et dernière
+colonne : ce sera automatiquement (et nécessairement) une colonne |R| pour la
+première colonne et une colonne |L| pour la dernière.
+
+\item On peut se demander comment \pkg{nicematrix} détermine le nombre de rangées et de colonnes nécessaires à la
+composition de la «dernière rangée» et de la «dernière colonne».
+
+\begin{itemize}
+\item Dans le cas d'un environnement avec préambule, comme |{NiceTabular}| ou
+|{pNiceArray}|, le nombre de colonnes se déduit évidemment du préambule.
+
+\item Dans le cas où l'option |light-syntax| (cf. p. \pageref{light-syntax}) est
+utilisée, \pkg{nicematrix} profite du fait que cette option nécessite de toutes
+manières le chargement complet du contenu de l'environnement (d'où
+l'impossibilité de mettre du verbatim dans ce cas-là) avant composition du
+tableau. L'analyse du contenu de l'environnement donne le nombre de rangées
+(mais pas le nombre de colonnes).
+
+\item Dans les autres cas, \pkg{nicematrix} détermine le nombre de rangées et de
+colonnes à la première compilation et l'écrit dans le fichier |.aux| pour
+pouvoir l'utiliser à la compilation suivante.
+
+\textsl{Néanmoins, il est possible de donner le numéro de la dernière rangée et
+ le numéro de la dernière colonne en arguments des options |last-row| et
+ |last-col|, ce qui permettra d'accélérer le processus complet de compilation.}
+C'est ce que nous ferons dans la suite.
+\end{itemize}
+
+\end{itemize}
+
+
+
+\bigskip
+On peut contrôler l'apparence de ces rangées et colonnes avec les options
+|code-for-first-row|, |code-for-last-row|, |code-for-first-col| et
+|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=6,first-col,last-col,nullify-dots]
+ & C_1 & \Cdots & & C_4 & \\
+L_1 & a_{11} & a_{12} & a_{13} & a_{14} & L_1 \\
+\Vdots & a_{21} & a_{22} & a_{23} & a_{24} & \Vdots \\
+\hline
+ & a_{31} & a_{32} & a_{33} & a_{34} & \\
+L_4 & a_{41} & a_{42} & a_{43} & a_{44} & L_4 \\
+ & C_1 & \Cdots & & 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{displaymath}
+\begin{pNiceArray}{cc|cc}[first-row,last-row=5,first-col,last-col,nullify-dots]
+ & C_1 & \multicolumn1c{\Cdots} & & C_4 & \\
+L_1 & a_{11} & a_{12} & a_{13} & a_{14} & L_1 \\
+\Vdots & a_{21} & a_{22} & a_{23} & a_{24} & \Vdots \\
+\hline
+ & a_{31} & a_{32} & a_{33} & a_{34} & \\
+L_4 & a_{41} & a_{42} & a_{43} & a_{44} & L_4 \\
+ & C_1 & \multicolumn1c{\Cdots} & & C_4 &
+\end{pNiceArray}
+\end{displaymath}
+\end{scope}
+
+
+
+\emph{Remarques}
+\begin{itemize}[beginpenalty=10000]
+\item Comme on peut le voir dans l'exemple précédent, les filets horizontaux et
+verticaux ne s'étendent pas dans les rangées et colonnes extérieures.
+
+Néanmoins, si on veut définir de nouveaux spécificateurs de colonnes pour des
+filets (par exemple plus épais), on aura sans doute intérêt à utiliser la
+commande |\OnlyMainNiceMatrix| décrite p.~\pageref{OnlyMainNiceMatrix}.
+\item Une spécification de couleur présente dans |code-for-first-row| s'applique
+à une ligne pointillée tracée dans cette «première rangée» (sauf si une valeur a
+été donnée à |xdots/color|). Idem pour les autres.
+\item Sans surprise, une éventuelle option |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 |\\| après la «première rangée» ou avant la «dernière rangée» (le
+placement des délimiteurs serait erroné).
+\end{itemize}
+
+
+
\section{Les lignes en pointillés continues}
-À l'intérieur des environnements de l'extension \pkg{nicematrix}, de nouvelles commandes sont définies : |\Ldots|,
-|\Cdots|, |\Vdots|, |\Ddots|, et |\Iddots|. Ces commandes sont conçues pour être utilisées à la place de |\dots|,
-|\cdots|, |\vdots|, |\ddots| et |\iddots|.\footnote{La commande |\iddots|, définie dans \pkg{nicematrix}, est une
- variante de |\ddots| avec les points allant vers le haut. Si \pkg{mathdots} est chargée, la
- version de \pkg{mathdots} est utilisée. Elle correspond à la commande |\adots| de \pkg{unicode-math}.}
-\newcounter{fniddots}
-\setcounter{fniddots}{\thefootnote}
+\label{Cdots}
+
+À l'intérieur des environnements de l'extension \pkg{nicematrix}, de nouvelles
+commandes sont définies : |\Ldots|, |\Cdots|, |\Vdots|, |\Ddots|, et |\Iddots|.
+Ces commandes sont conçues pour être utilisées à la place de |\dots|, |\cdots|,
+|\vdots|, |\ddots| et |\iddots|.\footnote{La commande |\iddots|, définie dans
+ \pkg{nicematrix}, est une variante de |\ddots| avec les points allant vers le
+ haut. Si \pkg{mathdots} est chargée, la version de \pkg{mathdots} est
+ utilisée. Elle correspond à la commande |\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 |\Ldots| et |\Cdots|, c'est une ligne horizontale ; pour |\Vdots|, c'est une ligne verticale et pour
-|\Ddots| et |\Iddots|, ce sont des lignes diagonales. On peut changer la couleur d'une ligne avec
-l'option~|color|.\footnote{Il est aussi possible de changer la couleur de toutes ces lignes pointillées avec
- l'option |xdots/color| (\textsl{xdots} pour rappeler que cela s'applique à |\Cdots|, |\Ldots|, |Vdots|, etc.) :
- cf. p.~\pageref{customization}).
-}\par\nobreak
+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 |\Ldots| et |\Cdots|, c'est une
+ligne horizontale ; pour |\Vdots|, c'est une ligne verticale et pour |\Ddots| et
+|\Iddots|, ce sont des lignes diagonales. On peut changer la couleur d'une ligne
+avec l'option~|color|.\footnote{Il est aussi possible de changer la couleur de
+ toutes ces lignes pointillées avec l'option |xdots/color| (\textsl{xdots} pour
+ rappeler que cela s'applique à |\Cdots|, |\Ldots|, |Vdots|, etc.) : cf.
+ p.~\pageref{customization}). }\par\nobreak
\bigskip
\begin{BVerbatim}[baseline=c,boxwidth=10cm]
@@ -261,8 +1825,8 @@ a_1 & a_2 & & & a_n
-\interitem
-Pour représenter la matrice nulle, on peut choisir d'utiliser le codage suivant :\par\nobreak
+\interitem Pour représenter la matrice nulle, on peut choisir d'utiliser le
+codage suivant :\par\nobreak
\bigskip
\begin{BVerbatim}[baseline=c,boxwidth=10cm]
@@ -279,9 +1843,10 @@ $\begin{bNiceMatrix}
\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
+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]
@@ -300,13 +1865,12 @@ $\begin{bNiceMatrix}
\end{bNiceMatrix}$
\bigskip
-Dans la première colonne de cet exemple, il y a deux instructions |\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 |\Ldots| et une ligne |\Cdots| entre les mêmes cases.}).
+Dans la première colonne de cet exemple, il y a deux instructions |\Vdots| mais,
+bien entendu, une seule ligne en pointillés sera.
\bigskip
-En fait, dans cet exemple, il aurait été possible de tracer la même matrice plus rapidement avec le codage suivant
-:\par\nobreak
+En fait, dans cet exemple, il aurait été possible de tracer la même matrice plus
+rapidement avec le codage suivant :\par\nobreak
\bigskip
\begin{BVerbatim}[baseline=c,boxwidth=10cm]
@@ -325,15 +1889,19 @@ $\begin{bNiceMatrix}
\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~|\\| pour l'espacement vertical et la commande~|\hspace*| dans une case pour l'espacement
-horizontal.\footnote{Dans \pkg{nicematrix}, il faut utiliser |\hspace*| et non |\hspace| car \pkg{nicematrix}
- utilise \pkg{array}. Remarquons aussi que l'on peut également régler la largeur des colonnes en utilisant l'environnement |{NiceArray}| (ou
- une de ses variantes) avec une colonne de type~|w| ou |W|: cf. p.~\pageref{width}}
-
-Toutefois, une commande~|\hspace*| pourrait interférer dans la construction des lignes en pointillés. C'est
-pourquoi l'extension \pkg{nicematrix} fournit une commande~|\Hspace| qui est une variante de |\hspace| transparente
-pour la construction des lignes en pointillés de \pkg{nicematrix}.\par\nobreak
+Il y a aussi d'autres moyens de changer la taille d'une matrice. On pourrait
+vouloir utiliser l'argument optionnel de la commande~|\\| pour l'espacement
+vertical et la commande~|\hspace*| dans une case pour l'espacement
+horizontal.\footnote{Dans \pkg{nicematrix}, il faut utiliser |\hspace*| et non
+ |\hspace| car \pkg{nicematrix} utilise \pkg{array}. Remarquons aussi que l'on
+ peut également régler la largeur des colonnes en utilisant l'environnement
+ |{NiceArray}| (ou une de ses variantes) avec une colonne de type~|w| ou |W|:
+ cf. p.~\pageref{width}}
+
+Toutefois, une commande~|\hspace*| pourrait interférer dans la construction des
+lignes en pointillés. C'est pourquoi l'extension \pkg{nicematrix} fournit une
+commande~|\Hspace| qui est une variante de |\hspace| transparente pour la
+construction des lignes en pointillés de \pkg{nicematrix}.\par\nobreak
\bigskip
\begin{BVerbatim}[baseline=c,boxwidth=10cm]
@@ -351,87 +1919,89 @@ $\begin{bNiceMatrix}
\subsection{L'option nullify-dots}
-Considérons la matrice suivante qui a été composée classiquement avec l'environnement |{pmatrix}| de
-\pkg{amsmath}.\par\nobreak
+Considérons la matrice suivante qui a été composée classiquement avec
+l'environnement |{pmatrix}| de \pkg{amsmath}.\par\nobreak
\medskip
\begin{BVerbatim}[baseline=c,boxwidth=10cm]
$A = \begin{pmatrix}
h & i & j & k & l & m \\
-x & & & & & x \\
+x & & & & & x
\end{pmatrix}$
\end{BVerbatim}
$A = \begin{pmatrix}
h & i & j & k & l & m \\
-x & & & & & x \\
+x & & & & & x
\end{pmatrix}$
\bigskip
-Si nous ajoutons des instructions |\ldots| dans la seconde rangée, la géométrie de la matrice est
-modifiée.\par\nobreak
+Si nous ajoutons des instructions |\ldots| dans la seconde rangée, la géométrie
+de la matrice est modifiée.\par\nobreak
\medskip
\begin{BVerbatim}[baseline=c,boxwidth=10cm]
$B = \begin{pmatrix}
h & i & j & k & l & m \\
-x & \ldots & \ldots & \ldots & \ldots & x \\
+x & \ldots & \ldots & \ldots & \ldots & x
\end{pmatrix}$
\end{BVerbatim}
$B = \begin{pmatrix}
h & i & j & k & l & m \\
-x & \ldots & \ldots & \ldots & \ldots & x \\
+x & \ldots & \ldots & \ldots & \ldots & x
\end{pmatrix}$
\bigskip
-Par défaut, avec \pkg{nicematrix}, si nous remplaçons |{pmatrix}| par |{pNiceMatrix}| et |\ldots| par |\Ldots|, la
-géométrie de la matrice n'est pas changée.\par\nobreak
+Par défaut, avec \pkg{nicematrix}, si nous remplaçons |{pmatrix}| par
+|{pNiceMatrix}| et |\ldots| par |\Ldots|, la géométrie de la matrice n'est pas
+changée.\par\nobreak
\medskip
\begin{BVerbatim}[baseline=c,boxwidth=10cm]
$C = \begin{pNiceMatrix}
h & i & j & k & l & m \\
-x & \Ldots & \Ldots & \Ldots & \Ldots & x \\
+x & \Ldots & \Ldots & \Ldots & \Ldots & x
\end{pNiceMatrix}$
\end{BVerbatim}
$C = \begin{pNiceMatrix}
h & i & j & k & l & m \\
-x & \Ldots & \Ldots & \Ldots & \Ldots & x \\
+x & \Ldots & \Ldots & \Ldots & \Ldots & x
\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 rangée. C'est possible en utilisant l'option |nullify-dots| (et une
+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 rangée. C'est possible en utilisant l'option |nullify-dots| (et une
seule instruction |\Ldots| suffit).\par\nobreak
\medskip
\begin{BVerbatim}[baseline=c,boxwidth=10cm]
$D = \begin{pNiceMatrix}[~emphase#nullify-dots@]
h & i & j & k & l & m \\
-x & \Ldots & & & & x \\
+x & \Ldots & & & & x
\end{pNiceMatrix}$
\end{BVerbatim}
$D = \begin{pNiceMatrix}[nullify-dots]
h & i & j & k & l & m \\
-x & \Ldots & & & & x \\
+x & \Ldots & & & & x
\end{pNiceMatrix}$
\medskip
-L'option |nullify-dots| «smashe» les instructions |\Ldots| (et ses variantes) horizontalement mais aussi
-verticalement.
+L'option |nullify-dots| «smashe» les instructions |\Ldots| (et ses variantes)
+horizontalement mais aussi verticalement.
-\medskip
-{\bfseries Il doit n'y avoir aucun espace devant le crochet ouvrant (|[|) des options de l'environnement.}
-\subsection{La commande \textbackslash Hdotsfor}
+\subsection{Les commandes \textbackslash Hdotsfor et \textbackslash Vdotsfor}
-Certaines personnes utilisent habituellement la commande |\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 |\Hdotsfor| à la place pour avoir les lignes en pointillés similaires à toutes celles tracées par
-l'extension \pkg{nicematrix}.
+Certaines personnes utilisent habituellement la commande |\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
+|\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 |\Cdots|, |\Ldots|, |\Vdots|, etc.), la ligne en
-pointillés tracée par |\Hdotsfor| s'étend jusqu'au contenu des cases de part et d'autre.
+Comme avec les autres commandes de \pkg{nicematrix} (comme |\Cdots|, |\Ldots|,
+|\Vdots|, etc.), la ligne en pointillés tracée par |\Hdotsfor| s'étend jusqu'au
+contenu des cases de part et d'autre.
\medskip
\begin{BVerbatim}[baseline=c,boxwidth=7cm]
@@ -450,8 +2020,8 @@ $\begin{pNiceMatrix}
\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 |\Hdotsfor| (par conception).
+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 |\Hdotsfor| (par conception).
\medskip
\begin{BVerbatim}[baseline=c,boxwidth=7cm]
@@ -459,7 +2029,7 @@ $\begin{pNiceMatrix}
1 & 2 & 3 & 4 & 5 \\
& ~emphase#\Hdotsfor{3}@ \\
1 & 2 & 3 & 4 & 5 \\
-1 & 2 & 3 & 4 & 5 \\
+1 & 2 & 3 & 4 & 5
\end{pNiceMatrix}$
\end{BVerbatim}
$\begin{pNiceMatrix}
@@ -469,49 +2039,89 @@ $\begin{pNiceMatrix}
1 & 2 & 3 & 4 & 5
\end{pNiceMatrix}$
+\medskip
+Remarque : Contrairement à la commande |\hdotsfor| de \pkg{amsmath}, la commande
+|\Hdotsfor| est utilisable lorsque l'extension \pkg{colortbl} est chargée (mais
+vous risquez d'avoir des problèmes si vous utilisez |\rowcolor| sur la même
+rangée que |\Hdotsfor|).
+
\bigskip
-La commande |\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é, |\Hdotsfor| prend aussi un argument
-optionnel mais cet argument est écarté silencieusement.
+L'extension \pkg{nicematrix} propose aussi une commande |\Vdotsfor| similaire à
+|\Hdotsfor| mais traçant des lignes verticales.
+
+\bigskip
+L'exemple suivant utilise à la fois |\Hdotsfor| et |\Vdotsfor|:
+
+\begin{Verbatim}[formatcom=\small\color{gray}]
+\begin{bNiceMatrix}
+C[a_1,a_1] & \Cdots & C[a_1,a_n]
+ & \hspace*{20mm} & C[a_1,a_1^{(p)}] & \Cdots & C[a_1,a_n^{(p)}] \\
+\Vdots & \Ddots & \Vdots
+ & ~emphase#\Hdotsfor{1}@ & \Vdots & \Ddots & \Vdots \\
+C[a_n,a_1] & \Cdots & C[a_n,a_n]
+ & & C[a_n,a_1^{(p)}] & \Cdots & C[a_n,a_n^{(p)}] \\
+\rule{0pt}{15mm} & ~emphase#\Vdotsfor{1}@ & & \Ddots & & ~emphase#\Vdotsfor{1}@ \\
+C[a_1^{(p)},a_1] & \Cdots & C[a_1^{(p)},a_n]
+ & & C[a_1^{(p)},a_1^{(p)}] & \Cdots & C[a_1^{(p)},a_n^{(p)}] \\
+\Vdots & \Ddots & \Vdots
+ & ~emphase#\Hdotsfor{1}@ & \Vdots & \Ddots & \Vdots \\
+C[a_n^{(p)},a_1] & \Cdots & C[a_n^{(p)},a_n]
+ & & C[a_n^{(p)},a_1^{(p)}] & \Cdots & C[a_n^{(p)},a_n^{(p)}]
+\end{bNiceMatrix}
+\end{Verbatim}
+
+
+\[\begin{bNiceMatrix}
+C[a_1,a_1] & \Cdots & C[a_1,a_n] & \hspace*{20mm} & C[a_1,a_1^{(p)}] & \Cdots & C[a_1,a_n^{(p)}] \\
+\Vdots & \Ddots & \Vdots & \Hdotsfor{1} & \Vdots & \Ddots & \Vdots \\
+C[a_n,a_1] & \Cdots & C[a_n,a_n] & & C[a_n,a_1^{(p)}] & \Cdots & C[a_n,a_n^{(p)}] \\
+\rule{0pt}{15mm} & \Vdotsfor{1} & & \Ddots & & \Vdotsfor{1} \\
+C[a_1^{(p)},a_1] & \Cdots & C[a_1^{(p)},a_n] & & C[a_1^{(p)},a_1^{(p)}] & \Cdots & C[a_1^{(p)},a_n^{(p)}] \\
+\Vdots & \Ddots & \Vdots & \Hdotsfor{1} & \Vdots & \Ddots & \Vdots \\
+C[a_n^{(p)},a_1] & \Cdots & C[a_n^{(p)},a_n] & & C[a_n^{(p)},a_1^{(p)}] & \Cdots & C[a_n^{(p)},a_n^{(p)}]
+\end{bNiceMatrix}\]
+
-Remarque : Contrairement à la commande |\hdotsfor| de \pkg{amsmath}, la commande |\Hdotsfor| est utilisable lorsque
-l'extension \pkg{colortbl} est chargée (mais vous risquez d'avoir des problèmes si vous utilisez |\rowcolor| sur la
-même rangée que |\Hdotsfor|).
\subsection{Comment créer les lignes en pointillés de manière transparente}
-L'extension \pkg{nicematrix} fournit une option appelée |transparent| qui permet d'utiliser du code existant de
-manière transparente dans les environnements de l'\pkg{amsmath} : |{matrix}|, |{pmatrix}|, etc. En fait, cette
-option est un alias pour la conjonction de deux options : |renew-dots| et |renew-matrix|.\footnote{Comme toutes les
- autres options, les options |renew-dots|, |renew-matrix| et |transparent| peuvent être fixées avec la commande
- |\NiceMatrixOptions|, mais elles peuvent aussi être passées en option du |\usepackage| (ce sont les trois
- seules).}
+Si on a un document déjà tapé qui contient un grand nombre de matrices avec des
+points de suspension, on peut souhaiter utiliser les lignes pointillées de
+\pkg{nicematrix} sans avoir à modifier chaque matrice. Pour cela,
+\pkg{nicematrix} propose deux options |renew-dots| et
+|renew-matrix|.\footnote{Comme toutes les autres options, les options
+ |renew-dots|, |renew-matrix| peuvent être fixées avec la commande
+ |\NiceMatrixOptions|, mais elles peuvent aussi être passées en option du
+ |\usepackage|. Remarquons que la clé |transparent| est un alias, considéré
+ comme obsolète, pour la conjonction des clés |renew-dots| et |renew-matrix|.}
\smallskip
\begin{itemize}
\item L'option |renew-dots|\par\nobreak
-Avec cette option, les commandes |\ldots|, |\cdots|, |\vdots|, |\ddots|, |\iddots|\footnotemark[\thefniddots] et
-|\hdotsfor| sont redéfinies dans les environnements de \pkg{nicematrix} et agissent alors comme |\Ldots|, |\Cdots|,
-|\Vdots|, |\Ddots|, |\Iddots| et |\Hdotsfor| ; la commande |\dots| (points de suspension «automatiques» de
-|amsmath|) est aussi redéfinie et se comporte comme |\Ldots|.
+Avec cette option, les commandes |\ldots|, |\cdots|, |\vdots|, |\ddots|,
+|\iddots|\footnotemark[\thefniddots] et |\hdotsfor| sont redéfinies dans les
+environnements de \pkg{nicematrix} et agissent alors comme |\Ldots|, |\Cdots|,
+|\Vdots|, |\Ddots|, |\Iddots| et |\Hdotsfor| ; la commande |\dots| (points de
+suspension «automatiques» de |amsmath|) est aussi redéfinie et se comporte comme
+|\Ldots|.
\item L'option |renew-matrix|\par\nobreak
-Avec cette option, l'environnement |{matrix}| est redéfini et se comporte comme |{NiceMatrix}| et il en est de même
-pour les cinq variantes.
+Avec cette option, l'environnement |{matrix}| est redéfini et se comporte comme
+|{NiceMatrix}| et il en est de même pour les cinq variantes.
\end{itemize}
\bigskip
-Par conséquent, avec l'option |transparent|, un code classique donne directement le résultat fourni par
-\pkg{nicematrix}.\par\nobreak
+Par conséquent, avec les options |renew-dots| et |renew-matrix|, un code classique donne directement
+le résultat fourni par \pkg{nicematrix}.\par\nobreak
\bigskip
\begin{scope}
-\NiceMatrixOptions{transparent}
+\NiceMatrixOptions{renew-dots,renew-matrix}
\begin{BVerbatim}[baseline=c,boxwidth=10cm]
-~emphase#\NiceMatrixOptions{transparent}@
+~emphase#\NiceMatrixOptions{renew-dots,renew-matrix}@
\begin{pmatrix}
1 & \cdots & \cdots & 1 \\
0 & \ddots & & \vdots \\
@@ -528,13 +2138,36 @@ $\begin{pmatrix}
\end{scope}
+\subsection{Les labels des lignes en pointillés}
+
+Les commandes |\Ldots|, |\Cdots|, |\Vdots|, |\Ddots|, |\Iddots| et |\Hdotsfor|
+(ainsi que la commande |\line| dans le |\CodeAfter| décrite
+p.~\pageref{line-in-code-after}) peuvent en fait prendre deux arguments
+optionnels spécifiés par les caractères |_| et |^| pour des labels situés
+au-dessous et au-dessus de la ligne. Les arguments sont composés en mode
+mathématique avec |\scriptstyle|.
+
+\begin{BVerbatim}[baseline=c,boxwidth=10cm]
+$\begin{bNiceMatrix}
+1 & \hspace*{1cm} & 0 \\[8mm]
+ & ~emphase#\Ddots^{n \text{ fois}}@ & \\
+0 & & 1
+\end{bNiceMatrix}$
+\end{BVerbatim}
+$\begin{bNiceMatrix}
+1 & \hspace*{1cm} & 0 \\[8mm]
+ & \Ddots^{n \text{ fois}} & \\
+0 & & 1
+\end{bNiceMatrix}$
+
\subsection{Personnalisation des lignes en pointillés}
\label{customization}
-Les lignes pointillées tracées par |\Ldots|, |\Cdots|, |\Vdots|, |\Ddots|, |\Idots| et |\Hdotsfor| (ainsi que par la
-commande |\line| dans le |code-after| décrite p.~\pageref{line-in-code-after}) peuvent être
-paramétrées par trois options (que l'on met entre crochets après la commande) :
+Les lignes pointillées tracées par |\Ldots|, |\Cdots|, |\Vdots|, |\Ddots|,
+|\Iddots| et |\Hdotsfor| (ainsi que par la commande |\line| dans le |\CodeAfter|
+décrite p.~\pageref{line-in-code-after}) peuvent être paramétrées par trois
+options (que l'on met entre crochets après la commande) :
%
\begin{itemize}
\item |color| ;
@@ -542,8 +2175,9 @@ paramétrées par trois options (que l'on met entre crochets après la commande)
\item |line-style|.
\end{itemize}
-Ces options peuvent aussi être fixées avec |\NiceMatrixOption| ou bien au niveau d'un environnement mais elles
-doivent alors être préfixées par |xdots|, ce qui fait que leurs noms deviennent :
+Ces options peuvent aussi être fixées avec |\NiceMatrixOptions| ou bien au
+niveau d'un environnement mais elles doivent alors être préfixées par |xdots|,
+ce qui fait que leurs noms deviennent :
%
\begin{itemize}
\item |xdots/color| ;
@@ -557,8 +2191,9 @@ Pour la clarté, dans la suite, on utilisera ces noms-là.
\textbf{L'option xdots/color}\par\nobreak
\smallskip
-L'option |xdots/color| indique bien entendu la couleur de la ligne tracée. On remarquera néanmoins que les lignes
-tracées dans les rangées et colonnes extérieures (décrites plus loin) bénificient d'un régime spécial : cf.
+L'option |xdots/color| indique bien entendu la couleur de la ligne tracée. On
+remarquera néanmoins que les lignes tracées dans les rangées et colonnes
+extérieures (décrites plus loin) bénificient d'un régime spécial : cf.
p.~\pageref{exterior}.
@@ -566,21 +2201,24 @@ p.~\pageref{exterior}.
\textbf{L'option xdots/shorten}\par\nobreak
\smallskip
-L'option |xdots/shorten| indique la marge qui est laissée aux deux extrémités de la ligne. Le nom s'inspire des options
-«|shorten >|» et «|shorten <|» de Tikz, mais il faut remarquer que \pkg{nicematrix} ne propose que |xdots/shorten|.
-La valeur initiale de ce paramètre est de $0.3$~em (il est conseillé d'utiliser une unité de mesure dépendante de
-la fonte courante).
+L'option |xdots/shorten| indique la marge qui est laissée aux deux extrémités de
+la ligne. Le nom s'inspire des options «|shorten >|» et «|shorten <|» de Tikz,
+mais il faut remarquer que \pkg{nicematrix} ne propose que |xdots/shorten|. La
+valeur initiale de ce paramètre est de $0.3$~em (il est conseillé d'utiliser une
+unité de mesure dépendante de la fonte courante).
\bigskip
\textbf{L'option xdots/line-style}\par\nobreak
\smallskip
-Il faut savoir que, par défaut, les lignes de Tikz tracées avec le paramètre |dotted| sont composées de points
-carrés et non pas ronds.\footnote{La raison de départ est que le format \textsc{pdf} comporte un système de description
- de lignes en tiretés, qui, puisqu'il est incorporé dans le \textsc{pdf}, est affiché très rapidement par les
- lecteurs de \textsc{pdf}. Il est facile à partir de ce type de ligne de créer des lignes de points carrés alors
- qu'une ligne de points ronds doit être construite explicitement point par point.}
+Il faut savoir que, par défaut, les lignes de Tikz tracées avec le paramètre
+|dotted| sont composées de points carrés et non pas ronds.\footnote{La raison de
+ départ est que le format \textsc{pdf} comporte un système de description de
+ lignes en tiretés, qui, puisqu'il est incorporé dans le \textsc{pdf}, est
+ affiché très rapidement par les lecteurs de \textsc{pdf}. Il est facile à
+ partir de ce type de ligne de créer des lignes de points carrés alors qu'une
+ ligne de points ronds doit être construite explicitement point par point.}
\begin{BVerbatim}[baseline=c,boxwidth=9cm]
\tikz \draw [dotted] (0,0) -- (5,0) ;
@@ -588,15 +2226,18 @@ carrés et non pas ronds.\footnote{La raison de départ est que le format \texts
\tikz \draw [dotted] (0,0) -- (5,0) ;
\bigskip
-Voulant proposer des lignes avec des points ronds dans le style de celui de |\ldots| (au moins celui des fontes
-\emph{Computer Modern}), l'extension \pkg{nicematrix} contient en interne son propre système de ligne en pointillés
-(qui, au passage n'utilise que \pkg{pgf} et non \pkg{tikz}). Ce style est appelé le style |standard|. Cette valeur
-est la valeur initiale du paramètre |xdots/line-style|.
+Voulant proposer des lignes avec des points ronds dans le style de celui de
+|\ldots| (au moins celui des fontes \emph{Computer Modern}), l'extension
+\pkg{nicematrix} contient en interne son propre système de ligne en pointillés
+(qui, au passage, n'utilise que \pkg{pgf} et non \pkg{tikz}). Ce style est
+appelé le style |standard|. Cette valeur est la valeur initiale du paramètre
+|xdots/line-style|.
\bigskip
-Néanmoins (quand Tikz est chargé), on peut utiliser pour |xdots/line-style| n'importe quel style proposé par Tikz,
-c'est-à-dire n'importe quelle suite d'options Tikz applicables à un chemin (à l'exception de «|color|»,
-«|shorten >|» et «|shorten <|»).
+Néanmoins (quand Tikz est chargé), on peut utiliser pour |xdots/line-style|
+n'importe quel style proposé par Tikz, c'est-à-dire n'importe quelle suite
+d'options Tikz applicables à un chemin (à l'exception de «|color|»,
+«|shorten >|» et «|shorten <|»).
\medskip
Voici par exemple une matrice tridiagonale avec le style |loosely dotted| :\par\nobreak
@@ -624,895 +2265,612 @@ b & a & b & \Ddots & & \Vdots \\
\end{pNiceMatrix}\]
-\section{Les nœuds PGF-Tikz créés par l'extension nicematrix}
-
-\label{name}
-
-L'extension \pkg{nicematrix} crée un nœud PGF-Tikz pour chaque case (non vide) 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 aussi
-utiliser directement ces nœuds (s'il a chargé Tikz\footnote{On rappelle que depuis la version 3.13,
- \pkg{nicematrix} ne charge plus Tikz par défaut, mais seulement \textsc{pgf} (Tikz est une surcouche de
- \textsc{pgf}).}). On commence par donner un nom au tableau (avec l'option |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 rangée 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 |remember picture| et |overlay|.
+\subsection{Les lignes pointillées et les filets}
-\bigskip
-Dans l'exemple suivant, nous avons surligné toutes les cases de la matrice.
-\[\begin{pNiceMatrix}[
- code-after = {\begin{tikzpicture}
- [every node/.style = {blend mode = multiply,
- inner sep = 0 pt ,
- fill = red!15}]
- \node [fit = (1-1)] {} ;
- \node [fit = (1-3)] {} ;
- \node [fit = (2-2)] {} ;
- \node [fit = (3-1)] {} ;
- \node [fit = (3-3)] {} ;
- \node [fit = (1-2)] {} ;
- \node [fit = (2-1)] {} ;
- \node [fit = (2-3)] {} ;
- \node [fit = (3-2)] {} ;
- \end{tikzpicture}}]
-a & a + b & a + b + c \\
-a & a & a + b \\
-a & a & a
-\end{pNiceMatrix}\]
+\label{dotted-and-rules}
+Les lignes pointillées délimitent des blocs virtuels qui ont le même
+comportement vis à vis des filets que les blocs créés par |\Block| (les filets
+spécifiés par le spécificateur \verb+|+ dans le préambule et par les clés
+|vlines|, |hlines|, |hvlines| et |hvlines-except-corners| ne sont pas tracés
+dans les blocs).
-\bigskip
-En fait, l'extension \pkg{nicematrix} peut créer deux séries de nœuds supplémentaires (\emph{extra nodes} en
-anglais) : les «nœuds moyens» (\emph{medium nodes} en anglais) et les «nœuds larges» (\emph{large nodes} en
-anglais). Les premiers sont créés avec l'option |create-medium-nodes| et les seconds avec l'option
-|create-large-nodes|.\footnote{Il existe aussi l'option |create-extra-nodes| qui est un alias pour la conjonction
-de |create-medium-nodes| et |create-large-nodes|.}
\medskip
-Les noms des «nœuds moyens» s'obtiennent en ajoutant le suffixe «|-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-medium-nodes,
- code-after = {\begin{tikzpicture}
- [every node/.style = {fill = red!15,
- blend mode = multiply,
- inner sep = 0 pt},
- 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}\]
+\begin{BVerbatim}[baseline=c,boxwidth=10.6cm]
+$\begin{bNiceMatrix}[margin,~emphase#hvlines@]
+\Block{3-3}<\LARGE>{A} & & & 0 \\
+& \hspace*{1cm} & & \Vdots \\
+& & & 0 \\
+0 & \Cdots& 0 & 0
+\end{bNiceMatrix}$
+\end{BVerbatim}
+$\begin{bNiceMatrix}[margin,hvlines]
+\Block{3-3}<\LARGE>{A} & & & 0 \\
+& \hspace*{1cm} & & \Vdots \\
+& & & 0 \\
+0 & \Cdots& 0 & 0
+\end{bNiceMatrix}$
-\medskip
-Les noms des «nœuds larges» s'obtiennent en ajoutant le suffixe «|-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 rangées et colonnes extérieures
- (pour ces rangées et colonnes, voir p.~\pageref{exterior}).}
-
-\[\begin{pNiceMatrix}[
- create-large-nodes,
- code-after = {\begin{tikzpicture}
- [every node/.style = {blend mode = multiply,
- inner sep = 0 pt},
- 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}\]
+\section{Le \textbackslash CodeAfter}
+\label{code-after}
+On a présenté p.~\pageref{code-before} la clé |code-before|. Il existe en fait
+une clé similaire |code-after| qui peut être utilisée pour indiquer du code qui
+sera exécuté après la construction du tableau.
\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 |left-margin| et |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 |left-margin| et
-|right-margin|.\footnote{Les options |left-margin| et |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 à |\arraycolsep| (par
- défaut, 5~pt).Il existe aussi une option |margin| pour fixer à la fois |left-margin| et |right-margin|.}
-\[\begin{pNiceMatrix}[
- create-large-nodes,left-margin,right-margin,
- code-after = {\begin{tikzpicture}
- [every node/.style = {blend mode = multiply,
- inner sep = 0 pt},
- 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}\]
-
+Pour améliorer la lisibilité du code, une syntaxe alternative est proposée : on
+peut spécifier les instructions du |code-after| à la fin de l'environnement,
+après le mot-clé |\CodeAfter|.
+
\medskip
-Il est aussi possible d'ajouter de l'espace sur les côtés du tableau avec les options |extra-left-margin| et
-|extra-right-margin|. Ces marges ne sont pas incorporées dans les «nœuds larges». Dans l'exemple suivant, nous
-avons utilisé |extra-left-margin| et |extra-right-margin| avec la valeur $3$~pt.
-\[\begin{pNiceMatrix}[
- create-large-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 = 0 pt},
- 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}\]
+Deux commandes spéciales sont disponibles dans le |\CodeAfter| : |\line| et
+|\SubMatrix|.
-\medskip
-Dans le cas présent, si on veut un contrôle sur la hauteur des rangées, on peut ajouter un |\strut| dans chaque
-rangée du tableau.
-\[\begin{pNiceMatrix}[
- create-large-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 = 0 pt},
- 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}).
+\subsection{La commande \textbackslash line dans le \textbackslash CodeAfter}
-\section{Le code-after}
-
-\label{code-after}
-
-L'option |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.
-
-\textbf{Si on a chargé Tikz}\footnote{On rappelle que depuis la version 3.13, \pkg{nicematrix} ne charge plus Tikz
- par défaut, mais seulement \textsc{pgf} (Tikz est une surcouche de \textsc{pgf}).}, on peut accéder à ces nœuds
-avec des instructions Tikz classiques. Les nœuds devront ê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 |\line| est disponible pour tracer directement des lignes en pointillés
-entre les nœuds).
+La commande |\line| permet de tracer directement des lignes en pointillés entre
+les cases. Elle prend deux arguments correspondant aux deux cases à relier,
+chacun de la forme $i$-$j$ où $i$ est le numéro de ligne et $j$ est le numéro de
+colonne. Elle peut par exemple être utilisée pour tracer une ligne entre deux
+cases adjacentes comme dans l'exemple suivant.
\label{line-in-code-after}
\medskip
-\begin{BVerbatim}[baseline=c,boxwidth=13cm]
-$\begin{pNiceMatrix}[~emphase#code-after = {\line{1-1}{3-3}[color=blue]}@]
-0 & 0 & 0 \\
-0 & & 0 \\
-0 & 0 & 0
-\end{pNiceMatrix}$
+\begin{BVerbatim}[baseline=c,boxwidth=11cm]
+\NiceMatrixOptions{xdots/shorten = 0.6 em}
+\begin{pNiceMatrix}
+I & 0 & \Cdots &0 \\
+0 & I & \Ddots &\Vdots\\
+\Vdots &\Ddots & I &0 \\
+0 &\Cdots & 0 &I
+~emphase#\CodeAfter \line{2-2}{3-3}@
+\end{pNiceMatrix}
\end{BVerbatim}
-$\begin{pNiceMatrix}[code-after = {\line{1-1}{3-3}[color=blue]}]
-0 & 0 & 0 \\
-0 & & 0 \\
-0 & 0 & 0
+\begin{scope}
+\NiceMatrixOptions{xdots/shorten = 0.6 em}
+$\begin{pNiceMatrix}
+I & 0 & \Cdots &0 \\
+0 & I & \Ddots &\Vdots\\
+\Vdots &\Ddots & I &0 \\
+0 &\Cdots & 0 &I
+\CodeAfter \line{2-2}{3-3}
\end{pNiceMatrix}$
+\end{scope}
-\section{L'environnement \{NiceArray\}}
-\label{NiceArray}
+\subsection{La commande \textbackslash SubMatrix dans le \textbackslash CodeAfter}
-L'environnement |{NiceArray}| est similaire à l'environnement |{array}|. Comme pour |{array}|, l'argument
-obligatoire est le préambule du tableau. Néanmoins, pour des raisons techniques, l'utilisateur doit utiliser les
-lettres |L|, |C| et |R|\footnote{Les types de colonnes |L|, |C| et |R| sont définis localement à l'intérieur de
- |{NiceArray}| avec la commande |\newcolumntype| de \pkg{array}. Cette définition masque une éventuelle définition
- précédente. En fait, les types de colonnes |w| et |W| sont également redéfinis.} au lieu de |l|, |c| et |r|.
+\label{sub-matrix}
-Il est possible d'utiliser les constructions |w{...}{...}|, |W{...}{...}|, \verb+|+, |>{...}|, |<{...}|, |@{...}|,
-|!{...}| et |*{n}{...}| mais les lettres |p|, |m| et |b| ne doivent pas être employées.\footnote{Dans une commande
- |\multicolumn|, on doit également utiliser les lettres |L|, |C| et |R|.}
+\colorbox{yellow!50}{\textbf{Nouveau 5.10}}\enskip
+La commande |\SubMatrix| permet de positionner des délimiteurs sur une partie du
+tableau considérée comme une sous-matrice. La commande |\SubMatrix| prend cinq
+arguments :
+\begin{itemize}
+\item le premier argument est le délimiteur gauche qui peut être n'importe
+quel délimiteur extensible de LaTeX : |(|, |[|, |\{|, |\langle|, |\lgroup|,
+|\lfloor|, etc. mais aussi le délimiteur nul |.| ;
+\item le deuxième argument est le coin supérieur gauche de la sous-matrice avec
+la syntaxe $i$|-|$j$ où $i$ est le numéro de rangée et $j$ le numéro de colonne
+;
+\item le troisième argument est le coin inférieur droit avec la même syntaxe ;
+\item la quatrième argument est le délimiteur droit ;
+\item le cinquième argument, optionnel, entre crochets, est une liste de couples
+clé-valeur.
+\end{itemize}
-\medskip
-En plus des options proposées pour |{pNiceMatrix}| et ses variantes, l'environnement |{NiceArray}| propose une
-option |baseline| qui prend en argument un entier qui indique le numéro de rangée dont la ligne de base servira de
-ligne de base pour l'environnement |{NiceArray}|.
+On remarquera que la commande |\SubMatrix| trace les délimiteurs après la
+construction de la matrice : aucun espace n'est inséré par la commande
+|\SubMatrix|. C'est pourquoi, dans l'exemple suivant, on a utilisé la clé
+|margin| et on a inséré à la main de l'espace entre la troisième et la quatrième
+colonne avec |@{\hspace{1.5em}}| dans le préambule du tableau.
\medskip
-\begin{BVerbatim}[baseline=c,boxwidth=11cm]
-$A =
-\begin{NiceArray}{CCCC}[hvlines,~emphase#baseline=2@]
-1 & 2 & 3 & 4 \\
-1 & 2 & 3 & 4 \\
-1 & 2 & 3 & 4 \\
-\end{NiceArray}$
+\begin{scope}
+\fvset{commandchars=\~\#\+}%
+\begin{BVerbatim}[boxwidth=11cm,baseline=c]
+\[\begin{NiceArray}{ccc~emphase#@{\hspace{1.5em}}+c}%
+ [cell-space-limits=2pt,~emphase#margin+]
+ 1 & 1 & 1 & x \\
+\dfrac{1}{4} & \dfrac{1}{2} & \dfrac{1}{4} & y \\
+ 1 & 2 & 3 & z
+\CodeAfter
+~emphase#\SubMatrix({1-1}{3-3})+
+~emphase#\SubMatrix({1-4}{3-4})+
+\end{NiceArray}\]
\end{BVerbatim}
-%
-$A =
-\begin{NiceArray}{CCCC}[hvlines,baseline=2]
-1 & 2 & 3 & 4 \\
-1 & 2 & 3 & 4 \\
-1 & 2 & 3 & 4 \\
+\end{scope}
+$\begin{NiceArray}{ccc@{\hspace{1.5em}}c}[cell-space-limits=2pt,margin]
+ 1 & 1 & 1 & x \\
+\dfrac{1}{4} & \dfrac{1}{2} & \dfrac{1}{4} & y \\
+ 1 & 2 & 3 & z
+\CodeAfter
+\SubMatrix({1-1}{3-3})
+\SubMatrix({1-4}{3-4})
\end{NiceArray}$
-\smallskip
-L'option |hvlines| utilisée dans cet exemple est présentée plus loin (cf. p. \pageref{hvlines}).
-
-\medskip
-L'option |baseline| peut aussi prendre les trois valeurs spéciales |t|, |c| et |b|. Ces trois lettres peuvent aussi
-être utilisées de manière absolue comme pour l'option de l'environnement |{array}| de \pkg{array}. La valeur
-initiale de |baseline| est~|c|.
-
+\bigskip
+Les options de la commande |\SubMatrix| sont les suivantes :
+%
+\begin{itemize}
+\item |left-xshift| et |right-xshift| déplacent horizontalement les délimiteurs
+(il existe aussi la clé |xshift| qui permet de régler simultanément ces deux
+clés) ;
+\item |extra-height| ajoute une quantité à la hauteur totale des délimiteurs
+(hauteur~|\ht| + profondeur |\dp|) ;
+\item |delimiters-color| permet de fixer la couleur des délimiteurs (cette clé
+est également disponible dans |\NiceMatrixOptions| et au niveau des
+environnements à délimiteurs ou comme option de |\CodeAfter|) ;
+\item |slim| qui est une clé booléenne : lorsqu'elle est utilisée la position
+horizontale des délimiteurs est calculée uniquement sur le contenu des cases
+de la sous-matrice alors, que, dans le cas général, elle est calculée sur le
+contenu des cases des colonnes mises en jeu (voir exemple ci-dessous).
+\end{itemize}
-\medskip
-Dans l'exemple suivant, on utilise l'option |t| (synonyme de |baseline=t|) immédiatement après un |\item| de liste.
-On remarquera que la présence d'un |\hline| initial n'empêche pas l'alignement sur la ligne de base de la première
-rangée (avec |{array}| de {array}, il faut utiliser |\firsthline|\footnote{On peut aussi utiliser |\firsthline|
- avec |{NiceArray}|.}).
+Ces clés sont aussi accessibles dans |\NiceMatrixOptions|, au niveau des
+environnements de \pkg{nicematrix} ou comme option de |\CodeAfter| avec le
+préfixe |sub-matrix|, c'est-à-dire qu'elles sont alors nommées
+|sub-matrix/left-xshift|, |sub-matrix/right-xshift|, |sub-matrix/xshift|, etc.
-\smallskip
-\begin{BVerbatim}[baseline=c,boxwidth=9cm]
-\begin{enumerate}
-\item un item
-\smallskip
-\item \renewcommand{\arraystretch}{1.2}
-$\begin{NiceArray}[t]{LCCCCCC}
-\hline
-n & 0 & 1 & 2 & 3 & 4 & 5 \\
-u_n & 1 & 2 & 4 & 8 & 16 & 32
-\hline
+\bigskip
+\begin{scope}
+\fvset{commandchars=\~\#\!}%
+\begin{BVerbatim}[baseline=c,boxwidth=11cm]
+$\begin{NiceArray}{cc@{\hspace{5mm}}l}[cell-space-limits=2pt]
+ & & \frac12 \\
+ & & \frac14 \\[1mm]
+a & b & \frac12a+\frac14b \\
+c & d & \frac12c+\frac14d \\
+\CodeAfter
+\SubMatrix({1-3}{2-3})
+\SubMatrix({3-1}{4-2})
+\SubMatrix({3-3}{4-3})
\end{NiceArray}$
-\end{enumerate}
\end{BVerbatim}
-%
-\begin{minipage}{5cm}
-\begin{enumerate}
-\item un item
-\smallskip
-\item \renewcommand{\arraystretch}{1.2}
-$\begin{NiceArray}[t]{LCCCCCC}
-\hline
-n & 0 & 1 & 2 & 3 & 4 & 5 \\
-u_n & 1 & 2 & 4 & 8 & 16 & 32 \\
-\hline
+\end{scope}
+$\begin{NiceArray}{cc@{\hspace{5mm}}l}%
+ [cell-space-limits=2pt]
+ & & \frac12 \\
+ & & \frac14 \\[1mm]
+a & b & \frac12a+\frac14b \\
+c & d & \frac12c+\frac14d \\
+\CodeAfter
+\SubMatrix({1-3}{2-3})
+\SubMatrix({3-1}{4-2})
+\SubMatrix({3-3}{4-3})
\end{NiceArray}$
-\end{enumerate}
-\end{minipage}
-
\medskip
-Il est également possible d'utiliser les outils de \pkg{booktabs}: |\toprule|,
-|\bottomrule| et |\midrule|.\par\nobreak
+Voici le même exemple avec la clé |slim| pour l'une des sous-matrices.
-\smallskip
-\begin{BVerbatim}[baseline=c,boxwidth=9cm]
-\begin{enumerate}
-\item an item
-\smallskip
-\item
-$\begin{NiceArray}[t]{LCCCCCC}
-~emphase#\toprule@
-n & 0 & 1 & 2 & 3 & 4 & 5 \\
-~emphase#\midrule@
-u_n & 1 & 2 & 4 & 8 & 16 & 32
-~emphase#\bottomrule@
+\medskip
+\begin{scope}
+\fvset{commandchars=\~\#\!}%
+\begin{BVerbatim}[baseline=c,boxwidth=11cm]
+$\begin{NiceArray}{cc@{\hspace{5mm}}l}%
+ [cell-space-limits=2pt]
+ & & \frac12 \\
+ & & \frac14 \\[1mm]
+a & b & \frac12a+\frac14b \\
+c & d & \frac12c+\frac14d \\
+\CodeAfter
+\SubMatrix({1-3}{2-3})[~emphase#slim!]
+\SubMatrix({3-1}{4-2})
+\SubMatrix({3-3}{4-3})
\end{NiceArray}$
-\end{enumerate}
\end{BVerbatim}
-\begin{minipage}{5cm}
-\begin{enumerate}
-\item an item
-\smallskip
-\item
-$\begin{NiceArray}[t]{LCCCCCC}
-\toprule
-n & 0 & 1 & 2 & 3 & 4 & 5 \\
-\midrule
-u_n & 1 & 2 & 4 & 8 & 16 & 32 \\
-\bottomrule
+\end{scope}
+%
+$\begin{NiceArray}{cc@{\hspace{5mm}}l}[cell-space-limits=2pt]
+ & & \frac12 \\
+ & & \frac14 \\[1mm]
+a & b & \frac12a+\frac14b \\
+c & d & \frac12c+\frac14d \\
+\CodeAfter
+\SubMatrix({1-3}{2-3})[slim]
+\SubMatrix({3-1}{4-2})
+\SubMatrix({3-3}{4-3})
\end{NiceArray}$
-\end{enumerate}
-\end{minipage}
+\bigskip
+Il existe aussi une clé |name| qui permet de donner un nom à une sous-matrice
+créée par une commande |\SubMatrix|. Ce nom est utilisé pour créer des nœuds
+PGF/Tikz : voir p.~\pageref{node-sub-matrix}.
-\vspace{1cm}
-L'utilisation de |{NiceArray}| permet de tracer des filets verticaux :\par\nobreak
+\section{Les notes dans les tableaux}
-\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 |{NiceArray}| : |{pNiceArray}|, |{bNiceArray}|,
-|{BNiceArray}|, |{vNiceArray}| et |{VNiceArray}|. La clé |baseline| n'est \emph{pas} disponible pour ces
-environnements.
+\label{s:notes}
+\subsection{Les notes de pied de page}
-Dans l'exemple suivant, on utilise un environnement |{pNiceArray}| (on n'utilise pas |{pNiceMatrix}| car on
-souhaite utiliser les types de colonne |L| et |R| --- avec |{pNiceMatrix}|, toutes les colonnes sont de type |C|).
+\smallskip
+L'extension \pkg{nicematrix} permet, en utilisant \pkg{footnote} ou bien
+\pkg{footnotehyper}, d'extraire les notes insérées avec |\footnote| dans un
+environnement de \pkg{nicematrix} pour les reporter en pied de page avec les
+autres notes du document.
+\smallskip
+Si \pkg{nicematrix} est chargée avec l'option |footnote| (avec
+|\usepackage[footnote]{nicematrix}| ou avec |\PassOptionsToPackage|),
+l'extension \pkg{footnote} est chargée (si elle ne l'est pas déjà) et elle est
+utilisée pour extraire les notes de pied de page.
-\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}$
+\smallskip
+Si \pkg{nicematrix} est chargée avec l'option |footnotehyper|, l'extension
+\pkg{footnotehyper} est chargée (si elle ne l'est pas déjà) et elle est utilisée
+pour extraire les notes de pied de page.
+\smallskip
+Attention : Les extensions \pkg{footnote} et \pkg{footnotehyper} sont
+incompatibles. L'extension \pkg{footnotehyper} est le successeur de l'extension
+\pkg{footnote} et devrait être utilisée préférentiellement. L'extension
+\pkg{footnote} a quelques défauts ; en particulier, elle doit être chargée après
+l'extension \pkg{xcolor} et elle n'est pas parfaitement compatible avec
+\pkg{hyperref}.
-\bigskip
-\bigskip
-En fait, l'environnement |{pNiceArray}| et ses variantes sont fondés sur un environnement plus général, appelé
-|{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 |{NiceArrayWithDelims}|
-si on a besoin de délimiteurs atypiques ou asymétriques.
-\medskip
-\begin{BVerbatim}[baseline=c,boxwidth=11cm]
-$\begin{~emphase#NiceArrayWithDelims@}
- {\downarrow}{\uparrow}{CCC}[margin]
-1 & 2 & 3 \\
-4 & 5 & 6 \\
-7 & 8 & 9 \\
-\end{~emphase#NiceArrayWithDelims@}$
-\end{BVerbatim}
-$\begin{NiceArrayWithDelims}
- {\downarrow}{\uparrow}{CCC}[margin]
-1 & 2 & 3 \\
-4 & 5 & 6 \\
-7 & 8 & 9 \\
-\end{NiceArrayWithDelims}$
+\subsection{Les notes de tableaux}
+\label{tabularnote}
-\bigskip
-\section{Les rangées et colonnes extérieures}
-Les environnements de \pkg{nicematrix} permettent de composer des rangées et des colonnes «extérieures» grâce aux options
-|first-row|, |last-row|, |first-col| et |last-col|.
-\label{exterior}
+L'extension \pkg{nicematrix} propose aussi une commande |\tabularnote| qui
+permet de spécifier des notes qui seront composées à la fin du tableau avec une
+longueur de ligne égale à la largeur du tableau (hors éventuelles colonnes
+extérieures). Sans surprise, cette commande n'est disponible que dans les
+environnements sans délimiteurs, c'est-à-dire |{NiceTabular}|, |{NiceArray}| et
+|{NiceMatrix}|.
-Si elle est présente, la «première rangée» (extérieure) est numérotée par $0$ (et non $1$). Il en est de même pour
-la «première rangée».
+En fait, cette commande n'est disponible que si l'extension \pkg{enumitem} a été
+chargée (avant ou après \pkg{nicematrix}). Les notes sont en effet composées en
+fin de tableau selon un type de liste défini par l'extension \pkg{enumitem}.
+\begin{scope}
+\fvset{commandchars=\~\#\!}
\begin{Verbatim}
-$\begin{pNiceMatrix}[~emphase#first-row,last-row,first-col,last-col@,nullify-dots]
- & C_1 & \Cdots & & C_4 & \\
-L_1 & a_{11} & a_{12} & a_{13} & a_{14} & L_1 \\
-\Vdots & a_{21} & a_{22} & a_{23} & a_{24} & \Vdots \\
- & a_{31} & a_{32} & a_{33} & a_{34} & \\
-L_4 & a_{41} & a_{42} & a_{43} & a_{44} & L_4 \\
- & C_1 & \Cdots & & C_4 &
-\end{pNiceMatrix}$
+\begin{NiceTabular}{@{}llr@{}}[first-row,code-for-first-row = \bfseries]
+\toprule
+Nom & Prénom & Date de naissance \\
+\midrule
+Achard~emphase#\tabularnote{La famille Achard est une très ancienne famille du Poitou.}!
+& Jacques & 5 juin 1962 \\
+Lefèbvre~emphase#\tabularnote{Le patronyme Lefèbvre est une altération de Lefébure.}!
+& Mathilde & 23 mai 1988 \\
+Vanesse & Stéphanie & 30 octobre 1994 \\
+Dupont & Chantal & 15 janvier 1998 \\
+\bottomrule
+\end{NiceTabular}
\end{Verbatim}
-%
-\[\begin{pNiceMatrix}[first-row,last-row,first-col,last-col,nullify-dots]
- & C_1 & \Cdots & & C_4 & \\
-L_1 & a_{11} & a_{12} & a_{13} & a_{14} & L_1 \\
-\Vdots & a_{21} & a_{22} & a_{23} & a_{24} & \Vdots \\
- & a_{31} & a_{32} & a_{33} & a_{34} & \\
-L_4 & a_{41} & a_{42} & a_{43} & a_{44} & L_4 \\
- & C_1 & \Cdots & & C_4 &
-\end{pNiceMatrix}\]
+\end{scope}
-\bigskip
-Il y a plusieurs remarques à formuler.
-%
-\begin{itemize}[beginpenalty=10000]
-\item Si on utilise un environnement avec préambule explicite (c'est-à-dire |{NiceArray}| ou l'une de ses
-variantes), on ne doit pas mettre dans ce préambule de spécification de colonne pour les éventuelles première et
-dernière colonne : ce sera automatiquement (et nécessairement) une colonne |R| pour la première colonne et une
-colonne |L| pour la dernière.
+\begin{center}
+\begin{NiceTabular}{@{}llr@{}}[first-row,code-for-first-row = \bfseries]
+\toprule
+Nom & Prénom & Date de naissance \\
+\midrule
+Achard\tabularnote{La famille Achard est une très ancienne famille du Poitou.}
+& Jacques & 5 juin 1962 \\
+Lefebvre\tabularnote{Le patronyme Lefebvre est une altération de Lefébure.}
+& Mathilde & 23 mai 1988 \\
+Vanesse & Stéphanie & 30 octobre 1994 \\
+Dupont & Chantal & 15 janvier 1998 \\
+\bottomrule
+\end{NiceTabular}
+\end{center}
+
+
+\begin{table}
+\setlength{\belowcaptionskip}{1ex}
+\centering
+\caption{Utilisation de \texttt{\textbackslash tabularnote}\tabularnote{On peut
+ mettre une note dans le titre.}}
+\label{t:tabularnote}
+\begin{NiceTabular}{@{}llc@{}}%
+ [notes/bottomrule, tabularnote = Un peu de texte avant les notes.]
+\toprule
+Nom & Prénom & Durée de vie \\
+\midrule
+Barrère & Bertrand & 86\\
+Nightingale\tabularnote{Souvent considérée comme la première
+ infirmière.}\tabularnote{Surnommée «la Dame à la Lampe».}
+& Florence & 90 \\
+Schœlcher & Victor & 89\tabularnote{L'appel de note déborde à droite.}\\
+Touchet & Marie & 89 \\
+Wallis & John & 87 \\
+\bottomrule
+\end{NiceTabular}
+\end{table}
-\item On peut se demander comment \pkg{nicematrix} détermine le nombre de rangées et de colonnes nécessaires à la
-composition de la «dernière rangée» et de la «dernière colonne».
+\bigskip
\begin{itemize}
-\item Dans le cas d'un environnement avec préambule, comme |{NiceArray}| ou |{pNiceArray}|, le nombre de colonnes
-se déduit évidemment du préambule.
+\item La commande |\tabularnote| est en fait utilisable avant
+l'environnement de \pkg{nicematrix}, le but étant de pouvoir l'utiliser sur le
+titre inséré par |\caption| dans un environnement |{table}| de LaTeX.
-\item Dans le cas où l'option |light-syntax| (cf. p. \pageref{light-syntax}) est utilisée, \pkg{nicematrix} profite
-du fait que cette option nécessite de toutes manières le chargement complet du contenu de l'environnement (d'où
-l'impossibilité de mettre du verbatim dans ce cas-là) avant composition du tableau. L'analyse du contenu de
-l'environnement donne le nombre de rangées (mais pas le nombre de colonnes).
+\item Si plusieurs commandes |\tabularnote{...}| se suivent \emph{sans aucun espace
+ entre elles}, les appels de notes correspondants sont composés ensemble,
+séparés par une virgule (comme avec l'option |multiple| de \pkg{footmisc} pour
+les notes de pied de page).
-\item Dans les autres cas, \pkg{nicematrix} détermine le nombre de rangées et de colonnes à la première compilation
-et l'écrit dans le fichier |.aux| pour pouvoir l'utiliser à la compilation suivante.
+\item Si une commande |\tabularnote{...}| se trouve exactement à la fin d'une case
+(sans aucun espace après), l'appel de note est composé en débordement vers la
+droite (cela peut permettre de mieux conserver l'alignement des contenus d'une
+colonne).
-\textsl{Néanmoins, il est possible de donner le numéro de la dernière rangée et le numéro de la dernière colonne en
-arguments des options |last-row| et |last-col| pour ce qui permettra d'accélérer le processus complet de
-compilation.} C'est ce que nous ferons dans la suite.
-\end{itemize}
+\item Si la clé |notes/para| est utilisée, les notes sont composées à la fin du
+tableau en un seul paragraphe.
-\end{itemize}
+\item Il existe une clé |tabularnote| qui permet d'insérer du texte dans la zone
+des notes avant les notes numérotées.
+\item Si l'extension \pkg{booktabs} a été chargée (avant ou après
+\pkg{nicematrix}), la clé |notes/bottomrule| permet de faire tracer un
+|\bottomrule| de \pkg{booktabs} \emph{après} les notes.
+\item Il est possible de référencer une note de tableau (avec la commande
+|\label| placée après le |\tabularnote|).
+\end{itemize}
+%
+Voir sur la table \ref{t:tabularnote}, p.~\pageref{t:tabularnote}, certaines de ces
+remarques illustrées. Cette table a été composée avec le code suivant.
+
+\begin{center}
+\fvset{commandchars=\~\#\!}
+\begin{BVerbatim}[formatcom=\small\color{gray}]
+\begin{table}
+\setlength{\belowcaptionskip}{1ex}
+\centering
+\caption{Utilisation de \texttt{\textbackslash
+ tabularnote}~emphase#\tabularnote{On peut!
+ ~emphase# mettre une note dans le titre.}!}
+\label{t:tabularnote}
+\begin{NiceTabular}{@{}llc@{}}%
+ [~emphase#notes/bottomrule!, tabularnote = Un peu de texte avant les notes.]
+\toprule
+Nom & Prénom & Durée de vie \\
+\midrule
+Barrère & Bertrand & 86\\
+Nightingale~emphase#\tabularnote{Souvent considérée comme la première!
+ ~emphase#infirmière.}\tabularnote{Surnommée «la Dame à la Lampe».}!
+& Florence & 90 \\
+Schœlcher & Victor & 89~emphase#\tabularnote{L'appel de note déborde à droite.}!\\
+Touchet & Marie & 89 \\
+Wallis & John & 87 \\
+\bottomrule
+\end{NiceTabular}
+\end{table}
+\end{BVerbatim}
+\end{center}
-\bigskip
-On peut contrôler l'apparence de ces rangées et colonnes avec les options |code-for-first-row|,
-|code-for-last-row|, |code-for-first-col| et |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=6,first-col,last-col,nullify-dots]
- & C_1 & \Cdots & & C_4 & \\
-L_1 & a_{11} & a_{12} & a_{13} & a_{14} & L_1 \\
-\Vdots & a_{21} & a_{22} & a_{23} & a_{24} & \Vdots \\
-\hline
- & a_{31} & a_{32} & a_{33} & a_{34} & \\
-L_4 & a_{41} & a_{42} & a_{43} & a_{44} & L_4 \\
- & C_1 & \Cdots & & 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{displaymath}
-\begin{pNiceArray}{CC|CC}[first-row,last-row=5,first-col,last-col,nullify-dots]
- & C_1 & \multicolumn1C{\Cdots} & & C_4 & \\
-L_1 & a_{11} & a_{12} & a_{13} & a_{14} & L_1 \\
-\Vdots & a_{21} & a_{22} & a_{23} & a_{24} & \Vdots \\
-\hline
- & a_{31} & a_{32} & a_{33} & a_{34} & \\
-L_4 & a_{41} & a_{42} & a_{43} & a_{44} & L_4 \\
- & C_1 & \multicolumn1C{\Cdots} & & C_4 &
-\end{pNiceArray}
-\end{displaymath}
-\end{scope}
+\subsection{Personnalisation des notes de tableau}
-\emph{Remarques}
-\begin{itemize}[beginpenalty=10000]
-\item Comme on peut le voir dans l'exemple précédent, un filet horizontal (tracé avec |\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}. Par
-ailleurs, si on veut vraiment un filet qui s'étende dans la première et la dernière rangée, on peut utiliser
-|!{\vline}| dans le préambule à la place de \verb+|+.}
-
-Si on veut définir de nouveaux spécificateurs de colonnes pour des filets (par exemple plus épais), on aura
-peut-être intérêt à utiliser la commande |\OnlyMainNiceMatrix| décrite p.~\pageref{OnlyMainNiceMatrix}.
-\item Une spécification de couleur présente dans |code-for-first-row| s'applique à une ligne pointillée tracée
-dans cette «première rangée» (sauf si une valeur a été donnée à |xdots/color|). Idem pour les autres.
-\item Sans surprise, une éventuelle option |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 |\\| après la
-«première rangée» ou avant la «dernière rangée» (le placement des délimiteurs serait erroné).
+Les notes de tableau peuvent être personnalisées grâce à un ensemble de clés
+disponibles dans |\NiceMatrixOptions|. Ces clés ont un nom préfixé par |notes| :
+\begin{itemize}
+\item |notes/para|
+\item |notes/bottomrule|
+\item |notes/style|
+\item |notes/label-in-tabular|
+\item |notes/label-in-list|
+\item |notes/enumitem-keys|
+\item |notes/enumitem-keys-para|
+\item |notes/code-before|
\end{itemize}
+Pour la commmodité, il est aussi possible de fixer ces clés dans
+|\NiceMatrixOptions| via une clé |notes| qui prend en argument une liste de
+paires \textsl{clé=valeur} où le nom des clés n'a plus à être préfixé par
+|notes|:
+\begin{center}
+\begin{BVerbatim}[formatcom = \small \color{gray}]
+\NiceMatrixOptions
+ {
+ notes =
+ {
+ bottomrule ,
+ style = ... ,
+ label-in-tabular = ... ,
+ enumitem-keys =
+ {
+ labelsep = ... ,
+ align = ... ,
+ ...
+ }
+ }
+ }
+\end{BVerbatim}
+\end{center}
+\bigskip
+On détaille maintenant ces clés.
+\begin{itemize}[itemsep=\medskipamount]
+\item La clé |notes/para| demande la composition des notes en fin de tableau en un seul
+paragraphe.
+Valeur initiale : |false|
-\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}
+Cette clé est également accessible dans un environnement individuel.
+\item La clé |notes/bottomrule| permet de faire tracer un |\bottomrule| de \pkg{booktabs}
+\emph{après} les notes. Ce trait n'est tracé que s'il y a effectivement des
+notes dans le tableau. L'extension \pkg{booktabs} doit avoir été chargée (avant
+ou après l'extension \pkg{nicematrix}). Dans le cas contraire, une erreur est générée.
-Dans les environnements de \pkg{nicematrix}, il est possible d'utiliser la commande |\hdottedline| (fournie
-par \pkg{nicematrix}) qui est l'équivalent pour les pointillés des commandes |\hline| et |\hdashline|
-(cette dernière étant une commande de \pkg{arydshln}).
+Valeur initiale : |false|
-\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}$
+Cette clé est également accessible dans un environnement individuel.
+\item La clé |notes/style| est une commande dont l'argument est spécifié par
+|#1| et qui indique le style de numérotation des notes. C'est ce style qui est
+utilisé par |\ref| pour faire référence à une note de tableau pour laquelle on a
+utilisé un |\label|. Ce sont les labels mis en forme avec ce style qui sont
+séparés par des virgules quand on utilise plusieurs commandes |\tabularnote|
+successivement. Le marqueur |#1| est censé correspondre à un nom de compteur
+LaTeX.
-\bigskip
-Dans les environnements avec un préambule explicite (comme |{NiceArray}|, |{pNiceArray}|, etc.), il est possible de
-dessiner un trait vertical en pointillés avec le spécificateur «|:|».
+Valeur initiale : |\textit{\alph{#1}}|
-\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}$
+Une autre valeur possible pourrait être tout simplement |\arabic{#1}|
+\item La clé |notes/label-in-tabular| est une commande dont l'argument est
+spécifié par |#1| et qui sert au formatage de l'appel de note dans le tableau.
+En interne, le numéro de note a déjà été formaté par |notes/style| avant d'être
+passé en argument à cette commande.
-\bigskip
-Ces lignes en pointillés ne s'étendent pas dans les rangées et colonnes extérieures.\par\nobreak
+Valeur initiale : |\textsuperscript{#1}|
+Pour la composition du français, il est de tradition de mettre un petit espace
+avant l'appel de note. On peut faire ce réglage de la manière suivante :
-\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}$
+\begin{Verbatim}
+\NiceMatrixOptions{notes/label-in-tabular = \,\textsuperscript{~#1}}
+\end{Verbatim}
-\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 |letter-for-dotted-lines| disponible dans |\NiceMatrixOptions|. Par exemple,
-dans ce document, nous avons chargé l'extension \pkg{arydshln} qui utilise la lettre «|:|» pour indiquer un trait
-vertical en tiretés. Par conséquent, en utilisant l'option |letter-for-dotted-lines|, on peut utiliser les traits
-verticaux fournis à la fois par \pkg{arydshln} et par \pkg{nicematrix}.
+\item La clé |notes/label-in-list| est une commande dont l'argument est
+spécifié par |#1| et qui sert au formatage du numéro de note dans la liste des
+notes en fin de tableau. En interne, le numéro de note a déjà été formaté par
+|notes/style| avant d'être passé en argument à cette commande.
-\medskip
-\begin{BVerbatim}[baseline=c,boxwidth=9.5cm]
-\NiceMatrixOptions{letter-for-dotted-lines = I}
-\arrayrulecolor{blue}
-\begin{pNiceArray}{~emphase#C|C:CIC@}
-1 & 2 & 3 & 4 \\
-5 & 6 & 7 & 8 \\
-9 & 10 & 11 & 12
-\end{pNiceArray}
-\arrayrulecolor{black}
-\end{BVerbatim}
-\begin{scope}
-\arrayrulecolor{blue}
-\NiceMatrixOptions{letter-for-dotted-lines = I}
-$\begin{pNiceArray}{C|C:CIC}
-1 & 2 & 3 & 4 \\
-5 & 6 & 7 & 8 \\
-9 & 10 & 11 & 12
-\end{pNiceArray}$
-\arrayrulecolor{black}
-\end{scope}
+Valeur initiale : |\textsuperscript{#1}|
-\smallskip
-On a utilisé |\arrayrulecolor| de \pkg{colortbl} pour colorier les trois traits.
+Pour la composition du français, on ne compose pas les labels des notes en
+lettres supérieures dans la liste des notes. On pourra donc prendre le réglage
+suivant :
+\begin{Verbatim}
+\NiceMatrixOptions{notes/label-in-list = ~#1.\nobreak\hspace{0.25em}}
+\end{Verbatim}
+La commande |\nobreak| est pour le cas où l'option |para| est utilisée.
-\bigskip
-\emph{Remarque} : Quand l'extension \pkg{array} (sur laquelle s'appuie \pkg{nicematrix}) est chargée, les traits
-verticaux et horizontaux que l'on insère rendent le tableau plus large ou plus long d'une quantité égale à la
-largeur du trait\footnote{En fait, cela est vrai pour |\hline| et «\verb+|+» mais pas pour |\cline|.}. Avec
-\pkg{nicematrix}, les lignes en pointillés tracées par |\hdottedline| et «|:|» ont le même effet.
-\section{La largeur des colonnes}
-\label{width}
+\item Les notes sont composées en fin de tableau en utilisant en interne un
+style de liste de \pkg{enumitem}.
-Dans les environnements avec un préambule explicite (comme |{NiceArray}|, |{pNiceArray}|, etc.), il est possible de
-fixer la largeur d'une colonne avec les lettres classiques |w| et |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 |{array}| de \pkg{array}, elles sont composées en mode texte).
+La clé |notes/enumitem-keys| permet de spécifier une liste de paires
+\textsl{clé=valeur} (au format de \pkg{enumitem}) permettant de paramétrer ce
+type de liste.
-\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}$
+Valeur initiale :\quad |noitemsep , leftmargin = * , align = left , labelsep = 0pt|
+Cette valeur initiale contient la spécification |align = left| qui demande que
+le label de la note soit composé à gauche dans la boîte qui lui est dévolue.
-\bigskip
-Dans les environnements de \pkg{nicematrix}, il est aussi possible de fixer la largeur \emph{minimale} de toutes
-les colonnes de la matrice directement avec l'option |columns-width|.
+Ce réglage a l'avantage d'avoir les notes calées à gauche, ce qui est plaisant
+si on compose des tableaux dans l'esprit de \pkg{booktabs} (voir par exemple la
+table \ref{t:tabularnote}, p.~\pageref{t:tabularnote}).
-\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 |\arraycolsep|) n'est pas supprimé (il est évidemment
-possible de le supprimer en mettant |\arraycolsep| à~$0$ avant).
+\item La clé |notes/enumitem-keys-para| est similaire à la précédente mais elle
+est utilisée pour le type de liste qui sera utilisé quand l'option |para| est
+choisie. Bien entendu, quand cette option |para| est active, c'est une liste de
+type |inline| (suivant le vocabulaire de \pkg{enumitem}) qui est utilisée et les
+paires \textsl{clé=valeur} doivent donc correspondre à une telle liste de type
+|inline|.
-\bigskip
-Il est possible de donner la valeur spéciale |auto| à l'option |columns-width|: toutes les colonnes du tableau
-auront alors une largeur égale à la largeur de la case la plus large du tableau.\footnote{Le résultat est atteint
- dès la première compilation (mais Tikz écrivant des informations dans le fichier |.aux|, un message demandant une
- deuxième compilation apparaîtra).}\par\nobreak
+Valeur initiale :\quad |afterlabel = \nobreak, itemjoin = \quad|
-\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
-Sans surprise, il est possible de fixer la largeur minimale de toutes les colonnes de toutes les matrices dans une
-certaine portion de document avec la commande |\NiceMatrixOptions|.\par\nobreak
+\item La clé |notes/code-before| est une liste de tokens qui seront insérés
+avant la composition de la liste de notes.
-\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}
+Valeur initiale : \textsl{vide}
+
+Si on souhaite, par exemple, que les notes soient composées en gris et en
+|\footnotesize|, c'est cette clé qu'il faut utiliser.
+\begin{Verbatim}
+\NiceMatrixOptions{notes/code-before = \footnotesize \color{gray}}
+\end{Verbatim}
+On peut aussi mettre dans cette clé |\raggedright| ou |\RaggedRight| (cette
+dernière est une commande de \pkg{ragged2e}).
+\end{itemize}
-\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 |{NiceMatrixBlock}| avec l'option |auto-columns-width|\footnote{Pour le moment, c'est le seul
- usage de l'environnement |{NiceMatrixBlock}| mais il pourrait y en avoir davantage dans le futur.}.
-L'environnement |{NiceMatrixBlock}| n'a pas de rapport direct avec la commande |\Block| présentée juste ci-dessous
-(cf.~p.~\pageref{Block}).
-\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}
+\bigskip
+Pour un exemple de personnalisation des notes de tableau, voir p.~\pageref{ex:notes}.
-\medskip
-\textbf{Plusieurs compilations peuvent être nécessaires pour obtenir le résultat désiré.}
-\section{Les matrices par blocs}
+\subsection{Utilisation de \{NiceTabular\} avec threeparttable}
-\label{Block}
-Cette partie, qui introduit une commande |\Block|, n'a pas de rapport direct avec l'environnement
-|{NiceMatrixBlock}| présenté dans la section précédente.
+Si vous souhaitez utiliser l'environnement |{NiceTabular}| ou |{NiceTabular*}|
+dans un environnement |{threeparttable}| de l'extension éponyme, vous devez
+patcher |{threeparttable}| avec le code suivant (avec une version de LaTeX
+postérieure à 2020/10/01).
+\begin{Verbatim}[commandchars=\~\#\!]
+\makeatletter
+\AddToHook{env/threeparttable/begin}
+ {\TPT@hookin{NiceTabular}\TPT@hookin{NiceTabular*}}
+\makeatother
+\end{Verbatim}
-\smallskip
-Dans les environnements de \pkg{nicematrix}, on peut utiliser la commande |\Block| pour placer un élément au centre
-d'un rectangle de cases fusionnées.
-La commande |\Block| doit être utilisée dans la case supérieure gauche du bloc avec deux arguments. Le premier
-argument est la taille de ce bloc avec la syntaxe $i$-$j$ où $i$ est le nombre de rangées et $j$ le nombre de
-colonnes du bloc. Le deuxième argument, est, sans surprise, le contenu du bloc (en mode mathématique). Un nœud Tikz
-correspondant à l'ensemble des cases fusionnées est créé sous le nom «$i$-$j$-block» où \textsl{nom} est le
-nom donné au tableau. Si on a demandé la création des nœuds |medium|, alors un nœud de ce type est aussi créé pour
-ce bloc avec un nom suffixé par |-medium|.
-\medskip
-Dans les exemples qui suivent, on utilise la commande |\arrayrulecolor| de \pkg{colortbl}.
+\section{Autres fonctionnalités}
-\medskip
-\begin{BVerbatim}[baseline=c,boxwidth=10.6cm]
-\arrayrulecolor{cyan}
-$\begin{bNiceArray}{CCC|C}[margin]
-~emphase#\Block{3-3}{A}@ & & & 0 \\
-& \hspace*{1cm} & & \Vdots \\
-& & & 0 \\
-\hline
-0 & \Cdots& 0 & 0
-\end{bNiceArray}$
-\arrayrulecolor{black}
-\end{BVerbatim}
-\begin{scope}
-\arrayrulecolor{cyan}
-$\begin{bNiceArray}{CCC|C}[margin]
-\Block{3-3}{A} & & & 0 \\
-& \hspace*{1cm} & & \Vdots \\
-& & & 0 \\
-\hline
-0 & \Cdots& 0 & 0
-\end{bNiceArray}$
-\arrayrulecolor{black}
-\end{scope}
+\subsection{Utilisation du type de colonne S de siunitx}
-\bigskip
-On peut souhaiter agrandir la taille du «$A$» placé dans le bloc de l'exemple précédent. Comme il est composé en
-mode mathématique, on ne peut pas directement utiliser une commande comme |\large|, |\Large| ou |\LARGE|. C'est
-pourquoi une option à mettre entre chevrons est proposée par |\Block| pour spécifier du code LaTeX qui sera inséré
-\emph{avant} le début du mode mathématique.
+Si l'extension \pkg{siunitx} est chargée (avant ou après \pkg{nicematrix}), il est possible d'utiliser les colonnes
+de type |S| de \pkg{siunitx} dans les environnements de \pkg{nicematrix}. L'implémentation n'utilise explicitement
+aucune macro privée de \pkg{siunitx}.
\medskip
-\begin{BVerbatim}[baseline=c,boxwidth=10.6cm]
-\arrayrulecolor{cyan}
-$\begin{bNiceArray}{CCC|C}[margin]
-\Block{3-3}~emphase#<\Large>@{A} & & & 0 \\
-& \hspace*{1cm} & & \Vdots \\
-& & & 0 \\
-\hline
-0 & \Cdots& 0 & 0
-\end{bNiceArray}$
-\arrayrulecolor{black}
+\begin{BVerbatim}[baseline = c, boxwidth = 10.6cm]
+$\begin{pNiceArray}{~emphase#S@cW{c}{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{scope}
-\arrayrulecolor{cyan}
-$\begin{bNiceArray}{CCC|C}[margin]
-\Block{3-3}<\Large>{A} & & & 0 \\
-& \hspace*{1cm} & & \Vdots \\
-& & & 0 \\
-\hline
-0 & \Cdots& 0 & 0
-\end{bNiceArray}$
-\arrayrulecolor{black}
-\end{scope}
-
+$\begin{pNiceArray}{ScW{c}{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}$
\medskip
-Pour des raisons techniques, il n'est pas possible d'écrire |\Block{|$i$|-|$j$|}{<}|
-(mais on peut écrire |\Block{|$i$|-|$j$|}<>{<}| avec le résultat attendu).
+En revanche, les colonnes |d| de l'extension \pkg{dcolumn} ne sont pas prises en
+charge par \pkg{nicematrix}.
+
-\section{Fonctionnalités avancées}
+\subsection{Option d'alignement dans \{NiceMatrix\}}
-\subsection{Option d'alignement dans NiceMatrix}
+\label{key-R}
-Les environnements sans préambule (|{NiceMatrix}|, |{pNiceMatrix}|, |{bNiceMatrix}|, etc.) proposent les options
-|l| et |r| (possédant |L| et |R| comme alias) qui imposent des colonnes alignées à gauche ou à
-droite.\footnote{Cela reprend une partie des fonctionnalités proposées par les environnements |{pmatrix*}|,
- |{bmatrix*}|, etc. de \pkg{mathtools}.}
+Les environnements sans préambule (|{NiceMatrix}|, |{pNiceMatrix}|,
+|{bNiceMatrix}|, etc.) proposent les options |l| et |r| qui imposent des
+colonnes alignées à gauche ou à droite.
\medskip
\begin{BVerbatim}[baseline=c,boxwidth=10cm]
-$\begin{bNiceMatrix}[R]
+$\begin{bNiceMatrix}[r]
\cos x & - \sin x \\
\sin x & \cos x
\end{bNiceMatrix}$
\end{BVerbatim}
-$\begin{bNiceMatrix}[R]
+$\begin{bNiceMatrix}[r]
\cos x & - \sin x \\
\sin x & \cos x
\end{bNiceMatrix}$
-
\subsection{La commande \textbackslash rotate}
Utilisée au début d'une case, la commande |\rotate| (fournie par \pkg{nicematrix}) compose le contenu après une
@@ -1530,7 +2888,7 @@ $A = \begin{pNiceMatrix}[first-row,last-col=4]
e_1 & e_2 & e_3 \\
1 & 2 & 3 & e_1 \\
4 & 5 & 6 & e_2 \\
-7 & 8 & 9 & e_3 \\
+7 & 8 & 9 & e_3
\end{pNiceMatrix}$
\end{BVerbatim}
\begin{varwidth}{10cm}
@@ -1546,8 +2904,8 @@ e_1 & e_2 & e_3 \\
\end{varwidth}
\bigskip
-Si la commande |\rotate| est utilisée dans la ``dernière rangée'' (extérieure à la matrice), les éléments qui
-subissent cette rotation sont alignés vers le haut.
+Si la commande |\rotate| est utilisée dans la «dernière rangée» (extérieure à la
+matrice), les éléments qui subissent cette rotation sont alignés vers le haut.
\bigskip
\begin{BVerbatim}[baseline=c,boxwidth=12cm]
@@ -1558,7 +2916,7 @@ $A = \begin{pNiceMatrix}[last-row,last-col=4]
1 & 2 & 3 & e_1 \\
4 & 5 & 6 & e_2 \\
7 & 8 & 9 & e_3 \\
-\text{image de } e_1 & e_2 & e_3 \\
+\text{image de } e_1 & e_2 & e_3
\end{pNiceMatrix}$
\end{BVerbatim}
\begin{varwidth}{10cm}
@@ -1569,7 +2927,7 @@ $A = \begin{pNiceMatrix}[last-row,last-col=4]
1 & 2 & 3 & e_1 \\
4 & 5 & 6 & e_2 \\
7 & 8 & 9 & e_3 \\
-\text{image de } e_1 & e_2 & e_3 \\
+\text{image de } e_1 & e_2 & e_3
\end{pNiceMatrix}$
\end{varwidth}
@@ -1578,35 +2936,37 @@ $A = \begin{pNiceMatrix}[last-row,last-col=4]
\label{small}
-Avec l'option |small|, les environnements de l'extension \pkg{nicematrix} sont composés d'une manière proche de ce
-que propose l'environnement |{smallmatrix}| de l'\pkg{amsmath} (et les environnements |{psmallmatrix}|,
-|{bsmallmatrix}|, etc. de \pkg{mathtools}).
+Avec l'option |small|, les environnements de l'extension \pkg{nicematrix} sont
+composés d'une manière proche de ce que propose l'environnement |{smallmatrix}|
+de l'\pkg{amsmath} (et les environnements |{psmallmatrix}|, |{bsmallmatrix}|,
+etc. de \pkg{mathtools}).
\bigskip
\begin{Verbatim}
-$\begin{bNiceArray}{CCCC|C}[~emphase#small@,
+$\begin{bNiceArray}{cccc|c}[~emphase#small@,
last-col,
code-for-last-col = \scriptscriptstyle,
columns-width = 3mm ]
1 & -2 & 3 & 4 & 5 \\
0 & 3 & 2 & 1 & 2 & L_2 \gets 2 L_1 - L_2 \\
-0 & 1 & 1 & 2 & 3 & L_3 \gets L_1 + L_3 \\
+0 & 1 & 1 & 2 & 3 & L_3 \gets L_1 + L_3
\end{bNiceArray}$
\end{Verbatim}
%
-\[\begin{bNiceArray}{CCCC|C}[small, last-col, code-for-last-col = \scriptscriptstyle, columns-width=3mm]
+\[\begin{bNiceArray}{cccc|c}[small, last-col, code-for-last-col = \scriptscriptstyle, columns-width=3mm]
1 & -2 & 3 & 4 & 5 \\
0 & 3 & 2 & 1 & 2 & L_2 \gets 2 L_1 - L_2 \\
-0 & 1 & 1 & 2 & 3 & L_3 \gets L_1 + L_3 \\
+0 & 1 & 1 & 2 & 3 & L_3 \gets L_1 + L_3
\end{bNiceArray}\]
\bigskip
-On remarquera néanmoins que l'environnement |{NiceMatrix}| avec l'option |small| ne prétend pas être composé
-exactement comme l'environnement |{smallmatrix}|. C'est que les environnements de \pkg{nicematrix} sont tous fondés
-sur |{array}| (de \pkg{array}) alors que ce n'est pas le cas de |{smallmatrix}| (fondé directement sur un |\halign|
-de TeX).
+On remarquera néanmoins que l'environnement |{NiceMatrix}| avec l'option |small|
+ne prétend pas être composé exactement comme l'environnement |{smallmatrix}|.
+C'est que les environnements de \pkg{nicematrix} sont tous fondés sur |{array}|
+(de \pkg{array}) alors que ce n'est pas le cas de |{smallmatrix}| (fondé
+directement sur un |\halign| de TeX).
\medskip
En fait, l'option |small| correspond aux réglages suivants :
@@ -1619,14 +2979,17 @@ En fait, l'option |small| correspond aux réglages suivants :
\subsection{Les compteurs iRow et jCol}
-Dans les cases du tableau, il est possible d'utiliser les compteurs LaTeX |iRow| et |jCol| qui représentent le
-numéro de la rangée courante et le numéro de la colonne courante\footnote{On rappelle que le numéro de la «première
- rangée» (si elle existe) est $0$ et que le numéro de la «première colonne» (si elle existe) est $0$ également.}.
-Bien entendu, l'utilisateur ne doit pas modifier les valeurs de ces compteurs qui sont utilisés en interne par
-\pkg{nicematrix}.
+Dans les cases du tableau, il est possible d'utiliser les compteurs LaTeX |iRow|
+et |jCol| qui représentent le numéro de la rangée courante et le numéro de la
+colonne courante\footnote{On rappelle que le numéro de la «première rangée» (si
+ elle existe) est $0$ et que le numéro de la «première colonne» (si elle
+ existe) est $0$ également.}. Bien entendu, l'utilisateur ne doit pas modifier
+les valeurs de ces compteurs qui sont utilisés en interne par \pkg{nicematrix}.
-Dans le |code-after| (cf. p. \pageref{code-after}), |iRow| représente le nombre total de rangées (hors éventuelles
-rangées extérieures) et |jCol| le nombre total de colonnes (hors potentielles colonnes extérieures).
+Dans le |code-before| (cf. p. \pageref{code-before}) et dans le |\CodeAfter|
+(cf. p. \pageref{code-after}), |iRow| représente le nombre total de rangées
+(hors éventuelles rangées extérieures) et |jCol| le nombre total de colonnes
+(hors potentielles colonnes extérieures).
\medskip
\begin{BVerbatim}[baseline=c,boxwidth=10.6cm]
@@ -1652,20 +3015,22 @@ $\begin{pNiceMatrix}[first-row,
\end{pNiceMatrix}$
\medskip
-Si des compteurs LaTeX nommés |iRow| ou |jCol| sont créés dans le document par d'autres extensions que
-\pkg{nicematrix} (ou tout simplement par l'utilisateur), ces compteurs sont masqués dans les environnements de
-\pkg{nicematrix}.
+Si des compteurs LaTeX nommés |iRow| ou |jCol| sont créés dans le document par
+d'autres extensions que \pkg{nicematrix} (ou tout simplement par l'utilisateur
+final), ces compteurs sont masqués dans les environnements de \pkg{nicematrix}.
\bigskip
-L'extension \pkg{nicematrix} propose aussi des commandes pour composer automatiquement des matrices à partir d'un
-motif général. Ces commandes sont nommées |\pAutoNiceMatrix|, |\bAutoNiceMatrix|, |\vAutoNiceMatrix|,
-|\VAutoNiceMatrix| et |\BAutoNiceMatrix|.
+L'extension \pkg{nicematrix} propose aussi des commandes pour composer
+automatiquement des matrices à partir d'un motif général. Ces commandes sont
+nommées |\AutoNiceMatrix|, |\pAutoNiceMatrix|, |\bAutoNiceMatrix|,
+|\vAutoNiceMatrix|, |\VAutoNiceMatrix| et |\BAutoNiceMatrix|.
-Chacune de ces commandes prend deux arguments obligatoires : le premier est la taille de la matrice, sous la forme
-$n$-$p$, où $n$ est le nombre de rangées et $p$ est le nombre de colonnes et le deuxième est le motif (c'est-à-dire
-simplement des tokens qui seront insérés dans chaque case de la matrice, exceptées celles des éventuelles rangées et
-colonnes extérieures).
+Chacune de ces commandes prend deux arguments obligatoires : le premier est la
+taille de la matrice, sous la forme $n$-$p$, où $n$ est le nombre de rangées et
+$p$ est le nombre de colonnes et le deuxième est le motif (c'est-à-dire
+simplement des tokens qui seront insérés dans chaque case de la matrice,
+exceptées celles des éventuelles rangées et colonnes extérieures).
\medskip
\begin{Verbatim}
@@ -1673,173 +3038,664 @@ $C = ~emphase#\pAutoNiceMatrix@{3-3}{C_{\arabic{iRow},\arabic{jCol}}}$
\end{Verbatim}
-$C = \pAutoNiceMatrix{3-3}{C_{\arabic{iRow},\arabic{jCol}}}$
+\[C = \pAutoNiceMatrix{3-3}{C_{\arabic{iRow},\arabic{jCol}}}\]
-\subsection{Les options hlines, vlines et hvlines}
-\label{hvlines}
-Dans les environnements de \pkg{nicematrix}, on peut bien entendu ajouter des filets horizontaux entre les rangées
-avec la commande~|\hline| et des filets verticaux avec le spécificateur ``\verb+|+'' dans le préambule de
-l'environnement. Par souci de commodité, l'extension \pkg{nicematrix} fournit aussi l'option |hlines| (resp.
-|vlines|) qui impose directement que tous les filets horizontaux (resp. verticaux) soient tracés (à l'exception,
-très naturelle, des filets extérieurs aux rangées et colonnes extérieures). L'option |lines| est la conjonction des
-options |hlines| et |vlines|.
+\subsection{L'option light-syntax}
+
+\label{light-syntax}
+
+L'option |light-syntax| (inspirée de l'extension \pkg{spalign}) permet d'alléger
+la saisie des matrices, ainsi que leur lisibilité dans le source TeX. Lorsque
+cette option est activée, on doit utiliser le point-virgule comme marqueur de
+fin de rangée et séparer les colonnes par des espaces ou des tabulations. On
+remarquera toutefois que, comme souvent dans le monde TeX, les espaces après les
+séquences de contrôle ne sont pas comptées et que les éléments entre accolades
+sont considérés comme un tout.
+
\medskip
-Dans l'exemple suivant, on utilise la commande |\arrayrulecolor| de \pkg{colortbl}.
+\begin{scope}
+\begin{BVerbatim}[baseline=c,boxwidth=10cm]
+$\begin{bNiceMatrix}[~emphase#light-syntax@,first-row,first-col]
+{} a b ;
+a 2\cos a {\cos a + \cos b} ;
+b \cos a+\cos b { 2 \cos b }
+\end{bNiceMatrix}$
+\end{BVerbatim}
+\end{scope}
+%
+$\begin{bNiceMatrix}[light-syntax,first-row,first-col]
+{} a b ;
+a 2\cos a {\cos a + \cos b} ;
+b \cos a+\cos b { 2 \cos b }
+\end{bNiceMatrix}$
+
+\medskip
+On peut changer le caractère utilisé pour indiquer les fins de rangées avec
+l'option |end-of-row|. Comme dit précédemment, la valeur initiale de ce
+paramètre est un point-virgule.
+
+\medskip
+Lorsque l'option |light-syntax| est utilisée, il n'est pas possible de mettre
+d'éléments en verbatim (avec par exemple la commande
+|\verb|) dans les cases du tableau.\footnote{La raison en est que lorsque l'option |light-syntax|
+ est utilisée, le contenu complet de l'environnement est chargé comme un
+ argument de commande TeX. L'environnement ne se comporte plus comme un «vrai»
+ environnement de LaTeX qui se contente d'insérer des commandes avant et
+ après.}
+
+\subsection{Couleur des délimiteurs}
+
+Pour les environnements avec délimiteurs (|{pNiceArray}|, |{pNiceMatrix}|,
+etc.), il est possible de changer la couleur des délimiteurs avec la clé
+|delimiters-color|.
+
+\medskip
+\begin{BVerbatim}[boxwidth=12cm,baseline=c]
+$\begin{bNiceMatrix}[delimiters-color=red]
+1 & 2 \\
+3 & 4
+\end{bNiceMatrix}$
+\end{BVerbatim}
+$\begin{bNiceMatrix}[delimiters-color=red]
+1 & 2 \\
+3 & 4
+\end{bNiceMatrix}$
+
+
+\subsection{L'environnement \{NiceArrayWithDelims\}}
+
+En fait, l'environnement |{pNiceArray}| et ses variantes sont fondés sur un
+environnement plus général, appelé |{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 |{NiceArrayWithDelims}| si on a besoin de délimiteurs atypiques ou
+asymétriques.
\medskip
\begin{BVerbatim}[baseline=c,boxwidth=11cm]
-\arrayrulecolor{cyan}
-$\begin{NiceArray}{CCCC}%
- [~emphase#hvlines@,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}$
-\arrayrulecolor{black}
+$\begin{~emphase#NiceArrayWithDelims@}
+ {\downarrow}{\uparrow}{ccc}[margin]
+1 & 2 & 3 \\
+4 & 5 & 6 \\
+7 & 8 & 9
+\end{~emphase#NiceArrayWithDelims@}$
\end{BVerbatim}
%
-\arrayrulecolor{cyan}
-$\begin{NiceArray}{CCCC}[hvlines,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}$
-\arrayrulecolor{black}
+$\begin{NiceArrayWithDelims}
+ {\downarrow}{\uparrow}{ccc}[margin]
+1 & 2 & 3 \\
+4 & 5 & 6 \\
+7 & 8 & 9
+\end{NiceArrayWithDelims}$
+
+
+\section{Utilisation de Tikz avec nicematrix}
+
+\label{name}
+
+\subsection{Les nœuds correspondant aux contenus des cases}
+
+L'extension \pkg{nicematrix} crée un nœud PGF-Tikz pour chaque case non vide
+du tableau considéré. Ces nœuds sont utilisés, entre autres, pour tracer les
+lignes en pointillés entre les cases du tableau.
+
+\smallskip
+\textbf{Attention} : Par défaut, aucun nœud n'est créé dans une case vide.
+
+\smallskip
+Néanmoins, on peut forcer la création d'un nœud avec la commande |\NotEmpty|.\footnote{Il faut toutefois remarquer qu'avec cette commande, la
+ case est considérée comme non vide, ce qui a des conséquences sur le tracé des
+lignes pointillées (cf.~p.~\pageref{Cdots}).}
+
\bigskip
-Il y a néanmoins une différence entre l'utilisation de l'option |vlines| et du spécificateur ``\verb+|+'' dans le
-préambule de l'environnement : les filets tracés par |vlines| traversent les double-filets horizontaux tracés par
-|\hline\hline|.
+Tous les nœuds du document doivent avoir des noms deux à deux distincts et le
+nom de ces nœuds doit donc faire intervenir le numéro de l'environnement
+courant. Les environnements créés par \pkg{nicematrix} sont en effet numérotés
+par un compteur global interne.
-\medskip
-\begin{BVerbatim}[baseline=c,boxwidth=11.5cm]
-$\begin{NiceArray}{CCCC}[vlines] \hline
-a & b & c & d \\ \hline \hline
-1 & 2 & 3 & 4 \\
-1 & 2 & 3 & 4 \\ \hline
-\end{NiceArray}$
+\smallskip
+Si l'environnement concerné a le numéro $n$, alors le nœud de la rangée~$i$ et
+de la colonne~$j$ a pour nom |nm-|$n$|-|$i$|-|$j$.
+
+\smallskip
+La commande |\NiceMatrixLastEnv| donne le numéro du dernier de ces
+environnements (pour LaTeX, il s'agit d'une commande — complètement développable
+— et non d'un compteur).
+
+\smallskip
+Il est néanmoins recommandé de passer plutôt par la clé |name|. Celle-ci permet
+de donner un nom à l'environnement. Une fois l'environnement nommé, 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 rangée et de colonne de la
+case considérée. On peut les utiliser avec \textsc{pgf} mais l'utilisateur final
+préférera sans doute utiliser Tikz (qui est une sur-couche de \textsc{pgf}). Il
+faut néanmoins se souvenir que \pkg{nicematrix} ne charge pas Tikz par défaut.
+Dans les exemples qui suivent, on suppose que Tikz a été chargé par
+l'utilisateur.
+
+\bigskip
+\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{NiceArray}{CCCC}[vlines]
-\hline
-a & b & c & d \\
-\hline \hline
-1 & 2 & 3 & 4 \\
-1 & 2 & 3 & 4 \\
-\hline
-\end{NiceArray}$
+$\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 |remember picture| et |overlay|.
+
\bigskip
-Dans le cas d'un environnement avec délimiteurs (par exemple |{pNiceArray}| ou |{pNiceMatrix}|), l'option |vlines| ne
-trace pas de filets verticaux au niveau des deux délimiteurs (bien entendu).
+Dans le |\CodeAfter|, et si Tikz est chargé, les choses sont plus simples. On
+peut (et on doit) désigner les nœuds sous la forme $i$-$j$ : il n'y a pas à
+préciser l'environnement qui est évidemment l'environnement courant.
+
\medskip
-\begin{BVerbatim}[baseline=c,boxwidth=10.6cm]
-\setlength{\arrayrulewidth}{0.2pt}
-$\begin{pNiceMatrix}[vlines]
-1 & 2 & 3 & 4 & 5 & 6 \\
-1 & 2 & 3 & 4 & 5 & 6 \\
-1 & 2 & 3 & 4 & 5 & 6 \\
+\begin{BVerbatim}[baseline=c,boxwidth=11cm]
+$\begin{pNiceMatrix}
+1 & 2 & 3 \\
+4 & 5 & 6 \\
+7 & 8 & 9
+\CodeAfter
+\tikz \draw ~emphase#(2-2)@ circle (2mm) ;
\end{pNiceMatrix}$
\end{BVerbatim}
-%
-\begin{scope}
-\setlength{\arrayrulewidth}{0.2pt}
-$\begin{pNiceMatrix}[vlines]
-1 & 2 & 3 & 4 & 5 & 6 \\
-1 & 2 & 3 & 4 & 5 & 6 \\
-1 & 2 & 3 & 4 & 5 & 6 \\
+$\begin{pNiceMatrix}
+1 & 2 & 3 \\
+4 & 5 & 6 \\
+7 & 8 & 9
+\CodeAfter
+\tikz \draw (2-2) circle (2mm) ;
\end{pNiceMatrix}$
-\end{scope}
+\bigskip
+Dans l'exemple suivant, nous avons surligné tous les nœuds de la matrice (on
+explique plus loin la technique utilisée : cf. p. \pageref{highlight}).
-\subsection{L'option light-syntax}
+\[\begin{pNiceMatrix}
+a & a + b & a + b + c \\
+a & a & a + b \\
+a & a & a
+\CodeAfter
+\begin{tikzpicture}[
+ every node/.style =
+ {
+ blend mode = multiply,
+ inner sep = 0 pt ,
+ fill = red!15
+ }
+ ]
+\node [fit = (1-1)] {} ;
+\node [fit = (1-3)] {} ;
+\node [fit = (2-2)] {} ;
+\node [fit = (3-1)] {} ;
+\node [fit = (3-3)] {} ;
+\node [fit = (1-2)] {} ;
+\node [fit = (2-1)] {} ;
+\node [fit = (2-3)] {} ;
+\node [fit = (3-2)] {} ;
+\end{tikzpicture}
+\end{pNiceMatrix}\]
-\label{light-syntax}
-L'option |light-syntax|\footnote{Cette option est inspirée de l'extension \pkg{spalign} de Joseph Rabinoff.} permet
-d'alléger la saisie des matrices, ainsi que leur lisibilité dans le source TeX. Lorsque cette option est activée,
-on doit utiliser le point-virgule comme marqueur de fin de rangée et séparer les colonnes par des espaces ou des
-tabulations. On remarquera toutefois que, comme souvent dans le monde TeX, les espaces après les séquences de
-contrôle ne sont pas comptées et que les éléments entre accolades sont considérés comme un tout.
+\subsection{Les «nœuds moyens» et les «nœuds larges»}
+
+En fait, l'extension \pkg{nicematrix} peut créer deux séries de nœuds
+supplémentaires (\emph{extra nodes} en anglais) : les «nœuds moyens»
+(\emph{medium nodes} en anglais) et les «nœuds larges» (\emph{large nodes} en
+anglais). Les premiers sont créés avec l'option |create-medium-nodes| et les
+seconds avec l'option |create-large-nodes|.\footnote{Il existe aussi l'option
+ |create-extra-nodes| qui est un alias pour la conjonction de
+ |create-medium-nodes| et |create-large-nodes|.}
\medskip
-\begin{scope}
-\begin{BVerbatim}[baseline=c,boxwidth=10cm]
-$\begin{bNiceMatrix}[~emphase#light-syntax@,first-row,first-col]
-{} a b ;
-a 2\cos a {\cos a + \cos b} ;
-b \cos a+\cos b { 2 \cos b }
-\end{bNiceMatrix}$
+Ces nœuds ne sont pas utilisés par défaut par \pkg{nicematrix}.
+
+\medskip
+Les noms des «nœuds moyens» s'obtiennent en ajoutant le suffixe «|-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-medium-nodes]
+a & a + b & a + b + c \\
+a & a & a + b \\
+a & a & a
+\CodeAfter
+\begin{tikzpicture}
+ [every node/.style = {fill = red!15,
+ blend mode = multiply,
+ inner sep = 0 pt},
+ 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}
+\end{pNiceMatrix}\]
+
+
+\medskip
+Les noms des «nœuds larges» s'obtiennent en ajoutant le suffixe «|-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 rangées et
+ colonnes extérieures (pour ces rangées et colonnes, voir
+ p.~\pageref{exterior}).}
+
+\[\begin{pNiceMatrix}[create-large-nodes]
+a & a + b & a + b + c \\
+a & a & a + b \\
+a & a & a
+\CodeAfter
+\begin{tikzpicture}
+ [every node/.style = {blend mode = multiply,
+ inner sep = 0 pt},
+ 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}
+\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 |left-margin| et |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 |left-margin| et |right-margin|.\footnote{Les options
+ |left-margin| et |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 à |\arraycolsep| (valeur initiale : 5~pt). Il existe aussi une
+ option |margin| pour fixer à la fois |left-margin| et |right-margin|.}
+\[\begin{pNiceMatrix}[create-large-nodes,left-margin,right-margin]
+a & a + b & a + b + c \\
+a & a & a + b \\
+a & a & a
+\CodeAfter
+\begin{tikzpicture}
+ [every node/.style = {blend mode = multiply,
+ inner sep = 0 pt},
+ 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}
+\end{pNiceMatrix}\]
+
+\medskip
+Il est aussi possible d'ajouter de l'espace sur les côtés du tableau avec les
+options |extra-left-margin| et |extra-right-margin|. Ces marges ne sont pas
+incorporées dans les «nœuds larges». Dans l'exemple suivant, nous avons utilisé
+|extra-left-margin| et |extra-right-margin| avec la valeur $3$~pt.
+\[\begin{pNiceMatrix}%
+ [create-large-nodes,left-margin,right-margin,extra-right-margin=3pt,extra-left-margin=3pt]
+a & a + b & a + b + c \\
+a & a & a + b \\
+a & a & a
+\CodeAfter
+\begin{tikzpicture}
+ [every node/.style = {blend mode = multiply,
+ inner sep = 0 pt},
+ 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}
+\end{pNiceMatrix}\]
+
+
+\bigskip
+\textbf{Attention} : Ces nœuds sont reconstruits à partir des contenus des cases
+et ne correspondent donc pas nécessairement aux cases délimitées par des filets.
+
+\bigskip
+\begin{minipage}[c]{7.5cm}
+Voici un tableau qui a été composé de la manière suivante :
+
+\medskip
+\begin{BVerbatim}
+\large
+\begin{NiceTabular}{wl{2cm}ll}[hvlines]
+fraise & amande & abricot \\
+prune & pêche & poire \\[1ex]
+noix & noisette & brugnon
+\end{NiceTabular}
\end{BVerbatim}
+\end{minipage}
+\hspace{1cm}
+\begin{scope}
+\large
+\begin{NiceTabular}[c]{wl{2cm}ll}[hvlines]
+fraise & amande & abricot \\
+prune & pêche & poire \\[1ex]
+noix & noisette & brugnon
+\end{NiceTabular}
\end{scope}
-%
-$\begin{bNiceMatrix}[light-syntax,first-row,first-col]
-{} a b ;
-a 2\cos a {\cos a + \cos b} ;
-b \cos a+\cos b { 2 \cos b }
-\end{bNiceMatrix}$
+
+\vspace{1cm}
+\begin{minipage}[c]{7cm}
+Ci-contre, on a colorié toutes les cases de ce tableau avec
+|\chessboardcolors| (cf.~p.~\pageref{chessboardcolors}).
+\end{minipage}
+\hspace{1.5cm}
+\begin{scope}
+\large
+\begin{NiceTabular}[c]{wl{2cm}ll}[hvlines,code-before = \chessboardcolors{red!15}{blue!15}]
+fraise & amande & abricot \\
+prune & pêche & poire \\[1ex]
+noix & noisette & brugnon
+\end{NiceTabular}
+\end{scope}
+
+
+\vspace{1cm}
+\begin{minipage}[c]{7cm}
+Voici maintenant tous les «nœuds larges» de ce tableau (sans utilisation de
+|margin| ni de |extra-margin|).
+\end{minipage}
+\hspace{1.5cm}
+\begin{scope}
+\large
+\begin{NiceTabular}[c]{w{l}{2cm}ll}[hvlines,create-large-nodes]
+fraise & amande & abricot \\
+prune & pêche & poire \\[1ex]
+noix & noisette & brugnon
+\CodeAfter
+\begin{tikzpicture}
+ [every node/.style = {blend mode = multiply,
+ inner sep = 0 pt},
+ 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}
+\end{NiceTabular}
+\end{scope}
+
+
+
+\subsection{Les nœuds «row» et «col»}
+
+L'extension \pkg{nicematrix} crée un nœud PGF-Tikz indiquant la position
+potentielle de chaque filet horizontal (avec les noms |row-|$i$) et de chaque
+filet vertical (avec les noms |col-|$j$), comme décrit sur la figure ci-dessous.
+Ces nœuds sont accessibles dans le |code-before| et dans le |\CodeAfter|.
+\begin{center}
+\begin{NiceTabular}{ccc}[hvlines,rules/width=1pt,rules/color=gray]
+rose & tulipe & lys \\
+arum & iris & violette \\
+muguet & dahlia & souci
+\CodeAfter
+\tiny
+\begin{tikzpicture}
+\foreach \i in {1,2,3,4}
+ {
+ \fill [red] (row-\i) circle (0.5mm) ;
+ \node [red,anchor=east] at (row-\i) {row-\i} ;
+ }
+\foreach \j in {1,2,3,4}
+ {
+ \fill [blue] (col-\j) circle (0.5mm) ;
+ \node [blue,anchor=north] at (col-\j) {col-\j} ;
+ }
+\end{tikzpicture}
+\end{NiceTabular}
+\end{center}
+
+
+\bigskip
+Si on utilise Tikz (on rappelle que \pkg{nicematrix} ne charge pas Tikz par
+défaut), on peut donc accéder (dans le |code-before| et le |\CodeAfter|) à
+l'intersection du filet horizontal~$i$ et du filet vertical~$j$ avec la syntaxe
+|(row-|$i$\verb+-|col-+$j$|)|.
+
\medskip
-On peut changer le caractère utilisé pour indiquer les fins de rangées avec l'option |end-of-row|. Comme dit
-précédemment, la valeur initiale de ce paramètre est un point-virgule.
+\begin{Verbatim}
+\[\begin{NiceMatrix}[
+ code-before =
+ {
+~emphase# \tikz \draw [fill = red!15] @
+~emphase# (row-7-|col-4) -- (row-8-|col-4) -- (row-8-|col-5) -- @
+~emphase# (row-9-|col-5) -- (row-9-|col-6) |- cycle ; @
+ }
+]
+1 \\
+1 & 1 \\
+1 & 2 & 1 \\
+1 & 3 & 3 & 1 \\
+1 & 4 & 6 & 4 & 1 \\
+1 & 5 & 10 & 10 & 5 & 1 \\
+1 & 6 & 15 & 20 & 15 & 6 & 1 \\
+1 & 7 & 21 & 35 & 35 & 21 & 7 & 1 \\
+1 & 8 & 28 & 56 & 70 & 56 & 28 & 8 & 1
+\end{NiceMatrix}\]
+\end{Verbatim}
+%
+\[\begin{NiceMatrix}[
+ code-before =
+ {
+ \tikz \draw [fill = red!15]
+ (row-7-|col-4) -- (row-8-|col-4) -- (row-8-|col-5) --
+ (row-9-|col-5) -- (row-9-|col-6) |- cycle ;
+ }
+]
+1 \\
+1 & 1 \\
+1 & 2 & 1 \\
+1 & 3 & 3 & 1 \\
+1 & 4 & 6 & 4 & 1 \\
+1 & 5 & 10 & 10 & 5 & 1 \\
+1 & 6 & 15 & 20 & 15 & 6 & 1 \\
+1 & 7 & 21 & 35 & 35 & 21 & 7 & 1 \\
+1 & 8 & 28 & 56 & 70 & 56 & 28 & 8 & 1
+\end{NiceMatrix}\]
+
+
+\subsection{Les nœuds correspondant aux commandes \textbackslash SubMatrix}
+
+\label{node-sub-matrix}
+
+La commande |\SubMatrix| disponible dans le |\CodeAfter| a été présentée
+p.~\pageref{sub-matrix}.
+
+\smallskip
+Si une commande |\SubMatrix| est utilisée avec la clé |name| sous la forme
+|name=|\textsl{\ttfamily MonNom}, trois nœuds PGF/Tikz sont créés avec les noms
+\textsl{\ttfamily MonNom}|-left|, \textsl{\ttfamily MonNom} et \textsl{\ttfamily
+ MonNom}|-right|.
+
+\smallskip
+Les nœuds \textsl{\ttfamily MonNom}|-left| et \textsl{\ttfamily MonNom}|-right| correspondent aux
+délimiteurs gauche et droit et le nœud \textsl{\ttfamily MonNom} correspond à la
+sous-matrice elle-même.
\medskip
-Lorsque l'option |light-syntax| est utilisée, il n'est pas possible de mettre d'éléments en verbatim (avec par
-exemple la commande |\verb|) dans les cases du tableau.\footnote{La raison en est que lorsque l'option
- |light-syntax| est utilisée, le contenu complet de l'environnement est chargé comme un argument de commande TeX.
- L'environnement ne se comporte plus comme un «vrai» environnement de LaTeX qui se contente d'insérer des
- commandes avant et après.}
+Dans l'exemple suivant, on a surligné ces trois nœuds (la sous-matrice elle-même
+a été créée avec |\SubMatrix\{{2-2}{3-3}\}|).
+%
+\[\begin{pNiceMatrix}
+121 & 23 & 345 & 345\\
+45 & 346 & 863 & 444\\
+3462 & 38458 & 34 & 294 \\
+34 & 7 & 78 & 309 \\
+\CodeAfter
+\SubMatrix\{{2-2}{3-3}\}[name=A]
+\begin{tikzpicture}
+ [every node/.style = {blend mode = multiply,
+ inner sep = 0 pt}]
+\node [fit = (A),fill = red!15] {} ;
+\node [fit = (A-left),fill = blue!15] {} ;
+\node [fit = (A-right),fill = blue!15] {} ;
+\end{tikzpicture}
+\end{pNiceMatrix}\]
-\subsection{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 |S| de \pkg{siunitx} dans les environnements de \pkg{nicematrix}. L'implémentation n'utilise explicitement
-aucune macro privée de \pkg{siunitx}.
+\section{API pour les développeurs}
+
+L'extension \pkg{nicematrix} fournit deux variables internes mais publiques\footnote{Conformément aux conventions de LaTeX3,
+ toute variable dont le nom commence par |\g_nicematrix| ou |\l_nicematrix| est
+ publique alors que toute variable dont le nom débute par |\g__nicematrix| ou
+ par |\l__nicematrix| est privée.} :
+\begin{itemize}
+\item |\g_nicematrix_code_before_tl| ;
+\item |\g_nicematrix_code_after_tl|.
+\end{itemize}
\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}$
+Ces variables constituent le code du «|code-before|» et du «|code-after|». Le
+développeur peut donc les utiliser pour y ajouter du code à partir d'une case
+du tableau (l'affectation devra être globale, ce qui permettra de sortir de la
+case, qui est un groupe au sens de TeX).
\medskip
-En revanche, les colonnes |d| de l'extension \pkg{dcolumn} ne sont pas prises en charge par \pkg{nicematrix}.
+On remarquera que l'utilisation de |\g_nicematrix_code_before_tl| nécessite une
+compilation supplémentaire (car les instructions sont écrites dans le fichier
+|aux| pour être utilisées à la compilation suivante).
+
+\bigskip
+\emph{Example} : On souhaite écrire une commande |\hatchcell| pour hachurer la
+case courante (avec un argument optionnel entre crochets pour la couleur des
+hachures). Il est possible de programmer une telle commande |\hatchcell| comme
+suit, en utilisant explicitement la variable publique
+|\g_nicematrix_code_before_tl| (ce code nécessite le chargement préalable de la
+bibliothèque Tikz \pkg{patterns} : |\usetikzlibrary{patterns}|).
+
+
+\begin{scope}
+\fvset{commandchars=\§\¤\μ}
+\begin{Verbatim}
+\ExplSyntaxOn
+\cs_new_protected:Nn \__pantigny_hatchcell:nnn
+ {
+ \begin { tikzpicture }
+ \fill [ pattern = north~west~lines , pattern~color = #3 ]
+ ( row - #1 -| col - #2)
+ rectangle
+ ( row - \int_eval:n { #1 + 1 } -| col - \int_eval:n { #2 + 1 } ) ;
+ \end { tikzpicture }
+ }
+
+\NewDocumentCommand \hatchcell { ! O { black } }
+ {
+ \tl_gput_right:Nx §emphase¤\g_nicematrix_code_before_tlμ
+ {
+ \__pantigny_hatchcell:nnn
+ { \int_use:c { c@iRow } }
+ { \int_use:c { c@jCol } }
+ { #1 }
+ }
+ }
+\ExplSyntaxOff
+\end{Verbatim}
+\end{scope}
+
+
+\ExplSyntaxOn
+\cs_new_protected:Nn \__pantigny_hatchcell:nnn
+ {
+ \begin { tikzpicture }
+ \fill [ pattern = north~west~lines , pattern~color = #3 ]
+ ( row - #1 -| col - #2)
+ rectangle
+ ( row - \int_eval:n { #1 + 1 } -| col - \int_eval:n { #2 + 1 } ) ;
+ \end { tikzpicture }
+ }
+
+\NewDocumentCommand \hatchcell { ! O { black } }
+ {
+ \tl_gput_right:Nx \g_nicematrix_code_before_tl
+ {
+ \__pantigny_hatchcell:nnn
+ { \int_use:c { c@iRow } }
+ { \int_use:c { c@jCol } }
+ { #1 }
+ }
+ }
+\ExplSyntaxOff
+\bigskip
+Voici un exemple d'utilisation.
+
+\medskip
+\begin{BVerbatim}[baseline=c,boxwidth=9cm]
+\begin{NiceTabular}{ccc}[hvlines]
+Tokyo & Paris & London \\
+Roma & ~emphase#\hatchcell[blue!30]@Oslo & Miami \\
+Los Angeles & Madrid & Roma
+\end{NiceTabular}
+\end{BVerbatim}
+\begin{NiceTabular}{ccc}[hvlines]
+Tokyo & Paris & London \\
+Lima & \hatchcell[blue!30]Oslo & Miami \\
+Los Angeles & Madrid & Roma
+\end{NiceTabular}
+
\section{Remarques techniques}
+Première remarque : l'extension \pkg{nicematrix} doit être chargée après
+l'extension \pkg{underscore}. Si ce n'est pas le cas, une erreur est levée.
+
\subsection{Pour définir de nouveaux types de colonnes}
\label{OnlyMainNiceMatrix}
-L'extension \pkg{nicematrix} fournit la commande |\OnlyMainNiceMatrix| qui est destinée à être utilisée dans des
-définitions de nouveaux types de colonnes. Son argument n'est exécuté que si on se place dans la partie principale
-du tableau, c'est-à-dire que l'on n'est pas dans l'une des éventuelles rangées extérieures.
+L'extension \pkg{nicematrix} fournit la commande |\OnlyMainNiceMatrix| qui est
+destinée à être utilisée dans des définitions de nouveaux types de colonnes. Son
+argument n'est exécuté que si on se place dans la partie principale du tableau,
+c'est-à-dire que l'on n'est pas dans l'une des éventuelles rangées extérieures.
Par exemple, si on souhaite définir un type de colonne |?| pour tracer un trait fort (noir) d'épaisseur 1~pt, on
pourra écrire\footnote{La commande |\vrule| est une commande de TeX (et non de LaTeX).} :
@@ -1847,21 +3703,23 @@ pourra écrire\footnote{La commande |\vrule| est une commande de TeX (et non de
\newcolumntype{?}{!{\OnlyMainNiceMatrix{\vrule width 1 pt}}}
\end{Verbatim}
-Le trait fort correspondant ne s'étendra pas dans les rangées extérieures :
+Le trait fort correspondant ne s'étendra pas dans les rangées
+extérieures.\footnote{Un tel filet utilisant les techniques classiques de
+ \pkg{array}, il ne traversera pas les doubles filets horizontaux de |\hline\hline|.}
\medskip
\begin{scope}
\newcolumntype{?}{!{\OnlyMainNiceMatrix{\vrule width 1 pt}}}
\begin{BVerbatim}[baseline = c, boxwidth = 10.5cm]
-$\begin{pNiceArray}{CC?CC}[first-row,last-row=3]
+$\begin{pNiceArray}{cc?cc}[first-row,last-row=3]
C_1 & C_2 & C_3 & C_4 \\
a & b & c & d \\
e & f & g & h \\
C_1 & C_2 & C_3 & C_4
\end{pNiceArray}$
\end{BVerbatim}
-$\begin{pNiceArray}{CC?CC}[first-row,last-row=3]
+$\begin{pNiceArray}{cc?cc}[first-row,last-row=3]
C_1 & C_2 & C_3 & C_4 \\
a & b & c & d \\
e & f & g & h \\
@@ -1870,68 +3728,24 @@ C_1 & C_2 & C_3 & C_4
\end{scope}
\medskip
-Le spécificateur |?| ainsi créé est aussi utilisable dans les environnements |{array}| (de \pkg{array}) et, dans ce
-cas, |\OnlyMainNiceMatrix| est sans effet.
-
-
-\subsection{Intersection des lignes pointillées}
-
-Depuis la version 3.1 de \pkg{nicematrix}, les lignes en pointillées créées par |\Cdots|, |\Ldots|, |\Vdots|, etc.
-ne peuvent pas se croiser entre elles.\footnote{En revanche, les lignes créées par |\hdottedline|, la lettre
- ``|:|'' dans le préambule de la matrice et la commande |\line| dans le |code-after| peuvent croiser une autre
- ligne en pointillés.}
-
-Cela signifie qu'une ligne en pointillés créée par l'une des ces commandes s'arrête automatiquement quand elle
-arrive à une autre ligne pointillée déjà tracée par l'une de ces commandes. Par conséquent, l'ordre dans lequel les
-lignes sont tracées a son importance pour le résultat final. Voici cet ordre (c'est à dessein qu'il a été choisi
-ainsi) : |\Hdotsfor|, |\Vdots|, |\Ddots|, |\Iddots|, |\Cdots| et |\Ldots|.
-
-\medskip
-De ce fait, on peut tracer la matrice suivante :\par\nobreak
-
-\smallskip
-\begin{BVerbatim}[baseline = c, boxwidth = 10.5cm]
-$\begin{pNiceMatrix}[nullify-dots]
-1 & 2 & 3 & \Cdots & n \\
-1 & 2 & 3 & \Cdots & n \\
-\Vdots & \Cdots & & \Hspace*{15mm} & \Vdots \\
-& \Cdots & & & \\
-& \Cdots & & & \\
-& \Cdots & & & \\
-\end{pNiceMatrix}$
-\end{BVerbatim}
-$\begin{pNiceMatrix}[nullify-dots]
-1 & 2 & 3 & \Cdots & n \\
-1 & 2 & 3 & \Cdots & n \\
-\Vdots & \Cdots & & \Hspace*{15mm} & \Vdots \\
-& \Cdots & & & \\
-& \Cdots & & & \\
-& \Cdots & & & \\
-\end{pNiceMatrix}$
-
+Le spécificateur |?| ainsi créé est aussi utilisable dans les environnements
+|{tabular}| et |{array}| (de \pkg{array}) et, dans ce cas, |\OnlyMainNiceMatrix|
+est sans effet.
-\subsection{Le nom des nœuds PGF créés par nicematrix}
-Les nœuds PGF-Tikz créés par \pkg{nicematrix} peuvent être utilisés hors des environnements de \pkg{nicematrix}
-après avoir nommé l'environnement concerné avec l'option |name| (cf. p.~\pageref{name}). Il s'agit là de la méthode
-conseillée mais on décrit néanmoins maintenant le nom Tikz interne de ces nœuds.
-Les environnements créés par \pkg{nicematrix} sont numérotés par un compteur global interne. La commande
-|\NiceMatrixLastEnv| donne le numéro du dernier de ces environnements (pour LaTeX, il s'agit d'une commande —
-complètement développable — et non d'un compteur).
-Si l'environnement concerné a le numéro $n$, alors le nœud de la rangée~$i$ et de la colonne~$j$ a pour nom
-|nm-|$n$|-|$i$|-|$j$. Les noms des nœuds |medium| et |large| correspondants s'obtiennent en suffixant par |-medium|
-et |-large|.
\subsection{Lignes diagonales}
-Par défaut, toutes les lignes diagonales\footnote{On parle des lignes créées par |\Ddots| et non des lignes créées
- par une commande |\line| dans le |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 |\Ddots|
-dans un tableau peut avoir un effet marqué sur le résultat final.
+Par défaut, toutes les lignes diagonales\footnote{On parle des lignes créées par
+ |\Ddots| et non des lignes créées par une commande |\line| dans le
+ |\CodeAfter|.} 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 |\Ddots| dans un
+tableau peut avoir un effet marqué sur le résultat final.
\medskip
Dans les exemples suivants, la première instruction |\Ddots| est marquée en couleur :
@@ -1976,7 +3790,8 @@ a+b & \Cdots & a+b & 1
\end{pNiceMatrix}$
\bigskip
-Il est possible de désactiver la parallélisation avec l'option |parallelize-diags| mise à |false|: \par\nobreak
+Il est possible de désactiver la parallélisation avec l'option
+|parallelize-diags| mise à |false|: \par\nobreak
\medskip
\NiceMatrixOptions{parallelize-diags=false}%
@@ -1990,20 +3805,21 @@ a+b & \Ddots & & \Vdots \\
a+b & \Cdots & a+b & 1
\end{pNiceMatrix}$
-
-
\end{scope}
+\bigskip
+On peut choisir l'instruction |\Ddots| qui sera tracée en premier (et qui
+servira pour tracer les suivantes quand la parallélisation est activée) avec la
+clé |draw-first| : |\Ddots[draw-first]|\rlap{.}
+
\subsection{Les cases «vides»}
\label{empty-cells}
-Une instruction comme |\Ldots|, |\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~|&|). En effet, une case dont le contenu est |\hspace*{1cm}| peut être
-considérée comme vide.
-
-\interitem
-Pour \pkg{nicematrix}, les règles précises sont les suivantes :
+Une instruction comme |\Ldots|, |\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~|&|). Les règles précises sont les
+suivantes :
\begin{itemize}
\item Une case implicite est vide. Par exemple, dans la matrice suivante
@@ -2011,7 +3827,7 @@ Pour \pkg{nicematrix}, les règles précises sont les suivantes :
\begin{Verbatim}
\begin{pmatrix}
a & b \\
-c \\
+c
\end{pmatrix}
\end{Verbatim}
@@ -2021,136 +3837,175 @@ la dernière case (deuxième rangée et deuxième colonne) est vide.
\item Chaque case avec un rendu par TeX de largeur nulle est vide.
\medskip
-\item Une case avec une commande |\Hspace| (ou |\Hspace*|) est vide. Cette commande |\Hspace| est une commande
-définie par l'extension \pkg{nicematrix} avec la même signification que |\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}.
+\item Une case qui contient la commande |\NotEmpty| est non vide (et un nœud
+PGF/Tikz est créé pour cette case).
+
+\medskip
+\item Une case avec une commande |\Hspace| (ou |\Hspace*|) est vide. Cette
+commande |\Hspace| est une commande définie par l'extension \pkg{nicematrix}
+avec la même signification que |\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 |{array}| insère un espace horizontal égal à |\arraycolsep| avant et après chaque colonne. En
-particulier, il y a un espace égal à |\arraycolsep| avant et après le tableau. Cette caractéristique de
-l'environnement |{array}| n'était probablement pas une bonne idée\footnote{Dans la documentation de |{amsmath}|, on
- peut lire : {\itshape The extra space of |\arraycolsep| that \pkg{array} adds on each side is a waste so we
- remove it [in |{matrix}|] (perhaps we should instead remove it from array in general, but that's a harder
- task).}}. L'environnement |{matrix}| et ses variantes (|{pmatrix}|,
-|{vmatrix}|, etc.) de \pkg{amsmath} préfèrent supprimer ces espaces avec des instructions explicites
-|\hskip -\arraycolsep|\footnote{Et non en insérant |@{}| de part et d'autre du préambule, ce qui fait que la
- longueur des |\hline| n'est pas modifiée et elle peut paraître trop longue, surtout avec des crochets.}.
-L'extension \pkg{nicematrix} fait de même dans \emph{tous} ses environnements y compris l'environnement
-|{NiceArray}|. Néanmoins, si l'utilisateur souhaite que l'environnement |{NiceArray}| se comporte par défaut comme
-l'environnement |{array}| de \pkg{array} (par exemple pour faciliter l'adaptation d'un document existant), il peut
-contrôler ce comportement avec l'option |exterior-arraycolsep| accessible via la commande |\NiceMatrixOptions|.
-Avec cette option, des espaces extérieurs de longueur |\arraycolsep| seront insérés dans les environnements
-|{NiceArray}| (les autres environnements de l'extension \pkg{nicematrix} ne sont pas affectés).
+L'environnement |{array}| insère un espace horizontal égal à |\arraycolsep|
+avant et après chaque colonne. En particulier, il y a un espace égal à
+|\arraycolsep| avant et après le tableau. Cette caractéristique de
+l'environnement |{array}| n'était probablement pas une bonne idée\footnote{Dans
+ la documentation de |{amsmath}|, on peut lire : {\itshape The extra space of
+ |\arraycolsep| that \pkg{array} adds on each side is a waste so we remove it
+ [in |{matrix}|] (perhaps we should instead remove it from array in general,
+ but that's a harder task).}}. L'environnement |{matrix}| et ses variantes
+(|{pmatrix}|, |{vmatrix}|, etc.) de \pkg{amsmath} préfèrent supprimer ces
+espaces avec des instructions explicites |\hskip -\arraycolsep|\footnote{Et non
+ en insérant |@{}| de part et d'autre du préambule, ce qui fait que la longueur
+ des |\hline| n'est pas modifiée et elle peut paraître trop longue, surtout
+ avec des crochets.}. L'extension \pkg{nicematrix} fait de même dans
+\emph{tous} ses environnements y compris l'environnement |{NiceArray}|.
+Néanmoins, si l'utilisateur souhaite que l'environnement |{NiceArray}| se
+comporte par défaut comme l'environnement |{array}| de \pkg{array} (par exemple
+pour faciliter l'adaptation d'un document existant), il peut contrôler ce
+comportement avec l'option |exterior-arraycolsep| accessible via la commande
+|\NiceMatrixOptions|. Avec cette option, des espaces extérieurs de longueur
+|\arraycolsep| seront insérés dans les environnements |{NiceArray}| (les autres
+environnements de l'extension \pkg{nicematrix} ne sont pas affectés).
-\subsection{L'option de classe draft}
-Quand l'option de classe |draft| est utilisée, les lignes en pointillés ne sont pas tracées, pour accélérer la
-compilation.
+\subsection{Incompatibilités}
-\subsection{Un problème technique avec l'argument de \textbackslash\textbackslash}
+L'extension \pkg{nicematrix} n'est pas parfaitement compatible avec l'extension \pkg{arydshln} (parce que cette
+extension redéfinit de nombreuses commandes internes de \pkg{array}).
+Pour pouvoir utiliser \pkg{arydshln}, il faut, de toutes manières, au préalable,
+libérer la lettre «|:|» en choisissant une autre lettre pour les filets verticaux
+pointillés de \pkg{nicematrix} :
-Pour des raisons techniques, si vous utilisez l'argument optionnel de la commande |\\|, l'espace vertical sera
-aussi ajouté au nœud («normal») correspondant à la case précédente.
+\begin{Verbatim}
+\NiceMatrixOptions{letter-for-dotted-lines=;}
+\end{Verbatim}
+\bigskip
+L'extension \pkg{nicematrix} n'est pas compatible avec la classe \cls{aastex63}.
+Si vous souhaitez utiliser \pkg{nicematrix} with \cls{aastex63}, envoyez-moi un
+courrier électronique et j'essaierai de résoudre les incompatibilités.
-\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}$
+\section{Exemples}
-\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.
+\subsection{Notes dans les tableaux}
-\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}$
+\label{ex:notes}
+Les outils de \pkg{nicematrix} pour les notes dans les tableaux ont été
+présentés à la partie \ref{s:notes} p.~\pageref{s:notes}.
\bigskip
-L'autre solution est d'utiliser la commande |\multicolumn| dans la case précédente :
+Imaginons que l'on souhaite numéroter les notes de tableau (celles construites
+avec |\tabularnote|) avec des astérisques.\footnote{Bien entendu, il faut qu'il
+ y en ait très peu : trois paraît un maximum.}
-\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}$
+On commence par écrire une commande |\stars| similaire aux commandes classiques
+|\arabic|, |\alph|, |\Alph|, etc. mais qui produit un nombre d'astérisques égal
+à son argument.\footnote{Ou plutôt : à la valeur de son argument.}
+\begin{Verbatim}
+\ExplSyntaxOn
+\NewDocumentCommand ~emphase#\stars@ { m }
+ { \prg_replicate:nn { \value { ~#1 } } { $ \star $ } }
+\ExplSyntaxOff
+\end{Verbatim}
+%
+Bien entendu, on change le style des notes avec la clé |notes/style|. Mais, il
+serait bon aussi de changer certains paramètres du type de liste (au sens de
+\pkg{enumitem}) utilisé pour composer les notes après le tableau. On demande de
+composer les labels avec une largeur égale à celle du plus grand des labels. Or,
+le label le plus large est bien entendu celui avec le maximum d'astéristiques.
+On connaît ce nombre : il est égal à |\value{tabularnote}| (car |tabularnote|
+est le compteur LaTeX utilisé par |\tabularnote| et il est donc égal à la fin au
+nombre total de notes dans le tableau). On utilise alors la clé |widest*| de
+\pkg{enumitem} pour demander une largeur de label correspondante :
+|widest*=\value{tabularnote}|.
+\begin{Verbatim}
+\NiceMatrixOptions
+ {
+ notes =
+ {
+ ~emphase#style = \stars{~#1} , @
+ ~emphase#enumitem-keys = @
+ ~emphase# { @
+ ~emphase# widest* = \value{tabularnote} ,@
+ ~emphase# align = right @
+ ~emphase# } @
+ }
+ }
+\end{Verbatim}
-\subsection{Environnements obsolètes}
-La version 3.0 de \pkg{nicematrix} a introduit l'environnement |{pNiceArray}| (et ses variantes) avec les options
-|first-row|, |last-row|, |first-col| et |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 |{NiceArrayCwithDelims}| ;
-\item |{pNiceArrayC}|, |{bNiceArrayC}|, |{BNiceArrayC}|, |{vNiceArrayC}|,
-|{VNiceArrayC}| ;
-\item |{NiceArrayRCwithDelims}| ;
-\item |{pNiceArrayRC}|, |{bNiceArrayRC}|, |{BNiceArrayRC}|, |{vNiceArrayRC}|,
-|{VNiceArrayRC}|.
-\end{itemize}
+\begin{scope}
+\ExplSyntaxOn
+\NewDocumentCommand \stars { m }
+ { \prg_replicate:nn { \value { #1 } } { $ \star $ } }
+\NiceMatrixOptions
+ {
+ notes =
+ {
+ style = \stars{#1} ,
+ enumitem-keys =
+ {
+ widest* = \value{tabularnote} ,
+ align = right
+ }
+ }
+ }
+\ExplSyntaxOff
+\fvset{commandchars=\~\#\!}
+\begin{Verbatim}
+\begin{NiceTabular}{@{}llr@{}}[first-row,code-for-first-row = \bfseries]
+\toprule
+Nom & Prénom & Date de naissance \\
+\midrule
+Achard~emphase#\tabularnote{La famille Achard est une très ancienne famille du Poitou.}!
+& Jacques & 5 juin 1962 \\
+Lefèbvre~emphase#\tabularnote{Le patronyme Lefèbvre est une altération de Lefébure.}!
+& Mathilde & 23 mai 1988 \\
+Vanesse & Stéphanie & 30 octobre 1994 \\
+Dupont & Chantal & 15 janvier 1998 \\
+\bottomrule
+\end{NiceTabular}
+\end{Verbatim}
-\medskip
-Depuis la version 3.12 de \pkg{nicematrix}, on ne peut utiliser ces environnements que si on a chargé l'extension
-\pkg{nicematrix} avec l'option |obsolete-environments|. Il faut toutefois avoir conscience que ces environnements
-seront certainement supprimés dans une prochaine version de \pkg{nicematrix}.
+\begin{center}
+\begin{NiceTabular}{@{}llr@{}}[first-row,code-for-first-row = \bfseries]
+\toprule
+Nom & Prénom & Date de naissance \\
+\midrule
+Achard\tabularnote{La famille Achard est une très ancienne famille du Poitou.}
+& Jacques & 5 juin 1962 \\
+Lefebvre\tabularnote{Le patronyme Lefebvre est une altération de Lefébure.}
+& Mathilde & 23 mai 1988 \\
+Vanesse & Stéphanie & 30 octobre 1994 \\
+Dupont & Chantal & 15 janvier 1998 \\
+\bottomrule
+\end{NiceTabular}
+\end{center}
+\end{scope}
-\section{Exemples}
\subsection{Lignes en pointillés}
Une matrice de permutation.\par\nobreak
-À titre d'exemple, on a augmenté la valeur du paramètre |xdots/shorten|.\par\nobreak
+À titre d'exemple, on a augmenté la valeur du paramètre
+|xdots/shorten|.\par\nobreak
\bigskip
@@ -2202,7 +4057,7 @@ Un exemple avec |\multicolumn|:\par\nobreak
\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 \\
+\Cdots & & ~emphase#\multicolumn{6}{c}{10 \text{ autres lignes}}@ & \Cdots \\
1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10
\end{BNiceMatrix}
\end{BVerbatim}
@@ -2211,7 +4066,7 @@ Un exemple avec |\multicolumn|:\par\nobreak
\[\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 \\
+\Cdots & & \multicolumn{6}{c}{10 \text{ autres lignes}} & \Cdots \\
1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10
\end{BNiceMatrix}\]
@@ -2246,7 +4101,7 @@ Un exemple pour le résultant de deux polynômes :
\bigskip
\begin{BVerbatim}
\setlength{\extrarowheight}{1mm}
-\begin{vNiceArray}{CCCC:CCC}[columns-width=6mm]
+\begin{vNiceArray}{cccc:ccc}[columns-width=6mm]
a_0 & && &b_0 & & \\
a_1 &\Ddots&& &b_1 &\Ddots& \\
\Vdots&\Ddots&& &\Vdots &\Ddots&b_0 \\
@@ -2261,7 +4116,7 @@ a_p & &&a_0 & & &b_1 \\
\begin{scope}
\setlength{\extrarowheight}{1mm}
-\[\begin{vNiceArray}{CCCC:CCC}[columns-width=6mm]
+\[\begin{vNiceArray}{cccc:ccc}[columns-width=6mm]
a_0 & && &b_0 & & \\
a_1 &\Ddots&& &b_1 &\Ddots& \\
\Vdots&\Ddots&& &\Vdots &\Ddots&b_0 \\
@@ -2273,12 +4128,10 @@ a_p & &&a_0 & & &b_1 \\
\end{scope}
\vspace{2cm}
-Un exemple avec un système linéaire (le trait vertical a été tracé en cyan avec les outils de
-\pkg{colortbl}):\par\nobreak
+Un exemple avec un système linéaire:\par\nobreak
\begin{Verbatim}
-\arrayrulecolor{cyan}
-$\begin{pNiceArray}{*6C|C}[nullify-dots,last-col,code-for-last-col={\scriptstyle}]
+$\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 \\
@@ -2286,11 +4139,10 @@ $\begin{pNiceArray}{*6C|C}[nullify-dots,last-col,code-for-last-col={\scriptstyle
\Vdots & & &\Ddots & & 0 & \\
0 & & &\Cdots & 0 & 1 & 0 & L_n \gets L_n-L_1
\end{pNiceArray}$
-\arrayrulecolor{black}
\end{Verbatim}
-\arrayrulecolor{cyan}
-\[\begin{pNiceArray}{*6C|C}[nullify-dots,last-col,code-for-last-col={\scriptstyle}]
+
+\[\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 \\
@@ -2298,25 +4150,71 @@ $\begin{pNiceArray}{*6C|C}[nullify-dots,last-col,code-for-last-col={\scriptstyle
\Vdots & & &\Ddots & & 0 & \\
0 & & &\Cdots & 0 & 1 & 0 & L_n \gets L_n-L_1
\end{pNiceArray}\]
-\arrayrulecolor{black}
+
+
+
+\subsection{Des lignes pointillées qui ne sont plus pointillées}
+
+
+L'option |line-style| permet de changer le style des lignes tracées par
+|\Ldots|, |\Cdots|, etc. On peut de ce fait tracer des lignes qui ne sont plus
+pointillées.
+
+\begin{Verbatim}
+\NiceMatrixOptions
+ {nullify-dots,code-for-first-col = \color{blue},code-for-first-col=\color{blue}}
+$\begin{pNiceMatrix}[first-row,first-col]
+ & & \Ldots[line-style={solid,<->},shorten=0pt]^{n \text{ colonnes}} \\
+ & 1 & 1 & 1 & \Ldots & 1 \\
+ & 1 & 1 & 1 & & 1 \\
+\Vdots[line-style={solid,<->}]_{n \text{ rangées}}
+ & 1 & 1 & 1 & & 1 \\
+ & 1 & 1 & 1 & & 1 \\
+ & 1 & 1 & 1 & \Ldots & 1
+\end{pNiceMatrix}$
+\end{Verbatim}
+
+
+\begin{scope}
+\NiceMatrixOptions
+ {nullify-dots,code-for-first-col = \color{blue},code-for-first-row=\color{blue}}
+\[\begin{pNiceMatrix}[first-row,first-col]
+ & & \Ldots[line-style={solid,<->},shorten=0pt]^{n \text{ colonnes}} \\
+ & 1 & 1 & 1 & \Ldots & 1 \\
+ & 1 & 1 & 1 & & 1 \\
+\Vdots[line-style={solid,<->}]_{n \text{ rangées}} & 1 & 1 & 1 & & 1 \\
+ & 1 & 1 & 1 & & 1 \\
+ & 1 & 1 & 1 & \Ldots & 1
+\end{pNiceMatrix}\]
+\end{scope}
+
\subsection{Largeur des colonnes}
\medskip
-Dans l'exemple suivant, nous utilisons |{NiceMatrixBlock}| avec l'option |auto-columns-width| parce que nous
-voulons la même largeur (automatique) pour toutes les colonnes.
+Dans l'exemple suivant, nous utilisons |{NiceMatrixBlock}| avec l'option
+|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}
+\NiceMatrixOptions
+ { last-col,code-for-last-col = \color{blue}\scriptstyle,light-syntax}
\setlength{\extrarowheight}{1mm}
-$\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&
+$\begin{pNiceArray}{cccc:c}
+ 1 1 1 1 1 { } ;
+ 2 4 8 16 9 ;
+ 3 9 27 81 36 ;
+ 4 16 64 256 100
+\end{pNiceArray}$
+\medskip
+$\begin{pNiceArray}{cccc:c}
+ 1 1 1 1 1 ;
+ 0 2 6 14 7 { L_2 \gets -2 L_1 + L_2 } ;
+ 0 6 24 78 33 { L_3 \gets -3 L_1 + L_3 } ;
+ 0 12 60 252 96 { L_4 \gets -4 L_1 + L_4 }
\end{pNiceArray}$
...
~emphase#\end{NiceMatrixBlock}@
@@ -2326,139 +4224,123 @@ $\begin{pNiceArray}{CCCC:C}[last-col]
\begin{multicols}{2}
\begin{NiceMatrixBlock}[auto-columns-width]
-\NiceMatrixOptions{code-for-last-col = \color{blue}\scriptstyle}
+\NiceMatrixOptions{last-col,code-for-last-col = \color{blue}\scriptstyle,light-syntax}
\setlength{\extrarowheight}{1mm}
-\enskip $\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&
+\enskip $\begin{pNiceArray}{cccc:c}
+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
+\enskip $\begin{pNiceArray}{cccc:c}
+1 1 1 1 1 ;
+0 2 6 14 7 { L_2 \gets -2 L_1 + L_2 } ;
+0 6 24 78 33 { L_3 \gets -3 L_1 + L_3 } ;
+0 12 60 252 96 { L_4 \gets -4 L_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
+\enskip $\begin{pNiceArray}{cccc:c}
+1 1 1 1 1 ;
+0 1 3 7 \frac72 { L_2 \gets \frac12 L_2 } ;
+0 3 12 39 \frac{33}2 { L_3 \gets \frac12 L_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
+\enskip $\begin{pNiceArray}{cccc:c}
+1 1 1 1 1 ;
+0 1 3 7 \frac72 ;
+0 0 3 18 6 { L_3 \gets -3 L_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&
+\enskip $\begin{pNiceArray}{cccc:c}
+1 1 1 1 1 ;
+0 1 3 7 \frac72 ;
+0 0 1 6 2 { L_3 \gets \frac13 L_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
+\enskip $\begin{pNiceArray}{cccc:c}
+1 1 1 1 1 ;
+0 1 3 7 \frac72 ;
+0 0 1 6 2 ;
+0 0 0 -2 -\frac12 { L_4 \gets L_3 + L_4 }
\end{pNiceArray}$
\end{NiceMatrixBlock}
\end{multicols}
-\subsection{Comment surligner les cases}
+\subsection{Comment surligner les cases d'une matrice}
\label{highlight}
\medskip
-Les exemples suivants nécessitent d'avoir chargé Tikz (\pkg{nicematrix} ne charge que \textsc{pgf}) ainsi que la
-bibliothèque Tikz |fit|, ce qui peut se faire avec les deux instructions suivantes dans le préambule du document :
+Pour mettre en évidence une case d'une matrice, il est possible de «dessiner»
+cette case avec la clé |draw| de la commande |\Block| (c'est l'un des usages des
+blocs mono-case\footnote{On rappelle que si le premier argument obligatoire de
+la commande |\Block| est laissé vide, le bloc est considéré comme mono-case.}).
-\begin{verbatim}
-\usepackage{tikz}
-\usetikzlibrary{fit}
-\end{verbatim}
-
-
-
-\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 «|name suffix|», il est facile d'utiliser les «nœuds larges»).
-
-Nous redessinons les nœuds avec de nouveaux nœuds en utilisant la bibliothèque \pkg{fit} de Tikz. Comme nous
-voulons recréer des nœuds identiques aux premiers, nous devons fixer |inner sep = 0pt| (si on ne fait
-pas cela, les nouveaux nœuds seront plus grands que les nœuds d'origine créés par \pkg{nicematrix}).
+\label{exemple-CodeAfter}
\begin{Verbatim}
-$\begin{pNiceArray}{>{\strut}CCCC}%
- [create-large-nodes,margin,extra-margin=2pt,
- code-after = {\begin{tikzpicture}
- [~emphase#name suffix = -large@,
- every node/.style = {draw,
- ~emphase#inner sep = 0pt@}]
- \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}
+$\begin{pNiceArray}{>{\strut}cccc}[margin,rules/color=blue]
+~emphase#\Block[draw]{}{a_{11}}@ & a_{12} & a_{13} & a_{14} \\
+a_{21} & \Block[draw]{}{a_{22}} & a_{23} & a_{24} \\
+a_{31} & a_{32} & \Block[draw]{}{a_{33}} & a_{34} \\
+a_{41} & a_{42} & a_{43} & \Block[draw]{}{a_{44}} \\
\end{pNiceArray}$
\end{Verbatim}
+%
+\[\begin{pNiceArray}{>{\strut}cccc}[margin,rules/color=blue]
+\Block[draw]{}{a_{11}} & a_{12} & a_{13} & a_{14} \\
+a_{21} & \Block[draw]{}{a_{22}} & a_{23} & a_{24} \\
+a_{31} & a_{32} & \Block[draw]{}{a_{33}} & a_{34} \\
+a_{41} & a_{42} & a_{43} & \Block[draw]{}{a_{44}} \\
+\end{pNiceArray}\]
-\[\begin{pNiceArray}{>{\strut}CCCC}[
- create-large-nodes,margin,extra-margin=2pt,
- code-after = {\begin{tikzpicture}[name suffix = -large,
- every node/.style = {draw,
- inner sep = 0pt}]
- \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}\]
-%
-On remarquera que les traits que l'on vient de tracer sont dessinés \emph{après} la matrice sans modifier la
-position des composantes de celle-ci. En revanche, les traits tracés par |\hline|, le spécificateur «\verb+|+» ou
-les options |hlines| et |vlines| «écartent» les composantes de la matrice (quand l'extension \pkg{array} est
-chargée, ce qui est toujours le cas avec \pkg{nicematrix}).\footnote{En revanche les traits tracés par |\ncline|
- n'écartent pas les lignes de la matrice.}
+On remarquera que les traits que l'on vient de tracer sont dessinés \emph{après}
+la matrice sans modifier la position des composantes de celle-ci. En revanche,
+les traits tracés par |\hline|, le spécificateur «\verb+|+» ou les options
+|hlines|, |vlines| et |hvlines| «écartent» les composantes de la
+matrice.\footnote{Pour la commande |\cline|, voir la remarque
+ p.~\pageref{remark-cline}.}
-\vspace{1cm}
+\vspace{1cm}
+Il est possible de colorier une rangée avec |\rowcolor| dans le |code-before|
+(ou avec |\rowcolor| dans la première case de la rangée si on utilise la clé
+|colortbl-like|). Les possibilités de réglages sont néanmoins limitées. C'est
+pourquoi nous présentons ici une autre méthode pour surligner une rangée d'une
+matrice.
+
+\medskip
+Cet exemple et les suivants nécessitent d'avoir chargé Tikz (\pkg{nicematrix} ne
+charge que \textsc{pgf}) ainsi que la bibliothèque Tikz |fit|, ce qui peut se
+faire avec les deux instructions suivantes dans le préambule du document :
+
+\begin{verbatim}
+\usepackage{tikz}
+\usetikzlibrary{fit}
+\end{verbatim}
-L'extension \pkg{nicematrix} est construite au-dessus de l'environnement |{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
-|blend mode| égal à |multiply|.
+\medskip
+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
+|blend mode| égal à |multiply|.
\tikzset{highlight/.style={rectangle,
@@ -2477,93 +4359,65 @@ matrice. Pour que l'on puisse voir le texte \emph{sous} le nœud, nous devons ut
inner sep=1pt,
fit=~#1}}
-$\begin{bNiceMatrix}[~emphase#code-after = {\tikz \node [highlight = (2-1) (2-3)] {} ;}@]
+$\begin{bNiceMatrix}
0 & \Cdots & 0 \\
1 & \Cdots & 1 \\
-0 & \Cdots & 0
+0 & \Cdots & 0 \\
+~emphase#\CodeAfter \tikz \node [highlight = (2-1) (2-3)] {} ;@
\end{bNiceMatrix}$
\end{Verbatim}
-\[\begin{bNiceMatrix}[code-after = {\tikz \node [highlight = (2-1) (2-3)] {} ;}]
+\[\begin{bNiceMatrix}
0 & \Cdots & 0 \\
1 & \Cdots & 1 \\
-0 & \Cdots & 0
+0 & \Cdots & 0 \\
+\CodeAfter \tikz \node [highlight = (2-1) (2-3)] {} ;
\end{bNiceMatrix}\]
-\bigskip
-Ce code échoue avec |latex|-|dvips|-|ps2pdf| parce que Tikz pour |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
-|\ExplSyntaxOn|
-
-|\makeatletter|
-
-|\tl_set:Nn \l_tmpa_tl {pgfsys-dvips.def}|
-
-|\tl_if_eq:NNT \l_tmpa_tl \pgfsysdriver|
-| {\cs_set:Npn\pgfsys@blend@mode#1{\special{ps:~/\tl_upper_case:n #1~.setblendmode}}}|
-
-|\makeatother|
-
-|\ExplSyntaxOff|
-\end{scope}
-
-\vspace{1cm}
-On rappelle que dans le cas d'un ensemble de cases fusionnées (avec la commande |\Block|), un nœud Tikz est créé
-pour l'ensemble des cases avec pour nom $i$|-|$j$|-block| où $i$ et $j$ sont les numéros de ligne et de colonne de
-la case en haut à gauche (où a été utilisée la commande |\Block|). Si on a demandé la création des nœuds |medium|,
-alors un nœud de ce type est aussi créé pour ce bloc avec un nom suffixé par |-medium|.
+\vspace{1cm} On rappelle que dans le cas d'un ensemble de cases fusionnées (avec
+la commande |\Block|), un nœud Tikz est créé pour l'ensemble des cases avec pour
+nom $i$|-|$j$|-block| où $i$ et $j$ sont les numéros de ligne et de colonne de
+la case en haut à gauche (où a été utilisée la commande |\Block|). Si on a
+demandé la création des nœuds |medium|, alors un nœud de ce type est aussi créé
+pour ce bloc avec un nom suffixé par |-medium|.
\medskip
\begin{BVerbatim}[baseline=c,boxwidth=11.6cm]
-$\begin{pNiceMatrix}%
- [
- margin,
- create-medium-nodes,
- code-after =
- { \tikz \node [~emphase#highlight = (1-1-block-medium)@] {} ; }
- ]
-\Block{3-3}<\Large>{A} & & & 0 \\
-& \hspace*{1cm} & & \Vdots \\
-& & & 0 \\
-0 & \Cdots& 0 & 0
+$\begin{pNiceMatrix}[margin,create-medium-nodes]
+ \Block{3-3}<\Large>{A} & & & 0 \\
+ & \hspace*{1cm} & & \Vdots \\
+ & & & 0 \\
+ 0 & \Cdots& 0 & 0
+\CodeAfter
+ \tikz \node [~emphase#highlight = (1-1-block-medium)@] {} ;
\end{pNiceMatrix}$
\end{BVerbatim}
-$\begin{pNiceMatrix}%
- [
- margin,
- create-medium-nodes,
- code-after =
- { \tikz \node [highlight = (1-1-block-medium)] {} ; }
- ]
+$\begin{pNiceMatrix}[margin,create-medium-nodes]
\Block{3-3}<\Large>{A} & & & 0 \\
& \hspace*{1cm} & & \Vdots \\
& & & 0 \\
0 & \Cdots& 0 & 0
+\CodeAfter
+\tikz \node [highlight = (1-1-block-medium)] {} ;
\end{pNiceMatrix}$
-
-
\vspace{1cm}
On considère maintenant la matrice suivante que l'on a appelée |exemple|.
\medskip
\begin{Verbatim}
-$\begin{pNiceArray}{CCC}[~emphase#name=exemple@,last-col,create-medium-nodes]
+$\begin{pNiceArray}{ccc}[~emphase#name=exemple@,last-col,create-medium-nodes]
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]
+\[\begin{pNiceArray}{ccc}[last-col]
a & a + b & a + b + c & L_1 \\
a & a & a + b & L_2 \\
a & a & a & L_3
@@ -2603,7 +4457,7 @@ Si on veut surligner chaque rangée de la matrice, on peut utiliser la technique
\medskip
On obtient la matrice suivante.
-\[\begin{pNiceArray}{CCC}[
+\[\begin{pNiceArray}{ccc}[
last-col,
code-after = {\begin{tikzpicture}[highlight/.style = {fill = red!15,
blend mode = multiply,
@@ -2619,7 +4473,8 @@ 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».
+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@]
@@ -2632,62 +4487,59 @@ Le résultat peut paraître décevant. On peut l'améliorer en utilisant les «n
\medskip
On obtient la matrice suivante.
-\[\begin{pNiceArray}{CCC}[
- last-col,
- create-medium-nodes,
- code-after = {\begin{tikzpicture}[highlight/.style = {fill = red!15,
- blend mode = multiply,
- inner sep = 0pt,
- fit = #1},
- name suffix = -medium]
- \node [highlight = (1-1) (1-3)] {} ;
- \node [highlight = (2-1) (2-3)] {} ;
- \node [highlight = (3-1) (3-3)] {} ;
- \end{tikzpicture}}]
+\[\begin{pNiceArray}{ccc}[last-col,create-medium-nodes]
a & a + b & a + b + c & L_1 \\
a & a & a + b & L_2 \\
-a & a & a & L_3
+a & a & a & L_3 \\
+\CodeAfter
+\begin{tikzpicture}[highlight/.style = {fill = red!15,
+ blend mode = multiply,
+ inner sep = 0pt,
+ fit = #1},
+ name suffix = -medium]
+\node [highlight = (1-1) (1-3)] {} ;
+\node [highlight = (2-1) (2-3)] {} ;
+\node [highlight = (3-1) (3-3)] {} ;
+\end{tikzpicture}
\end{pNiceArray}\]
\vspace{1cm}
-Dans l'exemple suivant, on utilise les «nœuds larges» pour surligner une zone de la matrice.\par\nobreak
+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-large-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)
+\begin{pNiceArray}{>{\strut}cccc}[create-large-nodes,margin,extra-margin=2pt]
+ 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}
+\CodeAfter
+ \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) ;
+\end{pNiceArray}
\end{Verbatim}
-\[\left(\,\begin{NiceArray}{>{\strut}CCCC}[
- create-large-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)\]
+
+\[\begin{pNiceArray}{>{\strut}cccc}[create-large-nodes,margin,extra-margin=2pt]
+ 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}
+\CodeAfter
+ \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) ;
+\end{pNiceArray}\]
\subsection{Utilisation directe des nœuds Tikz}
@@ -2695,8 +4547,9 @@ A_{41} & A_{42} & A_{43} & A_{44}
Dans l'exemple suivant, on souhaite illustrer le produit mathématique de deux matrices.
\medskip
-L'utilisation de |{NiceMatrixBlock}| avec l'option |auto-columns-width| va permettre que toutes les colonnes aient
-la même largeur ce qui permettra un alignement des deux matrices superposées.
+L'utilisation de |{NiceMatrixBlock}| avec l'option |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}
@@ -2713,7 +4566,7 @@ $\begin{array}{cc}
La matrice $B$ a une «première rangée» (pour $C_j$) d'où l'option |first-row|.
\begin{Verbatim}
-\begin{bNiceArray}{C>{\strut}CCCC}[name=B,first-row]
+\begin{bNiceArray}{c>{\strut}cccc}[name=B,first-row]
& & ~emphase#C_j@ \\
b_{11} & \Cdots & b_{1j} & \Cdots & b_{1n} \\
\Vdots & & \Vdots & & \Vdots \\
@@ -2725,19 +4578,19 @@ b_{11} & \Cdots & b_{1j} & \Cdots & b_{1n} \\
La matrice $A$ a une «première colonne» (pour $L_i$) d'où l'option |first-col|.
\begin{Verbatim}
-\begin{bNiceArray}{CC>{\strut}CCC}[name=A,first-col]
+\begin{bNiceArray}{cc>{\strut}ccc}[name=A,first-col]
& a_{11} & \Cdots & & & a_{1n} \\
& \Vdots & & & & \Vdots \\
~emphase#L_i@ & a_{i1} & \Cdots & a_{ik} & \Cdots & a_{in} \\
& \Vdots & & & & \Vdots \\
- & a_{n1} & \Cdots & & & a_{nn} \\
+ & 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}
+\begin{bNiceArray}{cc>{\strut}ccc}
& & & & \\
& & \Vdots \\
\Cdots & & c_{ij} \\
@@ -2758,11 +4611,12 @@ Dans la matrice produit, on remarquera que les lignes en pointillés sont «semi
\end{Verbatim}
+
\begin{NiceMatrixBlock}[auto-columns-width]
\NiceMatrixOptions{nullify-dots}
$\begin{array}{cc}
&
-\begin{bNiceArray}{C>{\strut}CCCC}[name=B,first-row]
+\begin{bNiceArray}{c>{\strut}cccc}[name=B,first-row]
& & C_j \\
b_{11} & \Cdots & b_{1j} & \Cdots & b_{1n} \\
\Vdots & & \Vdots & & \Vdots \\
@@ -2770,7 +4624,7 @@ b_{11} & \Cdots & b_{1j} & \Cdots & b_{1n} \\
& & \Vdots \\
b_{n1} & \Cdots & b_{nj} & \Cdots & b_{nn}
\end{bNiceArray} \\ \\
-\begin{bNiceArray}{CC>{\strut}CCC}[name=A,first-col]
+\begin{bNiceArray}{cc>{\strut}ccc}[name=A,first-col]
& a_{11} & \Cdots & & & a_{1n} \\
& \Vdots & & & & \Vdots \\
L_i & a_{i1} & \Cdots & a_{ik} & \Cdots & a_{in} \\
@@ -2778,7 +4632,7 @@ L_i & a_{i1} & \Cdots & a_{ik} & \Cdots & a_{in} \\
& a_{n1} & \Cdots & & & a_{nn} \\
\end{bNiceArray}
&
-\begin{bNiceArray}{CC>{\strut}CCC}
+\begin{bNiceArray}{cc>{\strut}ccc}
& & & & \\
& & \Vdots \\
\Cdots & & c_{ij} \\
@@ -2795,11 +4649,33 @@ L_i & a_{i1} & \Cdots & a_{ik} & \Cdots & a_{in} \\
\draw [color = gray] (A-3-3) to [bend left] (B-3-3) ;
\end{tikzpicture}
+
+
\section*{Autre documentation}
-Le document |nicematrix.pdf| (fourni avec l'extension \pkg{nicematrix}) contient une traduction anglaise de la
-documentation ici présente, ainsi que le code source commenté et un historique des versions.
+Le document |nicematrix.pdf| (fourni avec l'extension \pkg{nicematrix}) contient
+une traduction anglaise de la documentation ici présente, ainsi que le code
+source commenté et un historique des versions.
+\bigskip
+Les versions successives du fichier |nicematrix.sty| fournies par
+TeXLive sont disponibles sur le serveur \textsc{svn} de TeXLive :
+
+{
+\small
+\url{https:www.tug.org/svn/texlive/trunk/Master/texmf-dist/tex/latex/nicematrix/nicematrix.sty}
+}
\end{document}
+% Local Variables:
+% TeX-fold-mode: t
+% TeX-fold-preserve-comments: nil
+% flyspell-mode: true
+% fill-column: 80
+% End:
+
+
+
+
+