texlive[72084] Master/texmf-dist: nicematrix (22aug24)

commits+karl at tug.org commits+karl at tug.org
Thu Aug 22 21:40:09 CEST 2024


Revision: 72084
          https://tug.org/svn/texlive?view=revision&revision=72084
Author:   karl
Date:     2024-08-22 21:40:08 +0200 (Thu, 22 Aug 2024)
Log Message:
-----------
nicematrix (22aug24)

Modified Paths:
--------------
    trunk/Master/texmf-dist/doc/latex/nicematrix/nicematrix-code.pdf
    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/doc/latex/nicematrix/nicematrix.tex
    trunk/Master/texmf-dist/source/latex/nicematrix/nicematrix-code.dtx
    trunk/Master/texmf-dist/tex/latex/nicematrix/nicematrix.sty

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

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	2024-08-21 23:41:52 UTC (rev 72083)
+++ trunk/Master/texmf-dist/doc/latex/nicematrix/nicematrix-french.tex	2024-08-22 19:40:08 UTC (rev 72084)
@@ -129,8 +129,9 @@
 
 
 \begin{abstract}
-L'extension LaTeX \pkg{nicematrix} fournit de nouveaux environnements similaires aux environnements classiques
-|{tabular}|, |{array}| et |{matrix}| de \pkg{array} et \pkg{amsmath} mais avec des fonctionnalités plus étendues.
+L'extension LaTeX \pkg{nicematrix} fournit de nouveaux environnements similaires
+aux environnements classiques |{tabular}|, |{array}| et |{matrix}| de
+\pkg{array} et \pkg{amsmath} mais avec des fonctionnalités plus étendues.
 \end{abstract}
 
 
@@ -167,8 +168,9 @@
 
 \vspace{1cm}
 
-L'extension \pkg{nicematrix} est entièrement contenue dans le fichier |nicematrix.sty|. Ce fichier peut être placé
-dans le répertoire courant ou dans une arborescence |texmf|. Le mieux reste néanmoins d'installer \pkg{nicematrix}
+L'extension \pkg{nicematrix} est entièrement contenue dans le fichier
+|nicematrix.sty|. Ce fichier peut être placé dans le répertoire courant ou dans
+une arborescence |texmf|. Le mieux reste néanmoins d'installer \pkg{nicematrix}
 avec une distribution TeX comme MiKTeX, TeX~Live ou MacTeX.
 
 \medskip
@@ -176,8 +178,8 @@
 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
 \pkg{nicematrix}.\footnote{La dernière version de |nicematrix.sty| peut
-  ê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}}
+  être téléchargée sur le dépôt Github de \pkg{nicematrix} : \newline \small
+  \url{https://github.com/fpantigny/nicematrix/releases}}
 
 \medskip
 Cette extension peut être utilisée avec |xelatex|, |lualatex| et |pdflatex| mais
@@ -200,8 +202,9 @@
 \textsc{pgf}, les coordonnées de ces nœuds sont écrites dans le fichier |aux|
 pour être utilisées à la compilation suivante. C'est pourquoi l'utilisation de
 \pkg{nicematrix} nécessite \textbf{plusieurs compilations
-  successives}.\footnote{Si vous utilisez Overleaf, Overleaf effectue
-  automatiquement un nombre de compilations suffisant.}
+  successives}\footnote{Si vous utilisez Overleaf, Overleaf effectue
+  automatiquement un nombre de compilations suffisant.}. L'utilisateur ne doit
+pas utiliser la commande |\nofiles| (qui bloque l'écriture du fichier |aux|). 
 
 \medskip
 La plupart des fonctionnalités de \pkg{nicematrix} sont accessibles sans avoir à
@@ -1407,7 +1410,7 @@
   une commande par-dessus la commande |\Hline|, il doit veiller à ce qu'elle
   soit \emph{développable} au sens de TeX (en utilisant
   |\NewExpandableDocumentCommand| de LaTeX3, |\newcommand| de LaTeX ou même
-  |\def| de TeX). Exemple : |\newcommand{\RedLine}{\Hline[color=red]}|}
+  |\def| de TeX). Exemple : |\NewDocumentCommand{\RedLine}{}{\Hline[color=red]}|}
 
 De même que la commande |\Hline|, le specificateur «\verb+|+» admet entre crochets
 des options qui caractérisent le filet à tracer. 
@@ -2045,9 +2048,9 @@
 
 \smallskip
 L'argument optionnel entre crochets est une liste de couples \textsl{clé=valeur}
-qui seront présentées au fur et à mesure. \footnote{Les clés disponibles sont
+qui seront présentées au fur et à mesure (les clés disponibles sont
   \texttt{create-cell-nodes}, \texttt{sub-matrix} (et ses sous-clés) et
-  \texttt{delimiters/color}.}
+  \texttt{delimiters/color}).
 
 \smallskip
 De nouvelles commandes sont disponibles dans ce |\CodeBefore|: |\cellcolor|,
@@ -2056,6 +2059,9 @@
   |\CodeBefore|, des nœuds PGF-TikZ de la forme \verb+(i-|j)+ correspondant à la
   position des filets éventuels sont également accessibles : cf.
   p.~\pageref{nodes-i}.}
+
+Les noms de certaines de ces commandes sont inspirés des noms des commandes de \pkg{colortbl}.
+
 \label{code-before}
 \index{cellcolor@\texttt{\textbackslash cellcolor}!commande du
   \texttt{\textbackslash CodeBefore}} 
@@ -2072,8 +2078,8 @@
 \index{arraycolor@\texttt{\textbackslash arraycolor} (commande du \texttt{\textbackslash
   CodeBefore)}}
 
-Les noms de certaines de ces commandes sont inspirés des noms des commandes de \pkg{colortbl}.
 
+
 \medskip
 Ces commandes ne colorient pas les cases qui se trouvent dans les «coins» si la
 clé |corners| a été utilisée. La description de cette clé a été faite
@@ -2610,14 +2616,17 @@
 doit pour cela utiliser la clé |color-inside|\footnote{Il existe un alias pour
   cette clé : \texttt{colortbl-like}.} dans l'environnement
 concerné.\footnote{Pour le moment, cette clé n'est \emph{pas} disponible dans
-  |\NiceMatrixOptions|.}
+  |\NiceMatrixOptions|.}o
 
 On a alors accès aux commandes suivantes (les trois premières sont inspirées par
 \pkg{colortbl} mais sont indépendantes de \pkg{colortbl}) :
 \begin{itemize}
-\item \DefinitionCommande{cellcolor} qui colorie la case courante\footnote{Néanmoins, cette
+\item \DefinitionCommande{cellcolor} qui colorie la case courante\footnote{Cette
   commande |\cellcolor| supprimera les espaces qui la suivent, ce que ne fait
-  pas la commande |\cellcolor| de \pkg{colortbl}.} ;
+  pas la commande |\cellcolor| de \pkg{colortbl}. De plus, si on définit une
+  fonction au-dessus de |\cellcolor|, il faudra une fonction protégée au sens de
+TeX (alors que si c'était la commande |\cellcolor| de \pkg{colortbl}, il
+faudrait une fonction \emph{fully expandable}).} ;
 \item \DefinitionCommande{rowcolor} à utiliser dans une case et qui colorie le
 reste de la rangée;\footnote{Si vous souhaitez une commande pour colorier les
   $n$~rangées suivantes, considérez la commande |\RowStyle| et sa clé
@@ -3131,8 +3140,9 @@
   considérer la commande |\SubMatrix| disponible dans le |\CodeAfter| et le
   |\CodeBefore| (cf. p.~\pageref{sub-matrix}).}
 
-\item On peut se demander comment \pkg{nicematrix} détermine le nombre de rangées et de colonnes nécessaires à la
-composition de la «dernière rangée» et de la «dernière colonne».
+\item On peut se demander comment \pkg{nicematrix} détermine le nombre de
+rangées et de colonnes nécessaires à la composition de la «dernière rangée» et
+de la «dernière colonne».
 
 \begin{itemize}
 \item Dans le cas d'un environnement avec préambule, comme |{NiceTabular}| ou
@@ -3450,8 +3460,8 @@
 horizontalement mais aussi verticalement.
 
 \medskip
-Attention : la clé |nullify-dots| a un nom qui peut prêter à confusion ; elle
-n'implique pas que la ligne en pointillés ne sera pas tracée !
+\textbf{Attention} : la clé |nullify-dots| a un nom qui peut prêter à confusion ; 
+elle n'implique pas que la ligne en pointillés ne sera pas tracée ! 
 
 
 \subsection{Les commandes \textbackslash Hdotsfor et \textbackslash Vdotsfor}
@@ -3590,8 +3600,8 @@
 \end{itemize}
 
 \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
+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
 
 \medskip
 \begin{scope}
@@ -4392,11 +4402,11 @@
 argument optionnel (entre crochets) pour une liste de couples
 \textsl{clé=valeur}. Les clés disponibles sont les suivantes :
 \begin{itemize}
-\item \Definition{left-shorten} et \Definition{right-shorten} qui ne prennent pas de valeur ; quand
-|left-shorten| est utilisée, l'abscisse de l'extrémité de gauche de l'accolade
-est calculée à partir du contenu du sous-tableau concerné alors que, sinon,
-c'est la position du filet vertical éventuel qui est utilisée (de même pour
-|right-shorten|) ;
+\item \Definition{left-shorten} et \Definition{right-shorten} qui ne prennent
+pas de valeur ; quand |left-shorten| est utilisée, l'abscisse de l'extrémité de
+gauche de l'accolade est calculée à partir du contenu du sous-tableau concerné
+alors que, sinon, c'est la position du filet vertical éventuel qui est utilisée
+(de même pour |right-shorten|) ;
 
 \item \Definition{shorten}, qui est la conjonction des clés |left-shorten| et |right-shorten| ;
 
@@ -4426,7 +4436,7 @@
 
 \subsection{La commande \textbackslash TikzEveryCell dans le \textbackslash CodeAfter}
 
-\index{SubMatrix@\texttt{\textbackslash TikzEveryCell} (commande du 
+\index{tikzeverycell@\texttt{\textbackslash TikzEveryCell} (commande du 
 \texttt{\textbackslash CodeAfter}\newline et du
 \texttt{\textbackslash CodeBefore})|textbf}
 \label{TikzEveryCell}
@@ -4481,7 +4491,8 @@
 
 
 \bigskip
-La commande |\TikzEveryCell| possède deux clés :
+La commande |\TikzEveryCell| possède deux clés, utilisables en argument
+optionnel, entre crochets.
 \begin{itemize}
 \item avec la clé \Definition{empty}, la commande ne s'applique qu'aux cases
 vides ;
@@ -4489,7 +4500,36 @@
 cases non vides.
 \end{itemize}
 
+\medskip
+\begin{Code}[width=9cm]
+\renewcommand{\arraystretch}{1.4}
+\begin{NiceTabular}{cccccc}[hvlines]
+  P & O & U & R & V & U \\
+  O &   &   & E & I &   \\
+  M & O & R & F & A & L \\
+  E & T & A & L &   & E \\
+  L & A & S & E & R & S \\
+  O &   & E & X & I & T
+\CodeAfter
+  \emph{\TikzEveryCell[empty]{fill=gray,draw}}
+\end{NiceTabular}
+\end{Code}
+\begin{scope}
+\renewcommand{\arraystretch}{1.4}
+\begin{NiceTabular}{cccccc}[hvlines]
+  P & O & U & R & V & U \\
+  O &   &   & E & I &   \\
+  M & O & R & F & A & L \\
+  E & T & A & L &   & E \\
+  L & A & S & E & R & S \\
+  O &   & E & X & I & T
+\CodeAfter
+  \TikzEveryCell[empty]{fill=gray,draw}
+\end{NiceTabular}
+\end{scope}
 
+
+
 \medskip
 La commande |\TikzEveryCell| est en fait aussi disponible dans le |\CodeBefore|.
 
@@ -5030,8 +5070,9 @@
 \index{S (les colonnes S de \pkg{siunitx})}
 \index{siunitx@\pkg{siunitx} (extension)}
 
-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
+Si l'extension \pkg{siunitx} est chargée (avant ou après \pkg{nicematrix}), il
+est possible d'utiliser les colonnes de type |S| de \pkg{siunitx} dans les
+environnements de \pkg{nicematrix}. L'implémentation n'utilise explicitement
 aucune macro privée de \pkg{siunitx}.
 
 \medskip
@@ -5093,8 +5134,9 @@
 \label{rotate}
 \index{rotate@\texttt{\textbackslash 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}).}
@@ -5196,7 +5238,8 @@
 \end{bNiceArray}$
 \end{Code}
 %
-\[\begin{bNiceArray}{cccc|c}[small, last-col, code-for-last-col = \scriptscriptstyle, columns-width=3mm]
+\[\begin{bNiceArray}{cccc|c}%
+ [small, last-col, code-for-last-col = \scriptscriptstyle, columns-width=3mm]
 1 & -2 & 3 & 4 & 5 \\
 0 & 3  & 2 & 1 & 2 & L_2 \gets 2 L_1 - L_2 \\
 0 & 1  & 1 & 2 & 3 & L_3 \gets L_1 + L_3

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

Modified: trunk/Master/texmf-dist/doc/latex/nicematrix/nicematrix.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/nicematrix/nicematrix.tex	2024-08-21 23:41:52 UTC (rev 72083)
+++ trunk/Master/texmf-dist/doc/latex/nicematrix/nicematrix.tex	2024-08-22 19:40:08 UTC (rev 72084)
@@ -143,9 +143,11 @@
 \Vdots & \Vdots & \Vdots & \Ddots & \Vdots\\
 L_n    & a_{n1}  & a_{n2}  & \Cdots & a_{nn} 
 \end{bNiceArray}$\hspace{2cm}
-\begin{NiceTabular}{lSSSS}[code-before = \rowcolor{red!15}{1-2} \rowcolors{3}{blue!15}{}]
+\begin{NiceTabular}{lSSSS}%
+  [code-before = \rowcolor{red!15}{1-2} \rowcolors{3}{blue!15}{}]
 \toprule
-\Block{2-1}{Product} & \multicolumn{3}{c}{dimensions (cm)} & \Block{2-1}{\rotate Price} \\
+\Block{2-1}{Product} & \multicolumn{3}{c}{dimensions (cm)} 
+       & \Block{2-1}{\rotate Price} \\
 \cmidrule(rl){2-4} 
  & L & l & h \\
 \midrule
@@ -170,10 +172,9 @@
 can upload the file |nicematrix.sty| in the repertory of your 
 project in order to take full advantage of the latest version de
 \pkg{nicematrix}.\footnote{The latest version of the file
-|nicematrix.sty| may be downloaded from the \textsc{svn} server of
-TeXLive:\newline
+|nicematrix.sty| may be downloaded on the Github depot of \pkg{nicematrix}:\newline
 \small
-\url{https:www.tug.org/svn/texlive/trunk/Master/texmf-dist/tex/latex/nicematrix/nicematrix.sty}}
+\url{https://github.com/fpantigny/nicematrix/releases}}
 
 \medskip
 This package can be used with |xelatex|, |lualatex|, |pdflatex| but also by
@@ -195,8 +196,9 @@
 use these nodes to develop new features. As usual with \textsc{pgf}, the
 coordinates of these nodes are written in the |aux| to be used on the next
 compilation and that's why \pkg{nicematrix} may need \textbf{several
-compilations}.\footnote{If you use Overleaf, Overleaf will do automatically
-a sufficient number of compilations.}
+compilations}\footnote{If you use Overleaf, Overleaf will do automatically
+a sufficient number of compilations.}. One must not use the command |\nofiles|
+(which prevents the creation of the |aux| file).
 
 \medskip
 Most features of \pkg{nicematrix} may be used without explicit use of
@@ -660,9 +662,10 @@
 \bigskip
 \begin{Code}
 \begin{NiceTabular}{cw{c}{2cm}w{c}{3cm}c}
-rose      & tulip & daisy & dahlia \\
-violet  & \emph{\Block[draw=red,fill=[RGB]{204,204,255},rounded-corners]{2-2}
-                {\LARGE Some beautiful flowers}} & & marigold \\
+rose & tulip & daisy & dahlia \\
+violet 
+  & \emph{\Block[draw=red,fill=[RGB]{204,204,255},rounded-corners]{2-2}
+          {\LARGE Some beautiful flowers}} & & marigold \\
    & & marigold \\
 iris & & & lis \\
 arum & periwinkle & forget-me-not &  hyacinth
@@ -1350,7 +1353,7 @@
   shall be ensured that this new command is expandable in the TeX sens (by
   using, for instance, |\NewExpandableDocumentCommand| of LaTeX3, |\newcommand|
   of LaTeX or |\def| of TeX). Example:
-  |\newcommand{\RedLine}{\Hline[color=red]}|}
+  |\NewDocumentCommand{\RedLine}{}{\Hline[color=red]}|}
 
 
 \bigskip
