texlive[60864] Master/texmf-dist: nicematrix

commits+karl at tug.org commits+karl at tug.org
Sun Oct 24 23:05:28 CEST 2021


Revision: 60864
          http://tug.org/svn/texlive?view=revision&revision=60864
Author:   karl
Date:     2021-10-24 23:05:28 +0200 (Sun, 24 Oct 2021)
Log Message:
-----------
nicematrix

Modified Paths:
--------------
    trunk/Master/texmf-dist/doc/latex/nicematrix/nicematrix-french.pdf
    trunk/Master/texmf-dist/doc/latex/nicematrix/nicematrix-french.tex
    trunk/Master/texmf-dist/doc/latex/nicematrix/nicematrix.pdf
    trunk/Master/texmf-dist/source/latex/nicematrix/nicematrix.dtx
    trunk/Master/texmf-dist/tex/latex/nicematrix/nicematrix.sty

Modified: trunk/Master/texmf-dist/doc/latex/nicematrix/nicematrix-french.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/nicematrix/nicematrix-french.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/nicematrix/nicematrix-french.tex	2021-10-24 21:02:12 UTC (rev 60863)
+++ trunk/Master/texmf-dist/doc/latex/nicematrix/nicematrix-french.tex	2021-10-24 21:05:28 UTC (rev 60864)
@@ -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}
@@ -31,23 +31,24 @@
 
 \def\LetterAt{@}
 
-\def\interitem{\vspace{7mm plus 2 mm minus 3mm}}          
+\def\interitem{\vspace{7mm plus 2 mm minus 3mm}}
 \def\emphase{\bgroup\color{RoyalPurple}\let\next=}
 
 \usepackage{footnote}
 \usepackage{booktabs}
 \usepackage{varwidth}
+\usepackage[auto-lang=false]{lipsum}
 \usepackage[hyperfootnotes = false]{hyperref}
 
 \hypersetup
   {
-    pdfinfo = 
+    pdfinfo =
       {
         Title = L’extension nicematrix ,
         Subject = Une extension LaTeX ,
-        Author = F. Pantigny 
+        Author = F. Pantigny
       }
-  } 
+  }
 
 
 \NewDocumentEnvironment {scope} {} {} {}
@@ -64,7 +65,7 @@
 
 \title{L'extension \pkg{nicematrix}
        \thanks{Ce document correspond à la version~\myfileversion\space de \pkg{nicematrix},
-               en date du~\myfiledate.}} 
+               en date du~\myfiledate.}}
 \author{F. Pantigny \\ \texttt{fpantigny at wanadoo.fr}}
 
 
@@ -88,7 +89,7 @@
 L_1    & a_{11}  & a_{12}  & \Cdots  & a_{1n} \\
 L_2    & a_{21}  & a_{22}  & \Cdots  & a_{2n} \\
 \Vdots & \Vdots & \Vdots  & \Ddots  & \Vdots \\
-L_n    & a_{n1}  & a_{n2}  & \Cdots  & a_{nn} 
+L_n    & a_{n1}  & a_{n2}  & \Cdots  & a_{nn}
 \end{bNiceArray}$
 \hspace{2cm}
 \begin{NiceTabular}[c]{lSSSS}%
@@ -95,7 +96,7 @@
 [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} 
+\cmidrule(rl){2-4}
  & L & l & h \\
 \midrule
 petit    & 3   & 5.5  & 1   & 30    \\
@@ -114,7 +115,7 @@
 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, TeXlive ou MacTeX.
 
-\bigskip
+\medskip
 \emph{Remarque} : Si vous utilisez un service LaTeX via Internet (ex. :
 Overleaf) vous pouvez télécharger le fichier |nicematrix.sty| dans le dossier de
 votre projet pour bénéficier de la dernière version de
@@ -122,13 +123,13 @@
   être téléchargée sur le serveur \textsc{svn} de TeXLive : \newline \small
   \url{https:www.tug.org/svn/texlive/trunk/Master/texmf-dist/tex/latex/nicematrix/nicematrix.sty}}
 
-\bigskip
+\medskip
 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
+\medskip
 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}
@@ -135,8 +136,12 @@
 chargée). L'utilisateur final n'a qu'à charger l'extension \pkg{nicematrix} avec
 l'instruction habituelle : |\usepackage{nicematrix}|.
 
+\medskip
+Si vous utilisez une distribution TeXLive, sachez que TeXLive 2020 au minimum
+est requis pour faire fonctionner \pkg{nicematrix}.
 
-\bigskip
+
+\medskip
 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
@@ -145,11 +150,11 @@
   automatiquement le nombre de
   compilations nécessaire.}
 
-\bigskip
+\medskip
 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
+\medskip
 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 : elles sont semi-globales).
 
@@ -156,7 +161,7 @@
 
 \newpage
 
-\section{Les environnements de cette extension} 
+\section{Les environnements de cette extension}
 
 L'extension \pkg{nicematrix} définit les nouveaux environnements suivants :
 
@@ -169,7 +174,7 @@
 \{NiceTabularX\} & \{bNiceArray\} & \{bNiceMatrix\}  \\
                  & \{BNiceArray\} & \{BNiceMatrix\}  \\
                  & \{vNiceArray\} & \{vNiceMatrix\}  \\
-                 & \{VNiceArray\} & \{VNiceMatrix\}  
+                 & \{VNiceArray\} & \{VNiceMatrix\}
 \end{tabular}
 \end{ttfamily}
 
@@ -230,14 +235,14 @@
 \frac13 & \frac14 \\
 \end{pmatrix}$
 
-\bigskip
+\medskip
 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}. 
+|\cellspacetoplimit| et |\cellspacebottomlimit| proposés par \pkg{cellspace}.
 
 Il existe aussi une clé |cell-space-limits| pour régler simultanément les deux
-paramètres. 
+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}
@@ -267,7 +272,7 @@
 \end{scope}
 
 
-\bigskip
+\medskip
 \section{La clé baseline}
 
 L'extension \pkg{nicematrix} propose une option |baseline| pour la position
@@ -296,7 +301,7 @@
 \pkg{array}. La valeur initiale de |baseline| est~|c|.
 
 
-\bigskip
+\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
@@ -312,7 +317,7 @@
 $\begin{NiceArray}[t]{lcccccc}
 \hline
 n   & 0 & 1 & 2 & 3 & 4  & 5 \\
-u_n & 1 & 2 & 4 & 8 & 16 & 32 
+u_n & 1 & 2 & 4 & 8 & 16 & 32
 \hline
 \end{NiceArray}$
 \end{enumerate}
@@ -333,7 +338,7 @@
 \end{minipage}
 
 
-\bigskip
+\medskip
 Il est également possible d'utiliser les outils de \pkg{booktabs}: |\toprule|,
 |\bottomrule|, |\midrule|, etc.\par\nobreak
 
@@ -342,12 +347,12 @@
 \begin{enumerate}
 \item an item
 \smallskip
-\item 
+\item
 $\begin{NiceArray}[t]{lcccccc}
 ~emphase#\toprule@
 n   & 0 & 1 & 2 & 3 & 4  & 5 \\
 ~emphase#\midrule@
-u_n & 1 & 2 & 4 & 8 & 16 & 32 
+u_n & 1 & 2 & 4 & 8 & 16 & 32
 ~emphase#\bottomrule@
 \end{NiceArray}$
 \end{enumerate}
@@ -356,7 +361,7 @@
 \begin{enumerate}
 \item an item
 \smallskip
-\item 
+\item
 $\begin{NiceArray}[t]{lcccccc}
 \toprule
 n   & 0 & 1 & 2 & 3 & 4  & 5  \\
@@ -368,7 +373,7 @@
 \end{minipage}
 
 
-\bigskip
+\medskip
 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 \emph{suit} ce filet
@@ -424,36 +429,34 @@
 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.
+\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}|,
+|{NiceTabular*}| et |{NiceTabularX}|, 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]
+$\begin{bNiceArray}{cw{c}{1cm}c|c}[margin]
 ~emphase#\Block{3-3}{A}@ & & & 0 \\
-& \hspace*{1cm} & & \Vdots \\
+& & & \Vdots \\
 & & & 0 \\
 \hline
 0 & \Cdots& 0 & 0
 \end{bNiceArray}$
 \end{BVerbatim}
-$\begin{bNiceArray}{ccc|c}[margin]
+$\begin{bNiceArray}{cw{c}{1cm}c|c}[margin]
 \Block{3-3}{A} & & & 0 \\
-& \hspace*{1cm} & & \Vdots \\
+& & & \Vdots \\
 & & & 0 \\
 \hline
 0 & \Cdots& 0 & 0
 \end{bNiceArray}$
 
-\bigskip
+\medskip
 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
@@ -461,21 +464,21 @@
 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.} 
+  contenu du bloc.}
 
 \medskip
 \begin{BVerbatim}[baseline=c,boxwidth=10.6cm]
-$\begin{bNiceArray}{ccc|c}[margin]
+$\begin{bNiceArray}{cw{c}{1cm}c|c}[margin]
 \Block{3-3}~emphase#<\LARGE>@{A} & & & 0 \\
-& \hspace*{1cm} & & \Vdots \\
+& & & \Vdots \\
 & & & 0 \\
 \hline
 0 & \Cdots& 0 & 0
 \end{bNiceArray}$
 \end{BVerbatim}
-$\begin{bNiceArray}{ccc|c}[margin]
+$\begin{bNiceArray}{cw{c}{1cm}c|c}[margin]
 \Block{3-3}<\LARGE>{A} & & & 0 \\
-& \hspace*{1cm} & & \Vdots \\
+& & & \Vdots \\
 & & & 0 \\
 \hline
 0 & \Cdots& 0 & 0
@@ -482,23 +485,23 @@
 \end{bNiceArray}$
 
 
-\bigskip
+\medskip
 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]
+$\begin{bNiceArray}{cw{c}{1cm}c|c}[margin]
 \Block~emphase#[r]@{3-3}<\LARGE>{A} & & & 0 \\
-& \hspace*{1cm} & & \Vdots \\
+& & & \Vdots \\
 & & & 0 \\
 \hline
 0 & \Cdots& 0 & 0
 \end{bNiceArray}$
 \end{BVerbatim}
-$\begin{bNiceArray}{ccc|c}[margin]
+$\begin{bNiceArray}{cw{c}{1cm}c|c}[margin]
 \Block[r]{3-3}<\LARGE>{A} & & & 0 \\
-& \hspace*{1cm} & & \Vdots \\
+& & & \Vdots \\
 & & & 0 \\
 \hline
 0 & \Cdots& 0 & 0
@@ -506,7 +509,7 @@
 
 
 
-\interitem 
+\interitem
 La commande |\Block| accepte en fait en premier argument optionnel (entre
 crochets) une liste de couples \textsl{clé=valeur}. Les clés sont les suivantes :
 \begin{itemize}
@@ -532,13 +535,15 @@
 celui-ci est constitué de plusieurs lignes (séparées par la commande |\\|) ;
 \item la clé |hvlines| trace tous les filets horizontaux et verticaux dans le
 bloc ;
-\item \colorbox{yellow!50}{\textbf{Nouveau 5.19}}\enskip quand la clé |tikz| est
-utilisée, le chemin Tikz correspondant au rectangle délimitant le bloc est
-exécuté avec Tikz\footnote{Tikz doit être chargé préalablement (par défaut,
-  \pkg{nicematrix} ne charge que \textsc{pgf}), faute de quoi, une erreur sera
-  levée.} en utilisant comme options la valeur de cette clé |tikz| (qui doit
-donc être une liste de clés Tikz applicables à un chemin de Tikz). Pour des
-exemple d'utilisation de cette clé |tikz|, voir p.~\pageref{tikz-key-examples}.
+\item quand la clé |tikz| est utilisée, le chemin Tikz correspondant au
+rectangle délimitant le bloc est exécuté avec Tikz\footnote{Tikz doit être
+  chargé préalablement (par défaut, \pkg{nicematrix} ne charge que
+  \textsc{pgf}), faute de quoi, une erreur sera levée.} en utilisant comme
+options la valeur de cette clé |tikz| (qui doit donc être une liste de clés Tikz
+applicables à un chemin de Tikz). Pour des exemple d'utilisation de cette clé
+|tikz|, voir p.~\pageref{tikz-key-examples} ;
+\item \colorbox{yellow!50}{\textbf{Nouveau 6.3}}\enskip la clé |name| donne un
+nom au nœud Tikz rectangulaire correspondant au bloc.
 \end{itemize}
 
 
@@ -556,12 +561,12 @@
 \begin{BVerbatim}
 \begin{NiceTabular}{cwc{2cm}wc{3cm}c}
 rose      & tulipe & marguerite & dahlia \\
-violette  
+violette
 & ~emphase#\Block[draw=red,fill=[RGB]{204,204,255},rounded-corners]{2-2}@
-                     ~emphase#{\LARGE De très jolies fleurs}@  
+                     ~emphase#{\LARGE De très jolies fleurs}@
    & & souci \\
 pervenche & & & lys \\
-arum      & iris & jacinthe & muguet 
+arum      & iris & jacinthe & muguet
 \end{NiceTabular}
 \end{BVerbatim}
 
@@ -573,7 +578,7 @@
 violette  & \Block[draw=red,fill=[RGB]{204,204,255},rounded-corners]{2-2}
   {\LARGE De très jolies fleurs} & & souci \\
 pervenche & & & lys \\
-arum      & iris & jacinthe & muguet 
+arum      & iris & jacinthe & muguet
 \end{NiceTabular}
 \end{center}
 
@@ -580,7 +585,7 @@
 
 \subsection{Les blocs mono-colonne}
 
-Les blocs mono-colonne ont un comportement spécial. 
+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.
@@ -662,7 +667,7 @@
   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}.}
 
-\item On peut tracer ou plusieurs bordures de la case avec la clé |borders|.
+\item On peut tracer une ou plusieurs bordures de la case avec la clé |borders|.
 \end{itemize}
 
 \medskip
@@ -669,7 +674,7 @@
 \begin{BVerbatim}[baseline=c,boxwidth=10cm]
 \begin{NiceTabular}{cc}
 \toprule
-Écrivain 
+Écrivain
 & ~emphase#\Block[l]{}{année de\\ naissance}@ \\
 \midrule
 Hugo & 1802 \\
@@ -680,7 +685,7 @@
 %
 \begin{NiceTabular}{cc}
 \toprule
-Écrivain 
+Écrivain
 & \Block[l]{}{année de\\ naissance} \\
 \midrule
 Hugo & 1802 \\
@@ -702,7 +707,7 @@
 le \emph{contenu} des colonnes impliquées. De ce fait, dans l'exemple suivant,
 l'en-tête «Premier groupe» est correctement centré 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|). 
+préambule (ce n'est pas le cas avec |\multicolumn|).
 
 \medskip
 \begin{center}
@@ -722,7 +727,7 @@
 \end{BVerbatim}
 \end{center}
 
-\bigskip
+\medskip
 \begin{center}
 \begin{NiceTabular}{@{}c!{\qquad}ccc!{\qquad}ccc@{}}
 \toprule
@@ -750,7 +755,7 @@
 classiques.
 
 
-\bigskip
+\medskip
 \subsection{Quelques différences avec les environnements classiques}
 
 \subsubsection{Les filets verticaux}
@@ -760,7 +765,7 @@
 de ligne incomplète ou de double filet horizontal spécifié par |\hline\hline|
 (il n'y a pas besoin d'utiliser \pkg{hhline}).
 
-\bigskip
+\medskip
 \begin{BVerbatim}[baseline=c,boxwidth=10cm]
 \begin{NiceTabular}{|c|c|} \hline
 Premier & Deuxième \\ ~emphase#\hline\hline@
@@ -776,13 +781,13 @@
 \end{NiceTabular}
 
 
-\bigskip
+\medskip
 En revanche, les filets verticaux ne sont pas tracés à l'intérieur des blocs
 (créés par |\Block|: cf.~p.~\pageref{Block}) ni dans les coins (dont la création
 est demandée par la clé |corners|: cf.~p.~\pageref{corners}).
 
 
-\bigskip
+\medskip
 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
@@ -806,7 +811,7 @@
 \bottomrule
 \end{NiceArray}$
 
-\bigskip
+\medskip
 Il reste néanmoins possible de définir un spécificateur, nommé par exemple
 |I|, pour tracer des filets verticaux avec le comportement standard de
 \pkg{array} :
@@ -882,7 +887,7 @@
 \end{scope}
 
 \medskip
-\colorbox{yellow!50}{\textbf{Nouveau 6.2}}\enskip 
+\colorbox{yellow!50}{\textbf{Nouveau 6.2}}\enskip
 
 Dans les environnements de
 \pkg{nicematrix}, une instruction |\cline{|\textsl{\texttt{i}}|}| est
@@ -936,7 +941,7 @@
 
 
 
-\bigskip
+\medskip
 \subsection{Les outils de nicematrix pour tracer des filets}
 
 Les outils proposés par \pkg{nicematrix} pour tracer des filets sont les
@@ -948,7 +953,7 @@
 \item la commande |\Hline|.
 \end{itemize}
 
-\bigskip
+\medskip
 \textbf{Ces outils ont en commun de ne pas tracer les filets dans les blocs ni
   dans les coins vides (quand la clé |corners| est utilisée).}
 \begin{itemize}
@@ -962,23 +967,24 @@
 par |\Cdots|, |\Vdots|, etc. : cf.~p.~\pageref{Cdots}.
 \end{itemize}
 \item Les coins sont créés par la clé |corners| détaillée un peu plus loin : cf.
-p.~\pageref{corners}. 
+p.~\pageref{corners}.
 \end{itemize}
 
 En particulier, cette remarque explique la différence entre la commande standard
 |\hline| et la commande |\Hline| proposée par \pkg{nicematrix}.
 
-\bigskip
+\medskip
 \subsubsection{Les clés hlines et vlines}
 
 \medskip
 Les clés |hlines| et |vlines| (qui, bien sûr, tracent des filets horizontaux et
 verticaux) prennent comme valeur une liste de numéros qui sont les numéros des
-filets à tracer. Si aucune valeur n'est donnée, tous les filets sont tracés.
+filets\footnote{Il est également possible de mettre dans la liste des
+  intervalles de numéros de la forme $i$|-|$j$.} à tracer. Si aucune valeur n'est donnée, tous les filets sont tracés.
 
 En fait, pour les environnements avec délimiteurs (comme |{pNiceMatrix}| ou
 |{bNiceArray}|), la clé |vlines| ne trace pas les filets extérieurs (ce qui est
-le comportement certainement attendu). 
+le comportement certainement attendu).
 
 \medskip
 \begin{BVerbatim}[baseline=c,boxwidth=10.6cm]
@@ -985,13 +991,13 @@
 $\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 
+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 
+1 & 2 & 3 & 4 & 5 & 6
 \end{pNiceMatrix}$
 
 
@@ -1008,7 +1014,7 @@
 rose      & tulipe & marguerite & dahlia \\
 violette  & \Block[draw=red]{2-2}{\LARGE fleurs}  & & souci \\
 pervenche & & & lys \\
-arum      & iris & jacinthe & muguet 
+arum      & iris & jacinthe & muguet
 \end{NiceTabular}
 \end{Verbatim}
 %
@@ -1017,21 +1023,21 @@
 rose      & tulipe & marguerite & dahlia \\
 violette  & \Block[draw=red]{2-2}{\LARGE fleurs}  & & souci \\
 pervenche & & & lys \\
-arum      & iris & jacinthe & muguet 
+arum      & iris & jacinthe & muguet
 \end{NiceTabular}
 \end{center}
 
 
-\bigskip
+\medskip
 La clé |hvlines-except-borders| est similaire à la clé |hvlines| mais ne trace
 pas les filets sur les bords horizontaux et verticaux du tableau.
 
-\bigskip
+\medskip
 \subsubsection{Les coins (vides)}
 \label{corners}
 
 Les quatre coins d'un tableau seront notés |NW|, |SW|, |NE| et |SE| (\emph{north west}, \emph{south west}, \emph{north
-  east} et \emph{south east} en anglais). 
+  east} et \emph{south east} en anglais).
 
 \smallskip
 Pour chacun de ces coins, on appellera \emph{coin vide} (ou tout simplement
@@ -1045,7 +1051,7 @@
 On peut néanmoins imposer à une case sans contenu d'être considérée
 comme non vide par \pkg{nicematrix} avec la commande |\NotEmpty|.
 
-\bigskip
+\medskip
 \begin{minipage}{9cm}
 Dans l'exemple ci-contre (où B est au centre d'un bloc de taille $2\times 2$),
 on a colorié en bleu clair les quatre coins (vides) du tableau.
@@ -1070,7 +1076,7 @@
 \end{NiceTabular}
 
 
-\bigskip
+\medskip
 Quand la clé |corners| est utilisée, \pkg{nicematrix} calcule les coins vides et
 ces coins sont alors pris en compte par les outils de tracés de filets (les
 filets ne seront pas tracés dans ces coins vides). \emph{Remarque} : Dans les
@@ -1077,7 +1083,7 @@
 versions précédentes de \pkg{nicematrix}, il n'y avait qu'une clé
 |hvlines-except-corners| (maintenant considérée comme obsolète).
 
-\bigskip
+\medskip
 \begin{BVerbatim}[boxwidth=11cm,baseline=c]
 \NiceMatrixOptions{cell-space-top-limit=3pt}
 \begin{NiceTabular}{*{6}{c}}[~emphase#corners@,hvlines]
@@ -1132,7 +1138,7 @@
 \end{NiceTabular}
 
 
-\bigskip
+\medskip
 $\triangleright$ Les coins sont également pris en compte par les outils de
 coloriage dans le |\CodeBefore|. Ces outils ne colorient pas les cases qui sont
 dans les coins (cf.~p.~\pageref{color-in-code-before}).
@@ -1152,7 +1158,7 @@
 e & e & a & b & c \\
 a & a & e & c & b \\
 b & b & c & e & a \\
-c & c & b & a & e 
+c & c & b & a & e
 \end{NiceArray}$
 \end{BVerbatim}
 $\begin{NiceArray}{*{5}{c}}[hvlines]
@@ -1160,7 +1166,7 @@
 e & e & a & b & c \\
 a & a & e & c & b \\
 b & b & c & e & a \\
-c & c & b & a & e 
+c & c & b & a & e
 \end{NiceArray}$
 
 \medskip
@@ -1182,7 +1188,7 @@
 1 & 2 & 3 & 4 & 5 \\
 ~emphase#\hdottedline@
 6 & 7 & 8 & 9 & 10 \\
-11 & 12 & 13 & 14 & 15 
+11 & 12 & 13 & 14 & 15
 \end{pNiceMatrix}
 \end{BVerbatim}
 $\begin{pNiceMatrix}
@@ -1189,11 +1195,11 @@
 1 & 2 & 3 & 4 & 5 \\
 \hdottedline
 6 & 7 & 8 & 9 & 10 \\
-11 & 12 & 13 & 14 & 15 
+11 & 12 & 13 & 14 & 15
 \end{pNiceMatrix}$
 
 
-\bigskip
+\medskip
 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 «|:|».
@@ -1203,25 +1209,25 @@
 \begin{pNiceArray}{cccc~emphase#:@c}
 1 & 2 & 3 & 4 & 5 \\
 6 & 7 & 8 & 9 & 10 \\
-11 & 12 & 13 & 14 & 15 
+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 
+11 & 12 & 13 & 14 & 15
 \end{pNiceArray}$
 
-\bigskip
+\medskip
 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 
+|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}\footnote{On remarquera néanmoins que l'extension
   \pkg{arydshln} n'est pas parfaitement compatible avec l'extension \pkg{nicematrix}.}).
 
 
-\bigskip
+\medskip
 \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
@@ -1274,7 +1280,7 @@
 \end{itemize}
 
 L'extension \pkg{nicematrix} propose des outils qui permettent d'éviter ces
-inconvénients. 
+inconvénients.
 \end{itemize}
 
 \subsection{Les outils de nicematrix dans le \textbackslash CodeBefore}
@@ -1292,7 +1298,7 @@
 
 \medskip
 L'extension \pkg{nicematrix} fournit une clé |code-before| pour du code qui sera
-exécuté avant le tracé du tableau. 
+exécuté avant le tracé du tableau.
 
 \smallskip
 Une syntaxe alternative est proposée : on peut placer le contenu de ce
@@ -1302,9 +1308,9 @@
 \begin{Verbatim}
 \begin{pNiceArray}{~textsl#preamble@}
 ~emphase#\CodeBefore@
-~textsl#instructions du code-before@
+  ~textsl#instructions du code-before@
 ~emphase#\Body@
-~textsl#contenu de l'environnement@
+  ~textsl#contenu de l'environnement@
 \end{pNiceArray}
 \end{Verbatim}
 
@@ -1313,7 +1319,7 @@
 |\cellcolor|, |\rectanglecolor|, |\rowcolor|, |\columncolor|, |\rowcolors|,
 |\rowlistcolors|, |\chessboardcolors| et |\arraycolor|.\footnote{On pourra remarquer que, dans le
   |\CodeBefore|, des nœuds PGF/Tikz de la forme \verb+(i-|j)+ correspondant
-  à la position des filets éventuels sont également accessibles : cf. p.~\pageref{noeuds-i}.}
+  à la position des filets éventuels sont également accessibles : cf. p.~\pageref{nodes-i}.}
 \label{code-before}
 
 \medskip
@@ -1361,7 +1367,7 @@
 \end{scope}
 
 
-\bigskip
+\medskip
 \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.
@@ -1392,13 +1398,13 @@
 \end{scope}
 
 
-\bigskip
+\medskip
 \item La commande |\arraycolor| prend en argument obligatoire une couleur et
 colorie tout le tableau (sauf les éventuelles rangées et colonnes extérieures:
 cf.~p.~\pageref{exterior}) avec cette couleur. Ce n'est qu'un cas particulier de
 la commande |\rectanglecolor|.
 
-\bigskip
+\medskip
 \item \label{chessboardcolors}%
 La commande |\chessboardcolors| prend en arguments obligatoires deux
 couleurs et colorie les cases en quinconces avec les deux couleurs.
@@ -1407,13 +1413,13 @@
 \begin{scope}
 \hfuzz=10cm
 \begin{BVerbatim}[baseline=c,boxwidth=9cm]
-$\begin{pNiceMatrix}[r,margin] 
+$\begin{pNiceMatrix}[r,margin]
 \CodeBefore
   ~emphase#\chessboardcolors{red!15}{blue!15}@
 \Body
 1 & -1 & 1 \\
 -1 & 1 & -1 \\
-1 & -1 & 1 
+1 & -1 & 1
 \end{pNiceMatrix}$
 \end{BVerbatim}
 $\begin{pNiceMatrix}[baseline=1, r, margin]
@@ -1422,7 +1428,7 @@
 \Body
 1 & -1 & 1 \\
 -1 & 1 & -1 \\
-1 & -1 & 1 
+1 & -1 & 1
 \end{pNiceMatrix}$
 \end{scope}
 
@@ -1431,7 +1437,7 @@
 droite (cf. p.~\pageref{key-R}).
 
 
-\bigskip
+\medskip
 \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
@@ -1443,7 +1449,7 @@
 \begin{scope}
 \hfuzz=10cm
 \begin{BVerbatim}[boxwidth=9cm,baseline=c]
-$\begin{NiceArray}{lll}[hvlines] 
+$\begin{NiceArray}{lll}[hvlines]
 \CodeBefore
   ~emphase#\rowcolor{red!15}{1,3-5,8-}@
 \Body
@@ -1479,11 +1485,11 @@
 
 
 
-\bigskip
+\medskip
 \item La commande |\columncolor| doit son nom à la commande |\columncolor| de
 \pkg{colortbl}. Sa syntaxe est similaire à celle de |\rowcolor|.
 
-\bigskip
+\medskip
 \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|. Cett
@@ -1492,13 +1498,13 @@
 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}.
 
-En fait, le premier argument (obligatoire) peut, plus généralement, contenir 
+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
+\medskip
 La commande |\rowcolors| accepte une liste de couples 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|,
@@ -1534,7 +1540,7 @@
 \Block{4-1}{B}& Stéphanie & 18 \\
               & Amélie & 20 \\
               & Henri & 14 \\
-              & Estelle & 15 
+              & Estelle & 15
 \end{NiceTabular}
 \end{BVerbatim}
 \begin{NiceTabular}{clr}[hvlines,baseline=2]
@@ -1547,7 +1553,7 @@
 \Block{4-1}{B}& Stéphanie & 18 \\
               & Amélie & 20 \\
               & Henri & 14 \\
-              & Estelle & 15 
+              & Estelle & 15
 \end{NiceTabular}
 \end{scope}
 
@@ -1595,7 +1601,7 @@
 
 
 
-\bigskip
+\medskip
 \item \colorbox{yellow!50}{\textbf{Nouveau 6.0}}\enskip L'extension
 \pkg{nicematrix} propose aussi une commande |\rowlistcolors|. Cette commande
 généralise la commande |\rowcolors|: au lieu de prendre deux arguments
@@ -1633,7 +1639,7 @@
 
 \end{itemize}
 
-\bigskip
+\medskip
 On rappelle que toutes les commandes de coloriage que l'on vient de décrire ne
 colorient pas les cases qui sont dans les «coins». Dans l'exemple suivant, on
 utilise la clé |corners| pour demander de considérer le coin \emph{north east} (NE).
@@ -1673,7 +1679,7 @@
 
 
 
-\bigskip
+\medskip
 On remarquera que ces commandes sont compatibles avec les commandes de
 \pkg{booktabs} (|\toprule|, |\midrule|, |\bottomrule|, etc). Néanmoins,
 l'extension \pkg{booktabs} n'est \emph{pas} chargée par \pkg{nicematrix}.
@@ -1684,12 +1690,12 @@
 \begin{BVerbatim}[baseline=c,boxwidth=8.5cm]
 \begin{NiceTabular}{lSSSS}
 \CodeBefore
-  \rowcolor{red!15}{1-2} 
+  \rowcolor{red!15}{1-2}
   \rowcolors{3}{blue!15}{}
 \Body
 ~emphase#\toprule@
 \Block{2-1}{Produit} &
-\Block{1-3}{dimensions (cm)} & & & 
+\Block{1-3}{dimensions (cm)} & & &
 \Block{2-1}{\rotate Prix} \\
 ~emphase#\cmidrule(rl){2-4}@
  & L & l & h \\
@@ -1704,14 +1710,14 @@
 \end{BVerbatim}
 \begin{NiceTabular}[c]{lSSSS}
 \CodeBefore
-  \rowcolor{red!15}{1-2} 
+  \rowcolor{red!15}{1-2}
   \rowcolors{3}{blue!15}{}
 \Body
 \toprule
-\Block{2-1}{Produit} & 
-\Block{1-3}{dimensions (cm)} & & & 
+\Block{2-1}{Produit} &
+\Block{1-3}{dimensions (cm)} & & &
 \Block{2-1}{\rotate Prix} \\
-\cmidrule(rl){2-4} 
+\cmidrule(rl){2-4}
  & L & l & h \\
 \midrule
 petit    & 3   & 5.5  & 1   & 30    \\
@@ -1752,7 +1758,7 @@
 \medskip
 \begin{Verbatim}
 \NewDocumentCommand { \Blue } { } {~emphase#\columncolor{blue!15}@}
-\begin{NiceTabular}[colortbl-like]{>{\Blue}c>{\Blue}cc} 
+\begin{NiceTabular}[colortbl-like]{>{\Blue}c>{\Blue}cc}
 \toprule
 ~emphase#\rowcolor{red!15}@
 Nom & Prénom & Année de naissance \\
@@ -1768,7 +1774,7 @@
 
 \begin{center}
 \NewDocumentCommand { \Blue } { } {\columncolor{blue!15}}
-\begin{NiceTabular}[colortbl-like]{>{\Blue}c>{\Blue}cc} 
+\begin{NiceTabular}[colortbl-like]{>{\Blue}c>{\Blue}cc}
 \toprule
 \rowcolor{red!15}
 Nom & Prénom & Année de naissance \\
@@ -1785,40 +1791,50 @@
 
 \label{RowStyle}
 
-\colorbox{yellow!50}{\bfseries Nouveau 5.18}\enskip La commande |\RowStyle|
-prend en argument des instructions de mise en forme qui seront appliquées à
-chacune des cases restantes sur la rangée en cours.
+La commande |\RowStyle| prend en argument des instructions de mise en forme qui
+seront appliquées à chacune des cases restantes sur la rangée en cours.
 
 \medskip
 Elle prend aussi en premier argument optionnel, entre crochets, une liste de
-couples clé-valeur. 
+couples clé-valeur.
 \begin{itemize}
+\item \colorbox{yellow!50}{\bfseries Nouveau 6.3}\enskip La clé |nb-rows|
+indique le nombre de rangées consécutives concernées par les spécifications de
+cette commande. 
 \item Les clés |cell-space-top-limit|, |cell-space-bottom-limit|
 et |cell-space-limits| sont disponibles avec le même effet que les clés globales
-de même nom (cf. p.~\pageref{cell-space}). 
-\item \colorbox{yellow!50}{\bfseries Nouveau 6.1}\enskip La clé |color| fixe la
-couleur du texte.\footnote{La clé |color| utilise la commande |\color|
-mais insère aussi une instruction |\leavevmode| devant. Cela évite un
-espace vertical parasite dans les cellules qui correspondent à des colonnes de
-type |p|, |b|, |m| et |X| (qui débutent en mode vertical).}
+de même nom (cf. p.~\pageref{cell-space}).
+
+\item \colorbox{yellow!50}{\bfseries Nouveau 6.3}\enskip La clé |rowcolor| fixe
+la couleur de fond et la clé |color| fixe la couleur du texte.\footnote{La clé
+  |color| utilise la commande |\color| mais insère aussi une instruction
+  |\leavevmode| devant. Cela évite un espace vertical parasite dans les cellules
+  qui correspondent à des colonnes de type |p|, |b|, |m| et |X| (qui débutent en
+  mode vertical).}
+
+\item \colorbox{yellow!50}{\bfseries Nouveau 6.3}\enskip La clé |bold| impose
+des caractères gras aux éléments de la rangée, qu'ils soient en mode texte ou
+bien en mode mathématique.
 \end{itemize}
 
 \medskip
-\begin{BVerbatim}[boxwidth=11cm,baseline=c]
-\begin{NiceTabular}{cccc}[colortbl-like]
+\begin{BVerbatim}[boxwidth=12cm,baseline=c]
+\begin{NiceTabular}{cccc}
 \hline
 ~emphase#\RowStyle[cell-space-limits=3pt]{\rotate}@
 premier & deuxième & troisième & quatrième \\
-\rowcolor{blue!50}~emphase#\RowStyle[color=white]{\sffamily}@
+~emphase#\RowStyle[nb-rows=2,color=white,rowcolor=blue!50]{\sffamily}@
 1 & 2 & 3 & 4 \\
+I & II & III & IV 
 \end{NiceTabular}
 \end{BVerbatim}
-\begin{NiceTabular}{cccc}[colortbl-like]
+\begin{NiceTabular}{cccc}
 \hline
 \RowStyle[cell-space-limits=3pt]{\rotate}
 premier & deuxième & troisième & quatrième \\
-\rowcolor{blue!50}\RowStyle[color=white]{\sffamily} 
+\RowStyle[nb-rows=2,color=white,rowcolor=blue!50]{\sffamily}
 1 & 2 & 3 & 4 \\
+I & II & III & IV \\
 \end{NiceTabular}
 
 \medskip
@@ -1839,17 +1855,17 @@
 \begin{NiceTabular}{~emphase#W{c}{2cm}@cc}[hvlines]
 Paris  & New York & Madrid \\
 Berlin & London   & Roma    \\
-Rio    & Tokyo    & Oslo 
+Rio    & Tokyo    & Oslo
 \end{NiceTabular}
 \end{BVerbatim}
 \begin{NiceTabular}{W{c}{2cm}cc}[hvlines]
 Paris  & New York & Madrid \\
 Berlin & London   & Roma    \\
-Rio    & Tokyo    & Oslo 
+Rio    & Tokyo    & Oslo
 \end{NiceTabular}
 
 
-\bigskip
+\medskip
 Dans les environnements de \pkg{nicematrix}, il est aussi possible de fixer la
 largeur \emph{minimale} de toutes les colonnes (à l'exception des éventuelles
 colonnes extérieures: cf. p.~\pageref{exterior}) directement avec l'option
@@ -1860,13 +1876,13 @@
 $\begin{pNiceMatrix}[~emphase#columns-width = 1cm@]
 1  & 12 & -123 \\
 12 & 0  & 0    \\
-4  & 1  & 2 
+4  & 1  & 2
 \end{pNiceMatrix}$
 \end{BVerbatim}
 $\begin{pNiceMatrix}[columns-width = 1cm]
 1  & 12 & -123 \\
 12 & 0  & 0    \\
-4  & 1  & 2 
+4  & 1  & 2
 \end{pNiceMatrix}$
 
 \medskip
@@ -1875,7 +1891,7 @@
 supprimé (il est évidemment possible de le supprimer en mettant |\tabcolsep| ou
 |\arraycolsep| à~$0$ avant).
 
-\bigskip
+\medskip
 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
@@ -1887,16 +1903,16 @@
 $\begin{pNiceMatrix}[~emphase#columns-width = auto@]
 1  & 12 & -123 \\
 12 & 0  & 0    \\
-4  & 1  & 2 
+4  & 1  & 2
 \end{pNiceMatrix}$
 \end{BVerbatim}
 $\begin{pNiceMatrix}[columns-width = auto]
 1  & 12 & -123 \\
 12 & 0  & 0    \\
-4  & 1  & 2 
+4  & 1  & 2
 \end{pNiceMatrix}$
 
-\bigskip
+\medskip
 Sans surprise, il est possible de fixer la largeur minimale de toutes les
 colonnes de tous les tableaux dans une certaine portion de document avec la
 commande |\NiceMatrixOptions|.\par\nobreak
@@ -1905,11 +1921,11 @@
 \begin{BVerbatim}[baseline=c,boxwidth=8.5cm]
 ~emphase#\NiceMatrixOptions{columns-width=10mm}@
 $\begin{pNiceMatrix}
-a & b \\ c & d 
+a & b \\ c & d
 \end{pNiceMatrix}
-= 
+=
 \begin{pNiceMatrix}
-1   & 1245 \\ 345 & 2 
+1   & 1245 \\ 345 & 2
 \end{pNiceMatrix}$
 \end{BVerbatim}
 \begin{scope}
@@ -1916,17 +1932,17 @@
 \NiceMatrixOptions{columns-width=10mm}
 $\begin{pNiceMatrix}
 a & b \\
-c & d 
+c & d
 \end{pNiceMatrix}
-= 
+=
 \begin{pNiceMatrix}
 1   & 1245 \\
-345 & 2 
+345 & 2
 \end{pNiceMatrix}$
 \end{scope}
 
 
-\bigskip
+\medskip
 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
@@ -1942,10 +1958,10 @@
 ~emphase#\begin{NiceMatrixBlock}[auto-columns-width]@
 $\begin{array}{c}
 \begin{bNiceMatrix}
- 9 & 17 \\ -2 & 5 
+ 9 & 17 \\ -2 & 5
  \end{bNiceMatrix} \\ \\
 \begin{bNiceMatrix}
- 1   & 1245345 \\  345 & 2 
+ 1   & 1245345 \\  345 & 2
 \end{bNiceMatrix}
 \end{array}$
 ~emphase#\end{NiceMatrixBlock}@
@@ -1953,15 +1969,77 @@
 \begin{NiceMatrixBlock}[auto-columns-width]
 $\begin{array}{c}
 \begin{bNiceMatrix}
- 9 & 17 \\ -2 & 5 
+ 9 & 17 \\ -2 & 5
  \end{bNiceMatrix} \\ \\
 \begin{bNiceMatrix}
- 1   & 1245345 \\  345 & 2 
+ 1   & 1245345 \\  345 & 2
 \end{bNiceMatrix}
 \end{array}$
 \end{NiceMatrixBlock}
 
+\subsection{Les colonnes V de varwidth}
 
+\colorbox{yellow!50}{\textbf{Nouveau 6.3}}
+
+\smallskip
+Rappelons d'abord le fonctionnement d'un environnement |{varwidth}| de
+l'extension éponyme \pkg{varwidth}. Un tel environnement est similaire à
+l'environnement classique |{minipage}| mais la largeur indiquée (en argument)
+n'est que la largeur \emph{maximale} de la boîte créée. Dans la cas général, la
+largeur d'une boîte |{varwidth}| est la largeur naturelle de son contenu.
+
+\smallskip
+Cela est illustré avec les exemples suivants :
+
+\medskip
+\begin{BVerbatim}[baseline=c,boxwidth=6cm]
+\fbox{%
+\begin{~emphase#varwidth@}{8cm}
+\begin{itemize}
+\item premier item
+\item deuxième item
+\end{itemize}
+\end{~emphase#varwidth@}}
+\end{BVerbatim}
+\fbox{\begin{varwidth}{8cm}
+\begin{itemize}
+\item premier item
+\item deuxième item
+\end{itemize}
+\end{varwidth}}
+
+\bigskip
+\begin{BVerbatim}[baseline=c,boxwidth=6cm]
+\fbox{%
+\begin{~emphase#minipage@}{8cm}
+\begin{itemize}
+\item premier item
+\item deuxième item
+\end{itemize}
+\end{~emphase#minipage@}}
+\end{BVerbatim}
+\fbox{\begin{minipage}{8cm}
+\begin{itemize}
+\item premier item
+\item deuxième item
+\end{itemize}
+\end{minipage}}
+
+\bigskip
+L'extension \pkg{varwidth} définit également le type de colonne |V|. Une colonne
+|V{|$\langle$\textsl{dim}$\rangle$|}| encapsule toutes ses cases dans une
+|{varwidth}| d'argument $\langle$\textsl{dim}$\rangle$ (et effectue quelques
+réglages supplémentaires).
+
+\medskip
+Lorsque l'extension \pkg{varwidth} est chargée, ces colonnes |V| de
+\pkg{varwidth} sont prises en charge par \pkg{nicematrix}. Dans le cadre de
+\pkg{nicematrix}, l'un des intérêts des colonnes de type |V| par rapport aux
+colonnes de type |p|, |m| ou |b| est que, pour les cellules d'une telle colonne,
+le nœud PGF/Tikz créé pour le contenu d'une telle cellule a une largeur ajusté
+au contenu de la cellule en question : cf. p.~\pageref{node-V}.
+
+
 \subsection{Les colonnes X}
 
 \label{colonne-X}
@@ -1968,18 +2046,20 @@
 
 \colorbox{yellow!50}{\textbf{Nouveau 6.0}}
 
+\smallskip
 L'environnement |{NiceTabular}| propose aussi des colonnes |X| similaires à
 celles proposées par l'environnement |{tabularx}| de l'extension éponyme.
 
 La valeur requise par la largeur du tableau peut être passée en argument de la
-clé |width|. La valeur initiale de ce paramètre est |\linewidth|.
+clé |width| (dans |{NiceTabular}| ou dans |\NiceMatrixOptions|). La valeur
+initiale de ce paramètre est |\linewidth| (et non |\textwidth|).
 
 Pour se rapprocher davantage de l'environnement |{tabularx}|, \pkg{nicematrix}
 propose aussi un environnement |{NiceTabularX}| qui prend en premier argument
 (obligatoire) la largeur voulue pour le tableau.\footnote{Si \pkg{tabularx} est
   chargé, on doit obligatoirement utiliser |{NiceTabularX}| pour utiliser les
-  colonnes `X` (ceci est dû à un problème de conflit de définition des
-  spécificateurs de colonne `X`).}
+  colonnes |X| (ceci est dû à un problème de conflit de définition des
+  spécificateurs de colonne |X|).}
 
 
 Comme avec les extensions \pkg{tabu} et \pkg{tabularray}, le spécificateur |X|
@@ -1986,19 +2066,22 @@
 accepte entre crochets un argument optionnel qui est une liste de clés.
 \begin{itemize}
 \item On peut spécifier un poids pour la colonne en mettant directement un
-entier comme argument du spécificateur |X|. Par exemple, une colonne |X[2]| aura
-une largeur double de celle d'une colonne |X| (qui a un poids de 1).
+entier positif comme argument du spécificateur |X|. Par exemple, une colonne
+|X[2]| aura une largeur double de celle d'une colonne |X| (qui a un poids de
+1).\footnote{Les valeurs négatives pour les poids, comme proposées par
+  \pkg{tabu} (maintenant obsolète), ne sont pas prises en charge par
+  \pkg{nicematrix}. Si une telle valeur est utilisée, une erreur sera levée.}
 \item On peut spécifier l'alignement horizontal avec une des lettres |l|, |c| et
 |r| (qui insèrent respectivement |\raggedright|, |\centering| et |\raggedleft|
 suivi de |\arraybackslash|).
 \item On peut spécifier l'alignement vertical avec l'une des lettres |t| (alias
 |p|), |m| et |b| (qui construisent respectivement des colonnes de types |p|, |m|
-et |b|). La valeur par défaut est |t|. 
+et |b|). La valeur par défaut est |t|.
 \end{itemize}
 
 \begin{Verbatim}
 \begin{NiceTabular}~emphase#[width=9cm]{X[2,l]X[l]}@[hvlines]
-Un texte relativement long qui tient sur plusieurs lignes. & 
+Un texte relativement long qui tient sur plusieurs lignes. &
 Un texte relativement long qui tient sur plusieurs lignes. \\
 Un texte plus court. & Un texte plus court.
 \end{NiceTabular}
@@ -2007,13 +2090,13 @@
 
 \begin{center}
 \begin{NiceTabular}[width=9cm]{X[2,l]X[l]}[hvlines]
-Un texte relativement long qui tient sur plusieurs lignes. & 
+Un texte relativement long qui tient sur plusieurs lignes. &
 Un texte relativement long qui tient sur plusieurs lignes. \\
 Un texte plus court. & Un texte plus court.
 \end{NiceTabular}
 \end{center}
 
-\bigskip
+\medskip
 \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
@@ -2030,7 +2113,7 @@
 \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    &     
+       & C_1    & \Cdots &        & C_4    &
 \end{pNiceMatrix}$
 \end{Verbatim}
 %
@@ -2040,7 +2123,7 @@
 \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    &     
+       & C_1    & \Cdots &        & C_4    &
 \end{pNiceMatrix}\]
 
 \medskip
@@ -2047,7 +2130,7 @@
 Les lignes pointillées ont été tracées avec les outils qui seront présentés p.~\pageref{Cdots}.
 
 
-\bigskip
+\medskip
 Il y a plusieurs remarques à formuler.
 %
 \begin{itemize}[beginpenalty=10000]
@@ -2088,7 +2171,7 @@
 
 
 
-\bigskip
+\medskip
 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
@@ -2106,7 +2189,7 @@
 \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    &     
+       & C_1    & \Cdots &        & C_4    &
 \end{pNiceArray}$
 \end{Verbatim}
 %
@@ -2123,7 +2206,7 @@
 \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    &     
+       & C_1    & \multicolumn1c{\Cdots} &        & C_4    &
 \end{pNiceArray}
 \end{displaymath}
 \end{scope}
@@ -2148,7 +2231,7 @@
 la commande |\\| après la «première rangée» ou avant la «dernière rangée». Le
 placement des délimiteurs serait erroné. Pour contourner cette restriction, on
 pourra envisager d'utiliser la commande |\SubMatrix| dans le |\CodeAfter| (cf.
-p.~\pageref{sub-matrix}). 
+p.~\pageref{sub-matrix}).
 \end{itemize}
 
 
@@ -2180,7 +2263,7 @@
   rappeler que cela s'applique à |\Cdots|, |\Ldots|, |Vdots|, etc.) : cf.
   p.~\pageref{customization}). }\par\nobreak
 
-\bigskip
+\medskip
 \begin{BVerbatim}[baseline=c,boxwidth=10cm]
 \begin{bNiceMatrix}
 a_1      & \Cdots &        & & a_1     \\
@@ -2187,7 +2270,7 @@
 \Vdots   & a_2    & \Cdots & & a_2     \\
          & \Vdots & \Ddots[color=red] \\
 \\
-a_1      & a_2    &        & & a_n 
+a_1      & a_2    &        & & a_n
 \end{bNiceMatrix}
 \end{BVerbatim}
 $\begin{bNiceMatrix}
@@ -2195,7 +2278,7 @@
 \Vdots   & a_2    & \Cdots & & a_2   \\
          & \Vdots & \Ddots[color=red] \\
 \\
-a_1      & a_2    &        & & a_n 
+a_1      & a_2    &        & & a_n
 \end{bNiceMatrix}$
 
 
@@ -2204,33 +2287,33 @@
 \interitem Pour représenter la matrice nulle, on peut choisir d'utiliser le
 codage suivant :\par\nobreak
 
-\bigskip
+\medskip
 \begin{BVerbatim}[baseline=c,boxwidth=10cm]
 \begin{bNiceMatrix}
 0      & \Cdots & 0      \\
 \Vdots &        & \Vdots \\
-0      & \Cdots & 0 
+0      & \Cdots & 0
 \end{bNiceMatrix}
 \end{BVerbatim}
 $\begin{bNiceMatrix}
 0      & \Cdots & 0      \\
 \Vdots &        & \Vdots \\
-0      & \Cdots & 0 
+0      & \Cdots & 0
 \end{bNiceMatrix}$
 
-\bigskip
+\medskip
 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
+\medskip
 \begin{BVerbatim}[baseline=c,boxwidth=10cm]
 \begin{bNiceMatrix}
 0      & \Cdots & \Cdots & 0      \\
 \Vdots &        &        & \Vdots \\
 \Vdots &        &        & \Vdots \\
-0      & \Cdots & \Cdots & 0 
+0      & \Cdots & \Cdots & 0
 \end{bNiceMatrix}
 \end{BVerbatim}
 $\begin{bNiceMatrix}
@@ -2237,24 +2320,24 @@
 0      & \Cdots & \Cdots & 0      \\
 \Vdots &        &        & \Vdots \\
 \Vdots &        &        & \Vdots \\
-0      & \Cdots & \Cdots & 0 
+0      & \Cdots & \Cdots & 0
 \end{bNiceMatrix}$
 
-\bigskip
+\medskip
 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
+\medskip
 En fait, dans cet exemple, il aurait été possible de tracer la même matrice plus
 rapidement avec le codage suivant :\par\nobreak
 
-\bigskip
+\medskip
 \begin{BVerbatim}[baseline=c,boxwidth=10cm]
 \begin{bNiceMatrix}
 0       & \Cdots &        & 0      \\
 \Vdots  &        &        &        \\
         &        &        & \Vdots \\
-0       &        & \Cdots & 0 
+0       &        & \Cdots & 0
 \end{bNiceMatrix}
 \end{BVerbatim}
 $\begin{bNiceMatrix}
@@ -2261,10 +2344,10 @@
 0       & \Cdots &        & 0      \\
 \Vdots  &        &        &        \\
         &        &        & \Vdots \\
-0       &        & \Cdots & 0 
+0       &        & \Cdots & 0
 \end{bNiceMatrix}$
 
-\bigskip
+\medskip
 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
@@ -2279,18 +2362,18 @@
 commande~|\Hspace| qui est une variante de |\hspace| transparente pour la
 construction des lignes en pointillés de \pkg{nicematrix}.\par\nobreak
 
-\bigskip
+\medskip
 \begin{BVerbatim}[baseline=c,boxwidth=10cm]
 \begin{bNiceMatrix}
 0      & \Cdots & ~emphase#\Hspace*{1cm}@ & 0      \\
 \Vdots &        &               & \Vdots \\~emphase#[1cm]@
-0      & \Cdots &               & 0    
+0      & \Cdots &               & 0
 \end{bNiceMatrix}
 \end{BVerbatim}
 $\begin{bNiceMatrix}
 0      & \Cdots & \Hspace*{1cm} & 0      \\
 \Vdots &        &               & \Vdots \\[1cm]
-0      & \Cdots &               & 0    
+0      & \Cdots &               & 0
 \end{bNiceMatrix}$
 
 \subsection{L'option nullify-dots}
@@ -2302,16 +2385,16 @@
 \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
+\medskip
 Si nous ajoutons des instructions |\ldots| dans la seconde rangée, la géométrie
 de la matrice est modifiée.\par\nobreak
 
@@ -2319,15 +2402,15 @@
 \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
+\medskip
 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
@@ -2336,15 +2419,15 @@
 \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
+\medskip
 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
@@ -2354,12 +2437,12 @@
 \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
@@ -2385,7 +2468,7 @@
 1 & 2 & 3 & 4 & 5 \\
 1 & ~emphase#\Hdotsfor{3}@ & 5 \\
 1 & 2 & 3 & 4 & 5 \\
-1 & 2 & 3 & 4 & 5 
+1 & 2 & 3 & 4 & 5
 \end{pNiceMatrix}$
 \end{BVerbatim}
 $\begin{pNiceMatrix}
@@ -2392,10 +2475,10 @@
 1 & 2 & 3 & 4 & 5 \\
 1 & \Hdotsfor{3} & 5 \\
 1 & 2 & 3 & 4 & 5 \\
-1 & 2 & 3 & 4 & 5 
+1 & 2 & 3 & 4 & 5
 \end{pNiceMatrix}$
 
-\bigskip
+\medskip
 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).
 
@@ -2405,7 +2488,7 @@
 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}
@@ -2412,7 +2495,7 @@
 1 & 2 & 3 & 4 & 5 \\
   & \Hdotsfor{3} \\
 1 & 2 & 3 & 4 & 5 \\
-1 & 2 & 3 & 4 & 5 
+1 & 2 & 3 & 4 & 5
 \end{pNiceMatrix}$
 
 \medskip
@@ -2423,27 +2506,27 @@
 est chargée (mais vous risquez d'avoir des problèmes si vous utilisez
 |\rowcolor| sur la même rangée que |\Hdotsfor|).
 
-\bigskip
+\medskip
 L'extension \pkg{nicematrix} propose aussi une commande |\Vdotsfor| similaire à
 |\Hdotsfor| mais traçant des lignes verticales.
 
-\bigskip
+\medskip
 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] 
+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] 
+\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}\NotEmpty  & ~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] & \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] 
+\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}
@@ -2451,11 +2534,11 @@
 
 \[\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 \\ 
+\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}\NotEmpty & \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 \\ 
+\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}\]
 
@@ -2476,7 +2559,7 @@
 \smallskip
 
 \begin{itemize}
-\item L'option |renew-dots|\par\nobreak 
+\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
@@ -2485,17 +2568,17 @@
 suspension «automatiques» de |amsmath|) est aussi redéfinie et se comporte comme
 |\Ldots|.
 
-\item L'option |renew-matrix|\par\nobreak 
+\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.
 \end{itemize}
 
-\bigskip 
+\medskip
 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
+\medskip
 \begin{scope}
 \NiceMatrixOptions{renew-dots,renew-matrix}
 \begin{BVerbatim}[baseline=c,boxwidth=10cm]
@@ -2529,13 +2612,13 @@
 $\begin{bNiceMatrix}
 1 & \hspace*{1cm}            & 0 \\[8mm]
   & ~emphase#\Ddots^{n \text{ fois}}@ &    \\
-0 &                          & 1 
+0 &                          & 1
 \end{bNiceMatrix}$
 \end{BVerbatim}
 $\begin{bNiceMatrix}
 1 & \hspace*{1cm}            & 0 \\[8mm]
   & \Ddots^{n \text{ fois}} &   \\
-0 &                          & 1 
+0 &                          & 1
 \end{bNiceMatrix}$
 
 \subsection{Personnalisation des lignes en pointillés}
@@ -2549,7 +2632,7 @@
 %
 \begin{itemize}
 \item |color| ;
-\item |shorten| ; 
+\item |shorten| ;
 \item |line-style|.
 \end{itemize}
 
@@ -2559,13 +2642,13 @@
 %
 \begin{itemize}
 \item |xdots/color| ;
-\item |xdots/shorten| ; 
+\item |xdots/shorten| ;
 \item |xdots/line-style|.
 \end{itemize}
 %
 Pour la clarté, dans la suite, on utilisera ces noms-là.
 
-\bigskip
+\medskip
 \textbf{L'option xdots/color}\par\nobreak
 
 \smallskip
@@ -2575,7 +2658,7 @@
 p.~\pageref{exterior}.
 
 
-\bigskip
+\medskip
 \textbf{L'option xdots/shorten}\par\nobreak
 
 \smallskip
@@ -2586,7 +2669,7 @@
 unité de mesure dépendante de la fonte courante).
 
 
-\bigskip
+\medskip
 \textbf{L'option xdots/line-style}\par\nobreak
 
 \smallskip
@@ -2603,7 +2686,7 @@
 \end{BVerbatim}
 \tikz \draw [dotted] (0,0) -- (5,0) ;
 
-\bigskip
+\medskip
 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
@@ -2611,10 +2694,10 @@
 appelé le style |standard|. Cette valeur est la valeur initiale du paramètre
 |xdots/line-style|.
 
-\bigskip
+\medskip
 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|», 
+d'options Tikz applicables à un chemin (à l'exception de «|color|»,
 «|shorten >|» et «|shorten <|»).
 
 \medskip
@@ -2623,7 +2706,7 @@
 \medskip
 \begin{BVerbatim}[baseline=c]
 $\begin{pNiceMatrix}[nullify-dots,~emphase#xdots/line-style=loosely dotted@]
-a      & b      & 0      &        & \Cdots & 0      \\ 
+a      & b      & 0      &        & \Cdots & 0      \\
 b      & a      & b      & \Ddots &        & \Vdots \\
 0      & b      & a      & \Ddots &        &        \\
        & \Ddots & \Ddots & \Ddots &        & 0      \\
@@ -2634,7 +2717,7 @@
 
 
 \[\begin{pNiceMatrix}[nullify-dots,xdots/line-style=loosely dotted]
-a      & b      & 0      &        & \Cdots & 0      \\ 
+a      & b      & 0      &        & \Cdots & 0      \\
 b      & a      & b      & \Ddots &        & \Vdots \\
 0      & b      & a      & \Ddots &        &        \\
        & \Ddots & \Ddots & \Ddots &        & 0      \\
@@ -2681,18 +2764,18 @@
 \medskip
 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|. Bien que ce soit un mot-clé, |\CodeAfter| accepte
-quand même un argument optionnel (entre crochets). Les clés autorisées forment
-un sous-ensemble des clés acceptées par |\NiceMatrixOptions|.
+après le mot-clé |\CodeAfter|. Bien que ce soit un mot-clé, |\CodeAfter|
+accepte quand même un argument optionnel (entre crochets). Les clés autorisées
+forment un sous-ensemble des clés acceptées par |\NiceMatrixOptions|.
 
 \medskip
 Les utilisateurs expérimentés peuvent, en particulier, utiliser les nœuds
 PGF/Tikz créés par \pkg{nicematrix} dans le |\CodeAfter|. Ces nœuds sont décrits
 à partir de la page \pageref{PGF-nodes}.
- 
+
 \medskip
 Par ailleurs, deux commandes spéciales sont disponibles dans le |\CodeAfter| :
-|\line| et |\SubMatrix|. 
+|\line| et |\SubMatrix|. On va maintenant détailler ces deux commandes.
 
 
 \subsection{La commande \textbackslash line dans le \textbackslash CodeAfter}
@@ -2703,7 +2786,7 @@
 chacun de la forme $i$-$j$ où $i$ est le numéro de ligne et $j$ est le numéro de
 colonne. Les options disponibles pour personnaliser les lignes pointillées créées par
 |\Cdots|, |\Vdots|, etc. peuvent aussi être passées à cette commande (cf.
-p.~\pageref{customization}). 
+p.~\pageref{customization}).
 
 \medskip
 Cette commande peut par exemple être utilisée pour tracer une ligne entre deux
@@ -2731,7 +2814,7 @@
 \end{pNiceMatrix}$
 \end{scope}
 
-\bigskip
+\medskip
 Elle peut aussi être utilisée pour tracer une ligne diagonale non parallèle aux
 autres lignes diagonales (par défaut, les lignes tracées par |\Ddots| sont
 «parallélisées» : cf.~p.~\pageref{parallelization}).
@@ -2742,7 +2825,7 @@
 1      & \Cdots &   & 1      & 2      & \Cdots          & 2      \\
 0      & \Ddots &   & \Vdots & \Vdots & \hspace*{2.5cm} & \Vdots \\
 \Vdots & \Ddots &   &        &        &                 &        \\
-0      & \Cdots & 0 & 1      & 2      & \Cdots          & 2 
+0      & \Cdots & 0 & 1      & 2      & \Cdots          & 2
 ~emphase#\CodeAfter \line[shorten=6pt]{1-5}{4-7}@
 \end{bNiceMatrix}
 \end{BVerbatim}
@@ -2750,7 +2833,7 @@
 1      & \Cdots &   & 1      & 2      & \Cdots          & 2      \\
 0      & \Ddots &   & \Vdots & \Vdots & \hspace*{2.5cm} & \Vdots \\
 \Vdots & \Ddots &   &        &        &                 &        \\
-0      & \Cdots & 0 & 1      & 2      & \Cdots          & 2 
+0      & \Cdots & 0 & 1      & 2      & \Cdots          & 2
 \CodeAfter \line[shorten=6pt]{1-5}{4-7}
 \end{bNiceMatrix}\]
 
@@ -2793,7 +2876,7 @@
 \[\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 
+ 1           & 2            & 3            & z
 \CodeAfter
   ~emphase#\SubMatrix({1-1}{3-3})+
   ~emphase#\SubMatrix({1-4}{3-4})+
@@ -2803,16 +2886,16 @@
 $\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 
+ 1          & 2           & 3           & z
 \CodeAfter
   \SubMatrix({1-1}{3-3})
   \SubMatrix({1-4}{3-4})
 \end{NiceArray}$
 
-\bigskip
-\colorbox{yellow!50}{\bfseries Nouveau 5.18}\enskip La commande |\SubMatrix|
-accepte en fait également deux arguments optionnels spécifiés par les symboles
-traditionnels |^| et |_| pour des éléments en exposant et en indice.
+\medskip
+La commande |\SubMatrix| accepte en fait également deux arguments optionnels
+spécifiés par les symboles traditionnels |^| et |_| pour des éléments en
+exposant et en indice.
 
 \medskip
 \begin{scope}
@@ -2821,7 +2904,7 @@
 $\begin{bNiceMatrix}[right-margin=1em]
 1 & 1 & 1 \\
 1 & a & b \\
-1 & c & d 
+1 & c & d
 \CodeAfter
   ~emphase#\SubMatrix[{2-2}{3-3}]^{T}@
 \end{bNiceMatrix}$
@@ -2829,7 +2912,7 @@
 $\begin{bNiceMatrix}[right-margin=1em]
 1 & 1 & 1 \\
 1 & a & b \\
-1 & c & d 
+1 & c & d
 \CodeAfter
   \SubMatrix[{2-2}{3-3}]^{T}
 \end{bNiceMatrix}$
@@ -2836,7 +2919,7 @@
 \end{scope}
 
 
-\bigskip
+\medskip
 Les clés disponibles pour la commande |\SubMatrix| sont les suivantes :
 %
 \begin{itemize}
@@ -2861,13 +2944,13 @@
 On remarquera que tous ces filets sont dessinés après la construction du tableau
 principal : les colonnes et les rangées ne sont pas écartées.
 
-\bigskip
+\medskip
 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.
 
-\bigskip
+\medskip
 \begin{scope}
 \hfuzz=12cm
 \fvset{commandchars=\~\#\!}%
@@ -2877,9 +2960,9 @@
   &   & \frac14 \\[1mm]
 a & b & \frac12a+\frac14b \\
 c & d & \frac12c+\frac14d \\
-\CodeAfter 
-  \SubMatrix({1-3}{2-3}) 
-  \SubMatrix({3-1}{4-2}) 
+\CodeAfter
+  \SubMatrix({1-3}{2-3})
+  \SubMatrix({3-1}{4-2})
   \SubMatrix({3-3}{4-3})
 \end{NiceArray}$
 \end{BVerbatim}
@@ -2915,7 +2998,7 @@
 \end{NiceArray}$
 \end{BVerbatim}
 \end{scope}
-% 
+%
 $\begin{NiceArray}{cc@{\hspace{5mm}}l}[cell-space-limits=2pt]
          &   & \frac12 \\
          &      & \frac14 \\[1mm]
@@ -2928,12 +3011,12 @@
 \end{NiceArray}$
 
 
-\bigskip
+\medskip
 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}.
 
-\bigskip
+\medskip
 Il est également possible de spécifier des délimiteurs\footnote{Les délimiteurs
   en question sont |(|, |[| et |\{| et les fermants correspondants.
   On peut bien sûr aussi mettre des \verb+|+ et des \verb+||+ dans le
@@ -2950,7 +3033,7 @@
 $\begin{pNiceArray}{~emphase#(c)(c)(c)@}
 a_{11} & a_{12}                                     & a_{13} \\
 a_{21} & \displaystyle \int_0^1\dfrac{1}{x^2+1}\,dx & a_{23} \\
-a_{31} & a_{32}                                     & a_{33} 
+a_{31} & a_{32}                                     & a_{33}
 \end{pNiceArray}$
 \end{BVerbatim}
 
@@ -2957,7 +3040,7 @@
 \[\begin{pNiceArray}{(c)(c)(c)}
 a_{11} & a_{12}                                     & a_{13} \\
 a_{21} & \displaystyle \int_0^1\dfrac{1}{x^2+1}\,dx & a_{23} \\
-a_{31} & a_{32}                                     & a_{33} 
+a_{31} & a_{32}                                     & a_{33}
 \end{pNiceArray}\]
 
 
@@ -3004,7 +3087,7 @@
 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}|. 
+|{NiceMatrix}|.
 
 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
@@ -3033,9 +3116,9 @@
 \toprule \RowStyle{\bfseries}
 Nom & Prénom & Date de naissance \\
 \midrule
-Achard\tabularnote{La famille Achard est une très ancienne famille du Poitou.} 
+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.} 
+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 \\
@@ -3045,7 +3128,7 @@
 
 
 
-\bigskip
+\medskip
 \begin{itemize}
 \item La commande |\tabularnote| est en fait utilisable avant
 l'environnement de \pkg{nicematrix}, le but étant de pouvoir l'utiliser sur le
@@ -3138,13 +3221,13 @@
 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/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
@@ -3155,12 +3238,12 @@
 \begin{BVerbatim}[formatcom = \small \color{gray}]
 \NiceMatrixOptions
   {
-    notes = 
+    notes =
      {
        bottomrule ,
        style = ... ,
        label-in-tabular = ... ,
-       enumitem-keys = 
+       enumitem-keys =
         {
           labelsep = ... ,
           align = ... ,
@@ -3175,12 +3258,12 @@
 
 
 
-\bigskip
+\medskip
 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. 
+paragraphe.
 
 Valeur initiale : |false|
 
@@ -3201,7 +3284,7 @@
 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. 
+LaTeX.
 
 Valeur initiale : |\textit{\alph{#1}}|
 
@@ -3282,7 +3365,7 @@
 
 
 
-\bigskip
+\medskip
 Pour un exemple de personnalisation des notes de tableau, voir p.~\pageref{ex:notes}.
 
 
@@ -3296,7 +3379,7 @@
 \begin{Verbatim}[commandchars=\~\#\!]
 \makeatletter
 \AddToHook{env/threeparttable/begin}
-  {\TPT at hookin{NiceTabular}\TPT at hookin{NiceTabular*}\TPT at hookin{NiceTabularX}} 
+  {\TPT at hookin{NiceTabular}\TPT at hookin{NiceTabular*}\TPT at hookin{NiceTabularX}}
 \makeatother
 \end{Verbatim}
 
@@ -3308,7 +3391,7 @@
 
 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}. 
+aucune macro privée de \pkg{siunitx}.
 
 \medskip
 \begin{BVerbatim}[baseline = c, boxwidth = 10.6cm]
@@ -3317,7 +3400,7 @@
 2.3  & 0 & \Cdots & 0 \\
 12.4 & \Vdots & & \Vdots \\
 1.45 \\
-7.2  & 0 & \Cdots & 0 
+7.2  & 0 & \Cdots & 0
 \end{pNiceArray}$
 \end{BVerbatim}
 $\begin{pNiceArray}{ScW{c}{1cm}c}[nullify-dots,first-row]
@@ -3325,7 +3408,7 @@
 2.3  & 0 & \Cdots & 0 \\
 12.4 & \Vdots & & \Vdots \\
 1.45 \\
-7.2  & 0 & \Cdots & 0 
+7.2  & 0 & \Cdots & 0
 \end{pNiceArray}$
 
 \medskip
@@ -3346,12 +3429,12 @@
 \begin{BVerbatim}[baseline=c,boxwidth=10cm]
 $\begin{bNiceMatrix}[r]
 \cos x & - \sin x \\
-\sin x & \cos x 
+\sin x & \cos x
 \end{bNiceMatrix}$
 \end{BVerbatim}
 $\begin{bNiceMatrix}[r]
 \cos x & - \sin x \\
-\sin x & \cos x 
+\sin x & \cos x
 \end{bNiceMatrix}$
 
 
@@ -3360,13 +3443,13 @@
 
 \label{rotate}
 
-Utilisée au début d'une case, la commande |\rotate| (fournie par \pkg{nicematrix}) compose le contenu après une 
-rotation de 90° dans le sens direct. 
+Utilisée au début d'une case, la commande |\rotate| (fournie par \pkg{nicematrix}) compose le contenu après une
+rotation de 90° dans le sens direct.
 
 Dans l'exemple suivant, on l'utilise dans le |code-for-first-row|.\footnote{On
   peut aussi l'utiliser dans |\RowStyle| (cf. p.~\pageref{RowStyle}).}
 
-\bigskip
+\medskip
 
 \begin{BVerbatim}[baseline=c,boxwidth=12cm]
 \NiceMatrixOptions%
@@ -3376,7 +3459,7 @@
 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}
@@ -3391,11 +3474,11 @@
 \end{pNiceMatrix}$
 \end{varwidth}
 
-\bigskip
+\medskip
 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
+\medskip
 \begin{BVerbatim}[baseline=c,boxwidth=12cm]
 \NiceMatrixOptions%
  {code-for-last-row = \scriptstyle ~emphase#\rotate@ ,
@@ -3404,7 +3487,7 @@
 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}
@@ -3415,7 +3498,7 @@
 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}
 
@@ -3429,15 +3512,15 @@
 de l'\pkg{amsmath} (et les environnements |{psmallmatrix}|, |{bsmallmatrix}|,
 etc. de \pkg{mathtools}).
 
-\bigskip
+\medskip
 \begin{Verbatim}
-$\begin{bNiceArray}{cccc|c}[~emphase#small@, 
-                            last-col, 
-                            code-for-last-col = \scriptscriptstyle, 
-                            columns-width = 3mm ] 
+$\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}
 %
@@ -3444,12 +3527,12 @@
 \[\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
+\medskip
 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}|
@@ -3459,9 +3542,9 @@
 \medskip
 En fait, l'option |small| correspond aux réglages suivants :
 \begin{itemize}
-\item les composantes du tableau sont composées en |\scriptstyle| ; 
-\item |\arraystretch| est fixé à $0.47$ ; 
-\item |\arraycolsep| est fixé à $1.45$~pt ; 
+\item les composantes du tableau sont composées en |\scriptstyle| ;
+\item |\arraystretch| est fixé à $0.47$ ;
+\item |\arraycolsep| est fixé à $1.45$~pt ;
 \item les caractéristiques des lignes en pointillés sont également modifiées.
 \end{itemize}
 
@@ -3508,7 +3591,7 @@
 final), ces compteurs sont masqués dans les environnements de \pkg{nicematrix}.
 
 
-\bigskip
+\medskip
 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|,
@@ -3553,7 +3636,7 @@
 \end{bNiceMatrix}$
 \end{BVerbatim}
 \end{scope}
-% 
+%
 $\begin{bNiceMatrix}[light-syntax,first-row,first-col]
 {} a             b                 ;
 a  2\cos a       {\cos a + \cos b} ;
@@ -3578,18 +3661,18 @@
 
 Pour les environnements avec délimiteurs (|{pNiceArray}|, |{pNiceMatrix}|,
 etc.), il est possible de changer la couleur des délimiteurs avec la clé
-|delimiters/color|. 
+|delimiters/color|.
 
 \medskip
 \begin{BVerbatim}[boxwidth=12cm,baseline=c]
 $\begin{bNiceMatrix}[delimiters/color=red]
 1 & 2 \\
-3 & 4 
+3 & 4
 \end{bNiceMatrix}$
 \end{BVerbatim}
 $\begin{bNiceMatrix}[delimiters/color=red]
 1 & 2 \\
-3 & 4 
+3 & 4
 \end{bNiceMatrix}$
 
 \medskip
@@ -3612,7 +3695,7 @@
    {\downarrow}{\uparrow}{ccc}[margin]
 1 & 2 & 3 \\
 4 & 5 & 6 \\
-7 & 8 & 9 
+7 & 8 & 9
 \end{~emphase#NiceArrayWithDelims@}$
 \end{BVerbatim}
 %
@@ -3620,7 +3703,7 @@
    {\downarrow}{\uparrow}{ccc}[margin]
 1 & 2 & 3 \\
 4 & 5 & 6 \\
-7 & 8 & 9 
+7 & 8 & 9
 \end{NiceArrayWithDelims}$
 
 
@@ -3638,7 +3721,7 @@
 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. 
+\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
@@ -3646,7 +3729,7 @@
 lignes pointillées (cf.~p.~\pageref{Cdots}) et la déterminations des «coins»
 (cf. p.~\pageref{corners}).}
 
-\bigskip
+\medskip
 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
@@ -3670,31 +3753,31 @@
 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. 
+l'utilisateur.
 
-\bigskip
+\medskip
 \begin{BVerbatim}[baseline=c,boxwidth=11cm]
 $\begin{pNiceMatrix}[name=~emphase#ma-matrice@]
 1 & 2 & 3 \\
 4 & 5 & 6 \\
-7 & 8 & 9 
+7 & 8 & 9
 \end{pNiceMatrix}$
-\tikz[remember picture,overlay] 
-     \draw ~emphase#(ma-matrice-2-2)@ circle (2mm) ; 
+\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 
+7 & 8 & 9
 \end{pNiceMatrix}$
-\tikz[remember picture,overlay] 
-     \draw (ma-matrice-2-2) circle (2mm) ; 
+\tikz[remember picture,overlay]
+     \draw (ma-matrice-2-2) circle (2mm) ;
 
 \medskip
 Ne pas oublier les options |remember picture| et |overlay|.
 
 
-\bigskip
+\medskip
 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.
@@ -3705,22 +3788,22 @@
 $\begin{pNiceMatrix}
 1 & 2 & 3 \\
 4 & 5 & 6 \\
-7 & 8 & 9 
+7 & 8 & 9
 \CodeAfter
-\tikz \draw ~emphase#(2-2)@ circle (2mm) ; 
+\tikz \draw ~emphase#(2-2)@ circle (2mm) ;
 \end{pNiceMatrix}$
 \end{BVerbatim}
 $\begin{pNiceMatrix}
 1 & 2 & 3 \\
 4 & 5 & 6 \\
-7 & 8 & 9 
+7 & 8 & 9
 \CodeAfter
-\tikz \draw (2-2) circle (2mm) ; 
+\tikz \draw (2-2) circle (2mm) ;
 \end{pNiceMatrix}$
 
 
 
-\bigskip
+\medskip
 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}).
 
@@ -3741,10 +3824,52 @@
 \Body
 a & a + b & a + b + c \\
 a & a     & a + b  \\
-a & a     & a 
+a & a     & a
 \end{pNiceMatrix}\]
 
 
+\colorbox{yellow!50}{\textbf{Nouveau 6.3}}\enskip Les nœuds de la dernière
+colonne (hors éventuelle «colonne extérieure» spécifiée par |last-col|) peuvent
+aussi être désignés par $i$-|last|. De même, les nœuds de la dernière ligne
+peuvent être désignés par |last|-$j$.
+
+\medskip
+\subsubsection{Les colonnes V de varwidth}
+
+\label{node-V}
+Quand l'extension \pkg{varwidth} est chargée, les colonnes de type |V| définies
+par \pkg{varwidth} sont prises en charge par \pkg{nicematrix}. Il peut être
+intéressant de préciser que, pour une cellule située dans une colonne de type
+|V|, le nœud PGF/Tikz créé par \pkg{nicematrix} pour le contenu de cette cellule
+a une largeur ajustée au contenu de cette cellule. Cela est en contraste avec le
+cas des colonnes de type |p|, |m| ou |b| dans lesquelles les nœuds ont toujours
+une largeur égale à la largeur de la colonne.
+
+\begin{Verbatim}
+\begin{NiceTabular}{V{8cm}}
+\bfseries \large 
+Titre \\
+\lipsum[1] 
+\CodeAfter 
+  \tikz \draw [rounded corners] (1-1) -| (last-|2) -- (last-|1) |- (1-1) ; 
+\end{NiceTabular}
+\end{Verbatim}
+
+\begin{center}
+\begin{NiceTabular}{V{8cm}}
+\bfseries \large 
+Titre \\
+\lipsum[1] 
+\CodeAfter 
+  \tikz \draw [rounded corners] (1-1) -| (last-|2) -- (last-|1) |- (1-1) ; 
+\end{NiceTabular}
+\end{center}
+
+On a utilisé les nœuds indiquant la position des filets, qui sont présentés un
+peu plus loin, p.~\pageref{nodes-i}.
+
+
+
 \subsection{Les «nœuds moyens» et les «nœuds larges»}
 
 
@@ -3766,7 +3891,7 @@
 de ces nœuds.
 \[\begin{pNiceMatrix}[create-medium-nodes]
 \CodeBefore [create-cell-nodes]
-   \begin{tikzpicture} 
+   \begin{tikzpicture}
       [every node/.style = {fill = red!15, inner sep = 0 pt},
        name suffix = -medium]
    \node [fit = (1-1)] {} ;
@@ -3782,7 +3907,7 @@
 \Body
 a & a + b & a + b + c \\
 a & a     & a + b  \\
-a & a     & a 
+a & a     & a
 \end{pNiceMatrix}\]
 
 
@@ -3812,7 +3937,7 @@
 \Body
 a & a + b & a + b + c \\
 a & a     & a + b  \\
-a & a     & a 
+a & a     & a
 \end{pNiceMatrix}\]
 
 
@@ -3845,7 +3970,7 @@
 \Body
 a & a + b & a + b + c \\
 a & a     & a + b  \\
-a & a     & a 
+a & a     & a
 \end{pNiceMatrix}\]
 
 \medskip
@@ -3872,15 +3997,15 @@
 \Body
 a & a + b & a + b + c \\
 a & a     & a + b  \\
-a & a     & a 
+a & a     & a
 \end{pNiceMatrix}\]
 
 
-\bigskip
+\medskip
 \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
+\medskip
 \begin{minipage}[c]{7.5cm}
 Voici un tableau qui a été composé de la manière suivante :
 
@@ -3964,7 +4089,7 @@
 
 \subsection{Les nœuds indiquant la position des filets}
 
-\label{noeuds-i}
+\label{nodes-i}
 
 L'extension \pkg{nicematrix} crée un nœud PGF-Tikz nommé simplement $i$ (précédé
 du préfixe habituel) à l'intersection du filet horizontal de numéro $i$ et du