@@ -2538,9 +2541,12 @@
 There are several commands available (the first three ones are inspired by
 \pkg{colortbl} but are \emph{independent} of \pkg{colortbl}):
 \begin{itemize}
-\item \DefinitionCommand{cellcolor} which colorizes a cell;\footnote{However,
-  this command cellcolor will delete the following spaces, which does not the
-  command cellcolor of \pkg{colortbl}.}
+\item \DefinitionCommand{cellcolor} which colorizes a cell;\footnote{That
+  command cellcolor will delete the following spaces, which does not the
+  command cellcolor of \pkg{colortbl}. Moreover, if one wishes to define a
+  command above that command |rowcolor|, it must be protected in the TeX sens
+  (whereas, if it were the command |\rowcolor| of \pkg{colortbl}, one should
+  write a \emph{fully expandable} command).}
 \item \DefinitionCommand{rowcolor} which must be used in a cell and which
 colorizes the end of the row;\footnote{If you want a commande to color the
   following $n$~rows, consider the command |\RowStyle| and its key |rowcolor|,
@@ -3363,8 +3369,8 @@
 horizontally but also vertically.
 
 \medskip
-Caution : the key |nullify-dots| has a name that may be confusing; that key does
-not imply that the dotted rules won't be drawn!
+\textbf{Caution}: the key |nullify-dots| has a name that may be confusing; that
+key does not imply that the dotted rules won't be drawn!
 
 
 
@@ -4330,7 +4336,7 @@
   CodeAfter}
 
 