@@ -3980,21 +4105,21 @@
 \begin{NiceTabular}{ccc}[hvlines,rules={width=1pt,color=gray}]
        & tulipe & lys \\
 arum   &        & violette mauve \\
-muguet & dahlia 
+muguet & dahlia
 \CodeAfter
 \tiny
 \begin{tikzpicture}
 \foreach \i in {1,1.5,2,2.5,3,3.5,4}
-  { 
-    \fill [red] (\i) circle (0.5mm) ; 
-    \node [red,above right] at (\i) {\i} ; 
-  } 
+  {
+    \fill [red] (\i) circle (0.5mm) ;
+    \node [red,above right] at (\i) {\i} ;
+  }
 \end{tikzpicture}
 \end{NiceTabular}
 \end{center}
 
 
-\bigskip
+\medskip
 Si on utilise Tikz (on rappelle que \pkg{nicematrix} ne charge pas Tikz mais
 uniquement \textsc{pgf} qui est une sous-couche de Tikz), on peut donc accéder
 (dans le |\CodeAfter| mais aussi dans le |\CodeBefore|) à l'intersection du filet
@@ -4018,7 +4143,7 @@
 1 & 8 & 28 & 56 & 70 & 56 & 28 & 8 & 1
 \end{NiceMatrix}
 \end{Verbatim}
-% 
+%
 \[\begin{NiceMatrix}
 \CodeBefore
 \tikz \draw [fill=red!15] (7-|4) |- (8-|5) |- (9-|6) |- cycle ;
@@ -4034,7 +4159,7 @@
 1 & 8 & 28 & 56 & 70 & 56 & 28 & 8 & 1
 \end{NiceMatrix}\]
 
-\bigskip
+\medskip
 Les nœuds de la forme $i$|.5| peuvent être utilisés par exemple pour barrer une
 ligne (si on a chargé Tikz).
 
@@ -4043,8 +4168,8 @@
 $\begin{pNiceArray}{ccc|c}
 2 & 1 & 3 & 0 \\
 3 & 3 & 1 & 0 \\