-\index{SubMatrix@\texttt{\textbackslash TikzEveryCell} (command of 
+\index{tikzeverycell@\texttt{\textbackslash TikzEveryCell} (command of 
 \texttt{\textbackslash CodeAfter}\newline and 
 \texttt{\textbackslash CodeBefore})|textbf}
 \label{TikzEveryCell}
@@ -4381,7 +4387,7 @@
 \endgroup
 
 \bigskip
-The command |\TikzEveryCell| has two keys:
+The command |\TikzEveryCell| has two optional keys, available between square brackets.
 \begin{itemize}
 \item with the key \Definition{empty}, the command only acts on the empty cells;
 
@@ -4389,6 +4395,35 @@
 \end{itemize}
 
 \medskip
+\begin{Code}[width=9cm]
+\renewcommand{\arraystretch}{1.4}
+\begin{NiceTabular}{cccccc}[hvlines]
+  P & O & U & R & V & U \\
+  O &   &   & E & I &   \\
+  M & O & R & F & A & L \\
+  E & T & A & L &   & E \\
+  L & A & S & E & R & S \\
+  O &   & E & X & I & T
+\CodeAfter
+  \emph{\TikzEveryCell[empty]{fill=gray,draw}}
+\end{NiceTabular}
+\end{Code}
+\begin{scope}
+\renewcommand{\arraystretch}{1.4}
+\begin{NiceTabular}{cccccc}[hvlines]
+  P & O & U & R & V & U \\
+  O &   &   & E & I &   \\
+  M & O & R & F & A & L \\
+  E & T & A & L &   & E \\
+  L & A & S & E & R & S \\
+  O &   & E & X & I & T
+\CodeAfter
+  \TikzEveryCell[empty]{fill=gray,draw}
+\end{NiceTabular}
+\end{scope}
+
+
+\medskip
 The commmand |\TikzEveryCell| is, in fact, also available in the |\CodeBefore|.
 
 

Modified: trunk/Master/texmf-dist/source/latex/nicematrix/nicematrix-code.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/nicematrix/nicematrix-code.dtx	2024-08-21 23:41:52 UTC (rev 72083)
+++ trunk/Master/texmf-dist/source/latex/nicematrix/nicematrix-code.dtx	2024-08-22 19:40:08 UTC (rev 72084)
@@ -17,8 +17,8 @@
 %
 % \fi
 % \iffalse
-\def\myfileversion{6.28b}
-\def\myfiledate{2024/06/29}
+\def\myfileversion{6.28c}
+\def\myfiledate{2024/08/22}
 %
 %
 %<*batchfile>  
@@ -2449,7 +2449,7 @@
 %
 % \bigskip
 %    \begin{macrocode}
-\keys_define:nn { NiceMatrix / xdots }
+\keys_define:nn { nicematrix / xdots }
   {
     shorten-start .code:n = 
       \hook_gput_code:nnn { begindocument } { . } 
@@ -2509,7 +2509,7 @@
 %
 % \bigskip
 %    \begin{macrocode}
-\keys_define:nn { NiceMatrix / rules }
+\keys_define:nn { nicematrix / rules }
   {
     color .tl_set:N = \l_@@_rules_color_tl ,
     color .value_required:n = true ,
@@ -2521,11 +2521,11 @@
 %
 %
 % \bigskip 
-% First, we define a set of keys ``|NiceMatrix / Global|'' which will be used
+% First, we define a set of keys ``|nicematrix / Global|'' which will be used
 % (with the mechanism of |.inherit:n|) by other sets of keys.
 %
 %    \begin{macrocode}
-\keys_define:nn { NiceMatrix / Global }
+\keys_define:nn { nicematrix / Global }
   {
     ampersand-in-blocks .bool_set:N = \l_@@_amp_in_blocks_bool , 
     ampersand-in-blocks .default:n = true , 
@@ -2537,7 +2537,7 @@
     rounded-corners .dim_set:N = \l_@@_tab_rounded_corners_dim ,
     rounded-corners .default:n = 4 pt ,
     custom-line .code:n = \@@_custom_line:n { #1 } ,
-    rules .code:n = \keys_set:nn { NiceMatrix / rules } { #1 } ,
+    rules .code:n = \keys_set:nn { nicematrix / rules } { #1 } ,
     rules .value_required:n = true ,
     standard-cline .bool_set:N = \l_@@_standard_cline_bool ,
     standard-cline .default:n = true ,
@@ -2551,7 +2551,7 @@
         cell-space-bottom-limit = #1 ,
       } ,
     cell-space-limits .value_required:n = true ,
-    xdots .code:n = \keys_set:nn { NiceMatrix / xdots } { #1 } , 
+    xdots .code:n = \keys_set:nn { nicematrix / xdots } { #1 } , 
     light-syntax .code:n = 
       \bool_set_true:N \l_@@_light_syntax_bool 
       \bool_set_false:N \l_@@_light_syntax_expanded_bool ,
@@ -2644,7 +2644,7 @@
 % We define a set of keys used by the environments of \pkg{nicematrix} (but not
 % by the command |\NiceMatrixOptions|). 
 %    \begin{macrocode}
-\keys_define:nn { NiceMatrix / Env } 
+\keys_define:nn { nicematrix / environments } 
   { 
     corners .clist_set:N = \l_@@_corners_clist ,
     corners .default:n = { NW , SW , NE , SE } ,
@@ -2698,7 +2698,7 @@
 %    \end{macrocode}
 %
 %    \begin{macrocode}
-\keys_define:nn { NiceMatrix / notes }
+\keys_define:nn { nicematrix / notes }
   {
     para .bool_set:N = \l_@@_notes_para_bool ,
     para .default:n = true ,
@@ -2741,7 +2741,7 @@
 %    \end{macrocode}  
 %
 %    \begin{macrocode} 
-\keys_define:nn { NiceMatrix / delimiters }
+\keys_define:nn { nicematrix / delimiters }
   {
     max-width .bool_set:N = \l_@@_delimiters_max_width_bool ,
     max-width .default:n = true ,
@@ -2754,47 +2754,47 @@
 % We begin the construction of the major sets of keys (used by the different
 % user commands and environments). 
 %    \begin{macrocode}
-\keys_define:nn { NiceMatrix }
+\keys_define:nn { nicematrix }
   { 
     NiceMatrixOptions .inherit:n = 
-      { NiceMatrix / Global } ,
-    NiceMatrixOptions / xdots .inherit:n = NiceMatrix / xdots ,
-    NiceMatrixOptions / rules .inherit:n = NiceMatrix / rules ,
-    NiceMatrixOptions / notes .inherit:n = NiceMatrix / notes ,
-    NiceMatrixOptions / sub-matrix .inherit:n = NiceMatrix / sub-matrix ,  
-    SubMatrix / rules .inherit:n = NiceMatrix / rules ,  
-    CodeAfter / xdots .inherit:n = NiceMatrix / xdots ,
-    CodeBefore / sub-matrix .inherit:n = NiceMatrix / sub-matrix ,
-    CodeAfter / sub-matrix .inherit:n = NiceMatrix / sub-matrix ,
+      { nicematrix / Global } ,
+    NiceMatrixOptions / xdots .inherit:n = nicematrix / xdots ,
+    NiceMatrixOptions / rules .inherit:n = nicematrix / rules ,
+    NiceMatrixOptions / notes .inherit:n = nicematrix / notes ,
+    NiceMatrixOptions / sub-matrix .inherit:n = nicematrix / sub-matrix ,  
+    SubMatrix / rules .inherit:n = nicematrix / rules ,  
+    CodeAfter / xdots .inherit:n = nicematrix / xdots ,
+    CodeBefore / sub-matrix .inherit:n = nicematrix / sub-matrix ,
+    CodeAfter / sub-matrix .inherit:n = nicematrix / sub-matrix ,
     NiceMatrix .inherit:n = 
       { 
-        NiceMatrix / Global ,
-        NiceMatrix / Env ,
+        nicematrix / Global ,
+        nicematrix / environments ,
       } ,
-    NiceMatrix / xdots .inherit:n = NiceMatrix / xdots ,
-    NiceMatrix / rules .inherit:n = NiceMatrix / rules ,
+    NiceMatrix / xdots .inherit:n = nicematrix / xdots ,
+    NiceMatrix / rules .inherit:n = nicematrix / rules ,
     NiceTabular .inherit:n = 
       {
-        NiceMatrix / Global ,
-        NiceMatrix / Env
+        nicematrix / Global ,
+        nicematrix / environments
       } ,
-    NiceTabular / xdots .inherit:n = NiceMatrix / xdots ,
-    NiceTabular / rules .inherit:n = NiceMatrix / rules ,
-    NiceTabular / notes .inherit:n = NiceMatrix / notes ,
+    NiceTabular / xdots .inherit:n = nicematrix / xdots ,
+    NiceTabular / rules .inherit:n = nicematrix / rules ,
+    NiceTabular / notes .inherit:n = nicematrix / notes ,
     NiceArray .inherit:n = 
       { 
-        NiceMatrix / Global ,
-        NiceMatrix / Env ,
+        nicematrix / Global ,
+        nicematrix / environments ,
       } ,
-    NiceArray / xdots .inherit:n = NiceMatrix / xdots ,
-    NiceArray / rules .inherit:n = NiceMatrix / rules ,
+    NiceArray / xdots .inherit:n = nicematrix / xdots ,
+    NiceArray / rules .inherit:n = nicematrix / rules ,
     pNiceArray .inherit:n = 
       { 
-        NiceMatrix / Global ,
-        NiceMatrix / Env ,
+        nicematrix / Global ,
+        nicematrix / environments ,
       } ,
-    pNiceArray / xdots .inherit:n = NiceMatrix / xdots ,
-    pNiceArray / rules .inherit:n = NiceMatrix / rules ,
+    pNiceArray / xdots .inherit:n = nicematrix / xdots ,
+    pNiceArray / rules .inherit:n = nicematrix / rules ,
   }
 %    \end{macrocode}
 % 
@@ -2801,16 +2801,16 @@
 %
 % \bigskip
 % We finalise the definition of the set of keys 
-% ``|NiceMatrix / NiceMatrixOptions|'' with the options specific to
+% ``|nicematrix / NiceMatrixOptions|'' with the options specific to
 % |\NiceMatrixOptions|.    
 %    \begin{macrocode}
-\keys_define:nn { NiceMatrix / NiceMatrixOptions }
+\keys_define:nn { nicematrix / NiceMatrixOptions }
   { 
     delimiters / color .tl_set:N = \l_@@_delimiters_color_tl ,
     delimiters / color .value_required:n = true ,
     delimiters / max-width .bool_set:N = \l_@@_delimiters_max_width_bool ,
     delimiters / max-width .default:n = true ,
-    delimiters .code:n = \keys_set:nn { NiceMatrix / delimiters } { #1 } , 
+    delimiters .code:n = \keys_set:nn { nicematrix / delimiters } { #1 } , 
     delimiters .value_required:n = true , 
     width .dim_set:N = \l_@@_width_dim ,
     width .value_required:n = true ,
@@ -2858,9 +2858,9 @@
     allow-duplicate-names .code:n = 
       \@@_msg_redirect_name:nn { Duplicate~name } { none } ,
     allow-duplicate-names .value_forbidden:n = true ,
-    notes .code:n = \keys_set:nn { NiceMatrix / notes } { #1 } ,
+    notes .code:n = \keys_set:nn { nicematrix / notes } { #1 } ,
     notes .value_required:n = true ,
-    sub-matrix .code:n = \keys_set:nn { NiceMatrix / sub-matrix } { #1 } , 
+    sub-matrix .code:n = \keys_set:nn { nicematrix / sub-matrix } { #1 } , 
     sub-matrix .value_required:n = true ,
     matrix / columns-type .tl_set:N = \l_@@_columns_type_tl ,
     matrix / columns-type .value_required:n = true ,
@@ -2878,17 +2878,17 @@
 % current TeX group. 
 %    \begin{macrocode}
 \NewDocumentCommand \NiceMatrixOptions { m }
-  { \keys_set:nn { NiceMatrix / NiceMatrixOptions } { #1 } }
+  { \keys_set:nn { nicematrix / NiceMatrixOptions } { #1 } }
 %    \end{macrocode}
 %
 %
 % \bigskip
-% We finalise the definition of the set of keys ``|NiceMatrix / NiceMatrix|''. 
+% We finalise the definition of the set of keys ``|nicematrix / NiceMatrix|''. 
 % That set of keys will be used by |{NiceMatrix}|, |{pNiceMatrix}|,
 % |{bNiceMatrix}|, etc.
 %
 %    \begin{macrocode}
-\keys_define:nn { NiceMatrix / NiceMatrix }
+\keys_define:nn { nicematrix / NiceMatrix }
   { 
     last-col .code:n = \tl_if_empty:nTF { #1 }
                          {  
@@ -2904,7 +2904,7 @@
     delimiters / color .value_required:n = true ,
     delimiters / max-width .bool_set:N = \l_@@_delimiters_max_width_bool ,
     delimiters / max-width .default:n = true ,
-    delimiters .code:n = \keys_set:nn { NiceMatrix / delimiters } { #1 } , 
+    delimiters .code:n = \keys_set:nn { nicematrix / delimiters } { #1 } , 
     delimiters .value_required:n = true , 
     small .bool_set:N = \l_@@_small_bool ,
     small .value_forbidden:n = true ,
@@ -2915,11 +2915,11 @@
 %
 % 
 % \bigskip
-% We finalise the definition of the set of keys ``|NiceMatrix / NiceArray|''
+% We finalise the definition of the set of keys ``|nicematrix / NiceArray|''
 % with the options specific to |{NiceArray}|. 
 %
 %    \begin{macrocode}
-\keys_define:nn { NiceMatrix / NiceArray }
+\keys_define:nn { nicematrix / NiceArray }
   {
 %    \end{macrocode}
 % 
@@ -2941,7 +2941,7 @@
 %
 %    
 %    \begin{macrocode}
-\keys_define:nn { NiceMatrix / pNiceArray }
+\keys_define:nn { nicematrix / pNiceArray }
   { 
     first-col .code:n = \int_zero:N \l_@@_first_col_int , 
     last-col .code:n = \tl_if_empty:nF {#1}
@@ -2952,7 +2952,7 @@
     delimiters / color .value_required:n = true ,
     delimiters / max-width .bool_set:N = \l_@@_delimiters_max_width_bool ,
     delimiters / max-width .default:n = true ,
-    delimiters .code:n = \keys_set:nn { NiceMatrix / delimiters } { #1 } , 
+    delimiters .code:n = \keys_set:nn { nicematrix / delimiters } { #1 } , 
     delimiters .value_required:n = true , 
     small .bool_set:N = \l_@@_small_bool ,
     small .value_forbidden:n = true ,
@@ -2963,11 +2963,11 @@
 %    \end{macrocode}
 %
 % \bigskip
-% We finalise the definition of the set of keys ``|NiceMatrix / NiceTabular|''
+% We finalise the definition of the set of keys ``|nicematrix / NiceTabular|''
 % with the options specific to |{NiceTabular}|. 
 %
 %    \begin{macrocode}
-\keys_define:nn { NiceMatrix / NiceTabular }
+\keys_define:nn { nicematrix / NiceTabular }
   {
 %    \end{macrocode}
 %  The dimension |width| will be used if at least a column of type |X| is used.
@@ -2976,7 +2976,7 @@
     width .code:n = \dim_set:Nn \l_@@_width_dim { #1 } 
                     \bool_set_true:N \l_@@_width_used_bool ,
     width .value_required:n = true ,
-    notes .code:n = \keys_set:nn { NiceMatrix / notes } { #1 } , 
+    notes .code:n = \keys_set:nn { nicematrix / notes } { #1 } , 
     tabularnote .tl_gset:N = \g_@@_tabularnote_tl ,
     tabularnote .value_required:n = true ,
     caption .tl_set:N = \l_@@_caption_tl , 
@@ -3003,18 +3003,18 @@
 % We \emph{must} put the following instructions \emph{after} the :
 %
 % \begin{verbatim}
-% CodeAfter / sub-matrix .inherit:n = NiceMatrix / sub-matrix
+% CodeAfter / sub-matrix .inherit:n = nicematrix / sub-matrix
 % \end{verbatim}
 % 
 %    \begin{macrocode}
-\keys_define:nn { NiceMatrix / CodeAfter }
+\keys_define:nn { nicematrix / CodeAfter }
   {
     delimiters / color .tl_set:N = \l_@@_delimiters_color_tl ,
     delimiters / color .value_required:n = true ,
-    rules .code:n = \keys_set:nn { NiceMatrix / rules } { #1 } ,
+    rules .code:n = \keys_set:nn { nicematrix / rules } { #1 } ,
     rules .value_required:n = true ,
-    xdots .code:n = \keys_set:nn { NiceMatrix / xdots } { #1 } , 
-    sub-matrix .code:n = \keys_set:nn { NiceMatrix / sub-matrix } { #1 } , 
+    xdots .code:n = \keys_set:nn { nicematrix / xdots } { #1 } , 
+    sub-matrix .code:n = \keys_set:nn { nicematrix / sub-matrix } { #1 } , 
     sub-matrix .value_required:n = true ,
     unknown .code:n = \@@_error:n { Unknown~key~for~CodeAfter }
   }
@@ -4282,11 +4282,11 @@
 %
 % \bigskip 
 %    \begin{macrocode}
-\keys_define:nn { NiceMatrix / CodeBefore }
+\keys_define:nn { nicematrix / CodeBefore }
   {
     create-cell-nodes .bool_gset:N = \g_@@_recreate_cell_nodes_bool ,
     create-cell-nodes .default:n = true ,
-    sub-matrix .code:n = \keys_set:nn { NiceMatrix / sub-matrix } { #1 } , 
+    sub-matrix .code:n = \keys_set:nn { nicematrix / sub-matrix } { #1 } , 
     sub-matrix .value_required:n = true ,
     delimiters / color .tl_set:N = \l_@@_delimiters_color_tl ,
     delimiters / color .value_required:n = true ,
@@ -4298,7 +4298,7 @@
 %    \begin{macrocode}
 \NewDocumentCommand \@@_CodeBefore_keys: { O { } }
   { 
-    \keys_set:nn { NiceMatrix / CodeBefore } { #1 } 
+    \keys_set:nn { nicematrix / CodeBefore } { #1 } 
     \@@_CodeBefore:w 
   }
 %    \end{macrocode}
@@ -4559,8 +4559,8 @@
 % |{NiceArray}|, we have the options |t|, |c|, |b| and |baseline|.
 %    \begin{macrocode}
     \bool_if:NTF \g_@@_delims_bool 
-      { \keys_set:nn { NiceMatrix / pNiceArray } }
-      { \keys_set:nn { NiceMatrix / NiceArray } }
+      { \keys_set:nn { nicematrix / pNiceArray } }
+      { \keys_set:nn { nicematrix / NiceArray } }
     { #3 , #5 } 
 %    \end{macrocode}
 %
@@ -4592,7 +4592,7 @@
     \skip_horizontal:N \l_@@_right_margin_dim 
     \skip_horizontal:N \l_@@_extra_right_margin_dim 
  
-    % % awful workaround
+    % awful workaround
     \int_compare:nNnT \g_@@_col_total_int = \c_one_int
       {
         \dim_compare:nNnT \l_@@_columns_width_dim > \c_zero_dim 
@@ -6153,6 +6153,24 @@
       }
 %    \end{macrocode}
 %
+% \bigskip
+% We want |\cellcolor| to be available in |\multicolumn| because |\cellcolor| of
+% \pkg{colortbl} is available in |\multicolumn|.
+%    \begin{macrocode}
+    \RenewDocumentCommand \cellcolor { O { } m }
+      {
+        \@@_test_color_inside:
+        \tl_gput_right:Nx \g_@@_pre_code_before_tl
+          { 
+            \@@_rectanglecolor [ ##1 ] 
+              { \exp_not:n { ##2 } } 
+              { \int_use:N \c at iRow - \int_use:N \c at jCol } 
+              { \int_use:N \c at iRow - \int_eval:n { \c at jCol + #1 } }
+          }   
+         \ignorespaces
+      }   
+%    \end{macrocode}
+% 
 % \medskip
 % The following lines were in the original definition of |\multicolumn|.
 %    \begin{macrocode}
@@ -7487,7 +7505,7 @@
             \bool_set_true:N \l_@@_last_col_without_value_bool
             \int_set:Nn \l_@@_last_col_int { -1 }
           }                
-        \keys_set:nn { NiceMatrix / NiceMatrix } { ##1 }
+        \keys_set:nn { nicematrix / NiceMatrix } { ##1 }
         \@@_begin_of_NiceMatrix:nV { #1 } \l_@@_columns_type_tl 
       }
       { \use:c { end #1 NiceArray } }
@@ -7505,7 +7523,7 @@
         \bool_set_true:N \l_@@_last_col_without_value_bool
         \int_set:Nn \l_@@_last_col_int { -1 }
       }                
-    \keys_set:nn { NiceMatrix / NiceMatrix } { #1 }
+    \keys_set:nn { nicematrix / NiceMatrix } { #1 }
     \bool_lazy_or:nnT
       { \clist_if_empty_p:N \l_@@_vlines_clist }
       { \l_@@_except_borders_bool }
@@ -7536,7 +7554,7 @@
     \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 }
+    \keys_set:nn { nicematrix / NiceTabular } { #1 , #3 }
     \tl_if_empty:NF \l_@@_short_caption_tl
       {
         \tl_if_empty:NT \l_@@_caption_tl
@@ -7588,7 +7606,7 @@
     \str_gset:Nn \g_@@_name_env_str { NiceTabularX }
     \dim_zero_new:N \l_@@_width_dim 
     \dim_set:Nn \l_@@_width_dim { #1 }
-    \keys_set:nn { NiceMatrix / NiceTabular } { #2 , #4 }
+    \keys_set:nn { nicematrix / NiceTabular } { #2 , #4 }
     \@@_settings_for_tabular:
     \NiceArray { #3 }
   }
@@ -7605,7 +7623,7 @@
   { 
     \str_gset:Nn \g_@@_name_env_str { NiceTabular* }
     \dim_set:Nn \l_@@_tabular_width_dim { #1 }
-    \keys_set:nn { NiceMatrix / NiceTabular } { #2 , #4 }
+    \keys_set:nn { nicematrix / NiceTabular } { #2 , #4 }
     \@@_settings_for_tabular:
     \NiceArray { #3 }
   }
@@ -7969,7 +7987,7 @@
 % the |\CodeBefore.|
 %    \begin{macrocode}
 \NewDocumentCommand \@@_CodeAfter_keys: { O { } }
-  { \keys_set:nn { NiceMatrix / CodeAfter } { #1 } }
+  { \keys_set:nn { nicematrix / CodeAfter } { #1 } }
 %    \end{macrocode}
 %
 %
@@ -8578,7 +8596,7 @@
               \int_compare:nNnT { #1 } = \l_@@_last_row_int
                 { \color { nicematrix-last-row } }
             }
-          \keys_set:nn { NiceMatrix / xdots } { #3 }
+          \keys_set:nn { nicematrix / xdots } { #3 }
           \tl_if_empty:oF \l_@@_xdots_color_tl { \color { \l_@@_xdots_color_tl } }
           \@@_actually_draw_Ldots:
         \group_end:
@@ -8673,7 +8691,7 @@
               \int_compare:nNnT { #1 } = \l_@@_last_row_int
                 { \color { nicematrix-last-row } }
             }
-          \keys_set:nn { NiceMatrix / xdots } { #3 }
+          \keys_set:nn { nicematrix / xdots } { #3 }
           \tl_if_empty:oF \l_@@_xdots_color_tl { \color { \l_@@_xdots_color_tl } }
           \@@_actually_draw_Cdots: 
         \group_end:
@@ -8801,7 +8819,7 @@
               \int_compare:nNnT { #2 } = \l_@@_last_col_int
                 { \color { nicematrix-last-col } }
             }
-          \keys_set:nn { NiceMatrix / xdots } { #3 }
+          \keys_set:nn { nicematrix / xdots } { #3 }
           \tl_if_empty:oF \l_@@_xdots_color_tl 
             { \color { \l_@@_xdots_color_tl } }
           \@@_actually_draw_Vdots:
@@ -8950,7 +8968,7 @@
 %    \begin{macrocode}
         \group_begin:
           \@@_open_shorten:
-          \keys_set:nn { NiceMatrix / xdots } { #3 }
+          \keys_set:nn { nicematrix / xdots } { #3 }
           \tl_if_empty:oF \l_@@_xdots_color_tl { \color { \l_@@_xdots_color_tl } }
           \@@_actually_draw_Ddots:
         \group_end:
@@ -9014,11 +9032,14 @@
 % extremity of the line by modifying the coordinate |\l_@@_x_initial_dim|.
 %    \begin{macrocode}
           { 
-            \dim_set:Nn \l_@@_y_final_dim          
-              { 
-                \l_@@_y_initial_dim +
-                ( \l_@@_x_final_dim - \l_@@_x_initial_dim ) * 
-                \dim_ratio:nn \g_@@_delta_y_one_dim \g_@@_delta_x_one_dim 
+            \dim_compare:nNnF \g_@@_delta_x_one_dim = \c_zero_dim 
+              {
+                \dim_set:Nn \l_@@_y_final_dim          
+                  { 
+                    \l_@@_y_initial_dim +
+                    ( \l_@@_x_final_dim - \l_@@_x_initial_dim ) * 
+                    \dim_ratio:nn \g_@@_delta_y_one_dim \g_@@_delta_x_one_dim 
+                  }
               }
           }
       }
@@ -9045,7 +9066,7 @@
 %    \begin{macrocode}
         \group_begin:
           \@@_open_shorten:
-          \keys_set:nn { NiceMatrix / xdots } { #3 }
+          \keys_set:nn { nicematrix / xdots } { #3 }
           \tl_if_empty:oF \l_@@_xdots_color_tl { \color { \l_@@_xdots_color_tl } }
           \@@_actually_draw_Iddots:
         \group_end:
@@ -9090,11 +9111,14 @@
               { \l_@@_y_final_dim - \l_@@_y_initial_dim }
           }
           { 
-            \dim_set:Nn \l_@@_y_final_dim
-              { 
-                \l_@@_y_initial_dim +
-                ( \l_@@_x_final_dim - \l_@@_x_initial_dim ) *
-                \dim_ratio:nn \g_@@_delta_y_two_dim \g_@@_delta_x_two_dim 
+            \dim_compare:nNnF \g_@@_delta_x_two_dim = \c_zero_dim 
+              {
+                \dim_set:Nn \l_@@_y_final_dim
+                  { 
+                    \l_@@_y_initial_dim +
+                    ( \l_@@_x_final_dim - \l_@@_x_initial_dim ) *
+                    \dim_ratio:nn \g_@@_delta_y_two_dim \g_@@_delta_x_two_dim 
+                  }
               }
           }
       }
@@ -9603,7 +9627,7 @@
                 \l_@@_last_col_int { \@@_error:nn { in~last~col } \Ddots }  
               }
               {
-                \keys_set_known:nn { NiceMatrix / Ddots } { #1 } 
+                \keys_set_known:nn { nicematrix / Ddots } { #1 } 
                 \@@_instruction_of_type:nnn \l_@@_draw_first_bool { Ddots } 
                   { #1 , down = #2 , up = #3 , middle = #4 } 
               } 
@@ -9633,7 +9657,7 @@
                 \l_@@_last_col_int { \@@_error:nn { in~last~col } \Iddots }  
               }
               {
-                \keys_set_known:nn { NiceMatrix / Ddots } { #1 } 
+                \keys_set_known:nn { nicematrix / Ddots } { #1 } 
                 \@@_instruction_of_type:nnn \l_@@_draw_first_bool { Iddots } 
                   { #1 , down = #2 , up = #3 , middle = #4 } 
               } 
@@ -9651,7 +9675,7 @@
 % Despite its name, the following set of keys will be used for |\Ddots| but also
 % for |\Iddots|.
 %    \begin{macrocode}
-\keys_define:nn { NiceMatrix / Ddots }
+\keys_define:nn { nicematrix / Ddots }
   { 
     draw-first .bool_set:N = \l_@@_draw_first_bool ,
     draw-first .default:n = true ,
@@ -9810,7 +9834,7 @@
           { \color { nicematrix-last-row } }
       }
 
-    \keys_set:nn { NiceMatrix / xdots } { #4 }
+    \keys_set:nn { nicematrix / xdots } { #4 }
     \tl_if_empty:oF \l_@@_xdots_color_tl { \color { \l_@@_xdots_color_tl } }
     \@@_actually_draw_Ldots:
     \group_end:
@@ -9916,7 +9940,7 @@
         \int_compare:nNnT { #2 } = \g_@@_col_total_int
           { \color { nicematrix-last-col } }
       }
-    \keys_set:nn { NiceMatrix / xdots } { #4 }
+    \keys_set:nn { nicematrix / xdots } { #4 }
     \tl_if_empty:oF \l_@@_xdots_color_tl { \color { \l_@@_xdots_color_tl } }
     \@@_actually_draw_Vdots:
     \group_end:
@@ -9943,7 +9967,7 @@
     \peek_remove_spaces:n
       {
         \bool_gset_true:N \g_@@_rotate_bool 
-        \keys_set:nn { NiceMatrix / rotate } { #1 }
+        \keys_set:nn { nicematrix / rotate } { #1 }
       }
   }
 %    \end{macrocode}
@@ -9950,7 +9974,7 @@
 %
 % \bigskip
 %    \begin{macrocode}
-\keys_define:nn { NiceMatrix / rotate }
+\keys_define:nn { nicematrix / rotate }
   {
     c .code:n = \bool_gset_true:N \g_@@_rotate_c_bool ,
     c .value_forbidden:n = true ,
@@ -10004,7 +10028,7 @@
     \exp_args:NNo \NewDocumentCommand \@@_line \l_@@_argspec_tl
       {
         \group_begin:
-        \keys_set:nn { NiceMatrix / xdots } { #1 , #4 , down = #5 , up = #6 }
+        \keys_set:nn { nicematrix / xdots } { #1 , #4 , down = #5 , up = #6 }
         \tl_if_empty:oF \l_@@_xdots_color_tl { \color { \l_@@_xdots_color_tl } } 
           \use:e
             {
@@ -10125,7 +10149,7 @@
 %    \end{macrocode}
 % \medskip
 %    \begin{macrocode}
-\keys_define:nn { NiceMatrix / RowStyle }
+\keys_define:nn { nicematrix / RowStyle }
   {
     cell-space-top-limit .dim_set:N = \l_tmpa_dim ,
     cell-space-top-limit .value_required:n = true ,
@@ -10162,7 +10186,7 @@
     \int_set_eq:NN \l_@@_key_nb_rows_int \c_one_int
     \dim_zero:N \l_tmpa_dim
     \dim_zero:N \l_tmpb_dim 
-    \keys_set:nn { NiceMatrix / RowStyle } { #1 }
+    \keys_set:nn { nicematrix / RowStyle } { #1 }
 %    \end{macrocode}
 % If the key |rowcolor| has been used.
 %    \begin{macrocode}
@@ -10608,7 +10632,7 @@
 % 
 % \bigskip
 %    \begin{macrocode}
-\keys_define:nn { NiceMatrix / rowcolors }
+\keys_define:nn { nicematrix / rowcolors }
   {
     respect-blocks .bool_set:N = \l_@@_respect_blocks_bool ,
     respect-blocks .default:n = true ,
@@ -10645,7 +10669,7 @@
     \seq_set_split:Nnn \l_@@_colors_seq { , } { #3 }
     \tl_clear_new:N \l_@@_cols_tl
     \cs_set_nopar:Npn \l_@@_cols_tl { - }
-    \keys_set:nn { NiceMatrix / rowcolors } { #4 }
+    \keys_set:nn { nicematrix / rowcolors } { #4 }
 %    \end{macrocode}
 % The counter |\l_@@_color_int| will be the rank of the current color in the list of
 % colors (modulo the length of the list).
@@ -11304,7 +11328,7 @@
 % However, unknown keys will be analyzed further with another set of keys.
 % 
 %    \begin{macrocode}
-\keys_define:nn { NiceMatrix / Rules }
+\keys_define:nn { nicematrix / Rules }
   {
     position .int_set:N = \l_@@_position_int , 
     position .value_required:n = true ,
@@ -11327,7 +11351,7 @@
 % following set of keys.
 %
 %    \begin{macrocode}
-\keys_define:nn { NiceMatrix / RulesBis }
+\keys_define:nn { nicematrix / RulesBis }
   {
     multiplicity .int_set:N = \l_@@_multiplicity_int , 
     multiplicity .initial:n = 1 , 
@@ -11378,7 +11402,7 @@
 %    \begin{macrocode}
     \group_begin:
     \int_set_eq:NN \l_@@_end_int \c at iRow
-    \keys_set_known:nnN { NiceMatrix / Rules } { #1 } \l_@@_other_keys_tl
+    \keys_set_known:nnN { nicematrix / Rules } { #1 } \l_@@_other_keys_tl
 %    \end{macrocode}
 % The following test is for the case where the user does not use all the columns
 % specified in the preamble of the environment (for instance, a preamble of
@@ -11477,7 +11501,7 @@
 \cs_new_protected:Npn \@@_vline_ii:
   {
     \tl_clear:N \l_@@_tikz_rule_tl 
-    \keys_set:nV { NiceMatrix / RulesBis } \l_@@_other_keys_tl 
+    \keys_set:nV { nicematrix / RulesBis } \l_@@_other_keys_tl 
     \bool_if:NTF \l_@@_dotted_bool
       \@@_vline_iv: 
       {
@@ -11633,7 +11657,7 @@
 % \bigskip
 % The following command will be executed in the internal |\CodeAfter|. The
 % argument |#1| is a list of \textsl{key=value} pairs of the form
-% |{NiceMatrix/Rules}|.
+% |{nicematrix/Rules}|.
 %    \begin{macrocode}
 \cs_new_protected:Npn \@@_hline:n #1 
   {
@@ -11643,7 +11667,7 @@
     \group_begin:
     \int_zero_new:N \l_@@_end_int 
     \int_set_eq:NN \l_@@_end_int \c at jCol
-    \keys_set_known:nnN { NiceMatrix / Rules } { #1 } \l_@@_other_keys_tl
+    \keys_set_known:nnN { nicematrix / Rules } { #1 } \l_@@_other_keys_tl
     \@@_hline_i:
     \group_end:
   }
@@ -11738,7 +11762,7 @@
 \cs_new_protected:Npn \@@_hline_ii:
   {
     \tl_clear:N \l_@@_tikz_rule_tl 
-    \keys_set:nV { NiceMatrix / RulesBis } \l_@@_other_keys_tl 
+    \keys_set:nV { nicematrix / RulesBis } \l_@@_other_keys_tl 
     \bool_if:NTF \l_@@_dotted_bool
       \@@_hline_iv: 
       {
@@ -12018,7 +12042,7 @@
     \str_clear_new:N \l_@@_ccommand_str
     \str_clear_new:N \l_@@_letter_str
     \tl_clear_new:N \l_@@_other_keys_tl
-    \keys_set_known:nnN { NiceMatrix / custom-line } { #1 } \l_@@_other_keys_tl
+    \keys_set_known:nnN { nicematrix / custom-line } { #1 } \l_@@_other_keys_tl
 %    \end{macrocode}
 % If the final user only wants to draw horizontal rules, he does not need to
 % specify a letter (for the vertical rules in the preamble of the array). On the
@@ -12040,7 +12064,7 @@
 % 
 % 
 %    \begin{macrocode}
-\keys_define:nn { NiceMatrix / custom-line }
+\keys_define:nn { nicematrix / custom-line }
   {
     letter .str_set:N = \l_@@_letter_str , 
     letter .value_required:n = true ,
@@ -12064,7 +12088,7 @@
     \bool_set_false:N \l_@@_color_bool
 %    \end{macrocode}
 %    \begin{macrocode}
-    \keys_set:nn { NiceMatrix / custom-line-bis } { #1 } 
+    \keys_set:nn { nicematrix / custom-line-bis } { #1 } 
     \bool_if:NT \l_@@_tikz_rule_bool
       {
         \IfPackageLoadedTF { tikz }
@@ -12112,10 +12136,10 @@
 % The previous command |\@@_custom_line_i:n| uses the following set of keys.
 % However, the whole definition of the customized lines (as provided by the
 % final user as argument of |custom-line|) will also be used further with
-% other sets of keys (for instance |{NiceMatrix/Rules}|). That's why the
+% other sets of keys (for instance |{nicematrix/Rules}|). That's why the
 % following set of keys has some keys which are no-op.
 %    \begin{macrocode}
-\keys_define:nn { NiceMatrix / custom-line-bis }
+\keys_define:nn { nicematrix / custom-line-bis }
   {
     multiplicity .int_set:N = \l_@@_multiplicity_int , 
     multiplicity .initial:n = 1 , 
@@ -12150,7 +12174,7 @@
 % deprecated and has been replaced by the key |total-width|.
 % 
 %    \begin{macrocode}
-\keys_define:nn { NiceMatrix / custom-line-width }
+\keys_define:nn { nicematrix / custom-line-width }
   {
     multiplicity .int_set:N = \l_@@_multiplicity_int , 
     multiplicity .initial:n = 1 , 
@@ -12240,7 +12264,7 @@
     \bool_set_false:N \l_@@_tikz_rule_bool
     \bool_set_false:N \l_@@_total_width_bool
     \bool_set_false:N \l_@@_dotted_rule_bool
-    \keys_set_known:nn { NiceMatrix / custom-line-width } { #1 }
+    \keys_set_known:nn { nicematrix / custom-line-width } { #1 }
     \bool_if:NF \l_@@_total_width_bool
       { 
         \bool_if:NTF \l_@@_dotted_rule_bool
@@ -12566,7 +12590,7 @@
 % Up to now, there is only one option available for the environment
 % |{NiceMatrixBlock}|. 
 %    \begin{macrocode}
-\keys_define:nn { NiceMatrix / NiceMatrixBlock } 
+\keys_define:nn { nicematrix / NiceMatrixBlock } 
   {
     auto-columns-width .code:n = 
       { 
@@ -12583,7 +12607,7 @@
   {
     \int_gincr:N \g_@@_NiceMatrixBlock_int
     \dim_zero:N \l_@@_columns_width_dim
-    \keys_set:nn { NiceMatrix / NiceMatrixBlock } { #1 }
+    \keys_set:nn { nicematrix / NiceMatrixBlock } { #1 }
     \bool_if:NT \l_@@_block_auto_columns_width_bool
       {
         \cs_if_exist:cT 
@@ -12998,7 +13022,7 @@
 % array (and once again when the block will be put in the array).
 % Here is the set of keys for the first pass (in the cell of the array).
 %    \begin{macrocode}
-\keys_define:nn { NiceMatrix / Block / FirstPass }
+\keys_define:nn { nicematrix / Block / FirstPass }
   {
     j .code:n = \str_set:Nn \l_@@_hpos_block_str j 
                 \bool_set_true:N \l_@@_p_block_bool , 
@@ -13042,6 +13066,7 @@
 %    \end{macrocode}
 %
 % 
+% 
 % The following command |\@@_Block:| will be linked to |\Block| in the
 % environments of \pkg{nicematrix}. We define it with
 % |\NewExpandableDocumentCommand| because it has an optional argument between~
@@ -13139,7 +13164,7 @@
 %
 % \medskip
 %    \begin{macrocode}
-    \keys_set_known:nn { NiceMatrix / Block / FirstPass } { #3 } 
+    \keys_set_known:nn { nicematrix / Block / FirstPass } { #3 } 
 %    \end{macrocode}
 %
 %    \begin{macrocode}
@@ -13182,11 +13207,11 @@
         \l_@@_X_bool                { \exp_args:Nee \@@_Block_v:nnnnn }
         { \tl_if_empty_p:n { #5 } } { \exp_args:Nee \@@_Block_v:nnnnn }
         { \int_compare_p:nNn \l_tmpa_int = \c_one_int } 
-            { \exp_args:Nee \@@_Block_iv:nnnnn } 
+                                    { \exp_args:Nee \@@_Block_iv:nnnnn } 
         { \int_compare_p:nNn \l_tmpb_int = \c_one_int }
-            { \exp_args:Nee \@@_Block_iv:nnnnn } 
-       }       
-       { \exp_args:Nee \@@_Block_v:nnnnn }
+                                    { \exp_args:Nee \@@_Block_iv:nnnnn } 
+      }       
+      { \exp_args:Nee \@@_Block_v:nnnnn }
     { \l_tmpa_int } { \l_tmpb_int } { #3 } { #4 } { #5 } 
   }
 %    \end{macrocode}
@@ -13254,10 +13279,42 @@
         \int_compare:nNnT { #1 } = \c_one_int
           {
             \int_if_zero:nTF \c at iRow 
-              \l_@@_code_for_first_row_tl
+              { 
+%    \end{macrocode}
+%
+% \bigskip
+% In the following code, the value of |code-for-first-row| contains a |\Block|
+% (in order to have the ``first row'' centered). But, that block will be
+% executed, since it is entirely contained in the first row, the value of
+% |code-for-first-row| will be inserted once again... with the same command
+% |\Block|. That's why we have to nullify the command |\Block.|
+% \begin{Verbatim}
+% $\begin{bNiceMatrix}%
+%   [
+%     r,
+%     first-row,
+%     last-col,
+%     code-for-first-row = \Block{}{\scriptstyle\color{blue} \arabic{jCol}},
+%     code-for-last-col = \scriptstyle \color{blue} \arabic{iRow}
+%   ]
+%      &   &    &   & \\
+%   -2 & 3 & -4 & 5 & \\
+%   3 & -4 & 5 & -6 & \\
+%   -4 & 5 & -6 & 7 & \\
+%   5 & -6 & 7 & -8 & \\
+% \end{bNiceMatrix}$
+% \end{Verbatim}
+% 
+%    \begin{macrocode}
+                \cs_set_eq:NN \Block \@@_NullBlock:
+                \l_@@_code_for_first_row_tl
+              }
               {
                 \int_compare:nNnT \c at iRow = \l_@@_last_row_int 
-                  \l_@@_code_for_last_row_tl
+                  {
+                    \cs_set_eq:NN \Block \@@_NullBlock:
+                    \l_@@_code_for_last_row_tl
+                  }
               }
             \g_@@_row_style_tl
           }
@@ -13614,7 +13671,7 @@
 % 
 % \medskip
 %   \begin{macrocode}
-\keys_define:nn { NiceMatrix / Block / SecondPass }
+\keys_define:nn { nicematrix / Block / SecondPass }
   {
     ampersand-in-blocks .bool_set:N = \l_@@_amp_in_blocks_bool , 
     ampersand-in-blocks .default:n = true , 
@@ -13785,7 +13842,7 @@
     \group_begin:
     \int_compare:nNnT { #1 } = { #3 }
       { \str_set:Nn \l_@@_vpos_block_str { t } }
-    \keys_set:nn { NiceMatrix / Block / SecondPass } { #5 }
+    \keys_set:nn { nicematrix / Block / SecondPass } { #5 }
 %    \end{macrocode}
 % 
 %
@@ -14190,6 +14247,9 @@
         }
       \endpgfpicture
     }
+%    \end{macrocode}
+% Now the case where there is no ampersand |&| in the content of the block.
+%    \begin{macrocode}
     {
       \bool_if:NTF \l_@@_p_block_bool
         { 
@@ -14391,6 +14451,7 @@
 %    \end{macrocode}
 %
 % 
+%
 % \bigskip
 % The first argument of |\@@_stroke_block:nnn| is a list of options for the
 % rectangle that you will stroke. The second argument is the upper-left cell of
@@ -14402,7 +14463,7 @@
     \group_begin:
     \tl_clear:N \l_@@_draw_tl
     \dim_set_eq:NN \l_@@_line_width_dim \arrayrulewidth
-    \keys_set_known:nn { NiceMatrix / BlockStroke } { #1 }
+    \keys_set_known:nn { nicematrix / BlockStroke } { #1 }
     \pgfpicture
     \pgfrememberpicturepositiononpagetrue
     \pgf at relevantforpicturesizefalse
@@ -14456,7 +14517,7 @@
 %
 % Here is the set of keys for the command |\@@_stroke_block:nnn|.
 %    \begin{macrocode}
-\keys_define:nn { NiceMatrix / BlockStroke }
+\keys_define:nn { nicematrix / BlockStroke }
   {
     color .tl_set:N = \l_@@_draw_tl ,
     draw .code:n = 
@@ -14478,7 +14539,7 @@
 \cs_new_protected:Npn \@@_vlines_block:nnn #1 #2 #3
   {
     \dim_set_eq:NN \l_@@_line_width_dim \arrayrulewidth
-    \keys_set_known:nn { NiceMatrix / BlockBorders } { #1 }
+    \keys_set_known:nn { nicematrix / BlockBorders } { #1 }
     \@@_cut_on_hyphen:w #2 \q_stop
     \tl_set_eq:NN \l_@@_tmpc_tl \l_tmpa_tl
     \tl_set_eq:NN \l_@@_tmpd_tl \l_tmpb_tl
@@ -14502,7 +14563,7 @@
 \cs_new_protected:Npn \@@_hlines_block:nnn #1 #2 #3
   {
     \dim_set_eq:NN \l_@@_line_width_dim \arrayrulewidth
-    \keys_set_known:nn { NiceMatrix / BlockBorders } { #1 }
+    \keys_set_known:nn { nicematrix / BlockBorders } { #1 }
     \@@_cut_on_hyphen:w #2 \q_stop
     \tl_set_eq:NN \l_@@_tmpc_tl \l_tmpa_tl
     \tl_set_eq:NN \l_@@_tmpd_tl \l_tmpb_tl
@@ -14534,13 +14595,13 @@
 \cs_new_protected:Npn \@@_stroke_borders_block:nnn #1 #2 #3
   {
     \dim_set_eq:NN \l_@@_line_width_dim \arrayrulewidth
-    \keys_set_known:nn { NiceMatrix / BlockBorders } { #1 }
+    \keys_set_known:nn { nicematrix / BlockBorders } { #1 }
     \dim_compare:nNnTF \l_@@_rounded_corners_dim > \c_zero_dim 
       { \@@_error:n { borders~forbidden } }
       {
         \tl_clear_new:N \l_@@_borders_tikz_tl
         \keys_set:nV
-          { NiceMatrix / OnlyForTikzInBorders } 
+          { nicematrix / OnlyForTikzInBorders } 
           \l_@@_borders_clist 
         \@@_cut_on_hyphen:w #2 \q_stop
         \tl_set_eq:NN \l_@@_tmpc_tl \l_tmpa_tl
@@ -14584,7 +14645,7 @@
 %    \end{macrocode}
 %
 %    \begin{macrocode}
-\keys_define:nn { NiceMatrix / OnlyForTikzInBorders }
+\keys_define:nn { nicematrix / OnlyForTikzInBorders }
   { 
     tikz .code:n = 
       \cs_if_exist:NTF \tikzpicture
@@ -14653,7 +14714,7 @@
 % \bigskip
 % Here is the set of keys for the command |\@@_stroke_borders_block:nnn|. 
 %    \begin{macrocode}
-\keys_define:nn { NiceMatrix / BlockBorders }
+\keys_define:nn { nicematrix / BlockBorders }
   { 
     borders .clist_set:N = \l_@@_borders_clist ,
     rounded-corners .dim_set:N = \l_@@_rounded_corners_dim ,
@@ -14677,7 +14738,7 @@
     \@@_clip_with_rounded_corners:
     \clist_map_inline:nn { #5 }
       {
-        \keys_set_known:nnN { NiceMatrix / SpecialOffset } { ##1 } \l_tmpa_tl
+        \keys_set_known:nnN { nicematrix / SpecialOffset } { ##1 } \l_tmpa_tl
         \use:e { \exp_not:N \path [ \l_tmpa_tl ] }
               ( 
                 [ 
@@ -14702,9 +14763,21 @@
 %
 % \medskip
 %    \begin{macrocode}
-\keys_define:nn { NiceMatrix / SpecialOffset }
+\keys_define:nn { nicematrix / SpecialOffset }
   { offset .dim_set:N = \l_@@_offset_dim }
 %    \end{macrocode}
+%
+% \bigskip
+% In some circonstancies, we want to nullify the command |\Block|. In order to
+% reach that goal, we will link the command |\Block| to the following command
+% |\@@_NullBlock:| which has the same syntax as the standard command |\Block|
+% but which is no-op.
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_NullBlock: 
+  { \@@_collect_options:n { \@@_NullBlock_i: } } 
+\NewExpandableDocumentCommand \@@_NullBlock_i: { m m D < > { } +m }
+  { }
+%    \end{macrocode}
 % 
 % 
 % \section{How to draw the dotted lines transparently}
@@ -14738,7 +14811,7 @@
 % We will extract some keys and pass the other keys to the environment
 % |{NiceArrayWithDelims}|.
 %    \begin{macrocode} 
-\keys_define:nn { NiceMatrix / Auto }
+\keys_define:nn { nicematrix / Auto }
   {
     columns-type .tl_set:N = \l_@@_columns_type_tl ,
     columns-type .value_required:n = true ,
@@ -14749,7 +14822,7 @@
     delimiters / color .value_required:n = true ,
     delimiters / max-width .bool_set:N = \l_@@_delimiters_max_width_bool ,
     delimiters / max-width .default:n = true ,
-    delimiters .code:n = \keys_set:nn { NiceMatrix / delimiters } { #1 } , 
+    delimiters .code:n = \keys_set:nn { nicematrix / delimiters } { #1 } , 
     delimiters .value_required:n = true , 
     rounded-corners .dim_set:N = \l_@@_tab_rounded_corners_dim ,
     rounded-corners .default:n = 4 pt 
@@ -14770,7 +14843,7 @@
 % The group is for the protection of the keys.
 %    \begin{macrocode}
     \group_begin:
-    \keys_set_known:nnN { NiceMatrix / Auto } { #6 } \l_tmpa_tl
+    \keys_set_known:nnN { nicematrix / Auto } { #6 } \l_tmpa_tl
     \use:e 
       {
         \exp_not:N \begin { NiceArrayWithDelims } { #1 } { #2 } 
@@ -15139,7 +15212,7 @@
 %
 % 
 %    \begin{macrocode}
-\keys_define:nn { NiceMatrix / sub-matrix }
+\keys_define:nn { nicematrix / sub-matrix }
   {
     extra-height .dim_set:N = \l_@@_submatrix_extra_height_dim ,
     extra-height .value_required:n = true ,
@@ -15160,12 +15233,12 @@
     hvlines .meta:n = { hlines, vlines } ,
     hvlines .value_forbidden:n = true 
   }
-\keys_define:nn { NiceMatrix }
+\keys_define:nn { nicematrix }
   { 
-    SubMatrix .inherit:n = NiceMatrix / sub-matrix ,
-    NiceArray / sub-matrix .inherit:n = NiceMatrix / sub-matrix ,
-    pNiceArray / sub-matrix .inherit:n = NiceMatrix / sub-matrix ,
-    NiceMatrixOptions / sub-matrix .inherit:n = NiceMatrix / sub-matrix , 
+    SubMatrix .inherit:n = nicematrix / sub-matrix ,
+    NiceArray / sub-matrix .inherit:n = nicematrix / sub-matrix ,
+    pNiceArray / sub-matrix .inherit:n = nicematrix / sub-matrix ,
+    NiceMatrixOptions / sub-matrix .inherit:n = nicematrix / sub-matrix , 
   }
 %    \end{macrocode}
 %
@@ -15173,7 +15246,7 @@
 % The following keys set is for the command |\SubMatrix| itself (not the tuning
 % of |\SubMatrix| that can be done elsewhere).
 %    \begin{macrocode}
-\keys_define:nn { NiceMatrix / SubMatrix }
+\keys_define:nn { nicematrix / SubMatrix }
   {
     delimiters / color .tl_set:N = \l_@@_delimiters_color_tl ,
     delimiters / color .value_required:n = true ,
@@ -15199,7 +15272,7 @@
             { \@@_error:n { Invalid~name } }
         } ,
     name .value_required:n = true ,
-    rules .code:n = \keys_set:nn { NiceMatrix / rules } { #1 } ,
+    rules .code:n = \keys_set:nn { nicematrix / rules } { #1 } ,
     rules .value_required:n = true ,
     code .tl_set:N = \l_@@_code_tl ,
     code .value_required:n = true ,
@@ -15331,7 +15404,7 @@
       { \@@_error:nn { Construct~too~large } { \SubMatrix } }
       {
         \str_clear_new:N \l_@@_submatrix_name_str
-        \keys_set:nn { NiceMatrix / SubMatrix } { #5 }
+        \keys_set:nn { nicematrix / SubMatrix } { #5 }
         \pgfpicture 
         \pgfrememberpicturepositiononpagetrue
         \pgf at relevantforpicturesizefalse
@@ -15772,7 +15845,7 @@
 %
 % \medskip
 %    \begin{macrocode}
-\keys_define:nn { NiceMatrix / Brace } 
+\keys_define:nn { nicematrix / Brace } 
   {
     left-shorten .bool_set:N = \l_@@_brace_left_shorten_bool ,
     left-shorten .default:n = true ,
@@ -15816,7 +15889,7 @@
       }
       {
         \tl_clear:N \l_tmpa_tl 
-        \keys_set:nn { NiceMatrix / Brace } { #4 }
+        \keys_set:nn { nicematrix / Brace } { #4 }
         \tl_if_empty:NF \l_tmpa_tl { \color { \l_tmpa_tl } } 
         \pgfpicture 
         \pgfrememberpicturepositiononpagetrue
@@ -15967,7 +16040,7 @@
 \bool_new:N \l_@@_not_empty_bool 
 \bool_new:N \l_@@_empty_bool 
 
-\keys_define:nn { NiceMatrix / TikzEveryCell }
+\keys_define:nn { nicematrix / TikzEveryCell }
   { 
     not-empty .code:n = 
       \bool_lazy_or:nnTF 
@@ -15992,7 +16065,7 @@
     \IfPackageLoadedTF { tikz } 
       {
         \group_begin:
-        \keys_set:nn { NiceMatrix / TikzEveryCell } { #1 }
+        \keys_set:nn { nicematrix / TikzEveryCell } { #1 }
 %    \end{macrocode}
 % The inner pair of braces in the following line is mandatory because, the last
 % argument of |\@@_tikz:nnnnn| is \emph{a list of lists} of TikZ keys.
@@ -16282,7 +16355,7 @@
 %
 %
 %    \begin{macrocode}
-\keys_define:nn { NiceMatrix / Package }
+\keys_define:nn { nicematrix / Package }
   {
     renew-dots .bool_set:N = \l_@@_renew_dots_bool ,
     renew-dots .value_forbidden:n = true ,
@@ -16295,7 +16368,7 @@
     no-test-for-array .default:n = true , 
     unknown .code:n = \@@_error:n { Unknown~key~for~package } 
   }
-\ProcessKeysOptions { NiceMatrix / Package }
+\ProcessKeysOptions { nicematrix / Package }
 %    \end{macrocode}
 %
 % \bigskip
@@ -17534,8 +17607,8 @@
 %    \end{macrocode}
 %
 % \medskip
-% This error message is used for the set of keys |NiceMatrix/NiceMatrix| and
-% |NiceMatrix/pNiceArray| (but not by |NiceMatrix/NiceArray| because, for this
+% This error message is used for the set of keys |nicematrix/NiceMatrix| and
+% |nicematrix/pNiceArray| (but not by |nicematrix/NiceArray| because, for this
 % set of keys, there is no |l| and |r|).
 %    \begin{macrocode}
 \@@_msg_new:nnn { Unknown~key~for~NiceMatrix }

Modified: trunk/Master/texmf-dist/tex/latex/nicematrix/nicematrix.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/nicematrix/nicematrix.sty	2024-08-21 23:41:52 UTC (rev 72083)
+++ trunk/Master/texmf-dist/tex/latex/nicematrix/nicematrix.sty	2024-08-22 19:40:08 UTC (rev 72084)
@@ -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.28b}
-\def\myfiledate{2024/06/29}
+\def\myfileversion{6.28c}
+\def\myfiledate{2024/08/22}
 \RequirePackage{pgfcore}
 \usepgfmodule{shapes}
 \RequirePackage{l3keys2e}
@@ -811,7 +811,7 @@
 \tl_new:N \l__nicematrix_xdots_color_tl
 \tl_new:N \l__nicematrix_delimiters_color_tl
 \bool_new:N \l__nicematrix_delimiters_max_width_bool
-\keys_define:nn { NiceMatrix / xdots }
+\keys_define:nn { nicematrix / xdots }
   {
     shorten-start .code:n =
       \hook_gput_code:nnn { begindocument } { . }
@@ -855,7 +855,7 @@
     draw-first .code:n = \prg_do_nothing: ,
     unknown .code:n = \__nicematrix_error:n { Unknown~key~for~xdots }
   }
-\keys_define:nn { NiceMatrix / rules }
+\keys_define:nn { nicematrix / rules }
   {
     color .tl_set:N = \l__nicematrix_rules_color_tl ,
     color .value_required:n = true ,
@@ -863,7 +863,7 @@
     width .value_required:n = true ,
     unknown .code:n = \__nicematrix_error:n { Unknown~key~for~rules }
   }
-\keys_define:nn { NiceMatrix / Global }
+\keys_define:nn { nicematrix / Global }
   {
     ampersand-in-blocks .bool_set:N = \l__nicematrix_amp_in_blocks_bool ,
     ampersand-in-blocks .default:n = true ,
@@ -875,7 +875,7 @@
     rounded-corners .dim_set:N = \l__nicematrix_tab_rounded_corners_dim ,
     rounded-corners .default:n = 4 pt ,
     custom-line .code:n = \__nicematrix_custom_line:n { #1 } ,
-    rules .code:n = \keys_set:nn { NiceMatrix / rules } { #1 } ,
+    rules .code:n = \keys_set:nn { nicematrix / rules } { #1 } ,
     rules .value_required:n = true ,
     standard-cline .bool_set:N = \l__nicematrix_standard_cline_bool ,
     standard-cline .default:n = true ,
@@ -889,7 +889,7 @@
         cell-space-bottom-limit = #1 ,
       } ,
     cell-space-limits .value_required:n = true ,
-    xdots .code:n = \keys_set:nn { NiceMatrix / xdots } { #1 } ,
+    xdots .code:n = \keys_set:nn { nicematrix / xdots } { #1 } ,
     light-syntax .code:n =
       \bool_set_true:N \l__nicematrix_light_syntax_bool
       \bool_set_false:N \l__nicematrix_light_syntax_expanded_bool ,
@@ -965,7 +965,7 @@
     pgf-node-code .tl_set:N = \l__nicematrix_pgf_node_code_tl ,
     pgf-node-code .value_required:n = true
   }
-\keys_define:nn { NiceMatrix / Env }
+\keys_define:nn { nicematrix / environments }
   {
     corners .clist_set:N = \l__nicematrix_corners_clist ,
     corners .default:n = { NW , SW , NE , SE } ,
@@ -1006,7 +1006,7 @@
     color-inside .value_forbidden:n = true ,
     colortbl-like .meta:n = color-inside
   }
-\keys_define:nn { NiceMatrix / notes }
+\keys_define:nn { nicematrix / notes }
   {
     para .bool_set:N = \l__nicematrix_notes_para_bool ,
     para .default:n = true ,
@@ -1046,7 +1046,7 @@
     detect-duplicates .default:n = true ,
     unknown .code:n  = \__nicematrix_error:n { Unknown~key~for~notes }
   }
-\keys_define:nn { NiceMatrix / delimiters }
+\keys_define:nn { nicematrix / delimiters }
   {
     max-width .bool_set:N = \l__nicematrix_delimiters_max_width_bool ,
     max-width .default:n = true ,
@@ -1053,55 +1053,55 @@
     color .tl_set:N = \l__nicematrix_delimiters_color_tl ,
     color .value_required:n = true ,
   }
-\keys_define:nn { NiceMatrix }
+\keys_define:nn { nicematrix }
   {
     NiceMatrixOptions .inherit:n =
-      { NiceMatrix / Global } ,
-    NiceMatrixOptions / xdots .inherit:n = NiceMatrix / xdots ,
-    NiceMatrixOptions / rules .inherit:n = NiceMatrix / rules ,
-    NiceMatrixOptions / notes .inherit:n = NiceMatrix / notes ,
-    NiceMatrixOptions / sub-matrix .inherit:n = NiceMatrix / sub-matrix ,
-    SubMatrix / rules .inherit:n = NiceMatrix / rules ,
-    CodeAfter / xdots .inherit:n = NiceMatrix / xdots ,
-    CodeBefore / sub-matrix .inherit:n = NiceMatrix / sub-matrix ,
-    CodeAfter / sub-matrix .inherit:n = NiceMatrix / sub-matrix ,
+      { nicematrix / Global } ,
+    NiceMatrixOptions / xdots .inherit:n = nicematrix / xdots ,
+    NiceMatrixOptions / rules .inherit:n = nicematrix / rules ,
+    NiceMatrixOptions / notes .inherit:n = nicematrix / notes ,
+    NiceMatrixOptions / sub-matrix .inherit:n = nicematrix / sub-matrix ,
+    SubMatrix / rules .inherit:n = nicematrix / rules ,
+    CodeAfter / xdots .inherit:n = nicematrix / xdots ,
+    CodeBefore / sub-matrix .inherit:n = nicematrix / sub-matrix ,
+    CodeAfter / sub-matrix .inherit:n = nicematrix / sub-matrix ,
     NiceMatrix .inherit:n =
       {
-        NiceMatrix / Global ,
-        NiceMatrix / Env ,
+        nicematrix / Global ,
+        nicematrix / environments ,
       } ,
-    NiceMatrix / xdots .inherit:n = NiceMatrix / xdots ,
-    NiceMatrix / rules .inherit:n = NiceMatrix / rules ,
+    NiceMatrix / xdots .inherit:n = nicematrix / xdots ,
+    NiceMatrix / rules .inherit:n = nicematrix / rules ,
     NiceTabular .inherit:n =
       {
-        NiceMatrix / Global ,
-        NiceMatrix / Env
+        nicematrix / Global ,
+        nicematrix / environments
       } ,
-    NiceTabular / xdots .inherit:n = NiceMatrix / xdots ,
-    NiceTabular / rules .inherit:n = NiceMatrix / rules ,
-    NiceTabular / notes .inherit:n = NiceMatrix / notes ,
+    NiceTabular / xdots .inherit:n = nicematrix / xdots ,
+    NiceTabular / rules .inherit:n = nicematrix / rules ,
+    NiceTabular / notes .inherit:n = nicematrix / notes ,
     NiceArray .inherit:n =
       {
-        NiceMatrix / Global ,
-        NiceMatrix / Env ,
+        nicematrix / Global ,
+        nicematrix / environments ,
       } ,
-    NiceArray / xdots .inherit:n = NiceMatrix / xdots ,
-    NiceArray / rules .inherit:n = NiceMatrix / rules ,
+    NiceArray / xdots .inherit:n = nicematrix / xdots ,
+    NiceArray / rules .inherit:n = nicematrix / rules ,
     pNiceArray .inherit:n =
       {
-        NiceMatrix / Global ,
-        NiceMatrix / Env ,
+        nicematrix / Global ,
+        nicematrix / environments ,
       } ,
-    pNiceArray / xdots .inherit:n = NiceMatrix / xdots ,
-    pNiceArray / rules .inherit:n = NiceMatrix / rules ,
+    pNiceArray / xdots .inherit:n = nicematrix / xdots ,
+    pNiceArray / rules .inherit:n = nicematrix / rules ,
   }
-\keys_define:nn { NiceMatrix / NiceMatrixOptions }
+\keys_define:nn { nicematrix / NiceMatrixOptions }
   {
     delimiters / color .tl_set:N = \l__nicematrix_delimiters_color_tl ,
     delimiters / color .value_required:n = true ,
     delimiters / max-width .bool_set:N = \l__nicematrix_delimiters_max_width_bool ,
     delimiters / max-width .default:n = true ,
-    delimiters .code:n = \keys_set:nn { NiceMatrix / delimiters } { #1 } ,
+    delimiters .code:n = \keys_set:nn { nicematrix / delimiters } { #1 } ,
     delimiters .value_required:n = true ,
     width .dim_set:N = \l__nicematrix_width_dim ,
     width .value_required:n = true ,
@@ -1121,9 +1121,9 @@
     allow-duplicate-names .code:n =
       \__nicematrix_msg_redirect_name:nn { Duplicate~name } { none } ,
     allow-duplicate-names .value_forbidden:n = true ,
-    notes .code:n = \keys_set:nn { NiceMatrix / notes } { #1 } ,
+    notes .code:n = \keys_set:nn { nicematrix / notes } { #1 } ,
     notes .value_required:n = true ,
-    sub-matrix .code:n = \keys_set:nn { NiceMatrix / sub-matrix } { #1 } ,
+    sub-matrix .code:n = \keys_set:nn { nicematrix / sub-matrix } { #1 } ,
     sub-matrix .value_required:n = true ,
     matrix / columns-type .tl_set:N = \l__nicematrix_columns_type_tl ,
     matrix / columns-type .value_required:n = true ,
@@ -1132,8 +1132,8 @@
     unknown .code:n  = \__nicematrix_error:n { Unknown~key~for~NiceMatrixOptions }
   }
 \NewDocumentCommand \NiceMatrixOptions { m }
-  { \keys_set:nn { NiceMatrix / NiceMatrixOptions } { #1 } }
-\keys_define:nn { NiceMatrix / NiceMatrix }
+  { \keys_set:nn { nicematrix / NiceMatrixOptions } { #1 } }
+\keys_define:nn { nicematrix / NiceMatrix }
   {
     last-col .code:n = \tl_if_empty:nTF { #1 }
                          {
@@ -1149,13 +1149,13 @@
     delimiters / color .value_required:n = true ,
     delimiters / max-width .bool_set:N = \l__nicematrix_delimiters_max_width_bool ,
     delimiters / max-width .default:n = true ,
-    delimiters .code:n = \keys_set:nn { NiceMatrix / delimiters } { #1 } ,
+    delimiters .code:n = \keys_set:nn { nicematrix / delimiters } { #1 } ,
     delimiters .value_required:n = true ,
     small .bool_set:N = \l__nicematrix_small_bool ,
     small .value_forbidden:n = true ,
     unknown .code:n = \__nicematrix_error:n { Unknown~key~for~NiceMatrix }
   }
-\keys_define:nn { NiceMatrix / NiceArray }
+\keys_define:nn { nicematrix / NiceArray }
   {
     small .bool_set:N = \l__nicematrix_small_bool ,
     small .value_forbidden:n = true ,
@@ -1166,7 +1166,7 @@
     l .code:n = \__nicematrix_error:n { r~or~l~with~preamble } ,
     unknown .code:n = \__nicematrix_error:n { Unknown~key~for~NiceArray }
   }
-\keys_define:nn { NiceMatrix / pNiceArray }
+\keys_define:nn { nicematrix / pNiceArray }
   {
     first-col .code:n = \int_zero:N \l__nicematrix_first_col_int ,
     last-col .code:n = \tl_if_empty:nF {#1}
@@ -1177,7 +1177,7 @@
     delimiters / color .value_required:n = true ,
     delimiters / max-width .bool_set:N = \l__nicematrix_delimiters_max_width_bool ,
     delimiters / max-width .default:n = true ,
-    delimiters .code:n = \keys_set:nn { NiceMatrix / delimiters } { #1 } ,
+    delimiters .code:n = \keys_set:nn { nicematrix / delimiters } { #1 } ,
     delimiters .value_required:n = true ,
     small .bool_set:N = \l__nicematrix_small_bool ,
     small .value_forbidden:n = true ,
@@ -1185,12 +1185,12 @@
     l .code:n = \__nicematrix_error:n { r~or~l~with~preamble } ,
     unknown .code:n = \__nicematrix_error:n { Unknown~key~for~NiceMatrix }
   }
-\keys_define:nn { NiceMatrix / NiceTabular }
+\keys_define:nn { nicematrix / NiceTabular }
   {
     width .code:n = \dim_set:Nn \l__nicematrix_width_dim { #1 }
                     \bool_set_true:N \l__nicematrix_width_used_bool ,
     width .value_required:n = true ,
-    notes .code:n = \keys_set:nn { NiceMatrix / notes } { #1 } ,
+    notes .code:n = \keys_set:nn { nicematrix / notes } { #1 } ,
     tabularnote .tl_gset:N = \g__nicematrix_tabularnote_tl ,
     tabularnote .value_required:n = true ,
     caption .tl_set:N = \l__nicematrix_caption_tl ,
@@ -1206,14 +1206,14 @@
     l .code:n = \__nicematrix_error:n { r~or~l~with~preamble } ,
     unknown .code:n = \__nicematrix_error:n { Unknown~key~for~NiceTabular }
   }
-\keys_define:nn { NiceMatrix / CodeAfter }
+\keys_define:nn { nicematrix / CodeAfter }
   {
     delimiters / color .tl_set:N = \l__nicematrix_delimiters_color_tl ,
     delimiters / color .value_required:n = true ,
-    rules .code:n = \keys_set:nn { NiceMatrix / rules } { #1 } ,
+    rules .code:n = \keys_set:nn { nicematrix / rules } { #1 } ,
     rules .value_required:n = true ,
-    xdots .code:n = \keys_set:nn { NiceMatrix / xdots } { #1 } ,
-    sub-matrix .code:n = \keys_set:nn { NiceMatrix / sub-matrix } { #1 } ,
+    xdots .code:n = \keys_set:nn { nicematrix / xdots } { #1 } ,
+    sub-matrix .code:n = \keys_set:nn { nicematrix / sub-matrix } { #1 } ,
     sub-matrix .value_required:n = true ,
     unknown .code:n = \__nicematrix_error:n { Unknown~key~for~CodeAfter }
   }
@@ -1839,11 +1839,11 @@
     \bool_if:NT \g__nicematrix_recreate_cell_nodes_bool
       { \tl_put_left:Nn \__nicematrix_node_for_cell: \__nicematrix_patch_node_for_cell: }
   }
-\keys_define:nn { NiceMatrix / CodeBefore }
+\keys_define:nn { nicematrix / CodeBefore }
   {
     create-cell-nodes .bool_gset:N = \g__nicematrix_recreate_cell_nodes_bool ,
     create-cell-nodes .default:n = true ,
-    sub-matrix .code:n = \keys_set:nn { NiceMatrix / sub-matrix } { #1 } ,
+    sub-matrix .code:n = \keys_set:nn { nicematrix / sub-matrix } { #1 } ,
     sub-matrix .value_required:n = true ,
     delimiters / color .tl_set:N = \l__nicematrix_delimiters_color_tl ,
     delimiters / color .value_required:n = true ,
@@ -1851,7 +1851,7 @@
   }
 \NewDocumentCommand \__nicematrix_CodeBefore_keys: { O { } }
   {
-    \keys_set:nn { NiceMatrix / CodeBefore } { #1 }
+    \keys_set:nn { nicematrix / CodeBefore } { #1 }
     \__nicematrix_CodeBefore:w
   }
 \cs_new_protected:Npn \__nicematrix_CodeBefore:w #1 \q_stop
@@ -1999,8 +1999,8 @@
     \tl_if_empty:NF \g__nicematrix_pre_code_before_tl
       { \bool_set_true:N \l__nicematrix_code_before_bool }
     \bool_if:NTF \g__nicematrix_delims_bool
-      { \keys_set:nn { NiceMatrix / pNiceArray } }
-      { \keys_set:nn { NiceMatrix / NiceArray } }
+      { \keys_set:nn { nicematrix / pNiceArray } }
+      { \keys_set:nn { nicematrix / NiceArray } }
     { #3 , #5 }
     \__nicematrix_set_CT at arc@:o \l__nicematrix_rules_color_tl
     \bool_if:nTF { #6 } \__nicematrix_CodeBefore_Body:w \__nicematrix_pre_array:
@@ -2013,7 +2013,7 @@
     \skip_horizontal:N \l__nicematrix_right_margin_dim
     \skip_horizontal:N \l__nicematrix_extra_right_margin_dim
 
-    % % awful workaround
+    % awful workaround
     \int_compare:nNnT \g__nicematrix_col_total_int = \c_one_int
       {
         \dim_compare:nNnT \l__nicematrix_columns_width_dim > \c_zero_dim
@@ -2910,6 +2910,18 @@
             { } % for the name of the block
           }
       }
+    \RenewDocumentCommand \cellcolor { O { } m }
+      {
+        \__nicematrix_test_color_inside:
+        \tl_gput_right:Nx \g__nicematrix_pre_code_before_tl
+          {
+            \__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 - \int_eval:n { \c at jCol + #1 } }
+          }
+         \ignorespaces
+      }
     \cs_set_nopar:Npn \@sharp { #3 }
     \@arstrut
     \@preamble
@@ -3734,7 +3746,7 @@
             \bool_set_true:N \l__nicematrix_last_col_without_value_bool
             \int_set:Nn \l__nicematrix_last_col_int { -1 }
           }
-        \keys_set:nn { NiceMatrix / NiceMatrix } { ##1 }
+        \keys_set:nn { nicematrix / NiceMatrix } { ##1 }
         \__nicematrix_begin_of_NiceMatrix:nV { #1 } \l__nicematrix_columns_type_tl
       }
       { \use:c { end #1 NiceArray } }
@@ -3747,7 +3759,7 @@
         \bool_set_true:N \l__nicematrix_last_col_without_value_bool
         \int_set:Nn \l__nicematrix_last_col_int { -1 }
       }
-    \keys_set:nn { NiceMatrix / NiceMatrix } { #1 }
+    \keys_set:nn { nicematrix / NiceMatrix } { #1 }
     \bool_lazy_or:nnT
       { \clist_if_empty_p:N \l__nicematrix_vlines_clist }
       { \l__nicematrix_except_borders_bool }
@@ -3762,7 +3774,7 @@
     \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 }
+    \keys_set:nn { nicematrix / NiceTabular } { #1 , #3 }
     \tl_if_empty:NF \l__nicematrix_short_caption_tl
       {
         \tl_if_empty:NT \l__nicematrix_caption_tl
@@ -3807,7 +3819,7 @@
     \str_gset:Nn \g__nicematrix_name_env_str { NiceTabularX }
     \dim_zero_new:N \l__nicematrix_width_dim
     \dim_set:Nn \l__nicematrix_width_dim { #1 }
-    \keys_set:nn { NiceMatrix / NiceTabular } { #2 , #4 }
+    \keys_set:nn { nicematrix / NiceTabular } { #2 , #4 }
     \__nicematrix_settings_for_tabular:
     \NiceArray { #3 }
   }
@@ -3820,7 +3832,7 @@
   {
     \str_gset:Nn \g__nicematrix_name_env_str { NiceTabular* }
     \dim_set:Nn \l__nicematrix_tabular_width_dim { #1 }
-    \keys_set:nn { NiceMatrix / NiceTabular } { #2 , #4 }
+    \keys_set:nn { nicematrix / NiceTabular } { #2 , #4 }
     \__nicematrix_settings_for_tabular:
     \NiceArray { #3 }
   }
@@ -4006,7 +4018,7 @@
     \cs_gset_eq:NN \CT at arc@ \__nicematrix_old_CT at arc@
   }
 \NewDocumentCommand \__nicematrix_CodeAfter_keys: { O { } }
-  { \keys_set:nn { NiceMatrix / CodeAfter } { #1 } }
+  { \keys_set:nn { nicematrix / CodeAfter } { #1 } }
 \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
@@ -4393,7 +4405,7 @@
               \int_compare:nNnT { #1 } = \l__nicematrix_last_row_int
                 { \color { nicematrix-last-row } }
             }
-          \keys_set:nn { NiceMatrix / xdots } { #3 }
+          \keys_set:nn { nicematrix / xdots } { #3 }
           \tl_if_empty:oF \l__nicematrix_xdots_color_tl { \color { \l__nicematrix_xdots_color_tl } }
           \__nicematrix_actually_draw_Ldots:
         \group_end:
@@ -4445,7 +4457,7 @@
               \int_compare:nNnT { #1 } = \l__nicematrix_last_row_int
                 { \color { nicematrix-last-row } }
             }
-          \keys_set:nn { NiceMatrix / xdots } { #3 }
+          \keys_set:nn { nicematrix / xdots } { #3 }
           \tl_if_empty:oF \l__nicematrix_xdots_color_tl { \color { \l__nicematrix_xdots_color_tl } }
           \__nicematrix_actually_draw_Cdots:
         \group_end:
@@ -4541,7 +4553,7 @@
               \int_compare:nNnT { #2 } = \l__nicematrix_last_col_int
                 { \color { nicematrix-last-col } }
             }
-          \keys_set:nn { NiceMatrix / xdots } { #3 }
+          \keys_set:nn { nicematrix / xdots } { #3 }
           \tl_if_empty:oF \l__nicematrix_xdots_color_tl
             { \color { \l__nicematrix_xdots_color_tl } }
           \__nicematrix_actually_draw_Vdots:
@@ -4627,7 +4639,7 @@
         \__nicematrix_find_extremities_of_line:nnnn { #1 } { #2 } 1 1
         \group_begin:
           \__nicematrix_open_shorten:
-          \keys_set:nn { NiceMatrix / xdots } { #3 }
+          \keys_set:nn { nicematrix / xdots } { #3 }
           \tl_if_empty:oF \l__nicematrix_xdots_color_tl { \color { \l__nicematrix_xdots_color_tl } }
           \__nicematrix_actually_draw_Ddots:
         \group_end:
@@ -4658,11 +4670,14 @@
               { \l__nicematrix_y_final_dim - \l__nicematrix_y_initial_dim }
           }
           {
-            \dim_set:Nn \l__nicematrix_y_final_dim
+            \dim_compare:nNnF \g__nicematrix_delta_x_one_dim = \c_zero_dim
               {
-                \l__nicematrix_y_initial_dim +
-                ( \l__nicematrix_x_final_dim - \l__nicematrix_x_initial_dim ) *
-                \dim_ratio:nn \g__nicematrix_delta_y_one_dim \g__nicematrix_delta_x_one_dim
+                \dim_set:Nn \l__nicematrix_y_final_dim
+                  {
+                    \l__nicematrix_y_initial_dim +
+                    ( \l__nicematrix_x_final_dim - \l__nicematrix_x_initial_dim ) *
+                    \dim_ratio:nn \g__nicematrix_delta_y_one_dim \g__nicematrix_delta_x_one_dim
+                  }
               }
           }
       }
@@ -4676,7 +4691,7 @@
         \__nicematrix_find_extremities_of_line:nnnn { #1 } { #2 } 1 { -1 }
         \group_begin:
           \__nicematrix_open_shorten:
-          \keys_set:nn { NiceMatrix / xdots } { #3 }
+          \keys_set:nn { nicematrix / xdots } { #3 }
           \tl_if_empty:oF \l__nicematrix_xdots_color_tl { \color { \l__nicematrix_xdots_color_tl } }
           \__nicematrix_actually_draw_Iddots:
         \group_end:
@@ -4707,11 +4722,14 @@
               { \l__nicematrix_y_final_dim - \l__nicematrix_y_initial_dim }
           }
           {
-            \dim_set:Nn \l__nicematrix_y_final_dim
+            \dim_compare:nNnF \g__nicematrix_delta_x_two_dim = \c_zero_dim
               {
-                \l__nicematrix_y_initial_dim +
-                ( \l__nicematrix_x_final_dim - \l__nicematrix_x_initial_dim ) *
-                \dim_ratio:nn \g__nicematrix_delta_y_two_dim \g__nicematrix_delta_x_two_dim
+                \dim_set:Nn \l__nicematrix_y_final_dim
+                  {
+                    \l__nicematrix_y_initial_dim +
+                    ( \l__nicematrix_x_final_dim - \l__nicematrix_x_initial_dim ) *
+                    \dim_ratio:nn \g__nicematrix_delta_y_two_dim \g__nicematrix_delta_x_two_dim
+                  }
               }
           }
       }
@@ -5064,7 +5082,7 @@
                 \l__nicematrix_last_col_int { \__nicematrix_error:nn { in~last~col } \Ddots }
               }
               {
-                \keys_set_known:nn { NiceMatrix / Ddots } { #1 }
+                \keys_set_known:nn { nicematrix / Ddots } { #1 }
                 \__nicematrix_instruction_of_type:nnn \l__nicematrix_draw_first_bool { Ddots }
                   { #1 , down = #2 , up = #3 , middle = #4 }
               }
@@ -5090,7 +5108,7 @@
                 \l__nicematrix_last_col_int { \__nicematrix_error:nn { in~last~col } \Iddots }
               }
               {
-                \keys_set_known:nn { NiceMatrix / Ddots } { #1 }
+                \keys_set_known:nn { nicematrix / Ddots } { #1 }
                 \__nicematrix_instruction_of_type:nnn \l__nicematrix_draw_first_bool { Iddots }
                   { #1 , down = #2 , up = #3 , middle = #4 }
               }
@@ -5100,7 +5118,7 @@
         \bool_gset_true:N \g__nicematrix_empty_cell_bool
       }
   }
-\keys_define:nn { NiceMatrix / Ddots }
+\keys_define:nn { nicematrix / Ddots }
   {
     draw-first .bool_set:N = \l__nicematrix_draw_first_bool ,
     draw-first .default:n = true ,
@@ -5210,7 +5228,7 @@
           { \color { nicematrix-last-row } }
       }
 
-    \keys_set:nn { NiceMatrix / xdots } { #4 }
+    \keys_set:nn { nicematrix / xdots } { #4 }
     \tl_if_empty:oF \l__nicematrix_xdots_color_tl { \color { \l__nicematrix_xdots_color_tl } }
     \__nicematrix_actually_draw_Ldots:
     \group_end:
@@ -5291,7 +5309,7 @@
         \int_compare:nNnT { #2 } = \g__nicematrix_col_total_int
           { \color { nicematrix-last-col } }
       }
-    \keys_set:nn { NiceMatrix / xdots } { #4 }
+    \keys_set:nn { nicematrix / xdots } { #4 }
     \tl_if_empty:oF \l__nicematrix_xdots_color_tl { \color { \l__nicematrix_xdots_color_tl } }
     \__nicematrix_actually_draw_Vdots:
     \group_end:
@@ -5303,10 +5321,10 @@
     \peek_remove_spaces:n
       {
         \bool_gset_true:N \g__nicematrix_rotate_bool
-        \keys_set:nn { NiceMatrix / rotate } { #1 }
+        \keys_set:nn { nicematrix / rotate } { #1 }
       }
   }
-\keys_define:nn { NiceMatrix / rotate }
+\keys_define:nn { nicematrix / rotate }
   {
     c .code:n = \bool_gset_true:N \g__nicematrix_rotate_c_bool ,
     c .value_forbidden:n = true ,
@@ -5328,7 +5346,7 @@
     \exp_args:NNo \NewDocumentCommand \__nicematrix_line \l__nicematrix_argspec_tl
       {
         \group_begin:
-        \keys_set:nn { NiceMatrix / xdots } { #1 , #4 , down = #5 , up = #6 }
+        \keys_set:nn { nicematrix / xdots } { #1 , #4 , down = #5 , up = #6 }
         \tl_if_empty:oF \l__nicematrix_xdots_color_tl { \color { \l__nicematrix_xdots_color_tl } }
           \use:e
             {
@@ -5382,7 +5400,7 @@
       }
   }
 \cs_generate_variant:Nn \__nicematrix_put_in_row_style:n { e }
-\keys_define:nn { NiceMatrix / RowStyle }
+\keys_define:nn { nicematrix / RowStyle }
   {
     cell-space-top-limit .dim_set:N = \l_tmpa_dim ,
     cell-space-top-limit .value_required:n = true ,
@@ -5414,7 +5432,7 @@
     \int_set_eq:NN \l__nicematrix_key_nb_rows_int \c_one_int
     \dim_zero:N \l_tmpa_dim
     \dim_zero:N \l_tmpb_dim
-    \keys_set:nn { NiceMatrix / RowStyle } { #1 }
+    \keys_set:nn { nicematrix / RowStyle } { #1 }
     \tl_if_empty:NF \l_tmpa_tl
       {
         \tl_gput_right:Nx \g__nicematrix_pre_code_before_tl
@@ -5669,7 +5687,7 @@
       { 1 - 1 }
       { \int_use:N \c at iRow - \int_use:N \c at jCol }
   }
-\keys_define:nn { NiceMatrix / rowcolors }
+\keys_define:nn { nicematrix / rowcolors }
   {
     respect-blocks .bool_set:N = \l__nicematrix_respect_blocks_bool ,
     respect-blocks .default:n = true ,
@@ -5685,7 +5703,7 @@
     \seq_set_split:Nnn \l__nicematrix_colors_seq { , } { #3 }
     \tl_clear_new:N \l__nicematrix_cols_tl
     \cs_set_nopar:Npn \l__nicematrix_cols_tl { - }
-    \keys_set:nn { NiceMatrix / rowcolors } { #4 }
+    \keys_set:nn { nicematrix / rowcolors } { #4 }
     \int_zero_new:N \l__nicematrix_color_int
     \int_set_eq:NN \l__nicematrix_color_int \c_one_int
     \bool_if:NT \l__nicematrix_respect_blocks_bool
@@ -6043,7 +6061,7 @@
           }
       }
   }
-\keys_define:nn { NiceMatrix / Rules }
+\keys_define:nn { nicematrix / Rules }
   {
     position .int_set:N = \l__nicematrix_position_int ,
     position .value_required:n = true ,
@@ -6055,7 +6073,7 @@
         { \int_set_eq:NN \l__nicematrix_end_int \c at jCol }
         { \int_set:Nn \l__nicematrix_end_int { #1 } }
   }
-\keys_define:nn { NiceMatrix / RulesBis }
+\keys_define:nn { nicematrix / RulesBis }
   {
     multiplicity .int_set:N = \l__nicematrix_multiplicity_int ,
     multiplicity .initial:n = 1 ,
@@ -6082,7 +6100,7 @@
   {
     \group_begin:
     \int_set_eq:NN \l__nicematrix_end_int \c at iRow
-    \keys_set_known:nnN { NiceMatrix / Rules } { #1 } \l__nicematrix_other_keys_tl
+    \keys_set_known:nnN { nicematrix / Rules } { #1 } \l__nicematrix_other_keys_tl
     \int_compare:nNnT \l__nicematrix_position_int < { \c at jCol + 2 }
       \__nicematrix_vline_i:
     \group_end:
@@ -6149,7 +6167,7 @@
 \cs_new_protected:Npn \__nicematrix_vline_ii:
   {
     \tl_clear:N \l__nicematrix_tikz_rule_tl
-    \keys_set:nV { NiceMatrix / RulesBis } \l__nicematrix_other_keys_tl
+    \keys_set:nV { nicematrix / RulesBis } \l__nicematrix_other_keys_tl
     \bool_if:NTF \l__nicematrix_dotted_bool
       \__nicematrix_vline_iv:
       {
@@ -6269,7 +6287,7 @@
     \group_begin:
     \int_zero_new:N \l__nicematrix_end_int
     \int_set_eq:NN \l__nicematrix_end_int \c at jCol
-    \keys_set_known:nnN { NiceMatrix / Rules } { #1 } \l__nicematrix_other_keys_tl
+    \keys_set_known:nnN { nicematrix / Rules } { #1 } \l__nicematrix_other_keys_tl
     \__nicematrix_hline_i:
     \group_end:
   }
@@ -6337,7 +6355,7 @@
 \cs_new_protected:Npn \__nicematrix_hline_ii:
   {
     \tl_clear:N \l__nicematrix_tikz_rule_tl
-    \keys_set:nV { NiceMatrix / RulesBis } \l__nicematrix_other_keys_tl
+    \keys_set:nV { nicematrix / RulesBis } \l__nicematrix_other_keys_tl
     \bool_if:NTF \l__nicematrix_dotted_bool
       \__nicematrix_hline_iv:
       {
@@ -6501,7 +6519,7 @@
     \str_clear_new:N \l__nicematrix_ccommand_str
     \str_clear_new:N \l__nicematrix_letter_str
     \tl_clear_new:N \l__nicematrix_other_keys_tl
-    \keys_set_known:nnN { NiceMatrix / custom-line } { #1 } \l__nicematrix_other_keys_tl
+    \keys_set_known:nnN { nicematrix / custom-line } { #1 } \l__nicematrix_other_keys_tl
     \bool_lazy_all:nTF
       {
         { \str_if_empty_p:N \l__nicematrix_letter_str }
@@ -6511,7 +6529,7 @@
       { \__nicematrix_error:n { No~letter~and~no~command } }
       { \exp_args:No \__nicematrix_custom_line_i:n \l__nicematrix_other_keys_tl }
   }
-\keys_define:nn { NiceMatrix / custom-line }
+\keys_define:nn { nicematrix / custom-line }
   {
     letter .str_set:N = \l__nicematrix_letter_str ,
     letter .value_required:n = true ,
@@ -6525,7 +6543,7 @@
     \bool_set_false:N \l__nicematrix_tikz_rule_bool
     \bool_set_false:N \l__nicematrix_dotted_rule_bool
     \bool_set_false:N \l__nicematrix_color_bool
-    \keys_set:nn { NiceMatrix / custom-line-bis } { #1 }
+    \keys_set:nn { nicematrix / custom-line-bis } { #1 }
     \bool_if:NT \l__nicematrix_tikz_rule_bool
       {
         \IfPackageLoadedTF { tikz }
@@ -6558,7 +6576,7 @@
   }
 \tl_const:Nn \c__nicematrix_forbidden_letters_tl { lcrpmbVX|()[]!@<> }
 \str_const:Nn \c__nicematrix_forbidden_letters_str { lcrpmbVX|()[]!@<> }
-\keys_define:nn { NiceMatrix / custom-line-bis }
+\keys_define:nn { nicematrix / custom-line-bis }
   {
     multiplicity .int_set:N = \l__nicematrix_multiplicity_int ,
     multiplicity .initial:n = 1 ,
@@ -6580,7 +6598,7 @@
 \bool_new:N \l__nicematrix_dotted_rule_bool
 \bool_new:N \l__nicematrix_tikz_rule_bool
 \bool_new:N \l__nicematrix_color_bool
-\keys_define:nn { NiceMatrix / custom-line-width }
+\keys_define:nn { nicematrix / custom-line-width }
   {
     multiplicity .int_set:N = \l__nicematrix_multiplicity_int ,
     multiplicity .initial:n = 1 ,
@@ -6636,7 +6654,7 @@
     \bool_set_false:N \l__nicematrix_tikz_rule_bool
     \bool_set_false:N \l__nicematrix_total_width_bool
     \bool_set_false:N \l__nicematrix_dotted_rule_bool
-    \keys_set_known:nn { NiceMatrix / custom-line-width } { #1 }
+    \keys_set_known:nn { nicematrix / custom-line-width } { #1 }
     \bool_if:NF \l__nicematrix_total_width_bool
       {
         \bool_if:NTF \l__nicematrix_dotted_rule_bool
@@ -6842,7 +6860,7 @@
       }
   }
 \bool_new:N \l__nicematrix_block_auto_columns_width_bool
-\keys_define:nn { NiceMatrix / NiceMatrixBlock }
+\keys_define:nn { nicematrix / NiceMatrixBlock }
   {
     auto-columns-width .code:n =
       {
@@ -6855,7 +6873,7 @@
   {
     \int_gincr:N \g__nicematrix_NiceMatrixBlock_int
     \dim_zero:N \l__nicematrix_columns_width_dim
-    \keys_set:nn { NiceMatrix / NiceMatrixBlock } { #1 }
+    \keys_set:nn { nicematrix / NiceMatrixBlock } { #1 }
     \bool_if:NT \l__nicematrix_block_auto_columns_width_bool
       {
         \cs_if_exist:cT
@@ -7082,7 +7100,7 @@
           { \int_use:N \g__nicematrix_env_int - \__nicematrix_i: - \__nicematrix_j: \l__nicematrix_suffix_tl}
       }
   }
-\keys_define:nn { NiceMatrix / Block / FirstPass }
+\keys_define:nn { nicematrix / Block / FirstPass }
   {
     j .code:n = \str_set:Nn \l__nicematrix_hpos_block_str j
                 \bool_set_true:N \l__nicematrix_p_block_bool ,
@@ -7162,7 +7180,7 @@
           { \str_set:NV \l__nicematrix_hpos_block_str \l__nicematrix_hpos_cell_tl }
       }
       { \str_set_eq:NN \l__nicematrix_hpos_block_str \c__nicematrix_c_str }
-    \keys_set_known:nn { NiceMatrix / Block / FirstPass } { #3 }
+    \keys_set_known:nn { nicematrix / Block / FirstPass } { #3 }
     \tl_set:Nx \l_tmpa_tl
       {
         { \int_use:N \c at iRow }
@@ -7180,11 +7198,11 @@
         \l__nicematrix_X_bool                { \exp_args:Nee \__nicematrix_Block_v:nnnnn }
         { \tl_if_empty_p:n { #5 } } { \exp_args:Nee \__nicematrix_Block_v:nnnnn }
         { \int_compare_p:nNn \l_tmpa_int = \c_one_int }
-            { \exp_args:Nee \__nicematrix_Block_iv:nnnnn }
+                                    { \exp_args:Nee \__nicematrix_Block_iv:nnnnn }
         { \int_compare_p:nNn \l_tmpb_int = \c_one_int }
-            { \exp_args:Nee \__nicematrix_Block_iv:nnnnn }
-       }
-       { \exp_args:Nee \__nicematrix_Block_v:nnnnn }
+                                    { \exp_args:Nee \__nicematrix_Block_iv:nnnnn }
+      }
+      { \exp_args:Nee \__nicematrix_Block_v:nnnnn }
     { \l_tmpa_int } { \l_tmpb_int } { #3 } { #4 } { #5 }
   }
 \cs_new_protected:Npn \__nicematrix_Block_iv:nnnnn #1 #2 #3 #4 #5
@@ -7214,10 +7232,16 @@
         \int_compare:nNnT { #1 } = \c_one_int
           {
             \int_if_zero:nTF \c at iRow
-              \l__nicematrix_code_for_first_row_tl
               {
+                \cs_set_eq:NN \Block \__nicematrix_NullBlock:
+                \l__nicematrix_code_for_first_row_tl
+              }
+              {
                 \int_compare:nNnT \c at iRow = \l__nicematrix_last_row_int
-                  \l__nicematrix_code_for_last_row_tl
+                  {
+                    \cs_set_eq:NN \Block \__nicematrix_NullBlock:
+                    \l__nicematrix_code_for_last_row_tl
+                  }
               }
             \g__nicematrix_row_style_tl
           }
@@ -7442,7 +7466,7 @@
         { \exp_not:n { #4 #5 } }
       }
   }
-\keys_define:nn { NiceMatrix / Block / SecondPass }
+\keys_define:nn { nicematrix / Block / SecondPass }
   {
     ampersand-in-blocks .bool_set:N = \l__nicematrix_amp_in_blocks_bool ,
     ampersand-in-blocks .default:n = true ,
@@ -7566,7 +7590,7 @@
     \group_begin:
     \int_compare:nNnT { #1 } = { #3 }
       { \str_set:Nn \l__nicematrix_vpos_block_str { t } }
-    \keys_set:nn { NiceMatrix / Block / SecondPass } { #5 }
+    \keys_set:nn { nicematrix / Block / SecondPass } { #5 }
     \tl_if_in:nnT { #6 } { & } { \bool_set_true:N \l__nicematrix_ampersand_bool }
     \bool_lazy_and:nnT
       \l__nicematrix_vlines_block_bool
@@ -8000,7 +8024,7 @@
     \group_begin:
     \tl_clear:N \l__nicematrix_draw_tl
     \dim_set_eq:NN \l__nicematrix_line_width_dim \arrayrulewidth
-    \keys_set_known:nn { NiceMatrix / BlockStroke } { #1 }
+    \keys_set_known:nn { nicematrix / BlockStroke } { #1 }
     \pgfpicture
     \pgfrememberpicturepositiononpagetrue
     \pgf at relevantforpicturesizefalse
@@ -8046,7 +8070,7 @@
     \endpgfpicture
     \group_end:
   }
-\keys_define:nn { NiceMatrix / BlockStroke }
+\keys_define:nn { nicematrix / BlockStroke }
   {
     color .tl_set:N = \l__nicematrix_draw_tl ,
     draw .code:n =
@@ -8059,7 +8083,7 @@
 \cs_new_protected:Npn \__nicematrix_vlines_block:nnn #1 #2 #3
   {
     \dim_set_eq:NN \l__nicematrix_line_width_dim \arrayrulewidth
-    \keys_set_known:nn { NiceMatrix / BlockBorders } { #1 }
+    \keys_set_known:nn { nicematrix / BlockBorders } { #1 }
     \__nicematrix_cut_on_hyphen:w #2 \q_stop
     \tl_set_eq:NN \l__nicematrix_tmpc_tl \l_tmpa_tl
     \tl_set_eq:NN \l__nicematrix_tmpd_tl \l_tmpb_tl
@@ -8083,7 +8107,7 @@
 \cs_new_protected:Npn \__nicematrix_hlines_block:nnn #1 #2 #3
   {
     \dim_set_eq:NN \l__nicematrix_line_width_dim \arrayrulewidth
-    \keys_set_known:nn { NiceMatrix / BlockBorders } { #1 }
+    \keys_set_known:nn { nicematrix / BlockBorders } { #1 }
     \__nicematrix_cut_on_hyphen:w #2 \q_stop
     \tl_set_eq:NN \l__nicematrix_tmpc_tl \l_tmpa_tl
     \tl_set_eq:NN \l__nicematrix_tmpd_tl \l_tmpb_tl
@@ -8107,13 +8131,13 @@
 \cs_new_protected:Npn \__nicematrix_stroke_borders_block:nnn #1 #2 #3
   {
     \dim_set_eq:NN \l__nicematrix_line_width_dim \arrayrulewidth
-    \keys_set_known:nn { NiceMatrix / BlockBorders } { #1 }
+    \keys_set_known:nn { nicematrix / BlockBorders } { #1 }
     \dim_compare:nNnTF \l__nicematrix_rounded_corners_dim > \c_zero_dim
       { \__nicematrix_error:n { borders~forbidden } }
       {
         \tl_clear_new:N \l__nicematrix_borders_tikz_tl
         \keys_set:nV
-          { NiceMatrix / OnlyForTikzInBorders }
+          { nicematrix / OnlyForTikzInBorders }
           \l__nicematrix_borders_clist
         \__nicematrix_cut_on_hyphen:w #2 \q_stop
         \tl_set_eq:NN \l__nicematrix_tmpc_tl \l_tmpa_tl
@@ -8148,7 +8172,7 @@
     \clist_if_in:NnT \l__nicematrix_borders_clist { top }
       { \__nicematrix_stroke_horizontal:n \l__nicematrix_tmpc_tl }
   }
-\keys_define:nn { NiceMatrix / OnlyForTikzInBorders }
+\keys_define:nn { nicematrix / OnlyForTikzInBorders }
   {
     tikz .code:n =
       \cs_if_exist:NTF \tikzpicture
@@ -8199,7 +8223,7 @@
           ( \l_tmpa_dim , \pgf at y ) -- ( \l_tmpb_dim , \pgf at y ) ;
       }
   }
-\keys_define:nn { NiceMatrix / BlockBorders }
+\keys_define:nn { nicematrix / BlockBorders }
   {
     borders .clist_set:N = \l__nicematrix_borders_clist ,
     rounded-corners .dim_set:N = \l__nicematrix_rounded_corners_dim ,
@@ -8212,7 +8236,7 @@
     \__nicematrix_clip_with_rounded_corners:
     \clist_map_inline:nn { #5 }
       {
-        \keys_set_known:nnN { NiceMatrix / SpecialOffset } { ##1 } \l_tmpa_tl
+        \keys_set_known:nnN { nicematrix / SpecialOffset } { ##1 } \l_tmpa_tl
         \use:e { \exp_not:N \path [ \l_tmpa_tl ] }
               (
                 [
@@ -8233,8 +8257,12 @@
     \end { tikzpicture }
   }
 \cs_generate_variant:Nn \__nicematrix_block_tikz:nnnnn { n n n n V }
-\keys_define:nn { NiceMatrix / SpecialOffset }
+\keys_define:nn { nicematrix / SpecialOffset }
   { offset .dim_set:N = \l__nicematrix_offset_dim }
+\cs_new_protected:Npn \__nicematrix_NullBlock:
+  { \__nicematrix_collect_options:n { \__nicematrix_NullBlock_i: } }
+\NewExpandableDocumentCommand \__nicematrix_NullBlock_i: { m m D < > { } +m }
+  { }
 \cs_set_protected:Npn \__nicematrix_renew_matrix:
   {
     \RenewDocumentEnvironment { pmatrix } { }
@@ -8253,7 +8281,7 @@
       { \BNiceMatrix }
       { \endBNiceMatrix }
   }
-\keys_define:nn { NiceMatrix / Auto }
+\keys_define:nn { nicematrix / Auto }
   {
     columns-type .tl_set:N = \l__nicematrix_columns_type_tl ,
     columns-type .value_required:n = true ,
@@ -8264,7 +8292,7 @@
     delimiters / color .value_required:n = true ,
     delimiters / max-width .bool_set:N = \l__nicematrix_delimiters_max_width_bool ,
     delimiters / max-width .default:n = true ,
-    delimiters .code:n = \keys_set:nn { NiceMatrix / delimiters } { #1 } ,
+    delimiters .code:n = \keys_set:nn { nicematrix / delimiters } { #1 } ,
     delimiters .value_required:n = true ,
     rounded-corners .dim_set:N = \l__nicematrix_tab_rounded_corners_dim ,
     rounded-corners .default:n = 4 pt
@@ -8275,7 +8303,7 @@
 \cs_new_protected:Npn \__nicematrix_auto_nice_matrix:nnnnnn #1 #2 #3 #4 #5 #6
   {
     \group_begin:
-    \keys_set_known:nnN { NiceMatrix / Auto } { #6 } \l_tmpa_tl
+    \keys_set_known:nnN { nicematrix / Auto } { #6 } \l_tmpa_tl
     \use:e
       {
         \exp_not:N \begin { NiceArrayWithDelims } { #1 } { #2 }
@@ -8468,7 +8496,7 @@
       { }
     \endpgfpicture
   }
-\keys_define:nn { NiceMatrix / sub-matrix }
+\keys_define:nn { nicematrix / sub-matrix }
   {
     extra-height .dim_set:N = \l__nicematrix_submatrix_extra_height_dim ,
     extra-height .value_required:n = true ,
@@ -8489,14 +8517,14 @@
     hvlines .meta:n = { hlines, vlines } ,
     hvlines .value_forbidden:n = true
   }
-\keys_define:nn { NiceMatrix }
+\keys_define:nn { nicematrix }
   {
-    SubMatrix .inherit:n = NiceMatrix / sub-matrix ,
-    NiceArray / sub-matrix .inherit:n = NiceMatrix / sub-matrix ,
-    pNiceArray / sub-matrix .inherit:n = NiceMatrix / sub-matrix ,
-    NiceMatrixOptions / sub-matrix .inherit:n = NiceMatrix / sub-matrix ,
+    SubMatrix .inherit:n = nicematrix / sub-matrix ,
+    NiceArray / sub-matrix .inherit:n = nicematrix / sub-matrix ,
+    pNiceArray / sub-matrix .inherit:n = nicematrix / sub-matrix ,
+    NiceMatrixOptions / sub-matrix .inherit:n = nicematrix / sub-matrix ,
   }
-\keys_define:nn { NiceMatrix / SubMatrix }
+\keys_define:nn { nicematrix / SubMatrix }
   {
     delimiters / color .tl_set:N = \l__nicematrix_delimiters_color_tl ,
     delimiters / color .value_required:n = true ,
@@ -8522,7 +8550,7 @@
             { \__nicematrix_error:n { Invalid~name } }
         } ,
     name .value_required:n = true ,
-    rules .code:n = \keys_set:nn { NiceMatrix / rules } { #1 } ,
+    rules .code:n = \keys_set:nn { nicematrix / rules } { #1 } ,
     rules .value_required:n = true ,
     code .tl_set:N = \l__nicematrix_code_tl ,
     code .value_required:n = true ,
@@ -8605,7 +8633,7 @@
       { \__nicematrix_error:nn { Construct~too~large } { \SubMatrix } }
       {
         \str_clear_new:N \l__nicematrix_submatrix_name_str
-        \keys_set:nn { NiceMatrix / SubMatrix } { #5 }
+        \keys_set:nn { nicematrix / SubMatrix } { #5 }
         \pgfpicture
         \pgfrememberpicturepositiononpagetrue
         \pgf at relevantforpicturesizefalse
@@ -8884,7 +8912,7 @@
     \peek_remove_spaces:n
       { \__nicematrix_brace:nnnnn { #2 } { #3 } { #4 } { #1 , #5 } { over } }
   }
-\keys_define:nn { NiceMatrix / Brace }
+\keys_define:nn { nicematrix / Brace }
   {
     left-shorten .bool_set:N = \l__nicematrix_brace_left_shorten_bool ,
     left-shorten .default:n = true ,
@@ -8915,7 +8943,7 @@
       }
       {
         \tl_clear:N \l_tmpa_tl
-        \keys_set:nn { NiceMatrix / Brace } { #4 }
+        \keys_set:nn { nicematrix / Brace } { #4 }
         \tl_if_empty:NF \l_tmpa_tl { \color { \l_tmpa_tl } }
         \pgfpicture
         \pgfrememberpicturepositiononpagetrue
@@ -9049,7 +9077,7 @@
 \bool_new:N \l__nicematrix_not_empty_bool
 \bool_new:N \l__nicematrix_empty_bool
 
-\keys_define:nn { NiceMatrix / TikzEveryCell }
+\keys_define:nn { nicematrix / TikzEveryCell }
   {
     not-empty .code:n =
       \bool_lazy_or:nnTF
@@ -9073,7 +9101,7 @@
     \IfPackageLoadedTF { tikz }
       {
         \group_begin:
-        \keys_set:nn { NiceMatrix / TikzEveryCell } { #1 }
+        \keys_set:nn { nicematrix / TikzEveryCell } { #1 }
         \tl_set:Nn \l_tmpa_tl { { #2 } }
         \seq_map_inline:Nn \g__nicematrix_pos_of_blocks_seq
           { \__nicematrix_for_a_block:nnnnn ##1 }
@@ -9314,7 +9342,7 @@
     renew-dots,~and~
     renew-matrix.
   }
-\keys_define:nn { NiceMatrix / Package }
+\keys_define:nn { nicematrix / Package }
   {
     renew-dots .bool_set:N = \l__nicematrix_renew_dots_bool ,
     renew-dots .value_forbidden:n = true ,
@@ -9327,7 +9355,7 @@
     no-test-for-array .default:n = true ,
     unknown .code:n = \__nicematrix_error:n { Unknown~key~for~package }
   }
-\ProcessKeysOptions { NiceMatrix / Package }
+\ProcessKeysOptions { nicematrix / Package }
 \__nicematrix_msg_new:nn { footnote~with~footnotehyper~package }
   {
     You~can't~use~the~option~'footnote'~because~the~package~



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