-3 & 3 & 1 & 0 
-\CodeAfter 
+3 & 3 & 1 & 0
+\CodeAfter
   \tikz \draw [red] (~emphase#3.5 at -|1) -- (~emphase#3.5 at -|last) ;
 \end{pNiceArray}$
 \end{BVerbatim}
@@ -4051,8 +4176,8 @@
 $\begin{pNiceArray}{ccc|c}
 2 & 1 & 3 & 0 \\
 3 & 3 & 1 & 0 \\
-3 & 3 & 1 & 0 
-\CodeAfter 
+3 & 3 & 1 & 0
+\CodeAfter
   \tikz \draw [red] (3.5-|1) -- (3.5-|last) ;
 \end{pNiceArray}$
 
@@ -4062,7 +4187,7 @@
 \label{node-sub-matrix}
 
 La commande |\SubMatrix| disponible dans le |\CodeAfter| a été présentée
-p.~\pageref{sub-matrix}. 
+p.~\pageref{sub-matrix}.
 
 \smallskip
 Si une commande |\SubMatrix| est utilisée avec la clé |name| sous la forme
@@ -4109,7 +4234,7 @@
 
 \medskip
 Ces variables constituent le code du «|code-before|» (que l'on rentre souvent
-avec la syntaxte utilisant |\CodeBefore| et |\Body| en début d'environnement et
+avec la syntaxte utilisant |\CodeBefore| et |\Body| en début d'environnement) et
 du «|code-after|» (que l'on rentre souvent en fin d'environnement après le
 mot-clé |\CodeAfter|). 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
@@ -4140,17 +4265,17 @@
 \ExplSyntaxOn
 \cs_new_protected:Nn \__pantigny_crossbox:nnn
   {
-    \tikz \draw [ #3 ] 
-          ( #1 -| \int_eval:n { #2 + 1 } ) -- ( \int_eval:n { #1 + 1 } -| #2 ) 
-          ( #1 -| #2 ) -- ( \int_eval:n { #1 + 1 } -| \int_eval:n { #2 + 1 } ) ; 
+    \tikz \draw [ #3 ]
+          ( #1 -| \int_eval:n { #2 + 1 } ) -- ( \int_eval:n { #1 + 1 } -| #2 )
+          ( #1 -| #2 ) -- ( \int_eval:n { #1 + 1 } -| \int_eval:n { #2 + 1 } ) ;
   }
 
 \NewDocumentCommand \crossbox { ! O { } }
   {
     \tl_gput_right:Nx §emphase¤\g_nicematrix_code_after_tlμ
-      { 
-        \__pantigny_crossbox:nnn 
-          { \int_use:c { c at iRow } } 
+      {
+        \__pantigny_crossbox:nnn
+          { \int_use:c { c at iRow } }
           { \int_use:c { c at jCol } }
           { \exp_not:n { #1 } }
       }
@@ -4163,9 +4288,9 @@
 \ExplSyntaxOn
 \cs_new_protected:Nn \__pantigny_crossbox:nnn
   {
-    \tikz \draw [ #3 ] 
-          ( #1 -| \int_eval:n { #2 + 1 } ) -- ( \int_eval:n { #1 + 1 } -| #2 ) 
-          ( #1 -| #2 ) -- ( \int_eval:n { #1 + 1 } -| \int_eval:n { #2 + 1 } ) ; 
+    \tikz \draw [ #3 ]
+          ( #1 -| \int_eval:n { #2 + 1 } ) -- ( \int_eval:n { #1 + 1 } -| #2 )
+          ( #1 -| #2 ) -- ( \int_eval:n { #1 + 1 } -| \int_eval:n { #2 + 1 } ) ;
   }
 
 
@@ -4172,9 +4297,9 @@
 \NewDocumentCommand \crossbox { ! O { } }
   {
     \tl_gput_right:Nx \g_nicematrix_code_after_tl
-      { 
-        \__pantigny_crossbox:nnn 
-          { \int_use:c { c at iRow } } 
+      {
+        \__pantigny_crossbox:nnn
+          { \int_use:c { c at iRow } }
           { \int_use:c { c at jCol } }
           { \exp_not:n { #1 } }
       }
@@ -4181,7 +4306,7 @@
   }
 \ExplSyntaxOff
 
-\bigskip
+\medskip
 Voici un exemple d'utilisation :
 
 \medskip
@@ -4189,13 +4314,13 @@
 \begin{NiceTabular}{ccc}[hvlines]
 merlan & requin & cabillaud \\
 baleine & ~emphase#\crossbox[red]@ & morue \\
-mante & raie & poule 
+mante & raie & poule
 \end{NiceTabular}
 \end{BVerbatim}
 \begin{NiceTabular}{ccc}[hvlines]
 merlan & requin & cabillaud \\
 baleine & \crossbox[red] & morue \\
-mante & raie & poule 
+mante & raie & poule
 \end{NiceTabular}
 
 
@@ -4255,7 +4380,7 @@
 
 
 
-\subsection{Lignes diagonales} 
+\subsection{Lignes diagonales}
 
 \label{parallelization}
 
@@ -4270,6 +4395,8 @@
 \medskip
 Dans les exemples suivants, la première instruction |\Ddots| est marquée en couleur :
 
+
+
 \medskip
 \begin{scope}
 \begin{minipage}{9.5cm}
@@ -4290,7 +4417,7 @@
 a+b    & \Cdots & a+b & 1
 \end{pNiceMatrix}$
 
-\bigskip
+\medskip
 \NiceMatrixOptions{parallelize-diags=true}%
 \begin{minipage}{9.5cm}
 \begin{Verbatim}
@@ -4309,7 +4436,7 @@
 a+b    & \Cdots & a+b    & 1
 \end{pNiceMatrix}$
 
-\bigskip
+\medskip
 Il est possible de désactiver la parallélisation avec l'option
 |parallelize-diags| mise à |false|: \par\nobreak
 
@@ -4327,7 +4454,7 @@
 
 \end{scope}
 
-\bigskip
+\medskip
 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{.}
@@ -4339,7 +4466,7 @@
 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 : 
+suivantes :
 
 \begin{itemize}
 \item Une case implicite est vide. Par exemple, dans la matrice suivante
@@ -4347,7 +4474,7 @@
 \begin{Verbatim}
 \begin{pmatrix}
 a & b \\
-c 
+c
 \end{pmatrix}
 \end{Verbatim}
 
@@ -4370,7 +4497,7 @@
 
 \medskip
 \item Une case d'une colonne de type |p|, |m| ou |t| est toujours non vide.
-\emph{Attention} : Ne pas se fier à ce point car il est susceptible de changer. 
+\emph{Attention} : Ne pas se fier à ce point car il est susceptible de changer.
 
 \end{itemize}
 
@@ -4415,10 +4542,30 @@
 \NiceMatrixOptions{letter-for-dotted-lines=;}
 \end{Verbatim}
 
-\bigskip
+\medskip
 L'extension \pkg{nicematrix} n'est pas compatible avec la classe \cls{ieeeaccess}
-(car cette classe n'est pas compatible avec PGF/Tikz).
+(car cette classe n'est pas compatible avec PGF/Tikz).\footnote{Voir
+  \url{https://tex.stackexchange.com/questions/528975/error-loading-tikz-in-ieeeaccess-class}}
 
+\medskip
+Pour pouvoir utiliser \pkg{nicematrix} avec la classe \cls{aastex631}, on doit
+ajouter dans le préambule du fichier les lignes suivantes :
+
+\begin{Verbatim}
+\BeforeBegin{NiceTabular}{\let\begin\BeginEnvironment\let\end\EndEnvironment}
+\BeforeBegin{NiceArray}{\let\begin\BeginEnvironment}
+\BeforeBegin{NiceMatrix}{\let\begin\BeginEnvironment}
+\end{Verbatim}
+
+\medskip
+Pour pouvoir utiliser \pkg{nicematrix} avec la classe \cls{sn-jnl}, \pkg{pgf}
+doit être chargé avant le |\documentclass|:
+
+\begin{Verbatim}
+\RequirePackage{pgf}
+\documentclass{sn-jnl}
+\end{Verbatim}
+
 \section{Exemples}
 
 \subsection{Utilisation de la clé «tikz» de la commande \textbackslash Block}
@@ -4427,7 +4574,7 @@
 
 La clé |tikz| de la commande |\Block| n'est disponible que lorsque Tikz est
 chargé.\footnote{Par défaut, \pkg{nicematrix} ne charge que \textsc{pgf}, qui
-  est une sous-couche de Tikz}
+  est une sous-couche de Tikz.}
 
 Pour l'exemple suivant, la bibliothèque \tikz{patterns} de Tikz doit aussi être chargée.
 
@@ -4475,7 +4622,7 @@
 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
+\medskip
 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.}
@@ -4486,7 +4633,7 @@
 \begin{Verbatim}
 \ExplSyntaxOn
 \NewDocumentCommand ~emphase#\stars@ { m }
-  { \prg_replicate:nn { \value { ~#1 } } { $ \star $ } } 
+  { \prg_replicate:nn { \value { ~#1 } } { $ \star $ } }
 \ExplSyntaxOff
 \end{Verbatim}
 %
@@ -4497,13 +4644,13 @@
 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 
+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}|. 
+|widest*=\value{tabularnote}|.
 \begin{Verbatim}
-\NiceMatrixOptions 
+\NiceMatrixOptions
   {
-    notes = 
+    notes =
      {
        ~emphase#style = \stars{~#1} , @
        ~emphase#enumitem-keys = @
@@ -4520,16 +4667,16 @@
 \begin{scope}
 \ExplSyntaxOn
 \NewDocumentCommand \stars { m }
-  { \prg_replicate:nn { \value { #1 } } { $ \star $ } } 
-\NiceMatrixOptions 
+  { \prg_replicate:nn { \value { #1 } } { $ \star $ } }
+\NiceMatrixOptions
   {
-    notes = 
+    notes =
      {
        style = \stars{#1} ,
-       enumitem-keys = 
+       enumitem-keys =
         {
           widest* = \value{tabularnote} ,
-          align = right 
+          align = right
         }
      }
   }
@@ -4555,9 +4702,9 @@
 \toprule \RowStyle{\bfseries}
 Nom & Prénom & Date de naissance \\
 \midrule
-Achard\tabularnote{La famille Achard est une très ancienne famille du Poitou.} 
+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.} 
+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 \\
@@ -4573,7 +4720,7 @@
 
 Un exemple pour le résultant de deux polynômes :
 \par\nobreak
-\bigskip
+\medskip
 \begin{BVerbatim}
 \setlength{\extrarowheight}{1mm}
 \begin{vNiceArray}{cccc:ccc}[columns-width=6mm]
@@ -4583,11 +4730,11 @@
 a_p   &      &&a_0    &       &      &b_1   \\
       &\Ddots&&a_1    &b_q    &      &\Vdots\\
       &      &&\Vdots &       &\Ddots&      \\
-      &      &&a_p     &       &      &b_q    
+      &      &&a_p     &       &      &b_q
 \end{vNiceArray}
 \end{BVerbatim}
 
-\bigskip
+\medskip
 
 \begin{scope}
 \setlength{\extrarowheight}{1mm}
@@ -4598,9 +4745,9 @@
 a_p   &      &&a_0    &       &      &b_1   \\
       &\Ddots&&a_1    &b_q    &      &\Vdots\\
       &      &&\Vdots &       &\Ddots&      \\
-      &      &&a_p     &       &      &b_q    
+      &      &&a_p     &       &      &b_q
 \end{vNiceArray}\]
-\end{scope}   
+\end{scope}
 
 \vspace{2cm}
 Un exemple avec un système linéaire:
@@ -4612,7 +4759,7 @@
 0      & 0 & 1 &\Ddots &   & \Vdots &        & L_3 \gets L_3-L_1 \\
        &   &   &\Ddots &   &        & \Vdots & \Vdots \\
 \Vdots &   &   &\Ddots &   & 0      & \\
-0      &   &   &\Cdots & 0 & 1      & 0      & L_n \gets L_n-L_1 
+0      &   &   &\Cdots & 0 & 1      & 0      & L_n \gets L_n-L_1
 \end{pNiceArray}$
 \end{Verbatim}
 
@@ -4623,7 +4770,7 @@
 0      & 0 & 1 &\Ddots &   & \Vdots &        & L_3 \gets L_3-L_1 \\
        &   &   &\Ddots &   &        & \Vdots & \Vdots \\
 \Vdots &   &   &\Ddots &   & 0      & \\
-0      &   &   &\Cdots & 0 & 1      & 0      & L_n \gets L_n-L_1 
+0      &   &   &\Cdots & 0 & 1      & 0      & L_n \gets L_n-L_1
 \end{pNiceArray}\]
 
 
@@ -4693,10 +4840,10 @@
        &   & \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}} 
+\Vdots[line-style={solid,<->}]_{n \text{ rangées}}
        & 1 & 1 & 1 &  & 1 \\
        & 1 & 1 & 1 &  & 1 \\
-       & 1 & 1 & 1 & \Ldots & 1 
+       & 1 & 1 & 1 & \Ldots & 1
 \end{pNiceMatrix}$
 \end{Verbatim}
 
@@ -4710,7 +4857,7 @@
        & 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 
+       & 1 & 1 & 1 & \Ldots & 1
 \end{pNiceMatrix}\]
 \end{scope}
 
@@ -4730,7 +4877,7 @@
 \begin{Verbatim}[formatcom=\small\color{gray}]
 ~emphase#\begin{NiceMatrixBlock}[auto-columns-width]@
 \NiceMatrixOptions
-  { 
+  {
     light-syntax,
     last-col, code-for-last-col = \color{blue} \scriptstyle,
   }
@@ -4740,7 +4887,7 @@
 12  -8  7  5   3 {} ;
  3 -18 12  1   4    ;
 -3 -46 29 -2 -15    ;
- 9  10 -5  4   7 
+ 9  10 -5  4   7
 \end{pNiceArray}$
 
 \smallskip
@@ -4755,7 +4902,7 @@
 $\begin{pNiceArray}{rrrr|r}
 12 -8   7 5  3 ;
 0  64 -41 1 19 ;
-0   0   0 0  0 { L_3 \gets 3 L_2 + L_3 } 
+0   0   0 0  0 { L_3 \gets 3 L_2 + L_3 }
 \end{pNiceArray}$
 
 \smallskip
@@ -4767,10 +4914,10 @@
 ~emphase#\end{NiceMatrixBlock}@
 \end{Verbatim}
 
-\bigskip
+\medskip
 \begin{NiceMatrixBlock}[auto-columns-width]
 \NiceMatrixOptions
-  { 
+  {
     light-syntax,
     last-col, code-for-last-col = \color{blue} \scriptstyle ,
   }
@@ -4780,7 +4927,7 @@
 12  -8  7  5   3 {} ;
  3 -18 12  1   4    ;
 -3 -46 29 -2 -15    ;
- 9  10 -5  4   7 
+ 9  10 -5  4   7
 \end{pNiceArray}$
 
 \smallskip
@@ -4795,7 +4942,7 @@
 \quad $\begin{pNiceArray}{rrrr|r}
 12 -8   7 5  3 ;
 0  64 -41 1 19 ;
-0   0   0 0  0 { L_3 \gets 3 L_2 + L_3 } 
+0   0   0 0  0 { L_3 \gets 3 L_2 + L_3 }
 \end{pNiceArray}$\par\nobreak
 
 \smallskip
@@ -4805,7 +4952,7 @@
 \end{pNiceArray}$
 \end{NiceMatrixBlock}
 
-\bigskip
+\medskip
 On constate que la dernière matrice n'est pas parfaitement alignée avec les
 précédentes. C'est que les parenthèses, en LaTeX, n'ont pas toutes la même
 largeur suivant leur taille.
@@ -4817,7 +4964,7 @@
 \begin{Verbatim}[formatcom=\small\color{gray}]
 ~emphase#\begin{NiceMatrixBlock}[auto-columns-width]@
 \NiceMatrixOptions
-  { 
+  {
     ~emphase#delimiters/max-width@,
     light-syntax,
     last-col, code-for-last-col = \color{blue}\scriptstyle,
@@ -4828,7 +4975,7 @@
 12  -8  7  5   3 {} ;
  3 -18 12  1   4    ;
 -3 -46 29 -2 -15    ;
- 9  10 -5  4   7 
+ 9  10 -5  4   7
 \end{pNiceArray}$
 
 ...
@@ -4835,10 +4982,10 @@
 ~emphase#\end{NiceMatrixBlock}@
 \end{Verbatim}
 
-\bigskip
+\medskip
 \begin{NiceMatrixBlock}[auto-columns-width]
 \NiceMatrixOptions
-  { 
+  {
     delimiters/max-width,
     light-syntax,
     last-col, code-for-last-col = \color{blue}\scriptstyle,
@@ -4849,7 +4996,7 @@
 12  -8  7  5   3 {} ;
  3 -18 12  1   4    ;
 -3 -46 29 -2 -15    ;
- 9  10 -5  4   7 
+ 9  10 -5  4   7
 \end{pNiceArray}$
 
 \smallskip
@@ -4864,7 +5011,7 @@
 \quad $\begin{pNiceArray}{rrrr|r}
 12 -8   7 5  3 ;
 0  64 -41 1 19 ;
-0   0   0 0  0 { L_3 \gets 3 L_2 + L_3 } 
+0   0   0 0  0 { L_3 \gets 3 L_2 + L_3 }
 \end{pNiceArray}$
 
 \smallskip
@@ -4900,7 +5047,7 @@
 0  &  0   &0   &0  & 0 & L_3 \gets 3L_2+L_3 \\[1mm]
 12 & -8   &7   &5  & 3 \\
 0  & 64   &-41 & 1 & 19 \\
-~emphase#\CodeAfter [sub-matrix/vlines=4]@ 
+~emphase#\CodeAfter [sub-matrix/vlines=4]@
 ~emphase#   \SubMatrix({1-1}{4-5})@
 ~emphase#   \SubMatrix({5-1}{8-5})@
 ~emphase#   \SubMatrix({9-1}{11-5})@
@@ -4934,13 +5081,13 @@
 \end{NiceMatrix}\]
 \end{scope}
 
-\bigskip
+\medskip
 Dans ce tableau, les instructions |\SubMatrix| sont exécutés après la
 composition du tableau et les traits verticaux sont donc tracés sans espacer les
-colonnes. 
+colonnes.
 
 
-\bigskip
+\medskip
 \colorbox{yellow!50}{\textbf{Nouveau 6.2}}\enskip En fait, on peut avec la clé
 |vlines-in-sub-matrix| choisir un spécificateur dans le préambule du tableau
 pour indiquer des filets verticaux qui seront tracés dans les |\SubMatrix|
@@ -4950,10 +5097,10 @@
 \begin{Verbatim}
 \setlength{\extrarowheight}{1mm}
 \[\begin{NiceArray}
-   [ 
+   [
      ~emphase#vlines-in-sub-matrix=I@,
-     last-col, 
-     code-for-last-col = \scriptstyle \color{blue} 
+     last-col,
+     code-for-last-col = \scriptstyle \color{blue}
    ]
   {rrrrIr}
 12 &  -8  &  7 & 5 &  3 \\
@@ -4969,7 +5116,7 @@
 0  &  0   &0   &0  & 0 & L_3 \gets 3L_2+L_3 \\[1mm]
 12 & -8   &7   &5  & 3 \\
 0  & 64   &-41 & 1 & 19 \\
-\CodeAfter 
+\CodeAfter
    \SubMatrix({1-1}{4-5})
    \SubMatrix({5-1}{8-5})
    \SubMatrix({9-1}{11-5})
@@ -4983,10 +5130,10 @@
 \begin{scope}
 \setlength{\extrarowheight}{1mm}
 \[\begin{NiceArray}
-   [ 
+   [
      vlines-in-sub-matrix=I,
-     last-col, 
-     code-for-last-col = \scriptstyle \color{blue} 
+     last-col,
+     code-for-last-col = \scriptstyle \color{blue}
    ]
   {rrrrIr}
 12 &  -8  &  7 & 5 &  3 \\
@@ -5002,7 +5149,7 @@
 0  &  0   &0   &0  & 0 & L_3 \gets 3L_2+L_3 \\[1mm]
 12 & -8   &7   &5  & 3 \\
 0  & 64   &-41 & 1 & 19 \\
-\CodeAfter 
+\CodeAfter
    \SubMatrix({1-1}{4-5})
    \SubMatrix({5-1}{8-5})
    \SubMatrix({9-1}{11-5})
@@ -5049,10 +5196,10 @@
 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 |\CodeBefore|
 (ou avec |\rowcolor| dans une case de la rangée si on utilise la clé
-|colortbl-like| − même si \pkg{colortbl} n'est pas chargé). 
+|colortbl-like| − même si \pkg{colortbl} n'est pas chargé).
 
 
 \begin{Verbatim}
@@ -5060,7 +5207,7 @@
   ~emphase#\rowcolor{red!15}@A_{11} & A_{12} & A_{13} & A_{14} \\
   A_{21} & ~emphase#\rowcolor{red!15}@A_{22} & A_{23} & A_{24} \\
   A_{31} & A_{32} & ~emphase#\rowcolor{red!15}@A_{33} & A_{34} \\
-  A_{41} & A_{42} & A_{43} & ~emphase#\rowcolor{red!15}@A_{44}  
+  A_{41} & A_{42} & A_{43} & ~emphase#\rowcolor{red!15}@A_{44}
 \end{pNiceArray}
 \end{Verbatim}
 
@@ -5070,7 +5217,7 @@
   \rowcolor{red!15}A_{11} & A_{12} & A_{13} & A_{14} \\
   A_{21} & \rowcolor{red!15}A_{22} & A_{23} & A_{24} \\
   A_{31} & A_{32} & \rowcolor{red!15}A_{33} & A_{34} \\
-  A_{41} & A_{42} & A_{43} & \rowcolor{red!15}A_{44}  
+  A_{41} & A_{42} & A_{43} & \rowcolor{red!15}A_{44}
 \end{pNiceArray}\]
 
 
@@ -5077,7 +5224,7 @@
 \medskip
 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. 
+matrice.
 
 \medskip
 Cet exemple et les suivants nécessitent d'avoir chargé Tikz (\pkg{nicematrix} ne
@@ -5098,7 +5245,7 @@
 
 \tikzset{highlight/.style={rectangle,
                            fill=red!15,
-                           rounded corners = 0.5 mm, 
+                           rounded corners = 0.5 mm,
                            inner sep=1pt,
                            fit=#1}}
 
@@ -5106,7 +5253,7 @@
 \begin{Verbatim}
 \tikzset{highlight/.style={rectangle,
                            fill=red!15,
-                           rounded corners = 0.5 mm, 
+                           rounded corners = 0.5 mm,
                            inner sep=1pt,
                            fit=~#1}}
 
@@ -5121,7 +5268,7 @@
 \end{Verbatim}
 
 \[\begin{bNiceMatrix}
-\CodeBefore [create-cell-nodes] 
+\CodeBefore [create-cell-nodes]
   \tikz \node [highlight = (2-1) (2-3)] {} ;
 \Body
 0 & \Cdots & 0 \\
@@ -5134,7 +5281,7 @@
 
 \vspace{1cm}
 On considère maintenant la matrice suivante. Si on veut surligner chaque rangée
-de la matrice, on peut utiliser la technique précédente trois fois. 
+de la matrice, on peut utiliser la technique précédente trois fois.
 
 \begin{Verbatim}
 \[\begin{pNiceArray}{ccc}[last-col]
@@ -5197,11 +5344,11 @@
 a & a     & a         & L_3
 \end{pNiceArray}\]
 
-                          
 
+
 \subsection{Utilisation de \textbackslash SubMatrix dans le \textbackslash CodeBefore}
 
-Dans l'exemple suivant, on illustre le produit mathématique de deux matrices. 
+Dans l'exemple suivant, on illustre le produit mathématique de deux matrices.
 
 L'ensemble de la figure est un environnement |{NiceArray}| et les trois paires
 de parenthèses ont été rajoutées avec |\SubMatrix| dans le |\CodeBefore|.
@@ -5209,7 +5356,7 @@
 
 \tikzset{highlight/.style={rectangle,
                            fill=red!15,
-                           rounded corners = 0.5 mm, 
+                           rounded corners = 0.5 mm,
                            inner sep=1pt,
                            fit=#1}}%
 %
@@ -5220,7 +5367,7 @@
   \SubMatrix({7-2}{11-6})
   \SubMatrix({7-7}{11-11})
   \begin{tikzpicture}
-    \node [highlight = (9-2) (9-6)] { } ; 
+    \node [highlight = (9-2) (9-6)] { } ;
     \node [highlight = (2-9) (6-9)] { } ;
   \end{tikzpicture}
 \Body
@@ -5232,7 +5379,7 @@
     &        &        &        &        &        & b_{n1} & \Cdots & b_{nj} & \Cdots & b_{nn} \\[3mm]
     & a_{11} & \Cdots &        &        & a_{1n} \\
     & \Vdots &        &        &        & \Vdots &        &        & \Vdots \\
-\color{blue}\scriptstyle L_i 
+\color{blue}\scriptstyle L_i
     & a_{i1} & \Cdots & a_{ik} & \Cdots & a_{in} & \Cdots &        & c_{ij} \\
     & \Vdots &        &        &        & \Vdots \\
     & a_{n1} & \Cdots &        &        & a_{nn}  \\
@@ -5245,7 +5392,7 @@
 \begin{Verbatim}
 \tikzset{highlight/.style={rectangle,
                            fill=red!15,
-                           rounded corners = 0.5 mm, 
+                           rounded corners = 0.5 mm,
                            inner sep=1pt,
                            fit=~#1}}
 \end{Verbatim}
@@ -5257,7 +5404,7 @@
   \SubMatrix({7-2}{11-6})
   \SubMatrix({7-7}{11-11})
   \begin{tikzpicture}
-    \node [highlight = (9-2) (9-6)] { } ; 
+    \node [highlight = (9-2) (9-6)] { } ;
     \node [highlight = (2-9) (6-9)] { } ;
   \end{tikzpicture}
 \Body
@@ -5269,7 +5416,7 @@
     &        &        &        &        &        & b_{n1} & \Cdots & b_{nj} & \Cdots & b_{nn} \\[3mm]
     & a_{11} & \Cdots &        &        & a_{1n} \\
     & \Vdots &        &        &        & \Vdots &        &        & \Vdots \\
-\color{blue}\scriptstyle L_i 
+\color{blue}\scriptstyle L_i
     & a_{i1} & \Cdots & a_{ik} & \Cdots & a_{in} & \Cdots &        & c_{ij} \\
     & \Vdots &        &        &        & \Vdots \\
     & a_{n1} & \Cdots &        &        & a_{nn}  \\
@@ -5286,7 +5433,7 @@
 une traduction anglaise de la documentation ici présente, ainsi que le code
 source commenté et un historique des versions.
 
-\bigskip
+\medskip
 Les versions successives du fichier |nicematrix.sty| fournies par
 TeXLive sont disponibles sur le serveur \textsc{svn} de TeXLive :
 

Modified: trunk/Master/texmf-dist/doc/latex/nicematrix/nicematrix.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/source/latex/nicematrix/nicematrix.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/nicematrix/nicematrix.dtx	2021-10-24 21:02:12 UTC (rev 60863)
+++ trunk/Master/texmf-dist/source/latex/nicematrix/nicematrix.dtx	2021-10-24 21:05:28 UTC (rev 60864)
@@ -15,8 +15,8 @@
 %
 % \fi
 % \iffalse
-\def\myfileversion{6.2}
-\def\myfiledate{2021/09/09}
+\def\myfileversion{6.3}
+\def\myfiledate{2021/10/18}
 %
 %
 %<*batchfile>
@@ -56,8 +56,9 @@
 \usetikzlibrary{fit,patterns}
 \usepackage{nicematrix}
 \usepackage{siunitx}
+\usepackage{varwidth}
+\usepackage[auto-lang=false]{lipsum}
 
-
 \NewDocumentEnvironment {scope} {} {} {}
 \def\interitem{\vspace{7mm plus 2 mm minus 3mm}}          
 \def\emphase{\bgroup\color{RoyalPurple}\let\next=}
@@ -66,7 +67,6 @@
 \titlespacing*{\section}{0pt}{6.5ex plus 1ex minus .2ex}{4.3ex plus .2ex}
 \titlespacing*{\subsection}{0pt}{4.5ex plus 1ex minus .2ex}{2ex plus .2ex}
 \usepackage{footnotehyper}
-\usepackage{varwidth}
 \def\LetterAt{@}
 \parindent 0pt
 \skip \footins = 2 \bigskipamount
@@ -160,7 +160,7 @@
 % |texmf| tree. However, the best is to install \pkg{nicematrix} with a TeX
 % distribution such as MiKTeX, TeXlive or MacTeX.
 %
-% \bigskip
+% \medskip
 % \emph{Remark}: If you use LaTeX via Internet with, for example, Overleaf, you
 % can upload the file |nicematrix.sty| in the repertory of your 
 % project in order to take full advantage of the latest version de
@@ -170,13 +170,13 @@
 % \small
 % \url{https:www.tug.org/svn/texlive/trunk/Master/texmf-dist/tex/latex/nicematrix/nicematrix.sty}}
 % 
-% \bigskip
+% \medskip
 % This package can be used with |xelatex|, |lualatex|, |pdflatex| but also by
 % the classical workflow |latex|-|dvips|-|ps2pdf| (or Adobe Distiller).
 % \textsl{However, the file nicematrix.dtx of the present documentation should
 % be compiled with XeLaTeX.}
 %
-% \bigskip
+% \medskip
 % This package requires and \textbf{loads} the packages \pkg{l3keys2e},
 % \pkg{array}, \pkg{amsmath}, \pkg{pgfcore} and the module \pkg{shapes} of
 % \textsc{pgf} (\pkg{tikz}, which is a layer over \textsc{pgf} is \emph{not}
@@ -183,8 +183,11 @@
 % loaded). The final user only has to load the package with
 % |\usepackage{nicematrix}|.
 %
+% \medskip
+% If you use TeXLive as TeX distribution, you should note that TeXLive 2020 at
+% least is required by \pkg{nicematrix}.
 %
-% \bigskip
+% \medskip
 % The idea of \pkg{nicematrix} is to create \textsc{pgf} nodes under the cells
 % and the positions of the rules of the tabular created by \pkg{array} and to
 % use these nodes to develop new features. As usual with \textsc{pgf}, the
@@ -193,11 +196,11 @@
 % compilations}.\footnote{If you use Overleaf, Overleaf will do automatically
 % the right number of compilations.}
 % 
-% \bigskip
+% \medskip
 % Most features of \pkg{nicematrix} may be used without explicit use of
 % \textsc{pgf} or Tikz (which, in fact, is not loaded by default).
 % 
-% \bigskip
+% \medskip
 % A command |\NiceMatrixOptions| is provided to fix the options (the
 % scope of the options fixed by this command is the current TeX group: they are
 % semi-global). 
@@ -239,9 +242,9 @@
 % \pkg{nicematrix}): |{matrix}|, |{pmatrix}|, etc. 
 %
 % \medskip
-% L'environnement |{NiceTabularX}| is similar to the environment |{tabularx}|
+% The environment |{NiceTabularX}| is similar to the environment |{tabularx}|
 % from the eponymous package.\footnote{In fact, it's possible to use directly the
-% |X| columns in the environnement |{NiceTabular}| (and the required
+% |X| columns in the environment |{NiceTabular}| (and the required
 % width for the tabular is fixed by the key |width|): cf. p.~\pageref{X-columns}}.
 %
 % \medskip
@@ -468,9 +471,9 @@
 % block extends until the last row (idem for the columns).
 %
 % \item The second argument is the content of the block. It's possible to use
-% |\\| in that content to have a content on several lines. In |{NiceTabular}|
-% the content of the block is composed in text mode whereas, in the other
-% environments, it is composed in math mode.
+% |\\| in that content to have a content on several lines. In |{NiceTabular}|,
+% |{NiceTabular*}| and |{NiceTabularX}|, the content of the block is composed in
+% text mode whereas, in the other environments, it is composed in math mode.
 % \end{itemize}
 % 
 %
@@ -479,17 +482,17 @@
 %
 % \medskip
 % \begin{BVerbatim}[baseline=c,boxwidth=10.6cm]
-% $\begin{bNiceArray}{ccc|c}[margin]
+% $\begin{bNiceArray}{cw{c}{1cm}c|c}[margin]
 % ~emphase#\Block{3-3}{A}@ & & & 0 \\
-% & \hspace*{1cm} & & \Vdots \\
+% & & & \Vdots \\
 % & & & 0 \\
 % \hline
 % 0 & \Cdots& 0 & 0
 % \end{bNiceArray}$
 % \end{BVerbatim}
-% $\begin{bNiceArray}{ccc|c}[margin]
+% $\begin{bNiceArray}{cw{c}{1cm}c|c}[margin]
 % \Block{3-3}{A} & & & 0 \\
-% & \hspace*{1cm} & & \Vdots \\
+% & & & \Vdots \\
 % & & & 0 \\
 % \hline
 % 0 & \Cdots& 0 & 0
@@ -507,9 +510,9 @@
 %
 % \medskip
 % \begin{BVerbatim}[baseline=c,boxwidth=10.6cm]
-% $\begin{bNiceArray}{ccc|c}[margin]
+% $\begin{bNiceArray}{cw{c}{1cm}c|c}[margin]
 % \Block{3-3}~emphase#<\Large>@{A} & & & 0 \\
-% & \hspace*{1cm} & & \Vdots \\
+% 0 & & & \Vdots \\
 % & & & 0 \\
 % \hline
 % 0 & \Cdots& 0 & 0
@@ -516,9 +519,9 @@
 % \end{bNiceArray}$
 % \end{BVerbatim}
 % \begin{scope}
-% $\begin{bNiceArray}{ccc|c}[margin]
+% $\begin{bNiceArray}{cw{c}{1cm}c|c}[margin]
 % \Block{3-3}<\Large>{A} & & & 0 \\
-% & \hspace*{1cm} & & \Vdots \\
+% & & & \Vdots \\
 % & & & 0 \\
 % \hline
 % 0 & \Cdots& 0 & 0
@@ -532,17 +535,17 @@
 %
 % \medskip
 % \begin{BVerbatim}[baseline=c,boxwidth=10.6cm]
-% $\begin{bNiceArray}{ccc|c}[margin]
+% $\begin{bNiceArray}{cw{c}{1cm}c|c}[margin]
 % \Block~emphase#[r]@{3-3}<\LARGE>{A} & & & 0 \\
-% & \hspace*{1cm} & & \Vdots \\
+% & & & \Vdots \\
 % & & & 0 \\
 % \hline
 % 0 & \Cdots& 0 & 0
 % \end{bNiceArray}$
 % \end{BVerbatim}
-% $\begin{bNiceArray}{ccc|c}[margin]
+% $\begin{bNiceArray}{cw{c}{1cm}c|c}[margin]
 % \Block[r]{3-3}<\LARGE>{A} & & & 0 \\
-% & \hspace*{1cm} & & \Vdots \\
+% & & & \Vdots \\
 % & & & 0 \\
 % \hline
 % 0 & \Cdots& 0 & 0
@@ -575,13 +578,14 @@
 % when it has a multi-line content (the lines are separated by |\\|);
 % \item the keys |hvlines| draws all the vertical and horizontal rules in the
 % block;
-% \item \colorbox{yellow!50}{\textbf{New 5.19}}\enskip when the key |tikz| is
-% used, the Tikz path corresponding of the rectangle which delimits the block is
-% executed with Tikz\footnote{Tikz should be loaded (by default,
-% \pkg{nicematrix} only loads \textsc{pgf}) and, if it's not, an error will be
-% raised.} by using as options the value of that key |tikz| (which must be a
-% list of keys allowed for a Tikz path). For examples, cf.
-% p.~\pageref{tikz-key-examples}.
+% \item when the key |tikz| is used, the Tikz path corresponding of the
+% rectangle which delimits the block is executed with Tikz\footnote{Tikz should
+% be loaded (by default, \pkg{nicematrix} only loads \textsc{pgf}) and, if it's
+% not, an error will be raised.} by using as options the value of that key
+% |tikz| (which must be a list of keys allowed for a Tikz path). For examples,
+% cf. p.~\pageref{tikz-key-examples};
+% \item \colorbox{yellow!50}{\textbf{New 6.3}}\enskip the key |name| provides a
+% name to the rectangular Tikz node corresponding to the block.
 % \end{itemize}
 % 
 % \interitem
@@ -596,13 +600,13 @@
 % \bigskip
 % \begin{BVerbatim}
 % \begin{NiceTabular}{cwc{2cm}wc{3cm}c}
-% rose      & tulipe & marguerite & dahlia \\
-% violette  
+% rose      & tulip & daisy & dahlia \\
+% violet  
 % & ~emphase#\Block[draw=red,fill=[RGB]{204,204,255},rounded-corners]{2-2}@
-%                      ~emphase#{\LARGE De très jolies fleurs}@  
-%    & & souci \\
-% pervenche & & & lys \\
-% arum      & iris & jacinthe & muguet 
+%                      ~emphase#{\LARGE Some beautiful flowers}@  
+%    & & marigold \\
+% iris & & & lis \\
+% arum & periwinkle & forget-me-not &  hyacinth
 % \end{NiceTabular}
 % \end{BVerbatim}
 %
@@ -609,11 +613,11 @@
 % \medskip
 % \begin{center}
 % \begin{NiceTabular}{cwc{2cm}wc{3cm}c}
-% rose      & tulipe & marguerite & dahlia \\
-% violette  & \Block[draw=red,fill=[RGB]{204,204,255},rounded-corners]{2-2}
-%   {\LARGE De très jolies fleurs} & & souci \\
-% pervenche & & & lys \\
-% arum      & iris & jacinthe & muguet 
+% rose      & tulip & daisy & dahlia \\
+% violet  & \Block[draw=red,fill=[RGB]{204,204,255},rounded-corners]{2-2}
+%   {\LARGE Some beautiful flowers} & & marigold \\
+%  iris & & & lis \\
+%  arum      & periwinkle & forget-me-not & hyacinth 
 % \end{NiceTabular}
 % \end{center}
 %
@@ -993,7 +997,8 @@
 % 
 % The keys |hlines| and |vlines| (which draw, of course, horizontal and vertical
 % rules) take in as value a list of numbers which are the numbers of the rules
-% to draw.
+% to draw.\footnote{It's possible to put in that list some intervals of integers
+% with the syntax $i$|-|$j$.}
 %
 % In fact, for the environments with delimiters (such as |{pNiceMatrix}| or
 % |{bNiceArray}|), the key |vlines| don't draw the exterior rules (this is
@@ -1306,9 +1311,9 @@
 % \begin{Verbatim}
 % \begin{pNiceArray}{~textsl#preamble@}
 % ~emphase#\CodeBefore@
-% ~textsl#instructions of the code-before@
+%   ~textsl#instructions of the code-before@
 % ~emphase#\Body@
-% ~textsl#contents of the environnement@
+%   ~textsl#contents of the environment@
 % \end{pNiceArray}
 % \end{Verbatim}
 %
@@ -1771,43 +1776,50 @@
 %
 % \label{RowStyle}
 %
-% \colorbox{yellow!50}{\bfseries New 5.18}\enskip The command |\RowStyle| takes
-% in as argument some formatting intructions that will be applied to each cell
-% on the rest of the current row.
+% The command |\RowStyle| takes in as argument some formatting intructions that
+% will be applied to each cell on the rest of the current row.
 %
 % \medskip
 % That command also takes in as optional argument (between square brackets)
 % a list of key-value pairs. 
 % \begin{itemize}
+% \item \colorbox{yellow!50}{\bfseries New 6.3}\enskip The key |nb-rows| sets
+% the number of rows to which the specifications of the current command will
+% apply. 
 % \item The keys |cell-space-top-limit|, |cell-space-bottom-limit| and
 % |cell-space-limits| are available with the same meaning that the corresponding
 % global keys (cf. p.~\pageref{cell-space}).
-% \item \colorbox{yellow!50}{\bfseries New 6.1}\enskip The key |color| sets the
+% \item \colorbox{yellow!50}{\bfseries New 6.3}\enskip The key |rowcolor| sets
+% the color of the background and the key |color| sets the
 % color of the text.\footnote{The key |color| uses the command
 % |\color| but inserts also an instruction |\leavevmode| before. This
 % instruction prevents a extra vertical space in the cells which belong to
 % columns of type |p|, |b|, |m| and |X| (which start in
 % vertical mode).}
+% \item \colorbox{yellow!50}{\bfseries New 6.3}\enskip The key |bold| enforces
+% bold characters for the cells of the row, both in math mode and text mode.
 % \end{itemize}
 % 
 % \medskip
-% \begin{BVerbatim}[boxwidth=11cm,baseline=c]
-% \begin{NiceTabular}{cccc}[colortbl-like]
+% \begin{BVerbatim}[boxwidth=12cm,baseline=c]
+% \begin{NiceTabular}{cccc}
 % \hline
 % ~emphase#\RowStyle[cell-space-limits=3pt]{\rotate}@
 % first & second & third & fourth \\
-% \rowcolor{blue!50}~emphase#\RowStyle[color=white]{\sffamily}@
+% ~emphase#\RowStyle[nb-rows=2,rowcolor=blue!50,color=white]{\sffamily}@
 % 1 & 2 & 3 & 4 \\
+% I & II & III & IV 
 % \end{NiceTabular}
 % \end{BVerbatim}
-% \begin{NiceTabular}{cccc}[colortbl-like]
+% \begin{NiceTabular}{cccc}
 % \hline
 % \RowStyle[cell-space-limits=3pt]{\rotate}
 % first & second & third & fourth \\
-% \rowcolor{blue!50}\RowStyle[color=white]{\sffamily} 
+% \RowStyle[nb-rows=2,color=white]{\sffamily}
 % 1 & 2 & 3 & 4 \\
+% I & II & III & IV \\
 % \end{NiceTabular}
-% 
+%
 % \medskip
 % The command |\rotate| is described p.~\pageref{rotate}.
 %
@@ -1944,34 +1956,102 @@
 % \end{array}$
 % \end{NiceMatrixBlock}
 %
+% \subsection{The columns V of varwidth}
+%
+% \colorbox{yellow!50}{\textbf{New 6.3}}
+%
+% \smallskip
+% Let's recall first the behaviour of the environment |{varwidth}| of the
+% eponymous package \pkg{varwidth}. That environment is similar to the classical
+% environment |{minipage}| but the width provided in the argument is only the
+% \emph{maximal} width of the created box. In the general case, the width of the
+% box constructed by an environment |{varwidth}| is the natural width of its
+% contents.
+%
+% \medskip
+% That point is illustrated on the following examples.
+%
+% \medskip
+% \begin{BVerbatim}[baseline=c,boxwidth=6cm]
+% \fbox{%
+% \begin{~emphase#varwidth@}{8cm}
+% \begin{itemize}
+% \item first item
+% \item second item
+% \end{itemize}
+% \end{~emphase#varwidth@}}
+% \end{BVerbatim}
+% \fbox{\begin{varwidth}{8cm}
+% \begin{itemize}
+% \item first item
+% \item second item
+% \end{itemize}
+% \end{varwidth}}
+%
+% \bigskip
+% \begin{BVerbatim}[baseline=c,boxwidth=6cm]
+% \fbox{%
+% \begin{~emphase#minipage@}{8cm}
+% \begin{itemize}
+% \item first item
+% \item second item
+% \end{itemize}
+% \end{~emphase#minipage@}}
+% \end{BVerbatim}
+% \fbox{\begin{minipage}{8cm}
+% \begin{itemize}
+% \item first item
+% \item second item
+% \end{itemize}
+% \end{minipage}}
+%
+%
+% \bigskip
+% The package \pkg{varwidth} provides also the column type |V|. A column of type
+% |V{|$\langle$\textsl{dim}$\rangle$|}| encapsulates all its cells in a
+% |{varwidth}| with the argument $\langle$\textsl{dim}$\rangle$ (and does also some tuning).
+%
+% \smallskip
+% When the package \pkg{varwidth} is loaded, the columns |V| of \pkg{varwidth}
+% are supported by \pkg{nicematrix}. Concerning \pkg{nicematrix}, one of the
+% interests of this type of columns is that, for a cell of a column of type~|V|,
+% the PGF/Tikz node created by \pkg{nicematrix} for the content of that cell has
+% a width adjusted to the content of the cell : cf. p.~\pageref{node-V}.
+%
+%
 % \subsection{The columns X}
 %
 % \label{X-columns}
 % \colorbox{yellow!50}{\textbf{New 6.0}}
 %
+% \smallskip
 % The environment |{NiceTabular}| provides |X| columns similar to those provided
 % by the environment |{tabularx}| of the eponymous package.
 %
-% The required width of the tabular may be specified with the key |width|. The
-% initial value of this parameter is |\linewidth|.
+% The required width of the tabular may be specified with the key |width| (in
+% |{NiceTabular}| or in |\NiceMatrixOptions|). The initial value of this
+% parameter is |\linewidth| (and not |\textwidth|).
 %
 % For sake of similarity with the environment |{tabularx}|, \pkg{nicematrix}
 % also provides an environment |{NiceTabularX}| with a first mandatory argument
 % which is the width of the tabular.\footnote{If \pkg{tabularx} is loaded, one
 % must use |{NiceTabularX}| (and not |{NiceTabular}|) in order to use the
-% columns `X` (this point comes from a conflict in the definitions of the
-% specifier `X`).}
+% columns |X| (this point comes from a conflict in the definitions of the
+% specifier |X|).}
 %
 % As with the packages \pkg{tabu} and \pkg{tabularray}, the specifier |X| takes
 % in an optional argument (between square brackets) which is a list of keys.
 % \begin{itemize}
-% \item It's possible to give a weight for the column by providing an integer
-% directly as argument of the specifier |X|. For example, a column |X[2]| will
-% have a width double of the width of a column |X| (which has a weight equal to $1$).
+% \item It's possible to give a weight for the column by providing a positive
+% integer directly as argument of the specifier |X|. For example, a column
+% |X[2]| will have a width double of the width of a column |X| (which has a
+% weight equal to $1$).\footnote{The negative values of the weight, as provided
+% by \pkg{tabu} (which is now obsolete), are not supported by \pkg{nicematrix}.
+% If such a value is used, an error will be raised.}
 % \item It's possible to specify an horizontal alignment with one of the
-% letters |l|, |c| and |r| (which inserts respectively |\raggedright|,
+% letters |l|, |c| and |r| (which insert respectively |\raggedright|,
 % |\centering| and |\raggedleft| followed by |\arraybackslash|).
-% \item It's possible to specify a vertical alignement with one of the keys
+% \item It's possible to specify a vertical alignment with one of the keys
 % |t| (alias |p|), |m| and |b| (which construct respectively columns of type
 % |p|, |m| and |b|). The default value is |t|.
 % \end{itemize}
@@ -2659,7 +2739,7 @@
 % 
 % \medskip
 % Moreover, two special commands are available in the |\CodeAfter|: |line| and 
-% |\SubMatrix|. 
+% |\SubMatrix|. We will now present these commands.
 %
 % \subsection{The command \textbackslash line in the \textbackslash CodeAfter}
 % 
@@ -2775,9 +2855,9 @@
 % \end{NiceArray}$
 %
 % \bigskip
-% \colorbox{yellow!50}{\bfseries New 5.18}\enskip In fact, the command
-% |\SubMatrix| also takes in two optional arguments specified by the
-% traditional symbols |^| and |_| for material in superscript and subscript.
+% In fact, the command |\SubMatrix| also takes in two optional arguments
+% specified by the traditional symbols |^| and |_| for material in superscript
+% and subscript.
 %
 % \medskip
 % \begin{scope}
@@ -3692,7 +3772,48 @@
 % a & a     & a 
 % \end{pNiceMatrix}\]
 %
+%
+% \colorbox{yellow!50}{\bfseries New 6.3}\enskip The nodes of the last column
+% (excepted the potential «last column» specified by |last-col|) may also be
+% indicated by $i$-|last|. Similarly, the nodes of the last row may be indicated
+% by |last|-$j$.
 % 
+% \subsubsection{Les colonnes V de varwidth}
+%
+% \label{node-V}
+% When the extension \pkg{varwidth} is loaded, the columns of the type |V|
+% defined by \pkg{varwidth} are supported by \pkg{nicematrix}. It may be
+% interessant to notice that, for a cell of a column of type |V|, the PGF/Tikz
+% node created by \pkg{nicematrix} for the content of that cell has a width
+% adjusted to the content of the cell. This is in contrast to the case of the
+% columns of type |p|, |m| or |b| for which the nodes have always a width equal
+% to the width of the column.
+%
+% \begin{Verbatim}
+% \begin{NiceTabular}{V{8cm}}
+% \bfseries \large 
+% Titre \\
+% \lipsum[1] 
+% \CodeAfter 
+%   \tikz \draw [rounded corners] (1-1) -| (last-|2) -- (last-|1) |- (1-1) ; 
+% \end{NiceTabular}
+% \end{Verbatim}
+%
+%
+% \begin{center}
+% \begin{NiceTabular}{V{8cm}}
+% \bfseries \large 
+% Titre \\
+% \lipsum[1] 
+% \CodeAfter 
+%   \tikz \draw [rounded corners] (1-1) -| (last-|2) -- (last-|1) |- (1-1) ; 
+% \end{NiceTabular}
+% \end{center}
+%
+% We have used the nodes corresponding to the position of the potential rules,
+% which are described below (cf. p.~\pageref{nodes-i}).
+%
+% 
 % \subsection{The ``medium nodes'' and the ``large nodes''}
 % 
 % In fact, the package \pkg{nicematrix} can create ``extra nodes'': the ``medium
@@ -4300,7 +4421,7 @@
 % \medskip
 % \item A cell of a column of type |p|, |m| or |t| is always considered as not
 % emtpy. \emph{Caution} : One should not rely upon that point because it may
-% change if a future version of \pkg{nicematrix}.
+% change in a future version of \pkg{nicematrix}.
 % % \end{itemize}
 %
 %
@@ -4345,7 +4466,28 @@
 %
 % \bigskip
 % The package \pkg{nicematrix} is not compatible with the class \cls{ieeeaccess}
-% (because that class is not compatible with PGF/Tikz).
+% (because that class is not compatible with PGF/Tikz).\footnote{See
+%  \url{https://tex.stackexchange.com/questions/528975/error-loading-tikz-in-ieeeaccess-class}} 
+%
+% \bigskip
+% In order to use \pkg{nicematrix} with the class \cls{aastex631}, you have to
+% add the following lines in the preamble of your document :
+%
+% \begin{Verbatim}
+% \BeforeBegin{NiceTabular}{\let\begin\BeginEnvironment\let\end\EndEnvironment}
+% \BeforeBegin{NiceArray}{\let\begin\BeginEnvironment}
+% \BeforeBegin{NiceMatrix}{\let\begin\BeginEnvironment}
+% \end{Verbatim}
+%
+% \bigskip
+% In order to use \pkg{nicematrix} with the class \cls{sn-jnln}, \pkg{pgf} must
+% be loaded before the |\documentclass|:
+%
+% \begin{Verbatim}
+% \RequirePackage{pgf}
+% \documentclass{sn-jnl}
+% \end{Verbatim}
+%
 % 
 % \section{Examples}
 %
@@ -5203,7 +5345,7 @@
 % \end{Verbatim}
 %
 % 
-%\section{Implementation}
+% \section{Implementation}
 %
 % By default, the package \pkg{nicematrix} doesn't patch any existing code.
 %
@@ -5302,8 +5444,12 @@
 \bool_new:N \c_@@_enumitem_loaded_bool
 \bool_new:N \c_@@_tabularx_loaded_bool
 \bool_new:N \c_@@_tikz_loaded_bool
+\bool_new:N \c_@@_varwidth_loaded_bool
 \AtBeginDocument
   {
+    \@ifpackageloaded { varwidth }
+      { \bool_set_true:N \c_@@_varwidth_loaded_bool }
+      { }
     \@ifpackageloaded { arydshln }
       { \bool_set_true:N \c_@@_arydshln_loaded_bool }
       { }
@@ -5329,7 +5475,8 @@
 %
 % That's why we create |\c_@@_pgfortikzpicture_tl| and
 % |\c_@@_endpgfortikzpicture_tl| which will be used to construct in a
-% |\AtBeginDocument| the correct version of some commands.
+% |\AtBeginDocument| the correct version of some commands. The tokens
+% |\exp_not:N| are mandatory.
 %    \begin{macrocode}
         \bool_set_true:N \c_@@_tikz_loaded_bool 
         \tl_const:Nn \c_@@_pgfortikzpicture_tl { \exp_not:N \tikzpicture }
@@ -5653,7 +5800,7 @@
             \renewcommand*{\NC at rewrite@S}[1][]
               {
 %    \end{macrocode}
-% |\@temptokena| is a toks (not supported by \pkg{expl3}).
+% |\@temptokena| is a toks (not supported by the L3 programming layer).
 %    \begin{macrocode}
                 \@temptokena \exp_after:wN 
                   { \tex_the:D \@temptokena \@@_S: [ ##1 ] } 
@@ -5773,6 +5920,14 @@
 %    \end{macrocode}
 % 
 % \bigskip
+% The following counter corresponds to the key |nb-rows| of the command
+% |\RowStyle|. 
+%    \begin{macrocode}
+\int_new:N \l_@@_key_nb_rows_int
+%    \end{macrocode}
+% 
+% 
+% \bigskip
 % The following token list will contain the type of horizontal alignment of the
 % current cell as provided by the corresponding column. The possible values are
 % |r|, |l|, |c|. For exemple, a column |p[l]{3cm}| will provide the value |l|
@@ -5798,6 +5953,13 @@
 \dim_new:N \g_@@_blocks_ht_dim
 \dim_new:N \g_@@_blocks_dp_dim
 %    \end{macrocode}
+%
+% \bigskip
+% The following dimension correspond to the key |width| (which may be fixed in
+% |\NiceMatrixOptions| but also in an environment |{NiceTabular}|).
+%    \begin{macrocode}
+\dim_new:N \l_@@_width_dim
+%    \end{macrocode}
 % 
 % \bigskip
 % The sequence |\g_@@_names_seq| will be the list of all the names of
@@ -5933,6 +6095,7 @@
 % \bigskip
 % The following token list corresponds to the option |code-after| (it's also
 % possible to set the value of that parameter with the keyword |\CodeAfter|).
+% That parameter is \emph{public}.
 %    \begin{macrocode}
 \tl_new:N \g_nicematrix_code_after_tl
 %    \end{macrocode}
@@ -6089,10 +6252,10 @@
 \seq_new:N \g_@@_blocks_seq
 %    \end{macrocode}
 % We also manage a sequence of the \emph{positions} of the blocks. In that
-% sequence, each block is represented by only the four first components:
-% |{|\textsl{imin}|}{|\textsl{jmin}|}{|\textsl{imax}|}{|\textsl{jmax}|}|. A
-% block with the key |hvlines| won't appear in that sequence (otherwise, the
-% lines in that block would not be drawn!).
+% sequence, each block is represented by only five components:
+% |{|\textsl{imin}|}{|\textsl{jmin}|}{|\textsl{imax}|}{|\textsl{jmax}|}{|%
+% \textsl{name}|}|. A block with the key |hvlines| won't appear in that
+% sequence (otherwise, the lines in that block would not be drawn!).
 %    \begin{macrocode}
 \seq_new:N \g_@@_pos_of_blocks_seq
 %    \end{macrocode}
@@ -6105,8 +6268,9 @@
 % dotted lines are created in the array by |\Cdots|, |\Vdots|, |\Ddots|, etc.
 % However, their positions, that is to say, their extremities, will be
 % determined only after the construction of the array. In this sequence, each
-% item contains four components: 
-% |{|\textsl{imin}|}{|\textsl{jmin}|}{|\textsl{imax}|}{|\textsl{jmax}|}|.
+% item contains five components: 
+% |{|\textsl{imin}|}{|\textsl{jmin}|}{|\textsl{imax}|}{|\textsl{jmax}|}{|%
+% \textsl{name}|}|.
 %    \begin{macrocode}
 \seq_new:N \g_@@_pos_of_xdots_seq
 %    \end{macrocode}
@@ -6141,8 +6305,9 @@
 %    \end{macrocode}
 % 
 % \medskip
-% The following flag will be raised if the key |width| has been raised. You use
-% it to raise an error when this key is used while no column |X| is used.
+% The following flag will be raised if the key |width| is used in an environment
+% |{NiceTabular}| (not in a comamnd |\NiceMatrixOptions|). You use it to raise
+% an error when this key is used while no column |X| is used.
 %    \begin{macrocode}
 \bool_new:N \l_@@_width_used_bool
 %    \end{macrocode}
@@ -6171,7 +6336,7 @@
 %
 % \medskip
 % The following sequence will be used when the command |\SubMatrix| is used in
-% the |code-before| (and not in the |\CodeAfter|). It will contain the position of
+% the |\CodeBefore| (and not in the |\CodeAfter|). It will contain the position of
 % all the sub-matrices specified in the |code-before|. Each sub-matrix is
 % represented by an ``object'' of the forme |{|$i$|}{|$j$|}{|$k$|}{|$l$|}| 
 % where $i$ and $j$ are the number of row and column of the upper-left cell and 
@@ -6277,11 +6442,6 @@
 \bool_new:N \l_@@_dotted_bool
 %    \end{macrocode}
 %
-% \bigskip
-% The following dimension will be used to trim the rules drawn in the array.
-%    \begin{macrocode}
-\dim_new:N \l_@@_trim_dim 
-%    \end{macrocode}
 % 
 % \bigskip
 % \textbf{Variables for the exterior rows and columns}\par\nobreak
@@ -6373,7 +6533,45 @@
 %    \end{macrocode}
 % This boolean is set to |false| at the end of |\@@_pre_array_ii:|.
 % \end{itemize}
+%
+% \bigskip 
+% \textbf{Some utilities}
+%
+%    \begin{macrocode}
+\cs_set_protected:Npn \@@_cut_on_hyphen:w #1-#2\q_stop
+  {
+    \tl_set:Nn \l_tmpa_tl { #1 }
+    \tl_set:Nn \l_tmpb_tl { #2 }
+  }
+%    \end{macrocode}
+%
 % 
+% The following takes as argument the name of a |clist| and which should be a
+% list of intervals of integers. It \emph{expands} that list, that is to say,
+% it replaces (by a sort of |mapcan| or |flat_map|) the interval by the explicit
+% list of the integers.
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_expand_clist:N #1 
+  {
+    \clist_if_in:NnF #1 { all }
+      {
+        \clist_clear:N \l_tmpa_clist 
+        \clist_map_inline:Nn #1 
+          {  
+            \tl_if_in:nnTF { ##1 } { - }
+              { \@@_cut_on_hyphen:w ##1 \q_stop }
+              { 
+                \tl_set:Nn \l_tmpa_tl { ##1 } 
+                \tl_set:Nn \l_tmpb_tl { ##1 } 
+              }
+            \int_step_inline:nnn { \l_tmpa_tl } { \l_tmpb_tl }
+              { \clist_put_right:Nn \l_tmpa_clist { ####1 } }
+          }
+        \tl_set_eq:NN #1 \l_tmpa_clist
+     }
+  }
+%    \end{macrocode}
+% 
 % \bigskip
 % \subsection*{The command \textbackslash tabularnote}
 %
@@ -6603,7 +6801,7 @@
 %    \end{macrocode}
 %
 % \medskip
-% The command |\@@_pgf_rect_node:nnn| is a variant of |\@@_pgf_rect_node:nnnn|:
+% The command |\@@_pgf_rect_node:nnn| is a variant of |\@@_pgf_rect_node:nnnnn|:
 % it takes two \textsc{pgf} points as arguments instead of the four dimensions
 % which are the coordinates.
 %    \begin{macrocode}
@@ -7195,6 +7393,8 @@
 %    \begin{macrocode}
 \keys_define:nn { NiceMatrix / NiceMatrixOptions }
   { 
+    width .code:n = \dim_set:Nn \l_@@_width_dim { #1 } ,
+    width .value_required:n = true ,
     last-col .code:n = \tl_if_empty:nF { #1 }
                          { \@@_error:n { last-col~non~empty~for~NiceMatrixOptions } } 
                        \int_zero:N \l_@@_last_col_int ,
@@ -7370,6 +7570,7 @@
   {
 %    \end{macrocode}
 %  The dimension |width| will be used if at least a column of type |X| is used.
+%  If there is no column of type |X|, an error will be raised.
 %    \begin{macrocode}
     width .code:n = \dim_set:Nn \l_@@_width_dim { #1 } 
                     \bool_set_true:N \l_@@_width_used_bool ,
@@ -7409,10 +7610,10 @@
     \tl_gclear:N \g_@@_post_action_cell_tl
 %    \end{macrocode}
 % At the beginning of the cell, we link |\CodeAfter| to a command which do
-% \emph{not} begin with |\omit| (whereas the standard version of |\CodeAfter|
-% begins with |\omit|).
+% begins with |\\| (whereas the standard version of |\CodeAfter| begins does
+% not).
 %    \begin{macrocode}
-    \cs_set_eq:NN \CodeAfter \@@_CodeAfter_i:n
+    \cs_set_eq:NN \CodeAfter \@@_CodeAfter_i:
 %    \end{macrocode}
 % We increment |\c at jCol|, which is the counter of the columns. 
 %    \begin{macrocode}
@@ -7425,10 +7626,9 @@
     \int_compare:nNnT \c at jCol = 1
       { \int_compare:nNnT \l_@@_first_col_int = 1 \@@_begin_of_row: }
 %    \end{macrocode}
-% The content of the cell is composed in the box |\l_@@_cell_box| because we want
-% to compute some dimensions of the box. The |\hbox_set_end:| corresponding to
-% this |\hbox_set:Nw| will be in the |\@@_cell_end:| (and the potential
-% |\c_math_toggle_token| also).
+% The content of the cell is composed in the box |\l_@@_cell_box|. The
+% |\hbox_set_end:| corresponding to this |\hbox_set:Nw| will be in the
+% |\@@_cell_end:| (and the potential |\c_math_toggle_token| also).
 %    \begin{macrocode}
     \hbox_set:Nw \l_@@_cell_box 
     \bool_if:NF \l_@@_NiceTabular_bool 
@@ -7448,7 +7648,6 @@
     \color { nicematrix } 
 %    \end{macrocode}
 %
-% 
 %    \begin{macrocode}
     \g_@@_row_style_tl
 %    \end{macrocode}
@@ -7485,7 +7684,6 @@
 %    \begin{macrocode}
 \cs_new_protected:Npn \@@_begin_of_row:
   {
-    \tl_gclear:N \g_@@_row_style_tl
     \int_gincr:N \c at iRow 
     \dim_gset_eq:NN \g_@@_dp_ante_last_row_dim \g_@@_dp_last_row_dim 
     \dim_gset:Nn \g_@@_dp_last_row_dim { \box_dp:N \@arstrutbox }
@@ -7691,17 +7889,17 @@
         \hbox_set:Nn \l_@@_cell_box 
           { 
             \box_move_up:nn { \box_ht:N \l_@@_cell_box} 
-              \hbox_overlap_left:n 
-                { 
-                  \pgfsys at markposition 
-                    { \@@_env: - \int_use:N \c at iRow - \int_use:N \c at jCol - NW } 
+            \hbox_overlap_left:n 
+              { 
+                \pgfsys at markposition 
+                  { \@@_env: - \int_use:N \c at iRow - \int_use:N \c at jCol - NW } 
 %    \end{macrocode}
 % I don't know why the following adjustement is needed when the compilation is
 % done with XeLaTeX or with the classical way |latex|, |divps|, |ps2pdf| (or
 % Adobe Distiller). However, it seems to work.
 %    \begin{macrocode}
-                  #1 
-                }
+                #1 
+              }
             \box_use:N \l_@@_cell_box 
             \box_move_down:nn { \box_dp:N \l_@@_cell_box }
               \hbox_overlap_left:n 
@@ -7865,8 +8063,8 @@
       {
         \@@_create_row_node:
 %    \end{macrocode}
-% We don't draw the rules of the key |hlines| (or |hvlines|) but we reserve the
-% vertical space for theses rules.
+% We don't draw now the rules of the key |hlines| (or |hvlines|) but we reserve the
+% vertical space for theses rules (the rules will be drawn by \textsc{pgf}).
 %    \begin{macrocode}
         \tl_if_empty:NF \l_@@_hlines_clist 
           {
@@ -7955,12 +8153,18 @@
 % into account the color of the encompassing text. As a workaround, you peek the
 % color in force at the beginning of the environment and we will it in each cell.
 %    \begin{macrocode}
-        \xglobal \colorlet { nicematrix } { . } 
+    \xglobal \colorlet { nicematrix } { . } 
 %    \end{macrocode}
 % The number of letters |X| in the preamble of the array.
 %    \begin{macrocode}
-        \int_gzero:N \g_@@_total_X_weight_int
+    \int_gzero:N \g_@@_total_X_weight_int
 %    \end{macrocode}
+%
+%    \begin{macrocode}
+    \@@_expand_clist:N \l_@@_hlines_clist
+    \@@_expand_clist:N \l_@@_vlines_clist
+%    \end{macrocode}
+% 
 % If \pkg{booktabs} is loaded, we have to patch the macro |\@BTnormal| which is
 % a macro of \pkg{booktabs}. The macro |\@BTnormal| draws an horizontal rule but
 % it occurs after a vertical skip done by a low level TeX command. When this
@@ -8112,7 +8316,6 @@
     \seq_gclear:N \g_@@_multicolumn_sizes_seq
 %    \end{macrocode}
 % 
-%
 % The counter |\c at iRow| will be used to count the rows of the array (its
 % incrementation will be in the first cell of the row). 
 %    \begin{macrocode}
@@ -8329,54 +8532,6 @@
   }
 %    \end{macrocode}
 %
-% \bigskip
-%    \begin{macrocode}
-\keys_define:nn { NiceMatrix / RowStyle }
-  {
-    cell-space-top-limit .code:n = 
-      { 
-        \tl_gput_right:Nn \g_@@_row_style_tl
-          {
-            \tl_gput_right:Nn \g_@@_post_action_cell_tl 
-              { \dim_set:Nn \l_@@_cell_space_top_limit_dim { #1 } }
-          }
-      } ,
-    cell-space-top-limit .value_required:n = true ,
-    cell-space-bottom-limit .code:n = 
-      { 
-        \tl_gput_right:Nn \g_@@_row_style_tl
-          {
-            \tl_gput_right:Nn \g_@@_post_action_cell_tl 
-              { \dim_set:Nn \l_@@_cell_space_bottom_limit_dim { #1 } }
-          }
-      } ,
-    cell-space-bottom-limit .value_required:n = true ,
-    cell-space-limits .meta:n = 
-      {
-        cell-space-top-limit = #1 ,
-        cell-space-bottom-limit = #1 ,
-      } ,
-    color .code:n = 
-      {
-        \leavevmode \color { #1 }
-        \tl_gput_right:Nn \g_@@_row_style_tl
-          { \leavevmode \color { #1 } }
-      } ,
-    color .value_required:n = true ,
-    unknown .code:n = \@@_error:n { Unknown~key~for~RowStyle } 
-  }
-%    \end{macrocode}
-%
-% \bigskip
-%    \begin{macrocode}
-\NewDocumentCommand \@@_RowStyle:n { O { } m }
-  { 
-    \tl_gset:Nn \g_@@_row_style_tl { #2 } 
-    \keys_set:nn { NiceMatrix / RowStyle } { #1 }
-    #2
-    \ignorespaces
-  }
-%    \end{macrocode}
 % 
 % \bigskip
 % \subsection*{The \textbackslash CodeBefore}
@@ -8398,8 +8553,8 @@
     \int_set_eq:NN \g_@@_row_total_int { \seq_item:Nn \c_@@_size_seq 3 }
     \int_set_eq:NN \g_@@_col_total_int { \seq_item:Nn \c_@@_size_seq 6 }
 %    \end{macrocode}
-% 
 %
+%
 % Now, we will create all the |col| nodes and |row| nodes with the informations
 % written in the |aux| file. You use the technique described in the page~1229 of
 % |pgfmanual.pdf|, version~3.1.4b.
@@ -8441,7 +8596,13 @@
     \endpgfpicture
 %    \end{macrocode}
 %
+% \medskip
+% Now, the recreation of the nodes of the blocks \emph{which have a name}.
 %    \begin{macrocode}
+    \@@_create_blocks_nodes:
+%    \end{macrocode}
+%
+%    \begin{macrocode}
     \bool_if:NT \c_@@_tikz_loaded_bool
       {  
         \tikzset
@@ -8472,7 +8633,7 @@
     \group_begin:
 %    \end{macrocode}
 %
-% We compose the |code-before| in math mode in order to nullify the spaces put
+% We compose the |\CodeBefore| in math mode in order to nullify the spaces put
 % by the user between instructions in the |code-before|.
 %    \begin{macrocode}
     \bool_if:NT \l_@@_NiceTabular_bool \c_math_toggle_token
@@ -8572,11 +8733,67 @@
               }
           }
       }
+    \int_step_inline:nn \c at iRow
+      { 
+        \pgfnodealias 
+          { \@@_env: - ##1 - last } 
+          { \@@_env: - ##1 - \int_use:N \c at jCol } 
+      }
+    \int_step_inline:nn \c at jCol
+      { 
+        \pgfnodealias 
+          { \@@_env: - last - ##1 } 
+          { \@@_env: - \int_use:N \c at iRow - ##1 } 
+      }
     \@@_create_extra_nodes:
   }
 %    \end{macrocode}
 %
+% \bigskip
 %    \begin{macrocode}
+\cs_new_protected:Npn \@@_create_blocks_nodes:
+  {
+    \pgfpicture
+    \pgf at relevantforpicturesizefalse
+    \pgfrememberpicturepositiononpagetrue
+    \seq_map_inline:Nn \g_@@_pos_of_blocks_seq
+      { \@@_create_one_block_node:nnnnn ##1 }
+    \endpgfpicture
+  }
+%    \end{macrocode}
+% 
+% The following command is called |\@@_create_one_block_node:nnnnn| but, in
+% fact, it creates a node only if the last argument (|#5|) which is the name of
+% the block, is not empty.\footnote{Moreover, there is also in the list
+% |\g_@@_pos_of_blocks_seq| the positions of the dotted lines (created by
+% |\Cdots|, etc.) and, for these entries, there is, of course, no name (the
+% fifth component is empty).}
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_create_one_block_node:nnnnn #1 #2 #3 #4 #5 
+  {
+    \tl_if_empty:nF { #5 }
+      {
+        \@@_qpoint:n { col - #2 }
+        \dim_set_eq:NN \l_tmpa_dim \pgf at x 
+        \@@_qpoint:n { #1 }
+        \dim_set_eq:NN \l_tmpb_dim \pgf at y
+        \@@_qpoint:n { col - \@@_succ:n { #4 } }
+        \dim_set_eq:NN \l_tmpc_dim \pgf at x
+        \@@_qpoint:n { \@@_succ:n { #3 } }
+        \dim_set_eq:NN \l_tmpd_dim \pgf at y
+        \@@_pgf_rect_node:nnnnn
+          { \@@_env: - #5 }
+          { \dim_use:N \l_tmpa_dim }
+          { \dim_use:N \l_tmpb_dim }
+          { \dim_use:N \l_tmpc_dim }
+          { \dim_use:N \l_tmpd_dim }
+      }
+  }
+%    \end{macrocode}
+%
+%
+% \bigskip
+%    \begin{macrocode}
 \cs_new_protected:Npn \@@_patch_for_revtex:
   {
     \cs_set_eq:NN \@addamp \@addamp at LaTeX
@@ -8602,7 +8819,7 @@
 \NewDocumentEnvironment { NiceArrayWithDelims } 
   { m m O { } m ! O { } t \CodeBefore }
   { 
-     \bool_if:NT \c_@@_revtex_bool \@@_patch_for_revtex:
+    \bool_if:NT \c_@@_revtex_bool \@@_patch_for_revtex:
 %    \end{macrocode}
 %
 %    \begin{macrocode}
@@ -9055,19 +9272,26 @@
        \@@_newcolumntype W [ 2 ] { \@@_W: { ##1 } { ##2 } }
 %    \end{macrocode}
 %
+% \bigskip
+% If the package \pkg{varwidth} has defined the column type |V|, we protect from
+% expansion by redefining it to |\@@_V:| (which will be catched by our system).
+%    \begin{macrocode}
+      \cs_if_exist:NT \NC at find@V { \@@_newcolumntype V { \@@_V: } }
+%    \end{macrocode}
+%
 % First, we have to store our preamble in the token register |\@temptokena|
 % (those ``token registers'' are \emph{not} supported by the L3 programming layer).
 %    \begin{macrocode}
-        \exp_args:NV \@temptokena \g_@@_preamble_tl 
+      \exp_args:NV \@temptokena \g_@@_preamble_tl 
 %    \end{macrocode}
 % Initialisation of a flag used by \pkg{array} to detect the end of the expansion.
 %    \begin{macrocode}
-        \@tempswatrue
+      \@tempswatrue
 %    \end{macrocode}
 % The following line actually does the expansion (it's has been copied from
 % |array.sty|). The expanded version is still in |\@temptokena|.
 %    \begin{macrocode}
-        \@whilesw \if at tempswa \fi { \@tempswafalse \the \NC at list }
+      \@whilesw \if at tempswa \fi { \@tempswafalse \the \NC at list }
 %    \end{macrocode}
 %
 % 
@@ -9080,24 +9304,24 @@
 % |\@@_patch_preamble:n|. In the same time, we will count the columns with the
 % counter |\c at jCol|.
 %    \begin{macrocode}
-        \int_gzero:N \c at jCol
-        \tl_gclear:N \g_@@_preamble_tl 
+      \int_gzero:N \c at jCol
+      \tl_gclear:N \g_@@_preamble_tl 
 %    \end{macrocode}
 % |\g_tmpb_bool| will be raised if you have a \verb+|+ at the end of the preamble.
 %    \begin{macrocode}
-        \bool_gset_false:N \g_tmpb_bool
-        \tl_if_eq:NnTF \l_@@_vlines_clist { all } 
-          { 
-            \tl_gset:Nn \g_@@_preamble_tl 
-              { ! { \skip_horizontal:N \arrayrulewidth } }
-          }
-          {
-            \clist_if_in:NnT \l_@@_vlines_clist 1 
-              { 
-                \tl_gset:Nn \g_@@_preamble_tl 
-                  { ! { \skip_horizontal:N \arrayrulewidth } }
-              }
-          }
+      \bool_gset_false:N \g_tmpb_bool
+      \tl_if_eq:NnTF \l_@@_vlines_clist { all } 
+        { 
+          \tl_gset:Nn \g_@@_preamble_tl 
+            { ! { \skip_horizontal:N \arrayrulewidth } }
+        }
+        {
+          \clist_if_in:NnT \l_@@_vlines_clist 1 
+            { 
+              \tl_gset:Nn \g_@@_preamble_tl 
+                { ! { \skip_horizontal:N \arrayrulewidth } }
+            }
+        }
 %    \end{macrocode}
 % The sequence |\g_@@_cols_vlsim_seq| will contain the numbers of the columns
 % where you will to have to draw vertical lines in the potential sub-matrices
@@ -9209,27 +9433,29 @@
         p { \@@_patch_preamble_iv:n #1 }
         b { \@@_patch_preamble_iv:n #1 }
         m { \@@_patch_preamble_iv:n #1 }
-        \@@_w: { \@@_patch_preamble_v:nnnn { }                          #1 } 
-        \@@_W: { \@@_patch_preamble_v:nnnn { \cs_set_eq:NN \hss \hfil } #1 } 
-        \@@_S: { \@@_patch_preamble_vi:n }
-        (  { \@@_patch_preamble_vii:nn #1 }
-        [  { \@@_patch_preamble_vii:nn #1 }
-        \{ { \@@_patch_preamble_vii:nn #1 }
-        )  { \@@_patch_preamble_viii:nn #1 }       
-        ]  { \@@_patch_preamble_viii:nn #1 }       
-        \} { \@@_patch_preamble_viii:nn #1 }       
-        X  { \@@_patch_preamble_ix:n }
+        \@@_V:  { \@@_patch_preamble_v:n }
+        V { \@@_patch_preamble_v:n } 
+        \@@_w: { \@@_patch_preamble_vi:nnnn { }                          #1 } 
+        \@@_W: { \@@_patch_preamble_vi:nnnn { \cs_set_eq:NN \hss \hfil } #1 } 
+        \@@_S: { \@@_patch_preamble_vii:n }
+        (  { \@@_patch_preamble_viii:nn #1 }
+        [  { \@@_patch_preamble_viii:nn #1 }
+        \{ { \@@_patch_preamble_viii:nn #1 }
+        )  { \@@_patch_preamble_ix:nn #1 }       
+        ]  { \@@_patch_preamble_ix:nn #1 }       
+        \} { \@@_patch_preamble_ix:nn #1 }       
+        X  { \@@_patch_preamble_x:n }
 %    \end{macrocode}
 % When \pkg{tabularx} is loaded, a local redefinition of the specifier `X` is
 % done to replace `X` by `\@@_X`. Thus, our column type `X` will be used in the
 % `{NiceTabularX}`. 
 %    \begin{macrocode}
-        \@@_X  { \@@_patch_preamble_ix:n }
+        \@@_X { \@@_patch_preamble_x:n }
         \q_stop { }
       }
       { 
         \str_if_eq:VnTF \l_@@_letter_for_dotted_lines_str { #1 }
-          { \@@_patch_preamble_xi:n #1 }
+          { \@@_patch_preamble_xii:n #1 }
           {
             \str_if_eq:VnTF \l_@@_letter_vlism_tl { #1 }
               { 
@@ -9270,7 +9496,7 @@
 % We increment the counter of columns and then we test for the presence of a |<|.
 %    \begin{macrocode}
     \int_gincr:N \c at jCol
-    \@@_patch_preamble_x:n
+    \@@_patch_preamble_xi:n
   }
 %    \end{macrocode}
 % 
@@ -9404,18 +9630,19 @@
 %    \begin{macrocode}
     \str_set:Nn \l_@@_hpos_col_str { j }
     \keys_set:nn { WithArrows / p-column } { #1 }
-    \@@_patch_preamble_iv_iv:n { #2 }
+    \@@_patch_preamble_iv_iv:nn { #2 } { minipage }
   }
 %    \end{macrocode}
 % 
 % \medskip
-% The argument is the width of the column.
+% The first argument is the width of the column. The second is the type of
+% environment: |minipage| or |varwidth|. 
 %    \begin{macrocode}
-\cs_new_protected:Npn \@@_patch_preamble_iv_iv:n #1 
+\cs_new_protected:Npn \@@_patch_preamble_iv_iv:nn #1 #2
   {
     \use:x 
       { 
-        \@@_patch_preamble_iv_v:nnnnnn
+        \@@_patch_preamble_iv_v:nnnnnnn
           { \str_if_eq:VnTF \l_@@_vpos_col_str { p } { t } { b } }
           { \dim_eval:n { #1 } }
           {
@@ -9441,6 +9668,7 @@
           { \str_if_eq:VnT \l_@@_vpos_col_str { m } \@@_center_cell_box: }
           { \str_if_eq:VnT \l_@@_hpos_col_str { si } \siunitx_cell_begin:w }
           { \str_if_eq:VnT \l_@@_hpos_col_str { si } \siunitx_cell_end: }
+          { #2 }
       }
 %    \end{macrocode}
 %
@@ -9447,7 +9675,7 @@
 % We increment the counter of columns, and then we test for the presence of a |<|.
 %    \begin{macrocode}
     \int_gincr:N \c at jCol
-    \@@_patch_preamble_x:n
+    \@@_patch_preamble_xi:n
   }
 %    \end{macrocode}
 % 
@@ -9460,16 +9688,20 @@
 % column.
 % 
 % |#3| is the coding for the horizontal position of the content of the cell
-% (|\centering|, |\raggedright|, |\raggedleft| or nothing).
+% (|\centering|, |\raggedright|, |\raggedleft| or nothing). It's also possible
+% to put in that |#3| some code to fix the value of |\l_@@_hpos_cell_str| which
+% will be available in each cell of the column.
 %
-% |#4| is an extra-code which contains |\l_@@_center_cell_box| (when the column
+% |#4| is an extra-code which contains |\@@_center_cell_box:| (when the column
 % is a |m| column) or nothing (in the other cases).
 %
 % |#5| is a code put just before the |c|.
 %
 % |#6| is a code put just after the |c|.
+%
+% |#7| is the type of environment: |minipage| or |varwidth|.
 %    \begin{macrocode}
-\cs_new_protected:Npn \@@_patch_preamble_iv_v:nnnnnn #1 #2 #3 #4 #5 #6 
+\cs_new_protected:Npn \@@_patch_preamble_iv_v:nnnnnnn #1 #2 #3 #4 #5 #6 #7
   {
     \tl_gput_right:Nn \g_@@_preamble_tl
       {
@@ -9481,7 +9713,7 @@
 %    \begin{macrocode}
             \dim_set:Nn \l_@@_col_width_dim { #2 }
             \@@_cell_begin:w 
-            \begin { minipage } [ #1 ] { #2 }
+            \begin { #7 } [ #1 ] { #2 }
 %    \end{macrocode}
 % The following lines have been taken from |array.sty|.
 %    \begin{macrocode}
@@ -9509,7 +9741,8 @@
 % The following line has been taken from |array.sty|.
 %    \begin{macrocode}
             \@finalstrut \@arstrutbox
-            \end { minipage } 
+            % \bool_if:NT \g_@@_rotate_bool { \raggedright \hsize = 3 cm }
+            \end { #7 } 
 %    \end{macrocode}
 % If the letter in the preamble is |m|, |#3| will be equal to
 % |\@@_center_cell_box:| (see just below).
@@ -9549,7 +9782,7 @@
                     ( \box_ht:N \l_@@_cell_box - \box_ht:N \@arstrutbox 
                     + \baselineskip ) / 2 
                   }
-                { \box_use:N \l_@@_cell_box }
+                  { \box_use:N \l_@@_cell_box }
               }
           } 
       }
@@ -9556,11 +9789,35 @@
   }
 %    \end{macrocode}
 % 
+% \medskip
+% For |V| (similar to the |V| of \pkg{varwidth}).
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_patch_preamble_v:n #1
+  {
+    \str_if_eq:nnTF { #1 } { [ }
+      { \@@_patch_preamble_v_i:w [ }
+      { \@@_patch_preamble_v_i:w [ ] { #1 } }
+  }
+\cs_new_protected:Npn \@@_patch_preamble_v_i:w [ #1 ]
+  { \@@_patch_preamble_v_ii:nn { #1 } }
+\cs_new_protected:Npn \@@_patch_preamble_v_ii:nn #1 #2
+  {
+    \str_set:Nn \l_@@_vpos_col_str { p }
+    \str_set:Nn \l_@@_hpos_col_str { j }
+    \keys_set:nn { WithArrows / p-column } { #1 }
+    \bool_if:NTF \c_@@_varwidth_loaded_bool
+      { \@@_patch_preamble_iv_iv:nn { #2 } { varwidth } }
+      { 
+        \@@_error:n { varwidth~not~loaded }
+        \@@_patch_preamble_iv_iv:nn { #2 } { minipage } 
+      }
+  }
+%    \end{macrocode}
 % 
 % \medskip
 % For |w| and |W|
 %    \begin{macrocode}
-\cs_new_protected:Npn \@@_patch_preamble_v:nnnn #1 #2 #3 #4
+\cs_new_protected:Npn \@@_patch_preamble_vi:nnnn #1 #2 #3 #4
   {  
     \tl_gput_right:Nn \g_@@_preamble_tl
       {
@@ -9589,7 +9846,7 @@
 % We increment the counter of columns and then we test for the presence of a |<|.
 %    \begin{macrocode}
     \int_gincr:N \c at jCol
-    \@@_patch_preamble_x:n
+    \@@_patch_preamble_xi:n
   }
 %    \end{macrocode}
 %
@@ -9598,17 +9855,17 @@
 % during the first expansion of the preamble (done with the tools of standard
 % LaTeX and \pkg{array}).
 %    \begin{macrocode}
-\cs_new_protected:Npn \@@_patch_preamble_vi:n #1
+\cs_new_protected:Npn \@@_patch_preamble_vii:n #1
   {
     \str_if_eq:nnTF { #1 } { [ }
-      { \@@_patch_preamble_vi_i:w [ }
-      { \@@_patch_preamble_vi_i:w [ ] { #1 } }
+      { \@@_patch_preamble_vii_i:w [ }
+      { \@@_patch_preamble_vii_i:w [ ] { #1 } }
   }
 %    \end{macrocode}
 % 
 %    \begin{macrocode}
-\cs_new_protected:Npn \@@_patch_preamble_vi_i:w [ #1 ]
-  { \@@_patch_preamble_vi_ii:n { #1 } }
+\cs_new_protected:Npn \@@_patch_preamble_vii_i:w [ #1 ]
+  { \@@_patch_preamble_vii_ii:n { #1 } }
 %    \end{macrocode}
 %
 % For version of \pkg{siunitx} at least equal to 3.0, the adaptation is different
@@ -9621,7 +9878,7 @@
   {
     \cs_if_exist:NTF \siunitx_cell_begin:w 
       { 
-        \cs_new_protected:Npn \@@_patch_preamble_vi_ii:n #1
+        \cs_new_protected:Npn \@@_patch_preamble_vii_ii:n #1
           {  
             \tl_gput_right:Nn \g_@@_preamble_tl 
               {
@@ -9637,11 +9894,11 @@
 % We increment the counter of columns and then we test for the presence of a |<|.
 %    \begin{macrocode}
             \int_gincr:N \c at jCol
-            \@@_patch_preamble_x:n
+            \@@_patch_preamble_xi:n
           }
       } 
       {
-        \cs_new_protected:Npn \@@_patch_preamble_vi_ii:n #1
+        \cs_new_protected:Npn \@@_patch_preamble_vii_ii:n #1
           {
             \tl_gput_right:Nn \g_@@_preamble_tl
               {
@@ -9650,7 +9907,7 @@
                 < { \c_@@_table_print_tl \@@_cell_end: }
               }
             \int_gincr:N \c at jCol
-            \@@_patch_preamble_x:n
+            \@@_patch_preamble_xi:n
          }
       }
   }
@@ -9660,7 +9917,7 @@
 % \medskip
 % For |(|, |[| and |\{|.
 %    \begin{macrocode}
-\cs_new_protected:Npn \@@_patch_preamble_vii:nn #1 #2
+\cs_new_protected:Npn \@@_patch_preamble_viii:nn #1 #2
   {
     \bool_if:NT \l_@@_small_bool { \@@_fatal:n { Delimiter~with~small } }
 %    \end{macrocode}
@@ -9681,15 +9938,15 @@
           }
           {  
             \tl_gput_right:Nn \g_@@_preamble_tl { ! { \enskip } } 
-            \@@_patch_preamble_vii_i:nn { #1 } { #2 }
+            \@@_patch_preamble_viii_i:nn { #1 } { #2 }
           }
       }
-      { \@@_patch_preamble_vii_i:nn { #1 } { #2 } } 
+      { \@@_patch_preamble_viii_i:nn { #1 } { #2 } } 
   }
 %    \end{macrocode}
 %
 %    \begin{macrocode}
-\cs_new_protected:Npn \@@_patch_preamble_vii_i:nn #1 #2
+\cs_new_protected:Npn \@@_patch_preamble_viii_i:nn #1 #2
   {
     \tl_gput_right:Nx \g_@@_internal_code_after_tl
       { \@@_delimiter:nnn #1 { \@@_succ:n \c at jCol } \c_true_bool }  
@@ -9710,11 +9967,11 @@
 % considered as the right delimiter of the environment if the environment is
 % |{NiceArray}|). 
 %    \begin{macrocode}
-\cs_new_protected:Npn \@@_patch_preamble_viii:nn #1 #2
+\cs_new_protected:Npn \@@_patch_preamble_ix:nn #1 #2
   {
     \bool_if:NT \l_@@_small_bool { \@@_fatal:n { Delimiter~with~small } }
     \tl_if_in:nnTF { ) ] \} } { #2 }
-      { \@@_patch_preamble_viii_i:nnn #1 #2 }
+      { \@@_patch_preamble_ix_i:nnn #1 #2 }
       { 
         \tl_if_eq:nnTF { \q_stop } { #2 }
           {
@@ -9739,7 +9996,7 @@
 %    \end{macrocode}
 %
 %    \begin{macrocode}
-\cs_new_protected:Npn \@@_patch_preamble_viii_i:nnn #1 #2 #3
+\cs_new_protected:Npn \@@_patch_preamble_ix_i:nnn #1 #2 #3
   {
     \tl_if_eq:nnTF { \q_stop } { #3 }
       {
@@ -9771,17 +10028,17 @@
 % (between square brackets). That's why we test whether there is a |[| after the
 % letter |X|.
 %    \begin{macrocode}
-\cs_new_protected:Npn \@@_patch_preamble_ix:n #1
+\cs_new_protected:Npn \@@_patch_preamble_x:n #1
   {
     \str_if_eq:nnTF { #1 } { [ }
-      { \@@_patch_preamble_ix_i:w [ }
-      { \@@_patch_preamble_ix_i:w [ ] #1 }
+      { \@@_patch_preamble_x_i:w [ }
+      { \@@_patch_preamble_x_i:w [ ] #1 }
   }
 %    \end{macrocode}
 % 
 %    \begin{macrocode}
-\cs_new_protected:Npn \@@_patch_preamble_ix_i:w [ #1 ]
-  { \@@_patch_preamble_ix_ii:n { #1 } }
+\cs_new_protected:Npn \@@_patch_preamble_x_i:w [ #1 ]
+  { \@@_patch_preamble_x_ii:n { #1 } }
 %    \end{macrocode}
 % |#1| is the optional argument of the |X| specifier (a list of
 % \emph{key}-\emph{value} pairs).
@@ -9800,7 +10057,7 @@
 % \medskip
 % In the following command, |#1| is the list of the options of the specifier |X|.
 %    \begin{macrocode}
-\cs_new_protected:Npn \@@_patch_preamble_ix_ii:n #1
+\cs_new_protected:Npn \@@_patch_preamble_x_ii:n #1
   {
 %    \end{macrocode}
 % The possible values of |\l_@@_hpos_col_str| are |j| (for \emph{justified} which is
@@ -9826,6 +10083,12 @@
     \int_set:Nn \l_@@_weight_int { 1 }
     \keys_set_known:nnN { WithArrows / p-column } { #1 } \l_tmpa_tl 
     \keys_set:nV { WithArrows / X-column } \l_tmpa_tl
+    \int_compare:nNnT \l_@@_weight_int < 0 
+      { 
+        \exp_args:Nnx \@@_error:nn { negative~weight } 
+          { \int_use:N \l_@@_weight_int }
+        \int_set:Nn \l_@@_weight_int { - \l_@@_weight_int }
+      }
     \int_gadd:Nn \g_@@_total_X_weight_int \l_@@_weight_int
 %    \end{macrocode}
 %
@@ -9834,7 +10097,11 @@
 % written in the |aux| file).
 %    \begin{macrocode}
     \bool_if:NTF \l_@@_X_columns_aux_bool
-      { \@@_patch_preamble_iv_iv:n { \l_@@_weight_int \l_@@_X_columns_dim } }
+      { 
+        \@@_patch_preamble_iv_iv:nn 
+          { \l_@@_weight_int \l_@@_X_columns_dim } 
+          { minipage }
+      }
       {
         \tl_gput_right:Nn \g_@@_preamble_tl 
           { 
@@ -9859,7 +10126,7 @@
               }
           }  
         \int_gincr:N \c at jCol
-        \@@_patch_preamble_x:n
+        \@@_patch_preamble_xi:n
       }
   }
 %    \end{macrocode}
@@ -9866,7 +10133,7 @@
 %
 % \bigskip
 %    \begin{macrocode}
-\cs_new_protected:Npn \@@_patch_preamble_xi:n #1
+\cs_new_protected:Npn \@@_patch_preamble_xii:n #1
   {
     \tl_gput_right:Nn \g_@@_preamble_tl
       { ! { \skip_horizontal:N 2\l_@@_radius_dim } }
@@ -9885,10 +10152,10 @@
 % |<{..}| because, after those potential |<{...}|, we have to insert
 % |!{\skip_horizontal:N ...}| when the key |vlines| is used.
 %    \begin{macrocode}
-\cs_new_protected:Npn \@@_patch_preamble_x:n #1
+\cs_new_protected:Npn \@@_patch_preamble_xi:n #1
   {
     \str_if_eq:nnTF { #1 } { < }
-      \@@_patch_preamble_xii:n 
+      \@@_patch_preamble_xiii:n 
       { 
         \tl_if_eq:NnTF \l_@@_vlines_clist { all }
           { 
@@ -9909,10 +10176,10 @@
 %    \end{macrocode}
 % 
 %    \begin{macrocode}
-\cs_new_protected:Npn \@@_patch_preamble_xii:n #1
+\cs_new_protected:Npn \@@_patch_preamble_xiii:n #1
   {
     \tl_gput_right:Nn \g_@@_preamble_tl { < { #1 } }
-    \@@_patch_preamble_x:n
+    \@@_patch_preamble_xi:n
   }
 %    \end{macrocode}
 %
@@ -9977,6 +10244,7 @@
             { \int_eval:n { \c at jCol + 1 } }
             { \int_use:N \c at iRow }
             { \int_eval:n { \c at jCol + #1 } }
+            { } % for the name of the block
           }
       }
 %    \end{macrocode}
@@ -10021,7 +10289,6 @@
         b { \@@_patch_m_preamble_iv:nnn b #1 }
         \@@_w: { \@@_patch_m_preamble_v:nnnn { }                          #1 } 
         \@@_W: { \@@_patch_m_preamble_v:nnnn { \cs_set_eq:NN \hss \hfil } #1 } 
-        \@@_true_c: { \@@_patch_m_preamble_vi:n #1 }
         \q_stop { }
       }
       { \@@_fatal:nn { unknown~column~type } { #1 } }
@@ -10125,20 +10392,6 @@
   }
 %    \end{macrocode}
 %
-% \medskip
-% For |\@@_true_c:| which will appear in our redefinition of the columns of type
-% |S| (of \pkg{siunitx}).
-%    \begin{macrocode}
-\cs_new_protected:Npn \@@_patch_m_preamble_vi:n #1
-  {
-    \tl_gput_right:Nn \g_@@_preamble_tl { c }
-%    \end{macrocode}
-% We test for the presence of a |<|.
-%    \begin{macrocode}
-    \@@_patch_m_preamble_x:n
-  }
-%    \end{macrocode}
-%
 % 
 % After a specifier of column, we have to test whether there is one or several
 % |<{..}| because, after those potential |<{...}|, we have to insert
@@ -10280,9 +10533,9 @@
 % The |\hbox| avoids that the |pgfpicture| inside |\@@_draw_blocks| adds a extra
 % vertical space before the notes.
 %    \begin{macrocode}
-      \hbox:n 
-        { 
-          \box_use_drop:N \l_@@_the_array_box 
+    \hbox
+      { 
+        \box_use_drop:N \l_@@_the_array_box 
 %    \end{macrocode}
 % We have to draw the blocks right now because there may be tabular notes in
 % some blocks (which are not mono-column: the blocks which are mono-column
@@ -10290,9 +10543,9 @@
 % extra nodes before creating the blocks since there are |medium| nodes to create
 % for the blocks.
 %    \begin{macrocode}
-         \@@_create_extra_nodes:
-         \seq_if_empty:NF \g_@@_blocks_seq \@@_draw_blocks: 
-       }
+        \@@_create_extra_nodes:
+        \seq_if_empty:NF \g_@@_blocks_seq \@@_draw_blocks: 
+      }
     \bool_lazy_or:nnT
       { \int_compare_p:nNn \c at tabularnote > 0 }
       { ! \tl_if_empty_p:V \l_@@_tabularnote_tl }
@@ -10834,12 +11087,12 @@
           \pgfcoordinate { \@@_env: - col - \@@_succ:n \g_tmpa_int } 
             { 
               \bool_lazy_and:nnTF \l_@@_Matrix_bool \l_@@_NiceArray_bool
-                 { 
-                   \pgfpoint 
-                     { - 0.5 \arrayrulewidth - \arraycolsep } 
-                     \c_zero_dim 
-                 } 
-                 { \pgfpoint { - 0.5 \arrayrulewidth } \c_zero_dim }
+                { 
+                  \pgfpoint 
+                    { - 0.5 \arrayrulewidth - \arraycolsep } 
+                    \c_zero_dim 
+                } 
+                { \pgfpoint { - 0.5 \arrayrulewidth } \c_zero_dim }
             } 
           \str_if_empty:NF \l_@@_name_str
             {
@@ -10890,10 +11143,10 @@
       { 
 %    \end{macrocode}
 % At the beginning of the cell, we link |\CodeAfter| to a command which do
-% \emph{not} begin with |\omit| (whereas the standard version of |\CodeAfter|
-% begins with |\omit|).
+% begins with |\\| (whereas the standard version of |\CodeAfter| begins does
+% not).
 %    \begin{macrocode}
-        \cs_set_eq:NN \CodeAfter \@@_CodeAfter_i:n
+        \cs_set_eq:NN \CodeAfter \@@_CodeAfter_i:
         \bool_gset_true:N \g_@@_after_col_zero_bool
         \@@_begin_of_row:
 %    \end{macrocode}
@@ -10966,10 +11219,10 @@
       { 
 %    \end{macrocode}
 % At the beginning of the cell, we link |\CodeAfter| to a command which do
-% \emph{not} begin with |\omit| (whereas the standard version of |\CodeAfter|
-% begins with |\omit|).
+% begins with |\\| (whereas the standard version of |\CodeAfter| begins does
+% not).
 %    \begin{macrocode}
-    \cs_set_eq:NN \CodeAfter \@@_CodeAfter_i:n
+        \cs_set_eq:NN \CodeAfter \@@_CodeAfter_i:
 %    \end{macrocode}
 % With the flag |\g_@@_last_col_found_bool|, we will know that the ``last
 % column'' is really used.
@@ -11132,12 +11385,11 @@
 \NewDocumentEnvironment { NiceTabular } { O { } m ! O { } }
   { 
 %    \end{macrocode}
-% The dimension |\l_@@_width_dim| will be used if at least one column of type
-% |X| is used.
-% 
+% If the dimension |\l_@@_width_dim| is equal to $0$~pt, that means that it has
+% not be set by a previous use of |\NiceMatrixOptions|.
 %    \begin{macrocode}
-    \dim_zero_new:N \l_@@_width_dim 
-    \dim_set_eq:NN \l_@@_width_dim \linewidth
+    \dim_compare:nNnT \l_@@_width_dim = \c_zero_dim 
+      { \dim_set_eq:NN \l_@@_width_dim \linewidth }
     \str_gset:Nn \g_@@_name_env_str { NiceTabular }
     \keys_set:nn { NiceMatrix / NiceTabular } { #1 , #3 }
     \bool_set_true:N \l_@@_NiceTabular_bool 
@@ -11245,8 +11497,9 @@
           } 
       }
 %    \end{macrocode}
-% We write also the potential content of |\g_@@_pos_of_blocks_seq| (it will be
-% useful if the command |\rowcolors| is used with the key |respect-blocks|).
+% We write also the potential content of |\g_@@_pos_of_blocks_seq|. It will be
+% used to recreate the blocks with a name in the |\CodeBefore| and also if the
+% command |\rowcolors| is used with the key |respect-blocks|).
 %    \begin{macrocode}
     \seq_if_empty:NF \g_@@_pos_of_blocks_seq
       {
@@ -11274,6 +11527,41 @@
 %    \begin{macrocode}
     \@@_create_diag_nodes:
 %    \end{macrocode}
+%
+% \medskip
+% We create the aliases using |last| for the nodes of the cells in the last row
+% and the last column.
+%    \begin{macrocode}
+    \pgfpicture
+    \int_step_inline:nn \c at iRow
+      { 
+        \pgfnodealias 
+          { \@@_env: - ##1 - last } 
+          { \@@_env: - ##1 - \int_use:N \c at jCol } 
+      }
+    \int_step_inline:nn \c at jCol
+      { 
+        \pgfnodealias 
+          { \@@_env: - last - ##1 } 
+          { \@@_env: - \int_use:N \c at iRow - ##1 } 
+      }
+    \str_if_empty:NF \l_@@_name_str
+      {
+        \int_step_inline:nn \c at iRow
+          { 
+            \pgfnodealias 
+              { \l_@@_name_str - ##1 - last } 
+              { \@@_env: - ##1 - \int_use:N \c at jCol } 
+          }
+        \int_step_inline:nn \c at jCol
+          { 
+            \pgfnodealias 
+              { \l_@@_name_str - last - ##1 } 
+              { \@@_env: - \int_use:N \c at iRow - ##1 } 
+          }
+      }
+    \endpgfpicture
+%    \end{macrocode}
 % 
 % By default, the diagonal lines will be parallelized\footnote{It's possible to
 % use the option |parallelize-diags| to disable this parallelization.}. There
@@ -11435,11 +11723,6 @@
       }
 %    \end{macrocode}
 %
-%
-%    \begin{macrocode}
-    % \bool_if:NT \l_@@_code_before_bool \@@_write_aux_for_cell_nodes:
-%    \end{macrocode}
-%
 % \medskip
 %    \begin{macrocode}
     \str_gclear:N \g_@@_name_env_str
@@ -11483,13 +11766,13 @@
 \cs_new_protected:Npn \@@_adjust_pos_of_blocks_seq:
   {
     \seq_gset_map_x:NNn \g_@@_pos_of_blocks_seq \g_@@_pos_of_blocks_seq 
-      { \@@_adjust_pos_of_blocks_seq_i:nnnn ##1 }
+      { \@@_adjust_pos_of_blocks_seq_i:nnnnn ##1 }
   }
 %    \end{macrocode}
 % 
 % The following command must \emph{not} be protected.
 %    \begin{macrocode}
-\cs_new:Npn \@@_adjust_pos_of_blocks_seq_i:nnnn #1 #2 #3 #4
+\cs_new:Npn \@@_adjust_pos_of_blocks_seq_i:nnnnn #1 #2 #3 #4 #5
   {
     { #1 } 
     { #2 } 
@@ -11503,6 +11786,7 @@
         { \int_use:N \c at jCol }
         { #4 }
     }
+    { #5 }
   }
 %    \end{macrocode}
 % 
@@ -11566,52 +11850,6 @@
 %    \end{macrocode}
 % 
 %
-% \bigskip
-%    \begin{macrocode}
-\cs_new_protected:Npn \@@_write_aux_for_cell_nodes:
-  {
-    \pgfpicture
-    \pgfrememberpicturepositiononpagetrue
-    \pgf at relevantforpicturesizefalse
-    \int_step_inline:nnn \l_@@_first_row_int \g_@@_row_total_int
-      {
-        \int_step_inline:nnn \l_@@_first_col_int \g_@@_col_total_int
-          {
-            \cs_if_exist:cT { pgf @ sh @ ns @ \@@_env: - ##1 - ####1 }
-              {
-                \pgfscope
-                \pgftransformshift 
-                  { \pgfpointanchor { \@@_env: - ##1 - ####1 } { north~west } }
-                \pgfnode 
-                  { rectangle } 
-                  { center }
-                  { 
-                    \hbox 
-                      { \pgfsys at markposition { \@@_env: - ##1 - ####1 - NW } }  
-                  }
-                  { } 
-                  { }
-                \endpgfscope
-                \pgfscope
-                \pgftransformshift 
-                  { \pgfpointanchor { \@@_env: - ##1 - ####1 } { south~east } } 
-                \pgfnode
-                  { rectangle }
-                  { center }
-                  { 
-                    \hbox 
-                      { \pgfsys at markposition { \@@_env: - ##1 - ####1 - SE } } 
-                  }
-                  { }
-                  { }
-                \endpgfscope
-              }
-          }
-      }
-    \endpgfpicture
-    \@@_create_extra_nodes:
-  }
-%   \end{macrocode}
 % 
 % \bigskip
 % The following command creates the diagonal nodes (in fact, if the matrix is
@@ -11908,6 +12146,7 @@
         { \int_min:nn \l_@@_initial_j_int \l_@@_final_j_int }
         { \int_use:N \l_@@_final_i_int }
         { \int_max:nn \l_@@_initial_j_int \l_@@_final_j_int }
+        { } % for the name of the block
       }
   } 
 %    \end{macrocode}
@@ -12415,15 +12654,11 @@
     \bool_if:NTF \l_@@_initial_open_bool
       {
         \@@_open_y_initial_dim:
-        % \@@_qpoint:n { col - \int_use:N \l_@@_initial_j_int }
-        % \dim_set_eq:NN \l_@@_x_initial_dim \pgf at x
         \@@_open_x_initial_dim:
       }
       { \@@_set_initial_coords_from_anchor:n { south~east } }
     \bool_if:NTF \l_@@_final_open_bool
       {
-        % \@@_open_y_final_dim:
-        % \@@_qpoint:n { col - \@@_succ:n \l_@@_final_j_int }
         \@@_open_x_final_dim:
         \dim_set_eq:NN \l_@@_x_final_dim \pgf at x
       }
@@ -12849,8 +13084,8 @@
             \int_compare:nNnTF \c at jCol = \l_@@_last_col_int
               { \@@_error:nn { in~last~col } \Ldots }
               { 
-                 \@@_instruction_of_type:nnn \c_false_bool { Ldots } 
-                   { #1 , down = #2 , up = #3 } 
+                \@@_instruction_of_type:nnn \c_false_bool { Ldots } 
+                  { #1 , down = #2 , up = #3 } 
               }  
           }
         \bool_if:NF \l_@@_nullify_dots_bool 
@@ -12869,8 +13104,8 @@
             \int_compare:nNnTF \c at jCol = \l_@@_last_col_int
               { \@@_error:nn { in~last~col } \Cdots }
               { 
-                 \@@_instruction_of_type:nnn \c_false_bool { Cdots } 
-                   { #1 , down = #2 , up = #3 } 
+                \@@_instruction_of_type:nnn \c_false_bool { Cdots } 
+                  { #1 , down = #2 , up = #3 } 
               }  
           }
         \bool_if:NF \l_@@_nullify_dots_bool 
@@ -12889,8 +13124,8 @@
             \int_compare:nNnTF \c at iRow = \l_@@_last_row_int
               { \@@_error:nn { in~last~row } \Vdots }
               { 
-                 \@@_instruction_of_type:nnn \c_false_bool { Vdots } 
-                   { #1 , down = #2 , up = #3 } 
+                \@@_instruction_of_type:nnn \c_false_bool { Vdots } 
+                  { #1 , down = #2 , up = #3 } 
               }  
           }
         \bool_if:NF \l_@@_nullify_dots_bool 
@@ -13340,7 +13575,141 @@
 % this command because they have to do other settings (for example, the diagonal
 % lines must be parallelized). 
 %
+%
+% 
 % \bigskip
+% \subsection*{The command \textbackslash RowStyle}
+% 
+% \medskip
+%    \begin{macrocode}
+\keys_define:nn { NiceMatrix / RowStyle }
+  {
+    cell-space-top-limit .dim_set:N = \l_tmpa_dim ,
+    cell-space-top-limit .initial:n = \c_zero_dim ,
+    cell-space-top-limit .value_required:n = true ,
+    cell-space-bottom-limit .dim_set:N = \l_tmpb_dim ,
+    cell-space-bottom-limit .initial:n = \c_zero_dim ,
+    cell-space-bottom-limit .value_required:n = true ,
+    cell-space-limits .meta:n = 
+      {
+        cell-space-top-limit = #1 ,
+        cell-space-bottom-limit = #1 ,
+      } ,
+    color .tl_set:N = \l_tmpa_tl ,
+    color .value_required:n = true ,
+    bold .bool_set:N = \l_tmpa_bool ,
+    bold .default:n = true ,
+    bold .initial:n = false ,
+    nb-rows .int_set:N = \l_@@_key_nb_rows_int ,
+    nb-rows .value_required:n = true ,
+    nb-rows .initial:n = 1 ,
+    rowcolor .tl_set:N = \l_tmpc_tl ,
+    rowcolor .value_required:n = true ,
+    rowcolor .initial:n = \c_empty_tl ,
+    unknown .code:n = \@@_error:n { Unknown~key~for~RowStyle } 
+  }
+%    \end{macrocode}
+%
+% \bigskip
+%    \begin{macrocode}
+\NewDocumentCommand \@@_RowStyle:n { O { } m }
+  { 
+    \keys_set:nn { NiceMatrix / RowStyle } { #1 }
+%    \end{macrocode}
+% If the key |rowcolor| has been used.
+%    \begin{macrocode}
+    \tl_if_empty:NF \l_tmpc_tl
+      {
+%    \end{macrocode}
+% First, the end of the current row (we remind that |\RowStyle| applies to the
+% \emph{end} of the current row).
+%    \begin{macrocode}
+        \tl_gput_right:Nx \g_nicematrix_code_before_tl 
+          { 
+            \@@_rectanglecolor 
+              { \l_tmpc_tl } 
+              { \int_use:N \c at iRow - \int_use:N \c at jCol }
+              { \int_use:N \c at iRow - * }
+          }
+%    \end{macrocode}
+% Then, the other rows (if there is several rows).
+%    \begin{macrocode}
+        \int_compare:nNnT \l_@@_key_nb_rows_int > 1 
+          {
+            \tl_gput_right:Nx \g_nicematrix_code_before_tl 
+              { 
+                \@@_rowcolor 
+                  { \l_tmpc_tl } 
+                  { 
+                    \int_eval:n { \c at iRow + 1 }
+                    - \int_eval:n { \c at iRow + \l_@@_key_nb_rows_int - 1 } 
+                  }
+              }
+          }
+      }
+    \tl_gput_right:Nn \g_@@_row_style_tl { \ifnum \c at iRow < }
+    \tl_gput_right:Nx \g_@@_row_style_tl 
+      { \int_eval:n { \c at iRow + \l_@@_key_nb_rows_int } } 
+    \tl_gput_right:Nn \g_@@_row_style_tl { #2 }
+%    \end{macrocode}
+% |\l_tmpa_dim| is the value of the key |cell-space-top-limit| of |\RowStyle|.
+%    \begin{macrocode}
+    \dim_compare:nNnT \l_tmpa_dim > \c_zero_dim
+      {
+        \tl_gput_right:Nx \g_@@_row_style_tl 
+          {
+            \tl_gput_right:Nn \exp_not:N \g_@@_post_action_cell_tl 
+              { 
+                \dim_set:Nn \l_@@_cell_space_top_limit_dim 
+                  { \dim_use:N \l_tmpa_dim } 
+              }
+          }
+      }
+%    \end{macrocode}
+% |\l_tmpb_dim| is the value of the key |cell-space-bottom-limit| of |\RowStyle|.
+%    \begin{macrocode}
+    \dim_compare:nNnT \l_tmpb_dim > \c_zero_dim
+      {
+        \tl_gput_right:Nx \g_@@_row_style_tl 
+          {
+            \tl_gput_right:Nn \exp_not:N \g_@@_post_action_cell_tl 
+              { 
+                \dim_set:Nn \l_@@_cell_space_bottom_limit_dim 
+                  { \dim_use:N \l_tmpb_dim } 
+              }
+          }
+      }
+%    \end{macrocode}
+% |\l_tmpa_tl| is the value of the key |color| of |\RowStyle|.
+%    \begin{macrocode}
+    \tl_if_empty:NF \l_tmpa_tl
+      {
+        \tl_gput_right:Nx \g_@@_row_style_tl
+          { \mode_leave_vertical: \exp_not:N \color { \l_tmpa_tl } }
+      }
+%    \end{macrocode}
+% |\l_tmpa_bool| is the value of the key |bold|.
+%    \begin{macrocode}
+    \bool_if:NT \l_tmpa_bool
+      {
+        \tl_gput_right:Nn \g_@@_row_style_tl
+          {
+            \if_mode_math:
+              \c_math_toggle_token
+              \bfseries \boldmath 
+              \c_math_toggle_token
+            \else:
+              \bfseries \boldmath
+            \fi:
+          }
+      }
+    \tl_gput_right:Nn \g_@@_row_style_tl { \fi } 
+    \g_@@_row_style_tl
+    \ignorespaces
+  }
+%    \end{macrocode}
+%
+% \bigskip
 % \subsection*{Colors of cells, rows and columns}
 %
 % We want to avoid the thin white lines that are shown in some \textsc{pdf}
@@ -13423,13 +13792,6 @@
   }
 %    \end{macrocode}
 % 
-%    \begin{macrocode}
-\cs_set_protected:Npn \@@_cut_on_hyphen:w #1-#2\q_stop
-  {
-    \tl_set:Nn \l_tmpa_tl { #1 }
-    \tl_set:Nn \l_tmpb_tl { #2 }
-  }
-%    \end{macrocode}
 %
 %    \begin{macrocode}
 \cs_new_protected:Npn \@@_cartesian_color:nn #1 #2
@@ -13548,7 +13910,7 @@
 % \bigskip
 %    \begin{macrocode}
 \keys_define:nn { NiceMatrix / arraycolor }
-  { except-corners .code:n = \@@_error:n { key except-corners } }
+  { except-corners .code:n = \@@_error:n { key~except-corners } }
 %    \end{macrocode}
 %
 % \bigskip
@@ -13617,7 +13979,7 @@
 %    \begin{macrocode}
         \seq_set_eq:NN \l_tmpb_seq \g_@@_pos_of_blocks_seq 
         \seq_set_filter:NNn \l_tmpa_seq \l_tmpb_seq
-          { \@@_not_in_exterior_p:nnnn ##1 }
+          { \@@_not_in_exterior_p:nnnnn ##1 }
       }
     \pgfpicture
     \pgf at relevantforpicturesizefalse
@@ -13654,8 +14016,8 @@
             \bool_if:NT \l_@@_respect_blocks_bool
               {
                 \seq_set_filter:NNn \l_tmpb_seq \l_tmpa_seq 
-                  { \@@_intersect_our_row_p:nnnn ####1 }
-                \seq_map_inline:Nn \l_tmpb_seq { \@@_rowcolors_i:nnnn ####1 }
+                  { \@@_intersect_our_row_p:nnnnn ####1 }
+                \seq_map_inline:Nn \l_tmpb_seq { \@@_rowcolors_i:nnnnn ####1 }
 %    \end{macrocode}
 % Now, the last row of the block is computed in |\l_tmpb_int|.
 %    \begin{macrocode}
@@ -13714,7 +14076,7 @@
 % 
 % \bigskip 
 %    \begin{macrocode}
-\cs_new_protected:Npn \@@_rowcolors_i:nnnn #1 #2 #3 #4
+\cs_new_protected:Npn \@@_rowcolors_i:nnnnn #1 #2 #3 #4 #5
   { 
     \int_compare:nNnT { #3 } > \l_tmpb_int
       { \int_set:Nn \l_tmpb_int { #3 } }
@@ -13724,7 +14086,7 @@
 %
 % \bigskip 
 %    \begin{macrocode}
-\prg_new_conditional:Nnn \@@_not_in_exterior:nnnn p
+\prg_new_conditional:Nnn \@@_not_in_exterior:nnnnn p
   {
     \bool_lazy_or:nnTF 
       { \int_compare_p:nNn { #4 } = \c_zero_int }
@@ -13738,7 +14100,7 @@
 % The following command return |true| when the block intersects the row
 % |\l_tmpa_int|. 
 %    \begin{macrocode}
-\prg_new_conditional:Nnn \@@_intersect_our_row:nnnn p
+\prg_new_conditional:Nnn \@@_intersect_our_row:nnnnn p
   {
     \bool_if:nTF
       { 
@@ -13896,7 +14258,7 @@
 % |!| which may be activated by some packages (ex.: \pkg{babel} with the option
 % |french| on latex and pdflatex).
 %    \begin{macrocode}
-            \cellcolor [ #1 ] { \exp_not:n { #2 } } 
+            \@@_cellcolor [ #1 ] { \exp_not:n { #2 } } 
               { \int_use:N \c at iRow - \int_use:N \c at jCol } 
           }   
       }
@@ -13913,7 +14275,7 @@
       {
         \tl_gput_right:Nx \g_nicematrix_code_before_tl      
           { 
-            \exp_not:N \rectanglecolor [ #1 ] { \exp_not:n { #2 } } 
+            \@@_rectanglecolor [ #1 ] { \exp_not:n { #2 } } 
               { \int_use:N \c at iRow - \int_use:N \c at jCol } 
               { \int_use:N \c at iRow - \exp_not:n { \int_use:N \c at jCol } }
           }
@@ -14054,33 +14416,33 @@
 % etc.), we will set |\g_tmpa_bool| to |false| and the small vertical rule won't
 % be drawn.
 %    \begin{macrocode}
-         \bool_gset_true:N \g_tmpa_bool
-         \seq_map_inline:Nn \g_@@_pos_of_blocks_seq
-           { \@@_test_vline_in_block:nnnn ##1 }
-         \seq_map_inline:Nn \g_@@_pos_of_xdots_seq
-           { \@@_test_vline_in_block:nnnn ##1 }
-         \seq_map_inline:Nn \g_@@_pos_of_stroken_blocks_seq
-           { \@@_test_vline_in_stroken_block:nnnn ##1 }
-         \clist_if_empty:NF \l_@@_corners_clist \@@_test_in_corner_v:
-         \bool_if:NTF \g_tmpa_bool
-           { 
-             \tl_if_empty:NT \l_tmpc_tl
+        \bool_gset_true:N \g_tmpa_bool
+        \seq_map_inline:Nn \g_@@_pos_of_blocks_seq
+          { \@@_test_vline_in_block:nnnnn ##1 }
+        \seq_map_inline:Nn \g_@@_pos_of_xdots_seq
+          { \@@_test_vline_in_block:nnnnn ##1 }
+        \seq_map_inline:Nn \g_@@_pos_of_stroken_blocks_seq
+          { \@@_test_vline_in_stroken_block:nnnn ##1 }
+        \clist_if_empty:NF \l_@@_corners_clist \@@_test_in_corner_v:
+        \bool_if:NTF \g_tmpa_bool
+          { 
+            \tl_if_empty:NT \l_tmpc_tl
 %    \end{macrocode}
 % We keep in memory that we have a rule to draw.
 %    \begin{macrocode}
-               { \tl_set_eq:NN \l_tmpc_tl \l_tmpa_tl }
-           }
-           {
-             \tl_if_empty:NF \l_tmpc_tl
-               { 
-                 \@@_vline_ii:nnnn 
-                   { #1 } 
-                   { #2 } 
-                   \l_tmpc_tl 
-                   { \int_eval:n { \l_tmpa_tl - 1 } }
-                 \tl_clear:N \l_tmpc_tl
-               }
-           }
+              { \tl_set_eq:NN \l_tmpc_tl \l_tmpa_tl }
+          }
+          {
+            \tl_if_empty:NF \l_tmpc_tl
+              { 
+                \@@_vline_ii:nnnn 
+                  { #1 } 
+                  { #2 } 
+                  \l_tmpc_tl 
+                  { \int_eval:n { \l_tmpa_tl - 1 } }
+                \tl_clear:N \l_tmpc_tl
+              }
+          }
       }
     \tl_if_empty:NF \l_tmpc_tl
       { 
@@ -14280,9 +14642,9 @@
 %    \begin{macrocode}
          \bool_gset_true:N \g_tmpa_bool
          \seq_map_inline:Nn \g_@@_pos_of_blocks_seq
-           { \@@_test_hline_in_block:nnnn ##1 }
+           { \@@_test_hline_in_block:nnnnn ##1 }
          \seq_map_inline:Nn \g_@@_pos_of_xdots_seq
-           { \@@_test_hline_in_block:nnnn ##1 }
+           { \@@_test_hline_in_block:nnnnn ##1 }
          \seq_map_inline:Nn \g_@@_pos_of_stroken_blocks_seq
            { \@@_test_hline_in_stroken_block:nnnn ##1 }
          \clist_if_empty:NF \l_@@_corners_clist \@@_test_in_corner_h: 
@@ -14559,7 +14921,7 @@
 % |#1|, |#2|, |#3| and |#4|. If this rule would be in the block (it must not be
 % drawn), the boolean |\l_tmpa_bool| is set to |false|.
 %    \begin{macrocode}
-\cs_new_protected:Npn \@@_test_hline_in_block:nnnn #1 #2 #3 #4
+\cs_new_protected:Npn \@@_test_hline_in_block:nnnnn #1 #2 #3 #4
   {
     \bool_lazy_all:nT
       {
@@ -14574,7 +14936,7 @@
 %
 % The same for vertical rules.
 %    \begin{macrocode}
-\cs_new_protected:Npn \@@_test_vline_in_block:nnnn #1 #2 #3 #4
+\cs_new_protected:Npn \@@_test_vline_in_block:nnnnn #1 #2 #3 #4
   {
     \bool_lazy_all:nT
       {
@@ -14703,8 +15065,8 @@
         \@@_test_if_cell_in_a_block:nn { ##1 } { \int_eval:n { #2 } }
         \bool_lazy_or:nnTF
           {
-             \cs_if_exist_p:c
-               { pgf @ sh @ ns @ \@@_env: - ##1 - \int_eval:n { #2 } }
+            \cs_if_exist_p:c
+              { pgf @ sh @ ns @ \@@_env: - ##1 - \int_eval:n { #2 } }
           }
           \l_tmpb_bool
           { \bool_set_true:N \l_tmpa_bool }
@@ -14786,7 +15148,7 @@
 % 
 % 
 %    \begin{macrocode}
-\cs_new_protected:Npn \@@_test_if_cell_in_block:nnnnnnn #1 #2 #3 #4 #5 #6
+\cs_new_protected:Npn \@@_test_if_cell_in_block:nnnnnnn #1 #2 #3 #4 #5 #6 #7
   {
     \int_compare:nNnT { #3 } < { \@@_succ:n { #1 } } 
       { 
@@ -15500,7 +15862,7 @@
 % If the box is rotated (the key |\rotate| may be in the previous |#4|), the
 % tabular used for the content of the cell will be constructed with a format
 % |c|. In the other cases, the tabular will be constructed with a format equal
-% to the key of position of the box. In other words: the alignement internal to
+% to the key of position of the box. In other words: the alignment internal to
 % the tabular is the same as the external alignment of the tabular (that is to
 % say the position of the block in its zone of merged cells).
 %    \begin{macrocode}
@@ -15603,7 +15965,7 @@
 % In the list of options |#3|, maybe there is a key for the horizontal alignment
 % (|l|, |r| or |c|). In that case, that key has been read and stored in
 % |\l_@@_hpos_block_str|. However, maybe there were no key of the horizontal
-% alignement and that's why we put a key corresponding to the value of
+% alignment and that's why we put a key corresponding to the value of
 % |\l_@@_hpos_block_str|, which is fixed by the type of current column.
 %    \begin{macrocode}
         { \exp_not:n { #3 } , \l_@@_hpos_block_str }
@@ -15640,7 +16002,7 @@
 % If the box is rotated (the key |\rotate| may be in the previous |#4|), the
 % tabular used for the content of the cell will be constructed with a format
 % |c|. In the other cases, the tabular will be constructed with a format equal
-% to the key of position of the box. In other words: the alignement internal to
+% to the key of position of the box. In other words: the alignment internal to
 % the tabular is the same as the external alignment of the tabular (that is to
 % say the position of the block in its zone of merged cells).
 %    \begin{macrocode}
@@ -15726,6 +16088,9 @@
     t .value_forbidden:n = true ,
     b .code:n = \str_set:Nn \l_@@_vpos_of_block_tl b ,
     b .value_forbidden:n = true ,
+    name .tl_set:N = \l_@@_block_name_str ,
+    name .value_required:n = true ,
+    name .initial:n = \c_empty_tl , 
     unknown .code:n = \@@_error:n { Unknown~key~for~Block }
   }
 %    \end{macrocode}
@@ -15817,8 +16182,8 @@
 % |hvlines|) will be used when drawing the rules (in fact, there is also the
 % |\multicolumn| and the |\diagbox| in that sequence).
 %    \begin{macrocode}
-        \seq_gput_left:Nn \g_@@_pos_of_blocks_seq 
-          { { #1 } { #2 } { #3 } { #4 } } 
+        \seq_gput_left:Nx \g_@@_pos_of_blocks_seq 
+          { { #1 } { #2 } { #3 } { #4 } { \l_@@_block_name_str } } 
       }
 %    \end{macrocode}
 % 
@@ -15975,11 +16340,21 @@
 % The function |\@@_pgf_rect_node:nnnnn| takes in as arguments the name of the node
 % and the four coordinates of two opposite corner points of the rectangle.
 %    \begin{macrocode}
-      \begin { pgfscope }
       \@@_pgf_rect_node:nnnnn
         { \@@_env: - #1 - #2 - block }
         \l_tmpb_dim \l_tmpa_dim \l_tmpd_dim \l_tmpc_dim 
-      \end { pgfscope }
+      \str_if_empty:NF \l_@@_block_name_str
+        {
+          \pgfnodealias 
+            { \@@_env: - \l_@@_block_name_str }
+            { \@@_env: - #1 - #2 - block }
+          \str_if_empty:NF \l_@@_name_str
+            {
+              \pgfnodealias 
+                { \l_@@_name_str - \l_@@_block_name_str }
+                { \@@_env: - #1 - #2 - block }
+            }
+        }
 %    \end{macrocode}
 % 
 % \medskip
@@ -16590,6 +16965,10 @@
         { \int_use:N \c at jCol } 
         { \int_use:N \c at iRow } 
         { \int_use:N \c at jCol } 
+%    \end{macrocode}
+% The last argument is for the name of the block.
+%    \begin{macrocode}
+        { } 
       }
   }
 %    \end{macrocode}
@@ -16600,7 +16979,7 @@
 % \medskip
 % The first four arguments of |\@@_actually_diagbox:nnnnnn| correspond to the
 % rectangle (=block) to slash (we recall that it's possible to use |\diagbox| in
-% a |\Block|). The two other are the elements to draw below and above the
+% a |\Block|). The other two are the elements to draw below and above the
 % diagonal line.
 %    \begin{macrocode}
 \cs_new_protected:Npn \@@_actually_diagbox:nnnnnn #1 #2 #3 #4 #5 #6
@@ -16632,11 +17011,24 @@
     \pgfscope
     \pgftransformshift { \pgfpoint \l_tmpb_dim \l_tmpc_dim }
     \pgfnode { rectangle } { south~west } 
-      { \@@_math_toggle_token: #5 \@@_math_toggle_token: } { } { }
+      { 
+        \begin { minipage } { 20 cm }
+        \@@_math_toggle_token: #5 \@@_math_toggle_token: 
+        \end { minipage } 
+      } 
+      { } 
+      { }
     \endpgfscope
     \pgftransformshift { \pgfpoint \l_tmpd_dim \l_tmpa_dim }
     \pgfnode { rectangle } { north~east } 
-      { \@@_math_toggle_token: #6 \@@_math_toggle_token: } { } { }
+      {
+        \begin { minipage } { 20 cm }
+        \raggedleft
+        \@@_math_toggle_token: #6 \@@_math_toggle_token: 
+        \end { minipage } 
+      } 
+      { } 
+      { }
     \endpgfpicture
   }
 %    \end{macrocode}
@@ -16681,29 +17073,32 @@
 % |\@@_CodeAfter:|. That macro must \emph{not} be protected since it begins with
 % |\omit|. 
 %    \begin{macrocode}
-\cs_new:Npn \@@_CodeAfter: { \omit \@@_CodeAfter_i:n }
+\cs_new:Npn \@@_CodeAfter: { \omit \@@_CodeAfter_ii:n }
 %    \end{macrocode}
 %
 % \medskip
 % However, in each cell of the environment, the command |\CodeAfter| will be
-% linked to the following command |\@@_CodeAfter_i:n| which do \emph{not} begin
-% with |\omit| (and thus, the user will be able to use |\CodeAfter| without
-% error and without the need to prefix by |\omit|.
+% linked to the following command |\@@_CodeAfter_ii:n| which begins
+% with |\\|.
 %
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_CodeAfter_i: { \\ \omit \@@_CodeAfter_ii:n }
+%    \end{macrocode}
+%
 % \smallskip
 % We have to catch everything until the end of the current environment (of
 % \pkg{nicematrix}). First, we go until the next command |\end|. 
 %    \begin{macrocode}
-\cs_new_protected:Npn \@@_CodeAfter_i:n #1 \end
+\cs_new_protected:Npn \@@_CodeAfter_ii:n #1 \end
   {
-    \tl_gput_right:Nn \g_nicematrix_code_after_tl { #1 }
-    \@@_CodeAfter_ii:n
+    \tl_gput_right:Nn \g_nicematrix_code_after_tl { #1 } 
+    \@@_CodeAfter_iv:n
   }
 %    \end{macrocode}
 %
 % We catch the argument of the command |\end| (in |#1|).
 %    \begin{macrocode}
-\cs_new_protected:Npn \@@_CodeAfter_ii:n #1
+\cs_new_protected:Npn \@@_CodeAfter_iv:n #1
   {
 %    \end{macrocode}
 % If this is really the end of the current environment (of \pkg{nicematrix}), we
@@ -16717,11 +17112,12 @@
 %    \begin{macrocode}
       { 
         \tl_gput_right:Nn \g_nicematrix_code_after_tl { \end { #1 } } 
-        \@@_CodeAfter_i:n
+        \@@_CodeAfter_ii:n
       } 
   }
 %    \end{macrocode}
 %
+% 
 %
 % \subsection*{The delimiters in the preamble}
 %
@@ -16935,8 +17331,10 @@
     \exp_args:NNV \NewDocumentCommand \@@_SubMatrix \l_@@_argspec_tl 
       {
         \peek_remove_spaces:n
-          { \@@_sub_matrix:nnnnnnn
-              { #1 } { #2 } { #3 } { #4 }  { #5 } { #6 } { #7 } }
+          { 
+            \@@_sub_matrix:nnnnnnn
+              { #1 } { #2 } { #3 } { #4 }  { #5 } { #6 } { #7 } 
+          }
       }
   }
 %    \end{macrocode}
@@ -17531,7 +17929,7 @@
 % The following message will be deleted when we will delete the key
 % |except-corners| for the command |\arraycolor|.
 %    \begin{macrocode}
-\@@_msg_new:nn { key except-corners }
+\@@_msg_new:nn { key~except-corners }
   {
     The~key~'except-corners'~has~been~deleted~for~the~command~\token_to_str:N
     \arraycolor\ in~the~\token_to_str:N \CodeBefore.~You~should~instead~use~
@@ -17583,6 +17981,13 @@
   }
 %    \end{macrocode}
 % 
+%    \begin{macrocode}
+\@@_msg_new:nn { negative~weight }
+  {
+    The~weight~of~the~'X'~columns~must~be~positive~and~you~have~used~
+    the~value~'#1'.~If~you~go~on,~the~absolute~value~will~be~used.
+  }
+%    \end{macrocode}
 % 
 %    \begin{macrocode}
 \@@_msg_new:nn { too~much~cols~for~matrix~with~last~col }
@@ -17704,14 +18109,6 @@
   }
 %    \end{macrocode}
 %
-%    \begin{macrocode}
-\@@_msg_new:nn { Unknown~key~for~RowStyle } 
-  {
-    As~for~now,~there~is~only~four~keys~available~here:~'cell-space-top-limit',~
-    'cell-space-bottom-limit~'cell-space-limits'~and~color~(and~you~try~to~use~
-    '\l_keys_key_str').~If~you~go~on,~this~key~will~be~ignored.
-  }
-%    \end{macrocode}
 %
 %    \begin{macrocode}
 \@@_msg_new:nn { Unknown~key~for~rowcolors } 
@@ -18017,6 +18414,14 @@
   }
 %    \end{macrocode}
 %
+%    \begin{macrocode}
+\@@_msg_new:nn { varwidth~not~loaded }
+  {
+    You~can't~use~the~column~type~'V'~because~'varwidth'~is~not~
+    loaded.\\
+    If~you~go~on,~your~column~will~behave~like~'p'.
+  }
+%    \end{macrocode}
 % 
 %    \begin{macrocode}
 \@@_msg_new:nnn { Unknown~key~for~Block } 
@@ -18027,7 +18432,7 @@
   }
   {
     The~available~keys~are~(in~alphabetic~order):~b,~borders,~c,~draw,~fill,~
-    hvlines,~l,~line-width,~rounded-corners,~r,~t~and~tikz. 
+    hvlines,~l,~line-width,~name,~rounded-corners,~r,~t~and~tikz. 
   }
 %    \end{macrocode}
 %
@@ -18095,6 +18500,26 @@
 %    \end{macrocode}
 %
 %    \begin{macrocode}
+\@@_msg_new:nnn { Unknown~key~for~RowStyle } 
+  {
+    The~key~'\l_keys_key_str'~is~unknown~for~the~command~
+    \token_to_str:N \RowStyle. \\
+    If~you~go~on,~it~will~be~ignored. \\
+    For~a~list~of~the~available~keys,~type~H~<return>.
+  }
+  { 
+    The~available~keys~are~(in~alphabetic~order):~
+    'bold',~
+    'cell-space-top-limit',~
+    'cell-space-bottom-limit',~
+    'cell-space-limits',~
+    'color',~
+    'nb-rows'~and~
+    'rowcolor'.
+  }
+%    \end{macrocode}
+%
+%    \begin{macrocode}
 \@@_msg_new:nnn { Unknown~key~for~NiceMatrixOptions }
   {
     The~key~'\l_keys_key_str'~is~unknown~for~the~command~
@@ -18857,7 +19282,21 @@
 % 
 % Key |\color| for the command |\RowStyle|.
 %
+% \subsection*{Changes between versions 6.1 and 6.2}
 % 
+% Better compatibility with the classes \cls{revtex4-1} and \cls{revtex4-2}.
+%
+% Key |vlines-in-sub-matrix|.
+% 
+% \subsection*{Changes between versions 6.2 and 6.3}
+%
+% Keys |nb-rows|, |rowcolor| and |bold| for the command |\RowStyle|
+%
+% Key |name| for the command |\Block|.
+%
+% Support for the columns |V| of \pkg{varwidth}.
+% 
+% 
 % \PrintIndex
 % 
 % \tableofcontents

Modified: trunk/Master/texmf-dist/tex/latex/nicematrix/nicematrix.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/nicematrix/nicematrix.sty	2021-10-24 21:02:12 UTC (rev 60863)
+++ trunk/Master/texmf-dist/tex/latex/nicematrix/nicematrix.sty	2021-10-24 21:05:28 UTC (rev 60864)
@@ -18,8 +18,8 @@
 %% and version 1.3 or later is part of all distributions of
 %% LaTeX version 2005/12/01 or later.
 %% 
-\def\myfileversion{6.2}
-\def\myfiledate{2021/09/09}
+\def\myfileversion{6.3}
+\def\myfiledate{2021/10/18}
 \RequirePackage{pgfcore}
 \usepgfmodule{shapes}
 \RequirePackage{l3keys2e}
@@ -48,8 +48,12 @@
 \bool_new:N \c__nicematrix_enumitem_loaded_bool
 \bool_new:N \c__nicematrix_tabularx_loaded_bool
 \bool_new:N \c__nicematrix_tikz_loaded_bool
+\bool_new:N \c__nicematrix_varwidth_loaded_bool
 \AtBeginDocument
   {
+    \@ifpackageloaded { varwidth }
+      { \bool_set_true:N \c__nicematrix_varwidth_loaded_bool }
+      { }
     \@ifpackageloaded { arydshln }
       { \bool_set_true:N \c__nicematrix_arydshln_loaded_bool }
       { }
@@ -266,11 +270,13 @@
 \dim_set:Nn \l__nicematrix_col_width_dim { -1 cm }
 \int_new:N \g__nicematrix_row_total_int
 \int_new:N \g__nicematrix_col_total_int
+\int_new:N \l__nicematrix_key_nb_rows_int
 \str_new:N \l__nicematrix_hpos_cell_str
 \str_set:Nn \l__nicematrix_hpos_cell_str { c }
 \dim_new:N \g__nicematrix_blocks_wd_dim
 \dim_new:N \g__nicematrix_blocks_ht_dim
 \dim_new:N \g__nicematrix_blocks_dp_dim
+\dim_new:N \l__nicematrix_width_dim
 \seq_new:N \g__nicematrix_names_seq
 \bool_new:N \l__nicematrix_in_env_bool
 \bool_new:N \l__nicematrix_NiceArray_bool
@@ -360,7 +366,6 @@
 \clist_new:N \l__nicematrix_submatrix_hlines_clist
 \clist_new:N \l__nicematrix_submatrix_vlines_clist
 \bool_new:N \l__nicematrix_dotted_bool
-\dim_new:N \l__nicematrix_trim_dim
 \int_new:N \l__nicematrix_first_row_int
 \int_set:Nn \l__nicematrix_first_row_int 1
 \int_new:N \l__nicematrix_first_col_int
@@ -372,6 +377,30 @@
 \int_new:N \l__nicematrix_last_col_int
 \int_set:Nn \l__nicematrix_last_col_int { -2 }
 \bool_new:N \g__nicematrix_last_col_found_bool
+\cs_set_protected:Npn \__nicematrix_cut_on_hyphen:w #1-#2\q_stop
+  {
+    \tl_set:Nn \l_tmpa_tl { #1 }
+    \tl_set:Nn \l_tmpb_tl { #2 }
+  }
+\cs_new_protected:Npn \__nicematrix_expand_clist:N #1
+  {
+    \clist_if_in:NnF #1 { all }
+      {
+        \clist_clear:N \l_tmpa_clist
+        \clist_map_inline:Nn #1
+          {
+            \tl_if_in:nnTF { ##1 } { - }
+              { \__nicematrix_cut_on_hyphen:w ##1 \q_stop }
+              {
+                \tl_set:Nn \l_tmpa_tl { ##1 }
+                \tl_set:Nn \l_tmpb_tl { ##1 }
+              }
+            \int_step_inline:nnn { \l_tmpa_tl } { \l_tmpb_tl }
+              { \clist_put_right:Nn \l_tmpa_clist { ####1 } }
+          }
+        \tl_set_eq:NN #1 \l_tmpa_clist
+     }
+  }
 \newcounter { tabularnote }
 \seq_new:N \g__nicematrix_tabularnotes_seq
 \tl_new:N \l__nicematrix_tabularnote_tl
@@ -783,6 +812,8 @@
   }
 \keys_define:nn { NiceMatrix / NiceMatrixOptions }
   {
+    width .code:n = \dim_set:Nn \l__nicematrix_width_dim { #1 } ,
+    width .value_required:n = true ,
     last-col .code:n = \tl_if_empty:nF { #1 }
                          { \__nicematrix_error:n { last-col~non~empty~for~NiceMatrixOptions } }
                        \int_zero:N \l__nicematrix_last_col_int ,
@@ -888,7 +919,7 @@
 \cs_new_protected:Npn \__nicematrix_cell_begin:w
   {
     \tl_gclear:N \g__nicematrix_post_action_cell_tl
-    \cs_set_eq:NN \CodeAfter \__nicematrix_CodeAfter_i:n
+    \cs_set_eq:NN \CodeAfter \__nicematrix_CodeAfter_i:
     \int_gincr:N \c at jCol
     \int_compare:nNnT \c at jCol = 1
       { \int_compare:nNnT \l__nicematrix_first_col_int = 1 \__nicematrix_begin_of_row: }
@@ -918,7 +949,6 @@
   }
 \cs_new_protected:Npn \__nicematrix_begin_of_row:
   {
-    \tl_gclear:N \g__nicematrix_row_style_tl
     \int_gincr:N \c at iRow
     \dim_gset_eq:NN \g__nicematrix_dp_ante_last_row_dim \g__nicematrix_dp_last_row_dim
     \dim_gset:Nn \g__nicematrix_dp_last_row_dim { \box_dp:N \@arstrutbox }
@@ -1046,12 +1076,12 @@
         \hbox_set:Nn \l__nicematrix_cell_box
           {
             \box_move_up:nn { \box_ht:N \l__nicematrix_cell_box}
-              \hbox_overlap_left:n
-                {
-                  \pgfsys at markposition
-                    { \__nicematrix_env: - \int_use:N \c at iRow - \int_use:N \c at jCol - NW }
-                  #1
-                }
+            \hbox_overlap_left:n
+              {
+                \pgfsys at markposition
+                  { \__nicematrix_env: - \int_use:N \c at iRow - \int_use:N \c at jCol - NW }
+                #1
+              }
             \box_use:N \l__nicematrix_cell_box
             \box_move_down:nn { \box_dp:N \l__nicematrix_cell_box }
               \hbox_overlap_left:n
@@ -1170,8 +1200,10 @@
   }
 \cs_new_protected:Npn \__nicematrix_pre_array_ii:
   {
-        \xglobal \colorlet { nicematrix } { . }
-        \int_gzero:N \g__nicematrix_total_X_weight_int
+    \xglobal \colorlet { nicematrix } { . }
+    \int_gzero:N \g__nicematrix_total_X_weight_int
+    \__nicematrix_expand_clist:N \l__nicematrix_hlines_clist
+    \__nicematrix_expand_clist:N \l__nicematrix_vlines_clist
     \bool_if:NT \c__nicematrix_booktabs_loaded_bool
       { \tl_put_left:Nn \@BTnormal \__nicematrix_create_row_node: }
     \box_clear_new:N \l__nicematrix_cell_box
@@ -1325,47 +1357,6 @@
     \bool_set_true:N \l__nicematrix_code_before_bool
     \__nicematrix_pre_array:
   }
-\keys_define:nn { NiceMatrix / RowStyle }
-  {
-    cell-space-top-limit .code:n =
-      {
-        \tl_gput_right:Nn \g__nicematrix_row_style_tl
-          {
-            \tl_gput_right:Nn \g__nicematrix_post_action_cell_tl
-              { \dim_set:Nn \l__nicematrix_cell_space_top_limit_dim { #1 } }
-          }
-      } ,
-    cell-space-top-limit .value_required:n = true ,
-    cell-space-bottom-limit .code:n =
-      {
-        \tl_gput_right:Nn \g__nicematrix_row_style_tl
-          {
-            \tl_gput_right:Nn \g__nicematrix_post_action_cell_tl
-              { \dim_set:Nn \l__nicematrix_cell_space_bottom_limit_dim { #1 } }
-          }
-      } ,
-    cell-space-bottom-limit .value_required:n = true ,
-    cell-space-limits .meta:n =
-      {
-        cell-space-top-limit = #1 ,
-        cell-space-bottom-limit = #1 ,
-      } ,
-    color .code:n =
-      {
-        \leavevmode \color { #1 }
-        \tl_gput_right:Nn \g__nicematrix_row_style_tl
-          { \leavevmode \color { #1 } }
-      } ,
-    color .value_required:n = true ,
-    unknown .code:n = \__nicematrix_error:n { Unknown~key~for~RowStyle }
-  }
-\NewDocumentCommand \__nicematrix_RowStyle:n { O { } m }
-  {
-    \tl_gset:Nn \g__nicematrix_row_style_tl { #2 }
-    \keys_set:nn { NiceMatrix / RowStyle } { #1 }
-    #2
-    \ignorespaces
-  }
 \cs_new_protected:Npn \__nicematrix_pre_code_before:
   {
     \int_set:Nn \c at iRow { \seq_item:Nn \c__nicematrix_size_seq 2 }
@@ -1391,6 +1382,7 @@
     \__nicematrix_create_diag_nodes:
     \bool_if:NT \g__nicematrix_recreate_cell_nodes_bool \__nicematrix_recreate_cell_nodes:
     \endpgfpicture
+    \__nicematrix_create_blocks_nodes:
     \bool_if:NT \c__nicematrix_tikz_loaded_bool
       {
         \tikzset
@@ -1471,8 +1463,49 @@
               }
           }
       }
+    \int_step_inline:nn \c at iRow
+      {
+        \pgfnodealias
+          { \__nicematrix_env: - ##1 - last }
+          { \__nicematrix_env: - ##1 - \int_use:N \c at jCol }
+      }
+    \int_step_inline:nn \c at jCol
+      {
+        \pgfnodealias
+          { \__nicematrix_env: - last - ##1 }
+          { \__nicematrix_env: - \int_use:N \c at iRow - ##1 }
+      }
     \__nicematrix_create_extra_nodes:
   }
+\cs_new_protected:Npn \__nicematrix_create_blocks_nodes:
+  {
+    \pgfpicture
+    \pgf at relevantforpicturesizefalse
+    \pgfrememberpicturepositiononpagetrue
+    \seq_map_inline:Nn \g__nicematrix_pos_of_blocks_seq
+      { \__nicematrix_create_one_block_node:nnnnn ##1 }
+    \endpgfpicture
+  }
+\cs_new_protected:Npn \__nicematrix_create_one_block_node:nnnnn #1 #2 #3 #4 #5
+  {
+    \tl_if_empty:nF { #5 }
+      {
+        \__nicematrix_qpoint:n { col - #2 }
+        \dim_set_eq:NN \l_tmpa_dim \pgf at x
+        \__nicematrix_qpoint:n { #1 }
+        \dim_set_eq:NN \l_tmpb_dim \pgf at y
+        \__nicematrix_qpoint:n { col - \__nicematrix_succ:n { #4 } }
+        \dim_set_eq:NN \l_tmpc_dim \pgf at x
+        \__nicematrix_qpoint:n { \__nicematrix_succ:n { #3 } }
+        \dim_set_eq:NN \l_tmpd_dim \pgf at y
+        \__nicematrix_pgf_rect_node:nnnnn
+          { \__nicematrix_env: - #5 }
+          { \dim_use:N \l_tmpa_dim }
+          { \dim_use:N \l_tmpb_dim }
+          { \dim_use:N \l_tmpc_dim }
+          { \dim_use:N \l_tmpd_dim }
+      }
+  }
 \cs_new_protected:Npn \__nicematrix_patch_for_revtex:
   {
     \cs_set_eq:NN \@addamp \@addamp at LaTeX
@@ -1492,7 +1525,7 @@
 \NewDocumentEnvironment { NiceArrayWithDelims }
   { m m O { } m ! O { } t \CodeBefore }
   {
-     \bool_if:NT \c__nicematrix_revtex_bool \__nicematrix_patch_for_revtex:
+    \bool_if:NT \c__nicematrix_revtex_bool \__nicematrix_patch_for_revtex:
     \__nicematrix_provide_pgfsyspdfmark:
     \bool_if:NT \c__nicematrix_footnote_bool \savenotes
     \bgroup
@@ -1699,24 +1732,25 @@
      {
        \__nicematrix_newcolumntype w [ 2 ] { \__nicematrix_w: { ##1 } { ##2 } }
        \__nicematrix_newcolumntype W [ 2 ] { \__nicematrix_W: { ##1 } { ##2 } }
-        \exp_args:NV \@temptokena \g__nicematrix_preamble_tl
-        \@tempswatrue
-        \@whilesw \if at tempswa \fi { \@tempswafalse \the \NC at list }
-        \int_gzero:N \c at jCol
-        \tl_gclear:N \g__nicematrix_preamble_tl
-        \bool_gset_false:N \g_tmpb_bool
-        \tl_if_eq:NnTF \l__nicematrix_vlines_clist { all }
-          {
-            \tl_gset:Nn \g__nicematrix_preamble_tl
-              { ! { \skip_horizontal:N \arrayrulewidth } }
-          }
-          {
-            \clist_if_in:NnT \l__nicematrix_vlines_clist 1
-              {
-                \tl_gset:Nn \g__nicematrix_preamble_tl
-                  { ! { \skip_horizontal:N \arrayrulewidth } }
-              }
-          }
+      \cs_if_exist:NT \NC at find@V { \__nicematrix_newcolumntype V { \__nicematrix_V: } }
+      \exp_args:NV \@temptokena \g__nicematrix_preamble_tl
+      \@tempswatrue
+      \@whilesw \if at tempswa \fi { \@tempswafalse \the \NC at list }
+      \int_gzero:N \c at jCol
+      \tl_gclear:N \g__nicematrix_preamble_tl
+      \bool_gset_false:N \g_tmpb_bool
+      \tl_if_eq:NnTF \l__nicematrix_vlines_clist { all }
+        {
+          \tl_gset:Nn \g__nicematrix_preamble_tl
+            { ! { \skip_horizontal:N \arrayrulewidth } }
+        }
+        {
+          \clist_if_in:NnT \l__nicematrix_vlines_clist 1
+            {
+              \tl_gset:Nn \g__nicematrix_preamble_tl
+                { ! { \skip_horizontal:N \arrayrulewidth } }
+            }
+        }
         \seq_clear:N \g__nicematrix_cols_vlism_seq
         \int_zero:N \l_tmpa_int
         \exp_after:wN \__nicematrix_patch_preamble:n \the \@temptokena \q_stop
@@ -1779,22 +1813,24 @@
         p { \__nicematrix_patch_preamble_iv:n #1 }
         b { \__nicematrix_patch_preamble_iv:n #1 }
         m { \__nicematrix_patch_preamble_iv:n #1 }
-        \__nicematrix_w: { \__nicematrix_patch_preamble_v:nnnn { }                          #1 }
-        \__nicematrix_W: { \__nicematrix_patch_preamble_v:nnnn { \cs_set_eq:NN \hss \hfil } #1 }
-        \__nicematrix_S: { \__nicematrix_patch_preamble_vi:n }
-        (  { \__nicematrix_patch_preamble_vii:nn #1 }
-        [  { \__nicematrix_patch_preamble_vii:nn #1 }
-        \{ { \__nicematrix_patch_preamble_vii:nn #1 }
-        )  { \__nicematrix_patch_preamble_viii:nn #1 }
-        ]  { \__nicematrix_patch_preamble_viii:nn #1 }
-        \} { \__nicematrix_patch_preamble_viii:nn #1 }
-        X  { \__nicematrix_patch_preamble_ix:n }
-        \__nicematrix_X  { \__nicematrix_patch_preamble_ix:n }
+        \__nicematrix_V:  { \__nicematrix_patch_preamble_v:n }
+        V { \__nicematrix_patch_preamble_v:n }
+        \__nicematrix_w: { \__nicematrix_patch_preamble_vi:nnnn { }                          #1 }
+        \__nicematrix_W: { \__nicematrix_patch_preamble_vi:nnnn { \cs_set_eq:NN \hss \hfil } #1 }
+        \__nicematrix_S: { \__nicematrix_patch_preamble_vii:n }
+        (  { \__nicematrix_patch_preamble_viii:nn #1 }
+        [  { \__nicematrix_patch_preamble_viii:nn #1 }
+        \{ { \__nicematrix_patch_preamble_viii:nn #1 }
+        )  { \__nicematrix_patch_preamble_ix:nn #1 }
+        ]  { \__nicematrix_patch_preamble_ix:nn #1 }
+        \} { \__nicematrix_patch_preamble_ix:nn #1 }
+        X  { \__nicematrix_patch_preamble_x:n }
+        \__nicematrix_X { \__nicematrix_patch_preamble_x:n }
         \q_stop { }
       }
       {
         \str_if_eq:VnTF \l__nicematrix_letter_for_dotted_lines_str { #1 }
-          { \__nicematrix_patch_preamble_xi:n #1 }
+          { \__nicematrix_patch_preamble_xii:n #1 }
           {
             \str_if_eq:VnTF \l__nicematrix_letter_vlism_tl { #1 }
               {
@@ -1826,7 +1862,7 @@
         < \__nicematrix_cell_end:
       }
     \int_gincr:N \c at jCol
-    \__nicematrix_patch_preamble_x:n
+    \__nicematrix_patch_preamble_xi:n
   }
 \cs_new_protected:Npn \__nicematrix_patch_preamble_ii:nn #1 #2
   {
@@ -1903,13 +1939,13 @@
   {
     \str_set:Nn \l__nicematrix_hpos_col_str { j }
     \keys_set:nn { WithArrows / p-column } { #1 }
-    \__nicematrix_patch_preamble_iv_iv:n { #2 }
+    \__nicematrix_patch_preamble_iv_iv:nn { #2 } { minipage }
   }
-\cs_new_protected:Npn \__nicematrix_patch_preamble_iv_iv:n #1
+\cs_new_protected:Npn \__nicematrix_patch_preamble_iv_iv:nn #1 #2
   {
     \use:x
       {
-        \__nicematrix_patch_preamble_iv_v:nnnnnn
+        \__nicematrix_patch_preamble_iv_v:nnnnnnn
           { \str_if_eq:VnTF \l__nicematrix_vpos_col_str { p } { t } { b } }
           { \dim_eval:n { #1 } }
           {
@@ -1929,11 +1965,12 @@
           { \str_if_eq:VnT \l__nicematrix_vpos_col_str { m } \__nicematrix_center_cell_box: }
           { \str_if_eq:VnT \l__nicematrix_hpos_col_str { si } \siunitx_cell_begin:w }
           { \str_if_eq:VnT \l__nicematrix_hpos_col_str { si } \siunitx_cell_end: }
+          { #2 }
       }
     \int_gincr:N \c at jCol
-    \__nicematrix_patch_preamble_x:n
+    \__nicematrix_patch_preamble_xi:n
   }
-\cs_new_protected:Npn \__nicematrix_patch_preamble_iv_v:nnnnnn #1 #2 #3 #4 #5 #6
+\cs_new_protected:Npn \__nicematrix_patch_preamble_iv_v:nnnnnnn #1 #2 #3 #4 #5 #6 #7
   {
     \tl_gput_right:Nn \g__nicematrix_preamble_tl
       {
@@ -1940,7 +1977,7 @@
         > {
             \dim_set:Nn \l__nicematrix_col_width_dim { #2 }
             \__nicematrix_cell_begin:w
-            \begin { minipage } [ #1 ] { #2 }
+            \begin { #7 } [ #1 ] { #2 }
             \everypar
               {
                 \vrule height \box_ht:N \@arstrutbox width \c_zero_dim
@@ -1955,7 +1992,8 @@
         < {
             #6
             \@finalstrut \@arstrutbox
-            \end { minipage }
+            % \bool_if:NT \g__nicematrix_rotate_bool { \raggedright \hsize = 3 cm }
+            \end { #7 }
             #4
             \__nicematrix_cell_end:
           }
@@ -1977,13 +2015,33 @@
                     ( \box_ht:N \l__nicematrix_cell_box - \box_ht:N \@arstrutbox
                     + \baselineskip ) / 2
                   }
-                { \box_use:N \l__nicematrix_cell_box }
+                  { \box_use:N \l__nicematrix_cell_box }
               }
           }
       }
   }
-\cs_new_protected:Npn \__nicematrix_patch_preamble_v:nnnn #1 #2 #3 #4
+\cs_new_protected:Npn \__nicematrix_patch_preamble_v:n #1
   {
+    \str_if_eq:nnTF { #1 } { [ }
+      { \__nicematrix_patch_preamble_v_i:w [ }
+      { \__nicematrix_patch_preamble_v_i:w [ ] { #1 } }
+  }
+\cs_new_protected:Npn \__nicematrix_patch_preamble_v_i:w [ #1 ]
+  { \__nicematrix_patch_preamble_v_ii:nn { #1 } }
+\cs_new_protected:Npn \__nicematrix_patch_preamble_v_ii:nn #1 #2
+  {
+    \str_set:Nn \l__nicematrix_vpos_col_str { p }
+    \str_set:Nn \l__nicematrix_hpos_col_str { j }
+    \keys_set:nn { WithArrows / p-column } { #1 }
+    \bool_if:NTF \c__nicematrix_varwidth_loaded_bool
+      { \__nicematrix_patch_preamble_iv_iv:nn { #2 } { varwidth } }
+      {
+        \__nicematrix_error:n { varwidth~not~loaded }
+        \__nicematrix_patch_preamble_iv_iv:nn { #2 } { minipage }
+      }
+  }
+\cs_new_protected:Npn \__nicematrix_patch_preamble_vi:nnnn #1 #2 #3 #4
+  {
     \tl_gput_right:Nn \g__nicematrix_preamble_tl
       {
         > {
@@ -2003,21 +2061,21 @@
           }
       }
     \int_gincr:N \c at jCol
-    \__nicematrix_patch_preamble_x:n
+    \__nicematrix_patch_preamble_xi:n
   }
-\cs_new_protected:Npn \__nicematrix_patch_preamble_vi:n #1
+\cs_new_protected:Npn \__nicematrix_patch_preamble_vii:n #1
   {
     \str_if_eq:nnTF { #1 } { [ }
-      { \__nicematrix_patch_preamble_vi_i:w [ }
-      { \__nicematrix_patch_preamble_vi_i:w [ ] { #1 } }
+      { \__nicematrix_patch_preamble_vii_i:w [ }
+      { \__nicematrix_patch_preamble_vii_i:w [ ] { #1 } }
   }
-\cs_new_protected:Npn \__nicematrix_patch_preamble_vi_i:w [ #1 ]
-  { \__nicematrix_patch_preamble_vi_ii:n { #1 } }
+\cs_new_protected:Npn \__nicematrix_patch_preamble_vii_i:w [ #1 ]
+  { \__nicematrix_patch_preamble_vii_ii:n { #1 } }
 \AtBeginDocument
   {
     \cs_if_exist:NTF \siunitx_cell_begin:w
       {
-        \cs_new_protected:Npn \__nicematrix_patch_preamble_vi_ii:n #1
+        \cs_new_protected:Npn \__nicematrix_patch_preamble_vii_ii:n #1
           {
             \tl_gput_right:Nn \g__nicematrix_preamble_tl
               {
@@ -2030,11 +2088,11 @@
                 < { \siunitx_cell_end: \__nicematrix_cell_end: }
               }
             \int_gincr:N \c at jCol
-            \__nicematrix_patch_preamble_x:n
+            \__nicematrix_patch_preamble_xi:n
           }
       }
       {
-        \cs_new_protected:Npn \__nicematrix_patch_preamble_vi_ii:n #1
+        \cs_new_protected:Npn \__nicematrix_patch_preamble_vii_ii:n #1
           {
             \tl_gput_right:Nn \g__nicematrix_preamble_tl
               {
@@ -2043,11 +2101,11 @@
                 < { \c__nicematrix_table_print_tl \__nicematrix_cell_end: }
               }
             \int_gincr:N \c at jCol
-            \__nicematrix_patch_preamble_x:n
+            \__nicematrix_patch_preamble_xi:n
          }
       }
   }
-\cs_new_protected:Npn \__nicematrix_patch_preamble_vii:nn #1 #2
+\cs_new_protected:Npn \__nicematrix_patch_preamble_viii:nn #1 #2
   {
     \bool_if:NT \l__nicematrix_small_bool { \__nicematrix_fatal:n { Delimiter~with~small } }
     \int_compare:nNnTF \c at jCol = \c_zero_int
@@ -2060,12 +2118,12 @@
           }
           {
             \tl_gput_right:Nn \g__nicematrix_preamble_tl { ! { \enskip } }
-            \__nicematrix_patch_preamble_vii_i:nn { #1 } { #2 }
+            \__nicematrix_patch_preamble_viii_i:nn { #1 } { #2 }
           }
       }
-      { \__nicematrix_patch_preamble_vii_i:nn { #1 } { #2 } }
+      { \__nicematrix_patch_preamble_viii_i:nn { #1 } { #2 } }
   }
-\cs_new_protected:Npn \__nicematrix_patch_preamble_vii_i:nn #1 #2
+\cs_new_protected:Npn \__nicematrix_patch_preamble_viii_i:nn #1 #2
   {
     \tl_gput_right:Nx \g__nicematrix_internal_code_after_tl
       { \__nicematrix_delimiter:nnn #1 { \__nicematrix_succ:n \c at jCol } \c_true_bool }
@@ -2076,11 +2134,11 @@
       }
       { \__nicematrix_patch_preamble:n #2 }
   }
-\cs_new_protected:Npn \__nicematrix_patch_preamble_viii:nn #1 #2
+\cs_new_protected:Npn \__nicematrix_patch_preamble_ix:nn #1 #2
   {
     \bool_if:NT \l__nicematrix_small_bool { \__nicematrix_fatal:n { Delimiter~with~small } }
     \tl_if_in:nnTF { ) ] \} } { #2 }
-      { \__nicematrix_patch_preamble_viii_i:nnn #1 #2 }
+      { \__nicematrix_patch_preamble_ix_i:nnn #1 #2 }
       {
         \tl_if_eq:nnTF { \q_stop } { #2 }
           {
@@ -2102,7 +2160,7 @@
           }
       }
   }
-\cs_new_protected:Npn \__nicematrix_patch_preamble_viii_i:nnn #1 #2 #3
+\cs_new_protected:Npn \__nicematrix_patch_preamble_ix_i:nnn #1 #2 #3
   {
     \tl_if_eq:nnTF { \q_stop } { #3 }
       {
@@ -2127,17 +2185,17 @@
         \__nicematrix_patch_preamble:n #3
       }
   }
-\cs_new_protected:Npn \__nicematrix_patch_preamble_ix:n #1
+\cs_new_protected:Npn \__nicematrix_patch_preamble_x:n #1
   {
     \str_if_eq:nnTF { #1 } { [ }
-      { \__nicematrix_patch_preamble_ix_i:w [ }
-      { \__nicematrix_patch_preamble_ix_i:w [ ] #1 }
+      { \__nicematrix_patch_preamble_x_i:w [ }
+      { \__nicematrix_patch_preamble_x_i:w [ ] #1 }
   }
-\cs_new_protected:Npn \__nicematrix_patch_preamble_ix_i:w [ #1 ]
-  { \__nicematrix_patch_preamble_ix_ii:n { #1 } }
+\cs_new_protected:Npn \__nicematrix_patch_preamble_x_i:w [ #1 ]
+  { \__nicematrix_patch_preamble_x_ii:n { #1 } }
 \keys_define:nn { WithArrows / X-column }
   { unknown .code:n = \int_set:Nn \l__nicematrix_weight_int { \l_keys_key_str } }
-\cs_new_protected:Npn \__nicematrix_patch_preamble_ix_ii:n #1
+\cs_new_protected:Npn \__nicematrix_patch_preamble_x_ii:n #1
   {
     \str_set:Nn \l__nicematrix_hpos_col_str { j }
     \tl_set:Nn \l__nicematrix_vpos_col_str { p }
@@ -2145,10 +2203,20 @@
     \int_set:Nn \l__nicematrix_weight_int { 1 }
     \keys_set_known:nnN { WithArrows / p-column } { #1 } \l_tmpa_tl
     \keys_set:nV { WithArrows / X-column } \l_tmpa_tl
+    \int_compare:nNnT \l__nicematrix_weight_int < 0
+      {
+        \exp_args:Nnx \__nicematrix_error:nn { negative~weight }
+          { \int_use:N \l__nicematrix_weight_int }
+        \int_set:Nn \l__nicematrix_weight_int { - \l__nicematrix_weight_int }
+      }
     \int_gadd:Nn \g__nicematrix_total_X_weight_int \l__nicematrix_weight_int
     \bool_if:NTF \l__nicematrix_X_columns_aux_bool
-      { \__nicematrix_patch_preamble_iv_iv:n { \l__nicematrix_weight_int \l__nicematrix_X_columns_dim } }
       {
+        \__nicematrix_patch_preamble_iv_iv:nn
+          { \l__nicematrix_weight_int \l__nicematrix_X_columns_dim }
+          { minipage }
+      }
+      {
         \tl_gput_right:Nn \g__nicematrix_preamble_tl
           {
             > {
@@ -2165,10 +2233,10 @@
               }
           }
         \int_gincr:N \c at jCol
-        \__nicematrix_patch_preamble_x:n
+        \__nicematrix_patch_preamble_xi:n
       }
   }
-\cs_new_protected:Npn \__nicematrix_patch_preamble_xi:n #1
+\cs_new_protected:Npn \__nicematrix_patch_preamble_xii:n #1
   {
     \tl_gput_right:Nn \g__nicematrix_preamble_tl
       { ! { \skip_horizontal:N 2\l__nicematrix_radius_dim } }
@@ -2176,10 +2244,10 @@
       { \__nicematrix_vdottedline:n { \int_use:N \c at jCol } }
     \__nicematrix_patch_preamble:n
   }
-\cs_new_protected:Npn \__nicematrix_patch_preamble_x:n #1
+\cs_new_protected:Npn \__nicematrix_patch_preamble_xi:n #1
   {
     \str_if_eq:nnTF { #1 } { < }
-      \__nicematrix_patch_preamble_xii:n
+      \__nicematrix_patch_preamble_xiii:n
       {
         \tl_if_eq:NnTF \l__nicematrix_vlines_clist { all }
           {
@@ -2197,10 +2265,10 @@
         \__nicematrix_patch_preamble:n { #1 }
       }
   }
-\cs_new_protected:Npn \__nicematrix_patch_preamble_xii:n #1
+\cs_new_protected:Npn \__nicematrix_patch_preamble_xiii:n #1
   {
     \tl_gput_right:Nn \g__nicematrix_preamble_tl { < { #1 } }
-    \__nicematrix_patch_preamble_x:n
+    \__nicematrix_patch_preamble_xi:n
   }
 \cs_new:Npn \__nicematrix_multicolumn:nnn #1 #2 #3
   {
@@ -2226,6 +2294,7 @@
             { \int_eval:n { \c at jCol + 1 } }
             { \int_use:N \c at iRow }
             { \int_eval:n { \c at jCol + #1 } }
+            { } % for the name of the block
           }
       }
     \cs_set:Npn \@sharp { #3 }
@@ -2253,7 +2322,6 @@
         b { \__nicematrix_patch_m_preamble_iv:nnn b #1 }
         \__nicematrix_w: { \__nicematrix_patch_m_preamble_v:nnnn { }                          #1 }
         \__nicematrix_W: { \__nicematrix_patch_m_preamble_v:nnnn { \cs_set_eq:NN \hss \hfil } #1 }
-        \__nicematrix_true_c: { \__nicematrix_patch_m_preamble_vi:n #1 }
         \q_stop { }
       }
       { \__nicematrix_fatal:nn { unknown~column~type } { #1 } }
@@ -2319,11 +2387,6 @@
       }
     \__nicematrix_patch_m_preamble_x:n
   }
-\cs_new_protected:Npn \__nicematrix_patch_m_preamble_vi:n #1
-  {
-    \tl_gput_right:Nn \g__nicematrix_preamble_tl { c }
-    \__nicematrix_patch_m_preamble_x:n
-  }
 \cs_new_protected:Npn \__nicematrix_patch_m_preamble_x:n #1
   {
     \str_if_eq:nnTF { #1 } { < }
@@ -2407,12 +2470,12 @@
           { \box_wd:N \l__nicematrix_the_array_box - \arraycolsep }
       }
     \begin { minipage } [ t ] { \box_wd:N \l__nicematrix_the_array_box }
-      \hbox:n
-        {
-          \box_use_drop:N \l__nicematrix_the_array_box
-         \__nicematrix_create_extra_nodes:
-         \seq_if_empty:NF \g__nicematrix_blocks_seq \__nicematrix_draw_blocks:
-       }
+    \hbox
+      {
+        \box_use_drop:N \l__nicematrix_the_array_box
+        \__nicematrix_create_extra_nodes:
+        \seq_if_empty:NF \g__nicematrix_blocks_seq \__nicematrix_draw_blocks:
+      }
     \bool_lazy_or:nnT
       { \int_compare_p:nNn \c at tabularnote > 0 }
       { ! \tl_if_empty_p:V \l__nicematrix_tabularnote_tl }
@@ -2752,12 +2815,12 @@
           \pgfcoordinate { \__nicematrix_env: - col - \__nicematrix_succ:n \g_tmpa_int }
             {
               \bool_lazy_and:nnTF \l__nicematrix_Matrix_bool \l__nicematrix_NiceArray_bool
-                 {
-                   \pgfpoint
-                     { - 0.5 \arrayrulewidth - \arraycolsep }
-                     \c_zero_dim
-                 }
-                 { \pgfpoint { - 0.5 \arrayrulewidth } \c_zero_dim }
+                {
+                  \pgfpoint
+                    { - 0.5 \arrayrulewidth - \arraycolsep }
+                    \c_zero_dim
+                }
+                { \pgfpoint { - 0.5 \arrayrulewidth } \c_zero_dim }
             }
           \str_if_empty:NF \l__nicematrix_name_str
             {
@@ -2795,7 +2858,7 @@
   {
     >
       {
-        \cs_set_eq:NN \CodeAfter \__nicematrix_CodeAfter_i:n
+        \cs_set_eq:NN \CodeAfter \__nicematrix_CodeAfter_i:
         \bool_gset_true:N \g__nicematrix_after_col_zero_bool
         \__nicematrix_begin_of_row:
         \hbox_set:Nw \l__nicematrix_cell_box
@@ -2840,7 +2903,7 @@
   {
     >
       {
-    \cs_set_eq:NN \CodeAfter \__nicematrix_CodeAfter_i:n
+        \cs_set_eq:NN \CodeAfter \__nicematrix_CodeAfter_i:
         \bool_gset_true:N \g__nicematrix_last_col_found_bool
         \int_gincr:N \c at jCol
         \int_gset_eq:NN \g__nicematrix_col_total_int \c at jCol
@@ -2935,8 +2998,8 @@
   { \bool_gset_true:N \g__nicematrix_not_empty_cell_bool }
 \NewDocumentEnvironment { NiceTabular } { O { } m ! O { } }
   {
-    \dim_zero_new:N \l__nicematrix_width_dim
-    \dim_set_eq:NN \l__nicematrix_width_dim \linewidth
+    \dim_compare:nNnT \l__nicematrix_width_dim = \c_zero_dim
+      { \dim_set_eq:NN \l__nicematrix_width_dim \linewidth }
     \str_gset:Nn \g__nicematrix_name_env_str { NiceTabular }
     \keys_set:nn { NiceMatrix / NiceTabular } { #1 , #3 }
     \bool_set_true:N \l__nicematrix_NiceTabular_bool
@@ -3013,6 +3076,35 @@
           }
       }
     \__nicematrix_create_diag_nodes:
+    \pgfpicture
+    \int_step_inline:nn \c at iRow
+      {
+        \pgfnodealias
+          { \__nicematrix_env: - ##1 - last }
+          { \__nicematrix_env: - ##1 - \int_use:N \c at jCol }
+      }
+    \int_step_inline:nn \c at jCol
+      {
+        \pgfnodealias
+          { \__nicematrix_env: - last - ##1 }
+          { \__nicematrix_env: - \int_use:N \c at iRow - ##1 }
+      }
+    \str_if_empty:NF \l__nicematrix_name_str
+      {
+        \int_step_inline:nn \c at iRow
+          {
+            \pgfnodealias
+              { \l__nicematrix_name_str - ##1 - last }
+              { \__nicematrix_env: - ##1 - \int_use:N \c at jCol }
+          }
+        \int_step_inline:nn \c at jCol
+          {
+            \pgfnodealias
+              { \l__nicematrix_name_str - last - ##1 }
+              { \__nicematrix_env: - \int_use:N \c at iRow - ##1 }
+          }
+      }
+    \endpgfpicture
     \bool_if:NT \l__nicematrix_parallelize_diags_bool
       {
         \int_gzero_new:N \g__nicematrix_ddots_int
@@ -3074,7 +3166,6 @@
           }
         \bool_set_true:N \l__nicematrix_code_before_bool
       }
-    % \bool_if:NT \l__nicematrix_code_before_bool \__nicematrix_write_aux_for_cell_nodes:
     \str_gclear:N \g__nicematrix_name_env_str
     \__nicematrix_restore_iRow_jCol:
     \cs_gset_eq:NN \CT at arc@ \__nicematrix_old_CT at arc@
@@ -3084,9 +3175,9 @@
 \cs_new_protected:Npn \__nicematrix_adjust_pos_of_blocks_seq:
   {
     \seq_gset_map_x:NNn \g__nicematrix_pos_of_blocks_seq \g__nicematrix_pos_of_blocks_seq
-      { \__nicematrix_adjust_pos_of_blocks_seq_i:nnnn ##1 }
+      { \__nicematrix_adjust_pos_of_blocks_seq_i:nnnnn ##1 }
   }
-\cs_new:Npn \__nicematrix_adjust_pos_of_blocks_seq_i:nnnn #1 #2 #3 #4
+\cs_new:Npn \__nicematrix_adjust_pos_of_blocks_seq_i:nnnnn #1 #2 #3 #4 #5
   {
     { #1 }
     { #2 }
@@ -3100,6 +3191,7 @@
         { \int_use:N \c at jCol }
         { #4 }
     }
+    { #5 }
   }
 \AtBeginDocument
   {
@@ -3136,49 +3228,6 @@
     \anchor { 5 } { \five }
     \anchor { center } { \pgfpointorigin }
   }
-\cs_new_protected:Npn \__nicematrix_write_aux_for_cell_nodes:
-  {
-    \pgfpicture
-    \pgfrememberpicturepositiononpagetrue
-    \pgf at relevantforpicturesizefalse
-    \int_step_inline:nnn \l__nicematrix_first_row_int \g__nicematrix_row_total_int
-      {
-        \int_step_inline:nnn \l__nicematrix_first_col_int \g__nicematrix_col_total_int
-          {
-            \cs_if_exist:cT { pgf @ sh @ ns @ \__nicematrix_env: - ##1 - ####1 }
-              {
-                \pgfscope
-                \pgftransformshift
-                  { \pgfpointanchor { \__nicematrix_env: - ##1 - ####1 } { north~west } }
-                \pgfnode
-                  { rectangle }
-                  { center }
-                  {
-                    \hbox
-                      { \pgfsys at markposition { \__nicematrix_env: - ##1 - ####1 - NW } }
-                  }
-                  { }
-                  { }
-                \endpgfscope
-                \pgfscope
-                \pgftransformshift
-                  { \pgfpointanchor { \__nicematrix_env: - ##1 - ####1 } { south~east } }
-                \pgfnode
-                  { rectangle }
-                  { center }
-                  {
-                    \hbox
-                      { \pgfsys at markposition { \__nicematrix_env: - ##1 - ####1 - SE } }
-                  }
-                  { }
-                  { }
-                \endpgfscope
-              }
-          }
-      }
-    \endpgfpicture
-    \__nicematrix_create_extra_nodes:
-  }
 \cs_new_protected:Npn \__nicematrix_create_diag_nodes:
   {
     \pgfpicture
@@ -3369,6 +3418,7 @@
         { \int_min:nn \l__nicematrix_initial_j_int \l__nicematrix_final_j_int }
         { \int_use:N \l__nicematrix_final_i_int }
         { \int_max:nn \l__nicematrix_initial_j_int \l__nicematrix_final_j_int }
+        { } % for the name of the block
       }
   }
 \cs_new_protected:Npn \__nicematrix_adjust_to_submatrix:nn #1 #2
@@ -3685,15 +3735,11 @@
     \bool_if:NTF \l__nicematrix_initial_open_bool
       {
         \__nicematrix_open_y_initial_dim:
-        % \__nicematrix_qpoint:n { col - \int_use:N \l__nicematrix_initial_j_int }
-        % \dim_set_eq:NN \l__nicematrix_x_initial_dim \pgf at x
         \__nicematrix_open_x_initial_dim:
       }
       { \__nicematrix_set_initial_coords_from_anchor:n { south~east } }
     \bool_if:NTF \l__nicematrix_final_open_bool
       {
-        % \__nicematrix_open_y_final_dim:
-        % \__nicematrix_qpoint:n { col - \__nicematrix_succ:n \l__nicematrix_final_j_int }
         \__nicematrix_open_x_final_dim:
         \dim_set_eq:NN \l__nicematrix_x_final_dim \pgf at x
       }
@@ -3962,8 +4008,8 @@
             \int_compare:nNnTF \c at jCol = \l__nicematrix_last_col_int
               { \__nicematrix_error:nn { in~last~col } \Ldots }
               {
-                 \__nicematrix_instruction_of_type:nnn \c_false_bool { Ldots }
-                   { #1 , down = #2 , up = #3 }
+                \__nicematrix_instruction_of_type:nnn \c_false_bool { Ldots }
+                  { #1 , down = #2 , up = #3 }
               }
           }
         \bool_if:NF \l__nicematrix_nullify_dots_bool
@@ -3978,8 +4024,8 @@
             \int_compare:nNnTF \c at jCol = \l__nicematrix_last_col_int
               { \__nicematrix_error:nn { in~last~col } \Cdots }
               {
-                 \__nicematrix_instruction_of_type:nnn \c_false_bool { Cdots }
-                   { #1 , down = #2 , up = #3 }
+                \__nicematrix_instruction_of_type:nnn \c_false_bool { Cdots }
+                  { #1 , down = #2 , up = #3 }
               }
           }
         \bool_if:NF \l__nicematrix_nullify_dots_bool
@@ -3994,8 +4040,8 @@
             \int_compare:nNnTF \c at iRow = \l__nicematrix_last_row_int
               { \__nicematrix_error:nn { in~last~row } \Vdots }
               {
-                 \__nicematrix_instruction_of_type:nnn \c_false_bool { Vdots }
-                   { #1 , down = #2 , up = #3 }
+                \__nicematrix_instruction_of_type:nnn \c_false_bool { Vdots }
+                  { #1 , down = #2 , up = #3 }
               }
           }
         \bool_if:NF \l__nicematrix_nullify_dots_bool
@@ -4288,6 +4334,105 @@
     \dim_set_eq:NN \l__nicematrix_y_final_dim \pgf at y
     \__nicematrix_draw_line:
   }
+\keys_define:nn { NiceMatrix / RowStyle }
+  {
+    cell-space-top-limit .dim_set:N = \l_tmpa_dim ,
+    cell-space-top-limit .initial:n = \c_zero_dim ,
+    cell-space-top-limit .value_required:n = true ,
+    cell-space-bottom-limit .dim_set:N = \l_tmpb_dim ,
+    cell-space-bottom-limit .initial:n = \c_zero_dim ,
+    cell-space-bottom-limit .value_required:n = true ,
+    cell-space-limits .meta:n =
+      {
+        cell-space-top-limit = #1 ,
+        cell-space-bottom-limit = #1 ,
+      } ,
+    color .tl_set:N = \l_tmpa_tl ,
+    color .value_required:n = true ,
+    bold .bool_set:N = \l_tmpa_bool ,
+    bold .default:n = true ,
+    bold .initial:n = false ,
+    nb-rows .int_set:N = \l__nicematrix_key_nb_rows_int ,
+    nb-rows .value_required:n = true ,
+    nb-rows .initial:n = 1 ,
+    rowcolor .tl_set:N = \l_tmpc_tl ,
+    rowcolor .value_required:n = true ,
+    rowcolor .initial:n = \c_empty_tl ,
+    unknown .code:n = \__nicematrix_error:n { Unknown~key~for~RowStyle }
+  }
+\NewDocumentCommand \__nicematrix_RowStyle:n { O { } m }
+  {
+    \keys_set:nn { NiceMatrix / RowStyle } { #1 }
+    \tl_if_empty:NF \l_tmpc_tl
+      {
+        \tl_gput_right:Nx \g_nicematrix_code_before_tl
+          {
+            \__nicematrix_rectanglecolor
+              { \l_tmpc_tl }
+              { \int_use:N \c at iRow - \int_use:N \c at jCol }
+              { \int_use:N \c at iRow - * }
+          }
+        \int_compare:nNnT \l__nicematrix_key_nb_rows_int > 1
+          {
+            \tl_gput_right:Nx \g_nicematrix_code_before_tl
+              {
+                \__nicematrix_rowcolor
+                  { \l_tmpc_tl }
+                  {
+                    \int_eval:n { \c at iRow + 1 }
+                    - \int_eval:n { \c at iRow + \l__nicematrix_key_nb_rows_int - 1 }
+                  }
+              }
+          }
+      }
+    \tl_gput_right:Nn \g__nicematrix_row_style_tl { \ifnum \c at iRow < }
+    \tl_gput_right:Nx \g__nicematrix_row_style_tl
+      { \int_eval:n { \c at iRow + \l__nicematrix_key_nb_rows_int } }
+    \tl_gput_right:Nn \g__nicematrix_row_style_tl { #2 }
+    \dim_compare:nNnT \l_tmpa_dim > \c_zero_dim
+      {
+        \tl_gput_right:Nx \g__nicematrix_row_style_tl
+          {
+            \tl_gput_right:Nn \exp_not:N \g__nicematrix_post_action_cell_tl
+              {
+                \dim_set:Nn \l__nicematrix_cell_space_top_limit_dim
+                  { \dim_use:N \l_tmpa_dim }
+              }
+          }
+      }
+    \dim_compare:nNnT \l_tmpb_dim > \c_zero_dim
+      {
+        \tl_gput_right:Nx \g__nicematrix_row_style_tl
+          {
+            \tl_gput_right:Nn \exp_not:N \g__nicematrix_post_action_cell_tl
+              {
+                \dim_set:Nn \l__nicematrix_cell_space_bottom_limit_dim
+                  { \dim_use:N \l_tmpb_dim }
+              }
+          }
+      }
+    \tl_if_empty:NF \l_tmpa_tl
+      {
+        \tl_gput_right:Nx \g__nicematrix_row_style_tl
+          { \mode_leave_vertical: \exp_not:N \color { \l_tmpa_tl } }
+      }
+    \bool_if:NT \l_tmpa_bool
+      {
+        \tl_gput_right:Nn \g__nicematrix_row_style_tl
+          {
+            \if_mode_math:
+              \c_math_toggle_token
+              \bfseries \boldmath
+              \c_math_toggle_token
+            \else:
+              \bfseries \boldmath
+            \fi:
+          }
+      }
+    \tl_gput_right:Nn \g__nicematrix_row_style_tl { \fi }
+    \g__nicematrix_row_style_tl
+    \ignorespaces
+  }
 \cs_new_protected:Npn \__nicematrix_add_to_colors_seq:nn #1 #2
   {
     \int_zero:N \l_tmpa_int
@@ -4315,11 +4460,6 @@
       }
     \endpgfpicture
   }
-\cs_set_protected:Npn \__nicematrix_cut_on_hyphen:w #1-#2\q_stop
-  {
-    \tl_set:Nn \l_tmpa_tl { #1 }
-    \tl_set:Nn \l_tmpb_tl { #2 }
-  }
 \cs_new_protected:Npn \__nicematrix_cartesian_color:nn #1 #2
   {
     \tl_set:Nn \l__nicematrix_rows_tl { #1 }
@@ -4393,7 +4533,7 @@
       }
   }
 \keys_define:nn { NiceMatrix / arraycolor }
-  { except-corners .code:n = \__nicematrix_error:n { key except-corners } }
+  { except-corners .code:n = \__nicematrix_error:n { key~except-corners } }
 \NewDocumentCommand \__nicematrix_arraycolor { O { } m O { } }
   {
     \keys_set:nn { NiceMatrix / arraycolor } { #3 }
@@ -4424,7 +4564,7 @@
       {
         \seq_set_eq:NN \l_tmpb_seq \g__nicematrix_pos_of_blocks_seq
         \seq_set_filter:NNn \l_tmpa_seq \l_tmpb_seq
-          { \__nicematrix_not_in_exterior_p:nnnn ##1 }
+          { \__nicematrix_not_in_exterior_p:nnnnn ##1 }
       }
     \pgfpicture
     \pgf at relevantforpicturesizefalse
@@ -4446,8 +4586,8 @@
             \bool_if:NT \l__nicematrix_respect_blocks_bool
               {
                 \seq_set_filter:NNn \l_tmpb_seq \l_tmpa_seq
-                  { \__nicematrix_intersect_our_row_p:nnnn ####1 }
-                \seq_map_inline:Nn \l_tmpb_seq { \__nicematrix_rowcolors_i:nnnn ####1 }
+                  { \__nicematrix_intersect_our_row_p:nnnnn ####1 }
+                \seq_map_inline:Nn \l_tmpb_seq { \__nicematrix_rowcolors_i:nnnnn ####1 }
               }
             \tl_set:Nx \l__nicematrix_rows_tl
               { \int_use:N \l_tmpa_int - \int_use:N \l_tmpb_int }
@@ -4483,12 +4623,12 @@
   }
 \NewDocumentCommand \__nicematrix_rowcolors { O { } m m m O { } }
   { \__nicematrix_rowlistcolors [ #1 ] { #2 } { { #3 } , { #4 } } [ #5 ] }
-\cs_new_protected:Npn \__nicematrix_rowcolors_i:nnnn #1 #2 #3 #4
+\cs_new_protected:Npn \__nicematrix_rowcolors_i:nnnnn #1 #2 #3 #4 #5
   {
     \int_compare:nNnT { #3 } > \l_tmpb_int
       { \int_set:Nn \l_tmpb_int { #3 } }
   }
-\prg_new_conditional:Nnn \__nicematrix_not_in_exterior:nnnn p
+\prg_new_conditional:Nnn \__nicematrix_not_in_exterior:nnnnn p
   {
     \bool_lazy_or:nnTF
       { \int_compare_p:nNn { #4 } = \c_zero_int }
@@ -4496,7 +4636,7 @@
       \prg_return_false:
       \prg_return_true:
   }
-\prg_new_conditional:Nnn \__nicematrix_intersect_our_row:nnnn p
+\prg_new_conditional:Nnn \__nicematrix_intersect_our_row:nnnnn p
   {
     \bool_if:nTF
       {
@@ -4596,7 +4736,7 @@
       {
         \tl_gput_right:Nx \g_nicematrix_code_before_tl
           {
-            \cellcolor [ #1 ] { \exp_not:n { #2 } }
+            \__nicematrix_cellcolor [ #1 ] { \exp_not:n { #2 } }
               { \int_use:N \c at iRow - \int_use:N \c at jCol }
           }
       }
@@ -4607,7 +4747,7 @@
       {
         \tl_gput_right:Nx \g_nicematrix_code_before_tl
           {
-            \exp_not:N \rectanglecolor [ #1 ] { \exp_not:n { #2 } }
+            \__nicematrix_rectanglecolor [ #1 ] { \exp_not:n { #2 } }
               { \int_use:N \c at iRow - \int_use:N \c at jCol }
               { \int_use:N \c at iRow - \exp_not:n { \int_use:N \c at jCol } }
           }
@@ -4661,30 +4801,30 @@
       { \tl_if_blank:nTF { #4 } { \int_use:N \c at iRow } { #4 } }
       \l_tmpa_tl
       {
-         \bool_gset_true:N \g_tmpa_bool
-         \seq_map_inline:Nn \g__nicematrix_pos_of_blocks_seq
-           { \__nicematrix_test_vline_in_block:nnnn ##1 }
-         \seq_map_inline:Nn \g__nicematrix_pos_of_xdots_seq
-           { \__nicematrix_test_vline_in_block:nnnn ##1 }
-         \seq_map_inline:Nn \g__nicematrix_pos_of_stroken_blocks_seq
-           { \__nicematrix_test_vline_in_stroken_block:nnnn ##1 }
-         \clist_if_empty:NF \l__nicematrix_corners_clist \__nicematrix_test_in_corner_v:
-         \bool_if:NTF \g_tmpa_bool
-           {
-             \tl_if_empty:NT \l_tmpc_tl
-               { \tl_set_eq:NN \l_tmpc_tl \l_tmpa_tl }
-           }
-           {
-             \tl_if_empty:NF \l_tmpc_tl
-               {
-                 \__nicematrix_vline_ii:nnnn
-                   { #1 }
-                   { #2 }
-                   \l_tmpc_tl
-                   { \int_eval:n { \l_tmpa_tl - 1 } }
-                 \tl_clear:N \l_tmpc_tl
-               }
-           }
+        \bool_gset_true:N \g_tmpa_bool
+        \seq_map_inline:Nn \g__nicematrix_pos_of_blocks_seq
+          { \__nicematrix_test_vline_in_block:nnnnn ##1 }
+        \seq_map_inline:Nn \g__nicematrix_pos_of_xdots_seq
+          { \__nicematrix_test_vline_in_block:nnnnn ##1 }
+        \seq_map_inline:Nn \g__nicematrix_pos_of_stroken_blocks_seq
+          { \__nicematrix_test_vline_in_stroken_block:nnnn ##1 }
+        \clist_if_empty:NF \l__nicematrix_corners_clist \__nicematrix_test_in_corner_v:
+        \bool_if:NTF \g_tmpa_bool
+          {
+            \tl_if_empty:NT \l_tmpc_tl
+              { \tl_set_eq:NN \l_tmpc_tl \l_tmpa_tl }
+          }
+          {
+            \tl_if_empty:NF \l_tmpc_tl
+              {
+                \__nicematrix_vline_ii:nnnn
+                  { #1 }
+                  { #2 }
+                  \l_tmpc_tl
+                  { \int_eval:n { \l_tmpa_tl - 1 } }
+                \tl_clear:N \l_tmpc_tl
+              }
+          }
       }
     \tl_if_empty:NF \l_tmpc_tl
       {
@@ -4818,9 +4958,9 @@
       {
          \bool_gset_true:N \g_tmpa_bool
          \seq_map_inline:Nn \g__nicematrix_pos_of_blocks_seq
-           { \__nicematrix_test_hline_in_block:nnnn ##1 }
+           { \__nicematrix_test_hline_in_block:nnnnn ##1 }
          \seq_map_inline:Nn \g__nicematrix_pos_of_xdots_seq
-           { \__nicematrix_test_hline_in_block:nnnn ##1 }
+           { \__nicematrix_test_hline_in_block:nnnnn ##1 }
          \seq_map_inline:Nn \g__nicematrix_pos_of_stroken_blocks_seq
            { \__nicematrix_test_hline_in_stroken_block:nnnn ##1 }
          \clist_if_empty:NF \l__nicematrix_corners_clist \__nicematrix_test_in_corner_h:
@@ -4989,7 +5129,7 @@
       { \__nicematrix_hline:nnnn { \__nicematrix_succ:n { \c at iRow } } { #1 } 1 { } }
     \ifnum 0 = `{ \fi }
   }
-\cs_new_protected:Npn \__nicematrix_test_hline_in_block:nnnn #1 #2 #3 #4
+\cs_new_protected:Npn \__nicematrix_test_hline_in_block:nnnnn #1 #2 #3 #4
   {
     \bool_lazy_all:nT
       {
@@ -5000,7 +5140,7 @@
       }
       { \bool_gset_false:N \g_tmpa_bool }
   }
-\cs_new_protected:Npn \__nicematrix_test_vline_in_block:nnnn #1 #2 #3 #4
+\cs_new_protected:Npn \__nicematrix_test_vline_in_block:nnnnn #1 #2 #3 #4
   {
     \bool_lazy_all:nT
       {
@@ -5070,8 +5210,8 @@
         \__nicematrix_test_if_cell_in_a_block:nn { ##1 } { \int_eval:n { #2 } }
         \bool_lazy_or:nnTF
           {
-             \cs_if_exist_p:c
-               { pgf @ sh @ ns @ \__nicematrix_env: - ##1 - \int_eval:n { #2 } }
+            \cs_if_exist_p:c
+              { pgf @ sh @ ns @ \__nicematrix_env: - ##1 - \int_eval:n { #2 } }
           }
           \l_tmpb_bool
           { \bool_set_true:N \l_tmpa_bool }
@@ -5131,7 +5271,7 @@
     \seq_map_inline:Nn \g__nicematrix_pos_of_blocks_seq
       { \__nicematrix_test_if_cell_in_block:nnnnnnn \l_tmpa_int \l_tmpb_int ##1 }
   }
-\cs_new_protected:Npn \__nicematrix_test_if_cell_in_block:nnnnnnn #1 #2 #3 #4 #5 #6
+\cs_new_protected:Npn \__nicematrix_test_if_cell_in_block:nnnnnnn #1 #2 #3 #4 #5 #6 #7
   {
     \int_compare:nNnT { #3 } < { \__nicematrix_succ:n { #1 } }
       {
@@ -5680,6 +5820,9 @@
     t .value_forbidden:n = true ,
     b .code:n = \str_set:Nn \l__nicematrix_vpos_of_block_tl b ,
     b .value_forbidden:n = true ,
+    name .tl_set:N = \l__nicematrix_block_name_str ,
+    name .value_required:n = true ,
+    name .initial:n = \c_empty_tl ,
     unknown .code:n = \__nicematrix_error:n { Unknown~key~for~Block }
   }
 \cs_new_protected:Npn \__nicematrix_draw_blocks:
@@ -5732,8 +5875,8 @@
           }
       }
       {
-        \seq_gput_left:Nn \g__nicematrix_pos_of_blocks_seq
-          { { #1 } { #2 } { #3 } { #4 } }
+        \seq_gput_left:Nx \g__nicematrix_pos_of_blocks_seq
+          { { #1 } { #2 } { #3 } { #4 } { \l__nicematrix_block_name_str } }
       }
     \tl_if_empty:NF \l__nicematrix_draw_tl
       {
@@ -5807,11 +5950,21 @@
       \dim_set_eq:NN \l_tmpc_dim \pgf at y
       \__nicematrix_qpoint:n { col - \__nicematrix_succ:n { \l__nicematrix_last_col_int } }
       \dim_set_eq:NN \l_tmpd_dim \pgf at x
-      \begin { pgfscope }
       \__nicematrix_pgf_rect_node:nnnnn
         { \__nicematrix_env: - #1 - #2 - block }
         \l_tmpb_dim \l_tmpa_dim \l_tmpd_dim \l_tmpc_dim
-      \end { pgfscope }
+      \str_if_empty:NF \l__nicematrix_block_name_str
+        {
+          \pgfnodealias
+            { \__nicematrix_env: - \l__nicematrix_block_name_str }
+            { \__nicematrix_env: - #1 - #2 - block }
+          \str_if_empty:NF \l__nicematrix_name_str
+            {
+              \pgfnodealias
+                { \l__nicematrix_name_str - \l__nicematrix_block_name_str }
+                { \__nicematrix_env: - #1 - #2 - block }
+            }
+        }
       \bool_if:NF \l__nicematrix_hpos_of_block_cap_bool
         {
           \dim_set_eq:NN \l_tmpb_dim \c_max_dim
@@ -6220,6 +6373,7 @@
         { \int_use:N \c at jCol }
         { \int_use:N \c at iRow }
         { \int_use:N \c at jCol }
+        { }
       }
   }
 \cs_new_protected:Npn \__nicematrix_actually_diagbox:nnnnnn #1 #2 #3 #4 #5 #6
@@ -6246,11 +6400,24 @@
     \pgfscope
     \pgftransformshift { \pgfpoint \l_tmpb_dim \l_tmpc_dim }
     \pgfnode { rectangle } { south~west }
-      { \__nicematrix_math_toggle_token: #5 \__nicematrix_math_toggle_token: } { } { }
+      {
+        \begin { minipage } { 20 cm }
+        \__nicematrix_math_toggle_token: #5 \__nicematrix_math_toggle_token:
+        \end { minipage }
+      }
+      { }
+      { }
     \endpgfscope
     \pgftransformshift { \pgfpoint \l_tmpd_dim \l_tmpa_dim }
     \pgfnode { rectangle } { north~east }
-      { \__nicematrix_math_toggle_token: #6 \__nicematrix_math_toggle_token: } { } { }
+      {
+        \begin { minipage } { 20 cm }
+        \raggedleft
+        \__nicematrix_math_toggle_token: #6 \__nicematrix_math_toggle_token:
+        \end { minipage }
+      }
+      { }
+      { }
     \endpgfpicture
   }
 \keys_define:nn { NiceMatrix }
@@ -6268,18 +6435,19 @@
     rules .value_required:n = true ,
     unknown .code:n = \__nicematrix_error:n { Unknown~key~for~CodeAfter }
   }
-\cs_new:Npn \__nicematrix_CodeAfter: { \omit \__nicematrix_CodeAfter_i:n }
-\cs_new_protected:Npn \__nicematrix_CodeAfter_i:n #1 \end
+\cs_new:Npn \__nicematrix_CodeAfter: { \omit \__nicematrix_CodeAfter_ii:n }
+\cs_new_protected:Npn \__nicematrix_CodeAfter_i: { \\ \omit \__nicematrix_CodeAfter_ii:n }
+\cs_new_protected:Npn \__nicematrix_CodeAfter_ii:n #1 \end
   {
     \tl_gput_right:Nn \g_nicematrix_code_after_tl { #1 }
-    \__nicematrix_CodeAfter_ii:n
+    \__nicematrix_CodeAfter_iv:n
   }
-\cs_new_protected:Npn \__nicematrix_CodeAfter_ii:n #1
+\cs_new_protected:Npn \__nicematrix_CodeAfter_iv:n #1
   {
     \str_if_eq:eeTF \@currenvir { #1 } { \end { #1 } }
       {
         \tl_gput_right:Nn \g_nicematrix_code_after_tl { \end { #1 } }
-        \__nicematrix_CodeAfter_i:n
+        \__nicematrix_CodeAfter_ii:n
       }
   }
 \cs_new_protected:Npn \__nicematrix_delimiter:nnn #1 #2 #3
@@ -6421,8 +6589,10 @@
     \exp_args:NNV \NewDocumentCommand \__nicematrix_SubMatrix \l__nicematrix_argspec_tl
       {
         \peek_remove_spaces:n
-          { \__nicematrix_sub_matrix:nnnnnnn
-              { #1 } { #2 } { #3 } { #4 }  { #5 } { #6 } { #7 } }
+          {
+            \__nicematrix_sub_matrix:nnnnnnn
+              { #1 } { #2 } { #3 } { #4 }  { #5 } { #6 } { #7 }
+          }
       }
   }
 \cs_new_protected:Npn \__nicematrix_sub_matrix:nnnnnnn #1 #2 #3 #4 #5 #6 #7
@@ -6787,7 +6957,7 @@
       }
     \bool_set_true:N \c__nicematrix_footnote_bool
   }
-\__nicematrix_msg_new:nn { key except-corners }
+\__nicematrix_msg_new:nn { key~except-corners }
   {
     The~key~'except-corners'~has~been~deleted~for~the~command~\token_to_str:N
     \arraycolor\ in~the~\token_to_str:N \CodeBefore.~You~should~instead~use~
@@ -6820,6 +6990,11 @@
     \tl_if_empty:VF \g__nicematrix_HVdotsfor_lines_tl
       { ~Maybe~your~use~of~\token_to_str:N \Hdotsfor\ is~incorrect.}
   }
+\__nicematrix_msg_new:nn { negative~weight }
+  {
+    The~weight~of~the~'X'~columns~must~be~positive~and~you~have~used~
+    the~value~'#1'.~If~you~go~on,~the~absolute~value~will~be~used.
+  }
 \__nicematrix_msg_new:nn { too~much~cols~for~matrix~with~last~col }
   {
     You~try~to~use~more~columns~than~allowed~by~your~
@@ -6895,12 +7070,6 @@
     and~'shorten'~(and~you~try~to~use~'\l_keys_key_str').~If~you~go~on,~
     this~key~will~be~ignored.
   }
-\__nicematrix_msg_new:nn { Unknown~key~for~RowStyle }
-  {
-    As~for~now,~there~is~only~four~keys~available~here:~'cell-space-top-limit',~
-    'cell-space-bottom-limit~'cell-space-limits'~and~color~(and~you~try~to~use~
-    '\l_keys_key_str').~If~you~go~on,~this~key~will~be~ignored.
-  }
 \__nicematrix_msg_new:nn { Unknown~key~for~rowcolors }
   {
     As~for~now,~there~is~only~two~keys~available~here:~'cols'~and~'respect-blocks'~
@@ -7102,6 +7271,12 @@
     The~value~of~key~'\l_keys_key_str'~must~be~of~length~1.\\
     If~you~go~on,~it~will~be~ignored.
   }
+\__nicematrix_msg_new:nn { varwidth~not~loaded }
+  {
+    You~can't~use~the~column~type~'V'~because~'varwidth'~is~not~
+    loaded.\\
+    If~you~go~on,~your~column~will~behave~like~'p'.
+  }
 \__nicematrix_msg_new:nnn { Unknown~key~for~Block }
   {
     The~key~'\l_keys_key_str'~is~unknown~for~the~command~\token_to_str:N
@@ -7110,7 +7285,7 @@
   }
   {
     The~available~keys~are~(in~alphabetic~order):~b,~borders,~c,~draw,~fill,~
-    hvlines,~l,~line-width,~rounded-corners,~r,~t~and~tikz.
+    hvlines,~l,~line-width,~name,~rounded-corners,~r,~t~and~tikz.
   }
 \__nicematrix_msg_new:nnn { Unknown~key~for~CodeAfter }
   {
@@ -7166,6 +7341,23 @@
     label-in-tabular~and~
     style.
   }
+\__nicematrix_msg_new:nnn { Unknown~key~for~RowStyle }
+  {
+    The~key~'\l_keys_key_str'~is~unknown~for~the~command~
+    \token_to_str:N \RowStyle. \\
+    If~you~go~on,~it~will~be~ignored. \\
+    For~a~list~of~the~available~keys,~type~H~<return>.
+  }
+  {
+    The~available~keys~are~(in~alphabetic~order):~
+    'bold',~
+    'cell-space-top-limit',~
+    'cell-space-bottom-limit',~
+    'cell-space-limits',~
+    'color',~
+    'nb-rows'~and~
+    'rowcolor'.
+  }
 \__nicematrix_msg_new:nnn { Unknown~key~for~NiceMatrixOptions }
   {
     The~key~'\l_keys_key_str'~is~unknown~for~the~command~



More information about the tex-live-commits mailing list.