From 38aaa5ab119dae8bf21971e84c7742b2bfc591a5 Mon Sep 17 00:00:00 2001
From: Norbert Preining <norbert@preining.info>
Date: Thu, 25 Aug 2022 03:01:33 +0000
Subject: CTAN sync 202208250301

---
 macros/latex/contrib/nicematrix/nicematrix.dtx | 980 +++++++++++++++++--------
 1 file changed, 687 insertions(+), 293 deletions(-)

(limited to 'macros/latex/contrib/nicematrix/nicematrix.dtx')

diff --git a/macros/latex/contrib/nicematrix/nicematrix.dtx b/macros/latex/contrib/nicematrix/nicematrix.dtx
index 1f39dbe880..1884212f42 100644
--- a/macros/latex/contrib/nicematrix/nicematrix.dtx
+++ b/macros/latex/contrib/nicematrix/nicematrix.dtx
@@ -1,5 +1,7 @@
 % \iffalse meta-comment
 %
+% This file should be compiled with $xelatex$.
+%
 % Copyright (C) 2018-2022 by F. Pantigny
 % -----------------------------------
 %
@@ -15,8 +17,8 @@
 %
 % \fi
 % \iffalse
-\def\myfileversion{6.12}
-\def\myfiledate{2022/07/28}
+\def\myfileversion{6.13}
+\def\myfiledate{2022/08/24}
 %
 %
 %<*batchfile>
@@ -827,7 +829,8 @@ version 2005/12/01 or later.
 % \bigskip
 % However, the vertical rules are not drawn in the blocks (created by |\Block|:
 % cf.~p.~\pageref{Block}) nor in the corners (created by the key |corner|:
-% cf.~p.~\pageref{corners}). 
+% cf.~p.~\pageref{corners}) nor in the potential exterior rows (created by the
+% keys |first-row| and |last-row|: cf.~p.~\pageref{exterior}).
 %
 % \bigskip
 % If you use \pkg{booktabs} (which provides |\toprule|, |\midrule|,
@@ -974,7 +977,8 @@ version 2005/12/01 or later.
 % 
 % \medskip
 % \textbf{All these tools don't draw the rules in the blocks nor in the
-% empty corners (when the key |corners| is used).}
+% empty corners (when the key |corners| is used), nor in the exterior rows and
+% columns.}
 % \begin{itemize} 
 % \item These blocks are:
 % \begin{itemize}
@@ -985,12 +989,18 @@ version 2005/12/01 or later.
 % \item the blocks implicitely delimited by the continuous dotted lines created
 % by |\Cdots|, |\Vdots|, etc. (cf.~p.~\pageref{Cdots}).
 % \end{itemize}
-% \item The corners are created by the key |corners| explained below (see p.~\pageref{corners}).
+% \item The corners are created by the key |corners| explained below (see
+% p.~\pageref{corners}).
+% \item For the exterior rows and columns, see~p.~\pageref{exterior}.
 % \end{itemize}
 %
 % In particular, this remark explains the difference between the standard
 % command |\hline| and the command |\Hline| provided by \pkg{nicematrix}.
 % 
+% \colorbox{yellow!50}{\textbf{New 6.13}}\enskip The key |\Hline| takes in an
+% optional argument (between square brackets) which is a list of
+% \textsl{key=value} pairs. For the description of those keys, see |custom-line|
+% on p.~\pageref{custom-line}.
 %
 % \subsubsection{The keys hlines and vlines}
 % 
@@ -1214,7 +1224,10 @@ version 2005/12/01 or later.
 % \end{itemize}
 % 
 % \bigskip
-% For the description of the rule itself, there is three possibilities.
+% We will now speak of the keys which describe the rule itself. Those keys may
+% also be used in the (optional) argument of an individual command |\Hline|.
+%
+% There is three possibilities.
 %
 % \begin{itemize}
 % \item \emph{First possibility}\par\nobreak
@@ -1468,7 +1481,7 @@ version 2005/12/01 or later.
 %
 % New commands are available in that |\CodeBefore|: |\cellcolor|,
 % |\rectanglecolor|, |\rowcolor|, |\columncolor|, |\rowcolors|,
-% |\rowlistcolors|, |\chessboardcolors| and |arraycolor|.\footnote{Remark that,
+% |\rowlistcolors|, |\chessboardcolors| and |\arraycolor|.\footnote{Remark that,
 % in the |\CodeBefore|, PGF/Tikz nodes of the form ``\verb+(i-|j)+'' are
 % also available to indicate the position to the potential rules:
 % cf.~p.~\pageref{nodes-i}.}
@@ -1490,31 +1503,30 @@ version 2005/12/01 or later.
 %
 % This command takes in as mandatory arguments a color and a list of cells, each
 % of which with the format $i$-$j$ where $i$ is the number of the row and $j$ the
-% number of the colummn of the cell.
-%
+% number of the colummn of the cell. In fact, despite its name, this command may
+% be used to color a whole row (with the syntax $i$-) or a whole column (with the
+% syntax -$j$).
 %
 % \medskip
 % \begin{scope}
 % \hfuzz=10cm
 % \begin{BVerbatim}[boxwidth=10cm,baseline=c]
-% \begin{NiceTabular}{|c|c|c|}
+% \begin{NiceTabular}{ccc}[hvlines]
 % \CodeBefore
-%   ~emphase#\cellcolor[HTML]{FFFF88}{3-1,2-2,1-3}@
+%   ~emphase#\cellcolor[HTML]{FFFF88}{3-1,2-2,-3}@
 % \Body
-% \hline
-% a & b & c \\ \hline
-% e & f & g \\ \hline
-% h & i & j \\ \hline
+% a & b & c \\ 
+% e & f & g \\ 
+% h & i & j \\ 
 % \end{NiceTabular}
 % \end{BVerbatim}
-% \begin{NiceTabular}{|c|c|c|}
+% \begin{NiceTabular}{ccc}[hvlines]
 % \CodeBefore
-%   \cellcolor[HTML]{FFFF88}{3-1,2-2,1-3}
+%   \cellcolor[HTML]{FFFF88}{3-1,2-2,-3}
 % \Body
-% \hline
-% a & b & c \\ \hline
-% e & f & g \\ \hline
-% h & i & j \\ \hline
+% a & b & c \\ 
+% e & f & g \\ 
+% h & i & j \\ 
 % \end{NiceTabular}
 % \end{scope}
 %
@@ -1527,24 +1539,22 @@ version 2005/12/01 or later.
 % \begin{scope}
 % \hfuzz=10cm
 % \begin{BVerbatim}[boxwidth=10cm,baseline=c]
-% \begin{NiceTabular}{|c|c|c|}
+% \begin{NiceTabular}{ccc}[hvlines]
 % \CodeBefore
 %   ~emphase#\rectanglecolor{blue!15}{2-2}{3-3}@
 % \Body
-% \hline
-% a & b & c \\ \hline
-% e & f & g \\ \hline
-% h & i & j \\ \hline
+% a & b & c \\ 
+% e & f & g \\ 
+% h & i & j \\ 
 % \end{NiceTabular}
 % \end{BVerbatim}
-% \begin{NiceTabular}{|c|c|c|}
+% \begin{NiceTabular}{ccc}[hvlines]
 % \CodeBefore
 %    \rectanglecolor{blue!15}{2-2}{3-3}
 % \Body
-% \hline
-% a & b & c \\ \hline
-% e & f & g \\ \hline
-% h & i & j \\ \hline
+% a & b & c \\ 
+% e & f & g \\ 
+% h & i & j \\ 
 % \end{NiceTabular}
 % \end{scope}
 % 
@@ -1584,7 +1594,7 @@ version 2005/12/01 or later.
 % 
 % \medskip
 % We have used the key |r| which aligns all the columns rightwards (cf.
-% p.~\pageref{key-R}).
+% p.~\pageref{columns-width}).
 %
 %
 % \bigskip
@@ -1638,9 +1648,7 @@ version 2005/12/01 or later.
 % 
 % \bigskip
 % \item The command |\rowcolors| (with a \emph{s}) takes its name from the
-% command |\rowcolors| of \pkg{xcolor}\footnote{The command |\rowcolors| of
-% \pkg{xcolor} is available when \pkg{xcolor} is loaded with the option~|table|.
-% That option also loads the package \pkg{colortbl}.}. The \emph{s} emphasizes
+% command |\rowcolors| of \pkg{colortbl}. The \emph{s} emphasizes
 % the fact that there is \emph{two} colors. This command colors alternately the
 % rows of the tabular with the tow colors (provided in second and third
 % argument), beginning with the row whose number is given in first (mandatory)
@@ -2166,10 +2174,7 @@ version 2005/12/01 or later.
 % are supported by \pkg{nicematrix}. Concerning \pkg{nicematrix}, one of the
 % interests of this type of columns is that, for a cell of a column of type~|V|,
 % the PGF/Tikz node created by \pkg{nicematrix} for the content of that cell has
-% a width adjusted to the content of the cell : cf. p.~\pageref{node-V}. If the
-% content of the cell is empty, the cell will be considered as empty by
-% \pkg{nicematrix} in the construction of the dotted lines and the «empty
-% corners» (that's not the case with a cell of a column |p|, |m| or |b|).
+% a width adjusted to the content of the cell : cf. p.~\pageref{node-V}. 
 %
 % \medskip
 % \begin{Verbatim}
@@ -2797,7 +2802,6 @@ version 2005/12/01 or later.
 % special treatment: cf. p.~\pageref{exterior}.
 % 
 % \bigskip
-% \colorbox{yellow!50}{\textbf{New 6.9}}\enskip 
 % \textbf{The option xdots/radius}\par\nobreak
 %
 % The option |radius| fixes the radius of the dots. The initial value is 0.53~pt.
@@ -2817,7 +2821,6 @@ version 2005/12/01 or later.
 % versions, there was only |xdots/shorten|.
 % 
 % \bigskip
-% \colorbox{yellow!50}{\textbf{New 6.9}}\enskip 
 % \textbf{The option xdots/inter}\par\nobreak
 % 
 % \smallskip
@@ -2926,9 +2929,10 @@ version 2005/12/01 or later.
 % For the legibility of the code, an alternative syntax is provided: it's
 % possible to give the instructions of the |code-after| at the end of the
 % environment, after the keyword |\CodeAfter|. Although |\CodeAfter| is a
-% keyword, it takes in an optional argument (between square brackets). The keys
-% accepted in that optional ragument form a subset of the keys of the command
-% |\WithArrowsOptions|. 
+% keyword, it takes in an optional argument (between square
+% brackets).\footnote{Here are the keys accepted in that argument:
+% |delimiters/color|, |rules| and its sub-keys and |sub-matrix| (linked to the
+% command |\SubMatrix|) and its sub-keys.}
 %
 %
 % \medskip
@@ -3298,8 +3302,9 @@ version 2005/12/01 or later.
 %
 % \smallskip
 % With the key |caption|, the caption, when it is long, is wrapped at the width
-% of the tabular (without the use of the package \pkg{threeparttable} or the
-% package \pkg{floatrow}).
+% of the tabular (excepted the potential exterior columns specified by
+% |first-col| and |last-col|), without the use of the package
+% \pkg{threeparttable} or the package \pkg{floatrow}.
 %
 % \smallskip
 % By default, the caption is composed below the tabular. With the key
@@ -3348,8 +3353,8 @@ version 2005/12/01 or later.
 % gives the ability to specify notes that will be composed at the end of the
 % array with a width of line equal to the width of the array (excepted the
 % potential exterior columns specified by |first-col| and |last-col|). With no
-% surprise, that command is available only in the environments without
-% delimiters, that is to say |{NiceTabular}|, |{NiceArray}| and |{NiceMatrix}|.
+% surprise, that command is available only in the environments 
+% |{NiceTabular}|, |{NiceTabular*}| and |{NiceTabularX}|.
 %
 % In fact, this command is available only if the extension \pkg{enumitem} has
 % been loaded (before or after \pkg{nicematrix}). Indeed, the notes are composed
@@ -3408,6 +3413,11 @@ version 2005/12/01 or later.
 % \item There is a key |tabularnote| which provides a way to insert some text in
 % the zone of the notes before the numbered tabular notes.
 %
+% \colorbox{yellow!50}{\textbf{New 6.13}}\enskip An alternative syntaxe is
+% available with the environment |{TabularNote}|. That environment should be
+% used at the end of the environment |{NiceTabular}| (but \emph{before} a
+% potential instruction |\CodeAfter|).
+%
 % \item If the package \pkg{booktabs} has been loaded (before or after
 % \pkg{nicematrix}), the key |notes/bottomrule| draws a |\bottomrule| of
 % \pkg{booktabs} \emph{after} the notes. 
@@ -3667,27 +3677,25 @@ version 2005/12/01 or later.
 %
 % \subsection{Command \textbackslash ShowCellNames}
 %
-% \colorbox{yellow!50}{\textbf{New 6.9}} The command |\ShowCellNames|,
-% which may be used in the |\CodeBefore| and in the |\CodeAfter| display the name (with the
-% form $i$-$j$) of each cell.
+% The command |\ShowCellNames|, which may be used in the |\CodeBefore| and in
+% the |\CodeAfter| display the name (with the form $i$-$j$) of each cell. When
+% used in the |\CodeAfter|, that command applies a semi-transparent white
+% rectangle to fade the array (caution: some \textsc{pdf} readers don't support
+% transparency). 
 %
 % \begin{BVerbatim}[baseline=c,boxwidth=10.6cm]
 % \begin{NiceTabular}{ccc}[hvlines,cell-space-limits=3pt]
-% \CodeBefore
-%   \ShowCellNames
-% \Body
 %   \Block{2-2}{} &           & test \\
 %                 &           & blabla \\
 %                 & some text & nothing 
+% ~emphase#\CodeAfter \ShowCellNames@
 % \end{NiceTabular}
 % \end{BVerbatim}
 % \begin{NiceTabular}{ccc}[hvlines,cell-space-limits=3pt]
-% \CodeBefore
-%   \ShowCellNames
-% \Body
 %   \Block{2-2}{} &           & test \\
 %                 &           & blabla \\
 %                 & some text & nothing 
+% \CodeAfter \ShowCellNames
 % \end{NiceTabular}
 %
 %
@@ -3700,8 +3708,8 @@ version 2005/12/01 or later.
 % 
 % 
 % \medskip
-% \begin{BVerbatim}[baseline = c, boxwidth = 10.5cm]
-% $\begin{pNiceArray}{~emphase#S@cWc{1cm}c}[nullify-dots,first-row]
+% \begin{BVerbatim}[baseline = c, boxwidth = 11cm]
+% $\begin{pNiceArray}{~emphase#S@cW{c}{1cm}c}[nullify-dots,first-row]
 % {C_1} & \Cdots &  & C_n \\
 % 2.3  & 0 & \Cdots & 0 \\
 % 12.4 & \Vdots & & \Vdots \\
@@ -3709,7 +3717,7 @@ version 2005/12/01 or later.
 % 7.2  & 0 & \Cdots & 0 
 % \end{pNiceArray}$
 % \end{BVerbatim}
-% $\begin{pNiceArray}{ScWc{1cm}c}[nullify-dots,first-row]
+% $\begin{pNiceArray}{ScW{c}{1cm}c}[nullify-dots,first-row]
 % {C_1} & \Cdots &  & C_n \\
 % 2.3  & 0 & \Cdots & 0 \\
 % 12.4 & \Vdots & & \Vdots \\
@@ -3724,7 +3732,7 @@ version 2005/12/01 or later.
 %
 % \subsection{Default column type in \{NiceMatrix\}}
 %
-% \label{key-R}
+% \label{columns-width}
 %
 % \colorbox{yellow!50}{\textbf{New 6.11}}\enskip The environments without
 % preamble (|{NiceMatrix}|, |{pNiceMatrix}|, |{bNiceMatrix}|, etc.) and the
@@ -3748,7 +3756,7 @@ version 2005/12/01 or later.
 % \end{bNiceMatrix}$
 %
 % \medskip
-% The key |columnts-type| is available in |\NiceMatrixOptions| but with the
+% The key |columns-type| is available in |\NiceMatrixOptions| but with the
 % prefix |matrix|, which means that its name is, within |\NiceMatrixOptions| :
 % |matrix/columns-type|. 
 %
@@ -4662,12 +4670,18 @@ version 2005/12/01 or later.
 % \medskip
 % \begin{BVerbatim}[baseline=c,boxwidth=9cm]
 % \begin{NiceTabular}{ccc}[hvlines]
+% \CodeBefore
+%   \arraycolor{gray!10}
+% \Body
 % merlan & requin & cabillaud \\
 % baleine & ~emphase#\crossbox[red]@ & morue \\
 % mante & raie & poule 
 % \end{NiceTabular}
 % \end{BVerbatim}
 % \begin{NiceTabular}{ccc}[hvlines]
+% \CodeBefore
+%   \arraycolor{gray!10}
+% \Body
 % merlan & requin & cabillaud \\
 % baleine & \crossbox[red] & morue \\
 % mante & raie & poule 
@@ -4777,26 +4791,27 @@ version 2005/12/01 or later.
 % the last cell (second row and second column) is empty.
 %
 % \medskip
-% \item Each cell whose TeX ouput has a width equal to zero is empty.
+% \item For the columns of type |p|, |m|, |b|, |V|\footnote{The columns of type
+% |V| are provided by \pkg{varwidth}: cf.~p.~\pageref{varwidth}.} and
+% |X|\footnote{See p.~\pageref{X-columns}}, the cell is empty if (and only if)
+% its content in the TeX code is empty (there is only spaces between the
+% ampersands |&|).
 %
 % \medskip
-% \item A cell containing the command |\NotEmpty| is not empty (and a PGF/Tikz
-% node) is created in that cell.
+% \item For the columns of type |c|, |l|, |r| and |w{...}{...}|, the cell is
+% empty if (and only if) its TeX output has a width equal to zero.
 %
 % \medskip
-% \item A cell with a command |\Hspace| (or |\Hspace*|) is empty. This command
-% |\Hspace| is a command defined by the package \pkg{nicematrix} with the same
-% meaning as |\hspace| except that the cell where it is used is considered as
-% empty. This command can be used to fix the width of some columns of the matrix
-% without interfering with \pkg{nicematrix}.
+% \item A cell containing the command |\NotEmpty| is not empty (and a PGF/Tikz
+% node is created in that cell).
 %
 % \medskip
-% \item A cell of a column of type |p|, |m| or |t| is always considered as not
-% empty. \emph{Caution} : One should not rely upon that point because it may
-% change in a future version of \pkg{nicematrix}. On the other side, a cell of a
-% column of type |V| of \pkg{varwidth} (cf.~p.~\pageref{varwidth}) is empty when
-% its TeX content has a width equal to zero.
-% % \end{itemize}
+% \item A cell with only a command |\Hspace| (or |\Hspace*|) is empty. This
+% command |\Hspace| is a command defined by the package \pkg{nicematrix} with
+% the same meaning as |\hspace| except that the cell where it is used is
+% considered as empty. This command can be used to fix the width of some columns
+% of the matrix without interfering with \pkg{nicematrix}.
+% \end{itemize}
 %
 %
 % \subsection{The option exterior-arraycolsep}
@@ -5843,8 +5858,11 @@ version 2005/12/01 or later.
 % |\c_sys_jobname_str| because, with Overleaf, the value of |\c_sys_jobname_str|
 % is always ``|output|''.
 %    \begin{macrocode}
-\str_if_eq:VnT \c_sys_jobname_str { output } 
-  { \bool_set_true:N \c_@@_messages_for_Overleaf_bool }
+\bool_set:Nn \c_@@_messages_for_Overleaf_bool
+  { 
+       \str_if_eq_p:Vn \c_sys_jobname_str { _region_ }  % for Emacs
+    || \str_if_eq_p:Vn \c_sys_jobname_str { output }   % for Overleaf
+  }
 %    \end{macrocode}
 % 
 % \bigskip 
@@ -5881,6 +5899,7 @@ version 2005/12/01 or later.
 %   \begin{macrocode}
 \cs_generate_variant:Nn \seq_set_split:Nnn { N V n }
 \cs_generate_variant:Nn \keys_define:nn { n x }
+\cs_generate_variant:Nn \str_lowercase:n { V }
 %    \end{macrocode}
 %
 % \medskip
@@ -6265,8 +6284,15 @@ version 2005/12/01 or later.
 %    \end{macrocode}
 % |\@temptokena| is a toks (not supported by the L3 programming layer).
 %    \begin{macrocode}
-                \@temptokena \exp_after:wN 
-                  { \tex_the:D \@temptokena \@@_S: [ ##1 ] } 
+                \tl_if_empty:nTF { ##1 }
+                  {
+                    \@temptokena \exp_after:wN 
+                      { \tex_the:D \@temptokena \@@_S: } 
+                  }
+                  {
+                    \@temptokena \exp_after:wN 
+                      { \tex_the:D \@temptokena \@@_S: [ ##1 ] } 
+                  }
                 \NC@find
               }
           }
@@ -6274,7 +6300,19 @@ version 2005/12/01 or later.
   }
 %    \end{macrocode}
 %
-%
+% \bigskip
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_rescan_for_spanish:N #1
+  { 
+    \tl_set_rescan:Nno 
+      #1 
+      { 
+        \char_set_catcode_other:N >
+        \char_set_catcode_other:N <
+      } 
+      #1 
+  }
+%    \end{macrocode}
 %
 % \bigskip
 % \subsection*{Parameters}
@@ -6441,8 +6479,8 @@ version 2005/12/01 or later.
 % |[cccc]|), this boolean will be set to false.
 % 
 % \bigskip
-% If the user uses |{NiceTabular}| or |{NiceTabular*}|, we will raise the
-% following flag. 
+% If the user uses |{NiceTabular}|, |{NiceTabular*}| or |{NiceTabularX}|, we
+% will raise the following flag. 
 %    \begin{macrocode}
 \bool_new:N \l_@@_NiceTabular_bool
 %    \end{macrocode}
@@ -6577,6 +6615,7 @@ version 2005/12/01 or later.
 % That parameter is \emph{public}.
 %    \begin{macrocode}
 \tl_new:N \g_nicematrix_code_after_tl
+\bool_new:N \l_@@_in_code_after_bool
 %    \end{macrocode}
 % 
 % \bigskip
@@ -6590,10 +6629,16 @@ version 2005/12/01 or later.
 % The following token list has a function similar to
 % |\g_nicematrix_code_after_tl| but it is used internally by \pkg{nicematrix}.
 % In fact, we have to distinguish between |\g_nicematrix_code_after_tl| and
-% |\g_@@_internal_code_after_tl| because we must take care of the order in which
+% |\g_@@_pre_code_after_tl| because we must take care of the order in which
 % instructions stored in that parameters are executed.
 %    \begin{macrocode}
-\tl_new:N \g_@@_internal_code_after_tl
+\tl_new:N \g_@@_pre_code_after_tl
+%    \end{macrocode}
+%
+% \bigskip
+%    \begin{macrocode} 
+\tl_new:N \g_nicematrix_code_before_tl
+\tl_new:N \g_@@_pre_code_before_tl
 %    \end{macrocode}
 % 
 % \bigskip
@@ -6609,8 +6654,8 @@ version 2005/12/01 or later.
 %
 % \bigskip
 % The following sequence will contain the names (without backslash) of the
-% commands created by |custom-line| (commands used by the final user in order to
-% draw horizontal rules).
+% commands created by |custom-line| by the key |command| or |ccommand| (commands
+% used by the final user in order to draw horizontal rules).
 %    \begin{macrocode}
 \seq_new:N \l_@@_custom_line_commands_seq
 %    \end{macrocode}
@@ -6624,8 +6669,8 @@ version 2005/12/01 or later.
 %
 % \bigskip
 % The sum of the weights of all the |X|-columns in the preamble. The weight of a
-% |X|-column is given as optional argument between square brackets. The default
-% value, of course, is $1$.
+% |X|-column is given as an optional argument between square brackets. The
+% default value, of course, is $1$.
 %    \begin{macrocode}
 \int_new:N \g_@@_total_X_weight_int
 %    \end{macrocode}
@@ -6686,6 +6731,7 @@ version 2005/12/01 or later.
 \bool_new:N \l_@@_code_before_bool
 %    \end{macrocode} 
 %
+% 
 % \bigskip
 % The following token list will contain the code inserted in each cell of the
 % current row (this token list will be cleared at the beginning of each row).
@@ -7070,7 +7116,7 @@ version 2005/12/01 or later.
               { \clist_put_right:Nn \l_tmpa_clist { ####1 } }
           }
         \tl_set_eq:NN #1 \l_tmpa_clist
-     }
+      }
   }
 %    \end{macrocode}
 % 
@@ -7129,7 +7175,7 @@ version 2005/12/01 or later.
 % specified by the key |tabularnote| of the environment. The token list
 % |\l_@@_tabularnote_tl| corresponds to the value of that key.
 %    \begin{macrocode}
-\tl_new:N \l_@@_tabularnote_tl
+\tl_new:N \g_@@_tabularnote_tl
 %    \end{macrocode}
 % 
 % \bigskip
@@ -7231,7 +7277,7 @@ version 2005/12/01 or later.
           {
             \bool_if:nT { \cs_if_exist_p:N \@captype || \l_@@_in_env_bool }
               { 
-                \bool_if:nTF { ! \g_@@_NiceArray_bool && \l_@@_in_env_bool }
+                \bool_if:nTF { ! \l_@@_NiceTabular_bool && \l_@@_in_env_bool }
                   { \@@_error:n { tabularnote~forbidden } }
                   {
                     \bool_if:NTF \l_@@_in_caption_bool
@@ -7786,8 +7832,6 @@ version 2005/12/01 or later.
 \keys_define:nn { NiceMatrix / Global }
   {
     custom-line .code:n = \@@_custom_line:n { #1 } ,
-    delimiters .code:n = \keys_set:nn { NiceMatrix / delimiters } { #1 } , 
-    delimiters .value_required:n = true , 
     rules .code:n = \keys_set:nn { NiceMatrix / rules } { #1 } ,
     rules .value_required:n = true ,
     standard-cline .bool_set:N = \l_@@_standard_cline_bool ,
@@ -7881,13 +7925,14 @@ version 2005/12/01 or later.
     corners .clist_set:N = \l_@@_corners_clist ,
     corners .default:n = { NW , SW , NE , SE } ,
     code-before .code:n = 
-     {
-       \tl_if_empty:nF { #1 } 
-         { 
-           \tl_put_right:Nn \l_@@_code_before_tl { #1 }
-           \bool_set_true:N \l_@@_code_before_bool 
-         } 
-     } ,
+      {
+        \tl_if_empty:nF { #1 } 
+          { 
+            \tl_gput_left:Nn \g_@@_pre_code_before_tl { #1 }
+            \bool_set_true:N \l_@@_code_before_bool 
+          } 
+      } ,
+    code-before .value_required:n = true ,
 %    \end{macrocode}
 % \bigskip
 % The options |c|, |t| and |b| of the environment |{NiceArray}| have the same
@@ -7991,10 +8036,10 @@ version 2005/12/01 or later.
     NiceMatrixOptions / xdots .inherit:n = NiceMatrix / xdots ,
     NiceMatrixOptions / rules .inherit:n = NiceMatrix / rules ,
     NiceMatrixOptions / notes .inherit:n = NiceMatrix / notes ,
-    NiceMatrixOptions / delimiters .inherit:n = NiceMatrix / delimiters ,
     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 ,
     NiceMatrix .inherit:n = 
       { 
         NiceMatrix / Global ,
@@ -8002,7 +8047,6 @@ version 2005/12/01 or later.
       } ,
     NiceMatrix / xdots .inherit:n = NiceMatrix / xdots ,
     NiceMatrix / rules .inherit:n = NiceMatrix / rules ,
-    NiceMatrix / delimiters .inherit:n = NiceMatrix / delimiters ,
     NiceTabular .inherit:n = 
       {
         NiceMatrix / Global ,
@@ -8010,7 +8054,7 @@ version 2005/12/01 or later.
       } ,
     NiceTabular / xdots .inherit:n = NiceMatrix / xdots ,
     NiceTabular / rules .inherit:n = NiceMatrix / rules ,
-    NiceTabular / delimiters .inherit:n = NiceMatrix / delimiters ,
+    NiceTabular / notes .inherit:n = NiceMatrix / notes ,
     NiceArray .inherit:n = 
       { 
         NiceMatrix / Global ,
@@ -8018,7 +8062,6 @@ version 2005/12/01 or later.
       } ,
     NiceArray / xdots .inherit:n = NiceMatrix / xdots ,
     NiceArray / rules .inherit:n = NiceMatrix / rules ,
-    NiceArray / delimiters .inherit:n = NiceMatrix / delimiters ,
     pNiceArray .inherit:n = 
       { 
         NiceMatrix / Global ,
@@ -8026,7 +8069,6 @@ version 2005/12/01 or later.
       } ,
     pNiceArray / xdots .inherit:n = NiceMatrix / xdots ,
     pNiceArray / rules .inherit:n = NiceMatrix / rules ,
-    pNiceArray / delimiters .inherit:n = NiceMatrix / delimiters ,
   }
 %    \end{macrocode}
 % 
@@ -8038,6 +8080,12 @@ version 2005/12/01 or later.
 %    \begin{macrocode}
 \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 .value_required:n = true , 
     width .code:n = \dim_set:Nn \l_@@_width_dim { #1 } ,
     width .value_required:n = true ,
     last-col .code:n = 
@@ -8110,8 +8158,9 @@ version 2005/12/01 or later.
 %
 %
 % \bigskip
-% We finalise the definition of the set of keys 
-% ``|NiceMatrix / NiceMatrix|'' with the options specific to |{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 }
@@ -8126,6 +8175,12 @@ version 2005/12/01 or later.
     columns-type .value_required:n = true , 
     l .meta:n = { columns-type = l } ,
     r .meta:n = { columns-type = r } ,
+    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 .value_required:n = true , 
     small .bool_set:N = \l_@@_small_bool ,
     small .value_forbidden:n = true ,
     unknown .code:n = \@@_error:n { Unknown~key~for~NiceMatrix } 
@@ -8152,12 +8207,6 @@ version 2005/12/01 or later.
     last-col .code:n = \tl_if_empty:nF { #1 }
                          { \@@_error:n { last-col~non~empty~for~NiceArray } } 
                        \int_zero:N \l_@@_last_col_int ,
-    notes / para .bool_set:N = \l_@@_notes_para_bool ,
-    notes / para .default:n = true ,
-    notes / bottomrule .bool_set:N = \l_@@_notes_bottomrule_bool ,
-    notes / bottomrule .default:n = true ,
-    tabularnote .tl_set:N = \l_@@_tabularnote_tl ,
-    tabularnote .value_required:n = true ,
     r .code:n = \@@_error:n { r~or~l~with~preamble } ,
     l .code:n = \@@_error:n { r~or~l~with~preamble } ,
     unknown .code:n = \@@_error:n { Unknown~key~for~NiceArray } 
@@ -8174,6 +8223,12 @@ version 2005/12/01 or later.
                          { \@@_error:n { last-col~non~empty~for~NiceArray } } 
                        \int_zero:N \l_@@_last_col_int ,
     first-row .code:n = \int_zero:N \l_@@_first_row_int ,
+    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 .value_required:n = true , 
     small .bool_set:N = \l_@@_small_bool ,
     small .value_forbidden:n = true ,
     r .code:n = \@@_error:n { r~or~l~with~preamble } ,
@@ -8196,11 +8251,8 @@ version 2005/12/01 or later.
     width .code:n = \dim_set:Nn \l_@@_width_dim { #1 } 
                     \bool_set_true:N \l_@@_width_used_bool ,
     width .value_required:n = true ,
-    notes / para .bool_set:N = \l_@@_notes_para_bool ,
-    notes / para .default:n = true ,
-    notes / bottomrule .bool_set:N = \l_@@_notes_bottomrule_bool ,
-    notes / bottomrule .default:n = true ,
-    tabularnote .tl_set:N = \l_@@_tabularnote_tl ,
+    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 , 
     caption .value_required:n = true ,
@@ -8444,10 +8496,13 @@ version 2005/12/01 or later.
 % However, it's very difficult to determine whether a cell is empty. Up to now
 % we use the following technic:
 % \begin{itemize}
+% \item for the columns of type |p|, |m|, |b|, |V| (of \pkg{varwidth}) or |X|,
+% we test whether the cell is syntacticly empty with |\@@_test_if_empty:| and
+% |\@@_test_if_empty_for_S:| 
 % \item if the width of the box |\l_@@_cell_box| (created with the content of
 % the cell) is equal to zero, we consider the cell as empty (however,
-% this is not perfect since the user may have used a |\rlap|, a |\llap| or a
-% |\mathclap| of \pkg{mathtools}.
+% this is not perfect since the user may have used a |\rlap|, |\llap|, |\clap|
+% or a |\mathclap| of \pkg{mathtools}).
 % \item the cells with a command |\Ldots| or |\Cdots|, |\Vdots|, etc.,
 % should also be considered as empty; if |nullify-dots| is in force, there would
 % be nothing to do (in this case the previous commands only write an instruction
@@ -8790,7 +8845,7 @@ version 2005/12/01 or later.
 % For unexplained reason, with XeTeX (and not with the other engines), the
 % environments of \pkg{nicematrix} were all composed in black and do not take
 % into account the color of the encompassing text. As a workaround, you peek the
-% color in force at the beginning of the environment and we will it in each cell.
+% color in force at the beginning of the environment and we will use it in each cell.
 %    \begin{macrocode}
     \xglobal \colorlet { nicematrix } { . } 
 %    \end{macrocode}
@@ -9019,7 +9074,8 @@ version 2005/12/01 or later.
 %
 % \medskip
 %    \begin{macrocode}
-    \tl_gclear_new:N \g_nicematrix_code_before_tl
+    \tl_gclear:N \g_nicematrix_code_before_tl
+    \tl_gclear:N \g_@@_pre_code_before_tl
   }
 %    \end{macrocode}
 % This is the end of |\@@_pre_array_ii:|.
@@ -9112,8 +9168,10 @@ version 2005/12/01 or later.
 % or, maybe, errors). That's why the command |\@@_create_row_node:| will use the
 % following counter to avoid such construction.
 %    \begin{macrocode}
-    \int_gset:Nn \g_@@_last_row_node_int { -1 }
+    \int_gset:Nn \g_@@_last_row_node_int { -2 } 
 %    \end{macrocode}
+% The value $-2$ is important.
+% 
 % 
 % \interitem
 % The code in |\@@_pre_array_ii:| is used only here.
@@ -9176,7 +9234,7 @@ version 2005/12/01 or later.
 %    \begin{macrocode}
 \cs_new_protected_nopar:Npn \@@_CodeBefore_Body:w #1 \Body
   {
-    \tl_put_right:Nn \l_@@_code_before_tl { #1 }
+    \tl_gput_left:Nn \g_@@_pre_code_before_tl { #1 }
     \bool_set_true:N \l_@@_code_before_bool
 %    \end{macrocode}
 % We go on with |\@@_pre_array:| which will (among other) execute the
@@ -9296,21 +9354,37 @@ version 2005/12/01 or later.
     \bool_if:NT \l_@@_NiceTabular_bool \c_math_toggle_token
 %    \end{macrocode}
 %
+% \bigskip
+% The following code is a security for the case the user has used \pkg{babel}
+% with the option \pkg{spanish}: in that case, the characters |<| (de code
+% \textsc{ascci} 60) and |>| are activated and Tikz is not able to solve the
+% problem (even with the Tikz library \pkg{babel}).
+%    \begin{macrocode}
+        \int_compare:nNnT { \char_value_catcode:n { 60 } } = { 13 }
+          { 
+            \@@_rescan_for_spanish:N \g_@@_pre_code_before_tl
+            \@@_rescan_for_spanish:N \l_@@_code_before_tl 
+          }
+%    \end{macrocode}
+% 
 % Here is the |\CodeBefore|. The construction is a bit complicated because
-% |\l_@@_code_before_tl| may begin with keys between square brackets. Moreover,
+% |\g_@@_pre_code_before_tl| may begin with keys between square brackets. Moreover,
 % after the analyze of those keys, we sometimes have to decide to do \emph{not}
-% execute the rest of |\l_@@_code_before_tl| (when it is asked for the creation
-% of cell nodes in the |\CodeBefore|). That's why we begin with a |\q_stop|: it
-% will be used to discard the rest of |\l_@@_code_before_tl|.
+% execute the rest of |\g_@@_pre_code_before_tl| (when it is asked for the creation
+% of cell nodes in the |\CodeBefore|). That's why we use a |\q_stop|: it
+% will be used to discard the rest of |\g_@@_pre_code_before_tl|.
 %    \begin{macrocode}
-    \exp_last_unbraced:NV \@@_CodeBefore_keys: \l_@@_code_before_tl \q_stop 
+    \exp_last_unbraced:NV \@@_CodeBefore_keys: 
+      \g_@@_pre_code_before_tl 
 %    \end{macrocode}
 % Now, all the cells which are specified to be colored by instructions in the
 % |\CodeBefore| will actually be colored. It's a two-stages mechanism because we
 % want to draw all the cells with the same color at the same time to absolutely
 % avoid thin white lines in some \textsc{pdf} viewers.
 %    \begin{macrocode}
-    \@@_actually_color:
+      \@@_actually_color:
+      \l_@@_code_before_tl 
+      \q_stop 
     \bool_if:NT \l_@@_NiceTabular_bool \c_math_toggle_token
     \group_end:
     \bool_if:NT \g_@@_recreate_cell_nodes_bool
@@ -9328,7 +9402,7 @@ version 2005/12/01 or later.
     sub-matrix .value_required:n = true ,
     delimiters / color .tl_set:N = \l_@@_delimiters_color_tl ,
     delimiters / color .value_required:n = true ,
-    unknown .code:n = \@@_error:n { Unknown~key~for~CodeAfter }
+    unknown .code:n = \@@_error:n { Unknown~key~for~CodeBefore }
   }
 %    \end{macrocode}
 %
@@ -9470,6 +9544,7 @@ version 2005/12/01 or later.
   }
 %    \end{macrocode}
 %
+% 
 % \bigskip
 % \subsection*{The environment \{NiceArrayWithDelims\}}
 %
@@ -9523,7 +9598,7 @@ version 2005/12/01 or later.
 % the beginning of arrays done by \pkg{colortbl}. Of course, we restore the
 % value of |\CT@arc@| at the end of our environment.
 %    \begin{macrocode}
-      \cs_gset_eq:NN \@@_old_CT@arc@ \CT@arc@ 
+    \cs_gset_eq:NN \@@_old_CT@arc@ \CT@arc@ 
 %    \end{macrocode}
 %
 % We deactivate Tikz externalization because we will use \textsc{pgf} pictures
@@ -9580,7 +9655,7 @@ version 2005/12/01 or later.
 % Now, we prepare the token list for the instructions that we will have to write
 % on the |aux| file at the end of the environment.
 %    \begin{macrocode}
-     \tl_gclear:N \g_@@_aux_tl
+    \tl_gclear:N \g_@@_aux_tl
 %    \end{macrocode}
 % 
 %    \begin{macrocode}
@@ -9589,6 +9664,8 @@ version 2005/12/01 or later.
         \bool_set_true:N \l_@@_code_before_bool
         \tl_put_right:NV \l_@@_code_before_tl \g_@@_code_before_tl 
       }
+    \tl_if_empty:NF \g_@@_pre_code_before_tl
+      { \bool_set_true:N \l_@@_code_before_bool }
 %    \end{macrocode}
 % 
 % The set of keys is not exactly the same for |{NiceArray}| and for the variants
@@ -9895,7 +9972,7 @@ version 2005/12/01 or later.
 %    \end{macrocode}
 % First, we will do an ``expansion'' of the preamble with the tools of the
 % package \pkg{array} itself. This ``expansion'' will expand all the constructions
-% with |*| and with all column types (defined by the user or by various packages
+% with |*| and all column types (defined by the user or by various packages
 % using |\newcolumntype|).
 %
 % Since we use the tools of \pkg{array} to do this expansion, we will have a
@@ -9981,6 +10058,14 @@ version 2005/12/01 or later.
 %    \begin{macrocode}
         \seq_clear:N \g_@@_cols_vlism_seq 
 %    \end{macrocode}
+%
+% \bigskip
+% The following sequence will store the arguments of the successive |>| in the
+% preamble. 
+%    \begin{macrocode}
+        \tl_gclear_new:N \g_@@_pre_cell_tl
+%    \end{macrocode}
+%
 % The counter |\l_tmpa_int| will count the number of consecutive occurrences
 % of the symbol \verb+|+.
 %    \begin{macrocode}
@@ -10080,7 +10165,7 @@ version 2005/12/01 or later.
         c { \@@_patch_preamble_i:n #1 }
         l { \@@_patch_preamble_i:n #1 }
         r { \@@_patch_preamble_i:n #1 }
-        > { \@@_patch_preamble_ii:nn #1 }
+        > { \@@_patch_preamble_xiv:n }
         ! { \@@_patch_preamble_ii:nn #1 }
         @ { \@@_patch_preamble_ii:nn #1 }
         | { \@@_patch_preamble_iii:n #1 }
@@ -10089,8 +10174,8 @@ version 2005/12/01 or later.
         m { \@@_patch_preamble_iv:n #1 }
         \@@_V:  { \@@_patch_preamble_v:n }
         V { \@@_patch_preamble_v:n } 
-        \@@_w: { \@@_patch_preamble_vi:nnnn { }                          #1 } 
-        \@@_W: { \@@_patch_preamble_vi:nnnn { \cs_set_eq:NN \hss \hfil } #1 } 
+        \@@_w: { \@@_patch_preamble_vi:nnnn { } #1 } 
+        \@@_W: { \@@_patch_preamble_vi:nnnn { \@@_special_W: } #1 } 
         \@@_S: { \@@_patch_preamble_vii:n }
         (  { \@@_patch_preamble_viii:nn #1 }
         [  { \@@_patch_preamble_viii:nn #1 }
@@ -10149,6 +10234,8 @@ version 2005/12/01 or later.
 %    \begin{macrocode}
 \cs_new_protected:Npn \@@_patch_preamble_i:n #1
   { 
+    \tl_gput_right:NV \g_@@_preamble_tl \g_@@_pre_cell_tl 
+    \tl_gclear:N \g_@@_pre_cell_tl
     \tl_gput_right:Nn \g_@@_preamble_tl 
       { 
         > { \@@_cell_begin:w \str_set:Nn \l_@@_hpos_cell_str { #1 } } 
@@ -10194,29 +10281,25 @@ version 2005/12/01 or later.
     \str_if_eq:nnTF { #1 } | 
       { \@@_patch_preamble_iii:n | }
       { 
+        \dim_set:Nn \l_tmpa_dim 
+          { 
+            \arrayrulewidth * \l_tmpa_int 
+            + \doublerulesep * ( \l_tmpa_int - 1) 
+          } 
         \tl_gput_right:Nx \g_@@_preamble_tl
           { 
-            \exp_not:N ! 
-              { 
-                \skip_horizontal:n 
-                  { 
 %    \end{macrocode}
 % Here, the command |\dim_eval:n| is mandatory.
 %    \begin{macrocode}
-                    \dim_eval:n 
-                      { 
-                        \arrayrulewidth * \l_tmpa_int 
-                        + \doublerulesep * ( \l_tmpa_int - 1) 
-                      } 
-                  } 
-              } 
+            \exp_not:N ! { \skip_horizontal:n { \dim_eval:n { \l_tmpa_dim } } }  
           }
-        \tl_gput_right:Nx \g_@@_internal_code_after_tl
+        \tl_gput_right:Nx \g_@@_pre_code_after_tl
           { 
             \@@_vline:n
               { 
                 position = \int_eval:n { \c@jCol + 1 } ,
                 multiplicity = \int_use:N \l_tmpa_int ,
+                total-width = \dim_use:N \l_tmpa_dim  % added 2022-08-06 
               } 
 %    \end{macrocode}
 % We don't have provided value for |start| nor for |end|, which means that the
@@ -10230,16 +10313,23 @@ version 2005/12/01 or later.
       }
   }
 %    \end{macrocode}
-%
+% 
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_patch_preamble_xiv:n #1 
+  { 
+    \tl_gput_right:Nn \g_@@_pre_cell_tl { > { #1 } } 
+    \@@_patch_preamble:n 
+  }
+%    \end{macrocode}
+% 
 %    \begin{macrocode}
 \bool_new:N \l_@@_bar_at_end_of_pream_bool
 %    \end{macrocode}
 % 
-% \bigskip
-% The specifier |p| (and also the specifiers |m| and |b|) have an optional
-% argument between square brackets for a list of \emph{key}-\emph{value} pairs.
-% Here are the corresponding keys. This set of keys will also be used by the |X|
-% columns. 
+% \bigskip 
+% The specifier |p| (and also the specifiers |m|, |b|, |V| and |X|) have an
+% optional argument between square brackets for a list of
+% \emph{key}-\emph{value} pairs. Here are the corresponding keys.
 %    \begin{macrocode}
 \keys_define:nn { WithArrows / p-column }
   {
@@ -10249,8 +10339,32 @@ version 2005/12/01 or later.
     c .value_forbidden:n = true ,
     l .code:n = \str_set:Nn \l_@@_hpos_col_str { l } ,
     l .value_forbidden:n = true ,
-    si .code:n = \str_set:Nn \l_@@_hpos_col_str { si } ,
-    si .value_forbidden:n = true ,
+    R .code:n = 
+      \IfPackageLoadedTF { ragged2e }
+        { \str_set:Nn \l_@@_hpos_col_str { R } } 
+        { 
+          \@@_error_or_warning:n { ragged2e~not~loaded }
+          \str_set:Nn \l_@@_hpos_col_str { r } 
+        } ,
+    R .value_forbidden:n = true ,
+    L .code:n = 
+      \IfPackageLoadedTF { ragged2e }
+        { \str_set:Nn \l_@@_hpos_col_str { L } } 
+        { 
+          \@@_error_or_warning:n { ragged2e~not~loaded }
+          \str_set:Nn \l_@@_hpos_col_str { l } 
+        } ,
+    L .value_forbidden:n = true ,
+    C .code:n = 
+      \IfPackageLoadedTF { ragged2e }
+        { \str_set:Nn \l_@@_hpos_col_str { C } } 
+        { 
+          \@@_error_or_warning:n { ragged2e~not~loaded }
+          \str_set:Nn \l_@@_hpos_col_str { c } 
+        } ,
+    C .value_forbidden:n = true ,
+    S .code:n = \str_set:Nn \l_@@_hpos_col_str { si } ,
+    S .value_forbidden:n = true ,
     p .code:n = \str_set:Nn \l_@@_vpos_col_str { p } ,
     p .value_forbidden:n = true ,
     t .meta:n = p ,
@@ -10300,14 +10414,22 @@ version 2005/12/01 or later.
   {  
 %    \end{macrocode}
 % The possible values of |\l_@@_hpos_col_str| are |j| (for \emph{justified} which is
-% the initial value), |l|, |c| and |r| (when the user has used the corresponding
-% key in the optional argument of the specifier).
+% the initial value), |l|, |c|, |r|, |L|, |C| and |R| (when the user has used
+% the corresponding key in the optional argument of the specifier).
 %    \begin{macrocode}
     \str_set:Nn \l_@@_hpos_col_str { j }
-    \keys_set:nn { WithArrows / p-column } { #1 }
+    \tl_set:Nn \l_tmpa_tl { #1 }
+    \tl_replace_all:Nnn \l_tmpa_tl { \@@_S: } { S }
+    \@@_keys_p_column:V \l_tmpa_tl 
     \@@_patch_preamble_iv_iv:nn { #2 } { minipage }
   }
 %    \end{macrocode}
+%
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_keys_p_column:n #1
+  { \keys_set_known:nnN { WithArrows / p-column } { #1 } \l_tmpa_tl }
+\cs_generate_variant:Nn \@@_keys_p_column:n { V }
+%    \end{macrocode}
 % 
 % \medskip
 % The first argument is the width of the column. The second is the type of
@@ -10331,13 +10453,16 @@ version 2005/12/01 or later.
               { \str_set:Nn \exp_not:N \l_@@_hpos_cell_str { c } }
               { 
                 \str_set:Nn \exp_not:N \l_@@_hpos_cell_str 
-                  { \l_@@_hpos_col_str } 
+                  { \str_lowercase:V \l_@@_hpos_col_str } 
               } 
             \str_case:Vn \l_@@_hpos_col_str 
               {
                 c { \exp_not:N \centering }
                 l { \exp_not:N \raggedright }
                 r { \exp_not:N \raggedleft }
+                C { \exp_not:N \Centering }
+                L { \exp_not:N \RaggedRight }
+                R { \exp_not:N \RaggedLeft }
               }
           }
           { \str_if_eq:VnT \l_@@_vpos_col_str { m } \@@_center_cell_box: }
@@ -10350,7 +10475,10 @@ version 2005/12/01 or later.
                 { j } { c } 
                 { si } { c }
               }
-              { \l_@@_hpos_col_str }
+%    \end{macrocode}
+% We use |\str_lowercase:n| to convert |R| to |r|, etc.
+%    \begin{macrocode}
+              { \str_lowercase:V \l_@@_hpos_col_str }
           }
       }
 %    \end{macrocode}
@@ -10384,11 +10512,16 @@ version 2005/12/01 or later.
 %
 % |#7| is the type of environment: |minipage| or |varwidth|.
 %
-% |#8| is the lettre |c| or |r| or |l| which is the basic specificier of column
+% |#8| is the letter |c| or |r| or |l| which is the basic specificier of column
 % which is used \emph{in fine}.
 %    \begin{macrocode}
 \cs_new_protected:Npn \@@_patch_preamble_iv_v:nnnnnnnn #1 #2 #3 #4 #5 #6 #7 #8
   {
+    \str_if_eq:VnTF \l_@@_hpos_col_str { si }
+      { \tl_gput_right:Nn \g_@@_preamble_tl { > { \@@_test_if_empty_for_S: } } }
+      { \tl_gput_right:Nn \g_@@_preamble_tl { > { \@@_test_if_empty: } } }
+    \tl_gput_right:NV \g_@@_preamble_tl \g_@@_pre_cell_tl 
+    \tl_gclear:N \g_@@_pre_cell_tl
     \tl_gput_right:Nn \g_@@_preamble_tl
       {
         > { 
@@ -10410,7 +10543,7 @@ version 2005/12/01 or later.
               }
 %    \end{macrocode}
 % Now, the potential code for the horizontal position of the content of the cell
-% (|\centering|, |\raggedright|, |\raggedleft| or nothing).
+% (|\centering|, |\raggedright|, |\RaggedRight|, etc.).
 %    \begin{macrocode}
             #3
 %    \end{macrocode}
@@ -10441,6 +10574,33 @@ version 2005/12/01 or later.
 %    \end{macrocode}
 % 
 % \bigskip
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_test_if_empty: \ignorespaces #1 
+  { 
+    \peek_meaning:NT \unskip 
+      {
+        \tl_gput_right:Nn \g_@@_cell_after_hook_tl 
+          { \box_set_wd:Nn \l_@@_cell_box \c_zero_dim }
+      }
+    #1
+  }
+%    \end{macrocode}  
+%
+% 
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_test_if_empty_for_S: #1 
+  {
+    \peek_meaning:NT \__siunitx_table_skip:n
+      {
+        \tl_gput_right:Nn \g_@@_cell_after_hook_tl 
+          { \box_set_wd:Nn \l_@@_cell_box \c_zero_dim }
+      }
+    #1
+  }
+%    \end{macrocode}
+% 
+%
+% \bigskip
 % The following command will be used in |m|-columns in order to center
 % vertically the box. In fact, despite its name, the command does not always
 % center the cell. Indeed, if there is only one row in the cell, it should not
@@ -10490,7 +10650,9 @@ version 2005/12/01 or later.
   {
     \str_set:Nn \l_@@_vpos_col_str { p }
     \str_set:Nn \l_@@_hpos_col_str { j }
-    \keys_set:nn { WithArrows / p-column } { #1 }
+    \tl_set:Nn \l_tmpa_tl { #1 }
+    \tl_replace_all:Nnn \l_tmpa_tl { \@@_S: } { S }
+    \@@_keys_p_column:V \l_tmpa_tl 
     \bool_if:NTF \c_@@_varwidth_loaded_bool
       { \@@_patch_preamble_iv_iv:nn { #2 } { varwidth } }
       { 
@@ -10505,6 +10667,8 @@ version 2005/12/01 or later.
 %    \begin{macrocode}
 \cs_new_protected:Npn \@@_patch_preamble_vi:nnnn #1 #2 #3 #4
   {  
+    \tl_gput_right:NV \g_@@_preamble_tl \g_@@_pre_cell_tl 
+    \tl_gclear:N \g_@@_pre_cell_tl
     \tl_gput_right:Nn \g_@@_preamble_tl
       {
         > {
@@ -10521,9 +10685,9 @@ version 2005/12/01 or later.
         c
         < {
             \@@_cell_end:
-            #1
             \hbox_set_end: 
             \bool_if:NT \g_@@_rotate_bool \@@_rotate_cell_box:
+            #1
             \@@_adjust_size_box:
             \makebox [ #4 ] [ #3 ] { \box_use_drop:N \l_@@_cell_box }   
           }
@@ -10535,7 +10699,19 @@ version 2005/12/01 or later.
     \@@_patch_preamble_xi:n
   }
 %    \end{macrocode}
-%
+% 
+% \bigskip
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_special_W:
+  {
+    \dim_compare:nNnT
+      { \box_wd:N \l_@@_cell_box } 
+      > 
+      \l_@@_col_width_dim
+      { \@@_warning:n { W~warning } }
+  }
+%    \end{macrocode}
+% 
 % \medskip
 % For |\@@_S:|. If the user has used |S[...]|, |S| has been replaced by |\@@_S:|
 % during the first expansion of the preamble (done with the tools of standard
@@ -10564,6 +10740,8 @@ version 2005/12/01 or later.
 %    \begin{macrocode}
     \cs_if_exist:NTF \siunitx_cell_begin:w 
       {
+        \tl_gput_right:NV \g_@@_preamble_tl \g_@@_pre_cell_tl 
+        \tl_gclear:N \g_@@_pre_cell_tl
         \tl_gput_right:Nn \g_@@_preamble_tl 
           {
             > { 
@@ -10619,7 +10797,7 @@ version 2005/12/01 or later.
 %    \begin{macrocode}
 \cs_new_protected:Npn \@@_patch_preamble_viii_i:nn #1 #2
   {
-    \tl_gput_right:Nx \g_@@_internal_code_after_tl
+    \tl_gput_right:Nx \g_@@_pre_code_after_tl
       { \@@_delimiter:nnn #1 { \int_eval:n { \c@jCol + 1 } } \c_true_bool }  
     \tl_if_in:nnTF { ( [ \{ ) ] \} } { #2 }
       {
@@ -10650,7 +10828,7 @@ version 2005/12/01 or later.
               { \tl_gset:Nn \g_@@_right_delim_tl { #1 } }
               {
                 \tl_gput_right:Nn \g_@@_preamble_tl { ! { \enskip } } 
-                \tl_gput_right:Nx \g_@@_internal_code_after_tl
+                \tl_gput_right:Nx \g_@@_pre_code_after_tl
                   { \@@_delimiter:nnn #1 { \int_use:N \c@jCol } \c_false_bool }
                 \@@_patch_preamble:n #2
               }
@@ -10658,7 +10836,7 @@ version 2005/12/01 or later.
           {
             \tl_if_in:nnT { ( [ \{ } { #2 }
               { \tl_gput_right:Nn \g_@@_preamble_tl { ! { \enskip } } }
-            \tl_gput_right:Nx \g_@@_internal_code_after_tl
+            \tl_gput_right:Nx \g_@@_pre_code_after_tl
               { \@@_delimiter:nnn #1 { \int_use:N \c@jCol } \c_false_bool }
             \@@_patch_preamble:n #2
           }
@@ -10674,19 +10852,19 @@ version 2005/12/01 or later.
         \str_if_eq:VnTF \g_@@_right_delim_tl { . }
           {
             \tl_gput_right:Nn \g_@@_preamble_tl { ! { \enskip } } 
-            \tl_gput_right:Nx \g_@@_internal_code_after_tl
+            \tl_gput_right:Nx \g_@@_pre_code_after_tl
               { \@@_delimiter:nnn #1 { \int_use:N \c@jCol } \c_false_bool }
             \tl_gset:Nn \g_@@_right_delim_tl { #2 }
           }
           {
             \tl_gput_right:Nn \g_@@_preamble_tl { ! { \enskip } } 
-            \tl_gput_right:Nx \g_@@_internal_code_after_tl
+            \tl_gput_right:Nx \g_@@_pre_code_after_tl
               { \@@_delimiter:nnn #1 { \int_use:N \c@jCol } \c_false_bool }
             \@@_error:nn { double~closing~delimiter } { #2 } 
           }
       }
       {
-        \tl_gput_right:Nx \g_@@_internal_code_after_tl
+        \tl_gput_right:Nx \g_@@_pre_code_after_tl
           { \@@_delimiter:nnn #1 { \int_use:N \c@jCol } \c_false_bool }
         \@@_error:nn { double~closing~delimiter } { #2 } 
         \@@_patch_preamble:n #3 
@@ -10752,7 +10930,10 @@ version 2005/12/01 or later.
 %    \begin{macrocode}
     \int_zero_new:N \l_@@_weight_int 
     \int_set:Nn \l_@@_weight_int { 1 }
-    \keys_set_known:nnN { WithArrows / p-column } { #1 } \l_tmpa_tl 
+    \tl_set:Nn \l_tmpa_tl { #1 }
+    \tl_replace_all:Nnn \l_tmpa_tl { \@@_S: } { S }
+    \@@_keys_p_column:V \l_tmpa_tl 
+    % \keys_set_known:nnN { WithArrows / p-column } { #1 } \l_tmpa_tl 
     \keys_set:nV { WithArrows / X-column } \l_tmpa_tl
     \int_compare:nNnT \l_@@_weight_int < 0 
       { 
@@ -10842,12 +11023,16 @@ version 2005/12/01 or later.
 %    \begin{macrocode}
 \cs_new_protected:Npn \@@_set_preamble:Nn #1 #2
   {
+    \group_begin:
+    \@@_newcolumntype w [ 2 ] { \@@_w: { ##1 } { ##2 } }
+    \@@_newcolumntype W [ 2 ] { \@@_W: { ##1 } { ##2 } }
     \@temptokena { #2 }
     \@tempswatrue
     \@whilesw \if@tempswa \fi { \@tempswafalse \the \NC@list }
     \tl_gclear:N \g_@@_preamble_tl 
     \exp_after:wN \@@_patch_m_preamble:n \the \@temptokena \q_stop
-    \tl_set_eq:NN #1 \g_@@_preamble_tl 
+    \tl_gset_eq:NN #1 \g_@@_preamble_tl 
+    \group_end:
   }
 %    \end{macrocode}
 % 
@@ -10871,6 +11056,11 @@ version 2005/12/01 or later.
     \cs_set:Npn \@addamp { \if@firstamp \@firstampfalse \else \@preamerr 5 \fi } 
 %    \end{macrocode}
 %
+%    \begin{macrocode}
+    \@@_newcolumntype w [ 2 ] { \@@_w: { ##1 } { ##2 } }
+    \@@_newcolumntype W [ 2 ] { \@@_W: { ##1 } { ##2 } }
+%    \end{macrocode}
+%
 % \medskip
 % You do the expansion of the (small) preamble with the tools of \pkg{array}.
 %    \begin{macrocode}
@@ -10962,8 +11152,8 @@ version 2005/12/01 or later.
         p { \@@_patch_m_preamble_iv:nnn t #1 }
         m { \@@_patch_m_preamble_iv:nnn c #1 }
         b { \@@_patch_m_preamble_iv:nnn b #1 }
-        \@@_w: { \@@_patch_m_preamble_v:nnnn { }                          #1 } 
-        \@@_W: { \@@_patch_m_preamble_v:nnnn { \cs_set_eq:NN \hss \hfil } #1 } 
+        \@@_w: { \@@_patch_m_preamble_v:nnnn { } #1 } 
+        \@@_W: { \@@_patch_m_preamble_v:nnnn { \@@_special_W: } #1 } 
         \q_stop { }
       }
       { \@@_fatal:nn { unknown~column~type } { #1 } }
@@ -11046,6 +11236,7 @@ version 2005/12/01 or later.
     \tl_gput_right:Nn \g_@@_preamble_tl
       {
         > {
+            \dim_set:Nn \l_@@_col_width_dim { #4 }
             \hbox_set:Nw \l_@@_cell_box
             \@@_cell_begin:w
             \str_set:Nn \l_@@_hpos_cell_str { #3 }
@@ -11053,9 +11244,9 @@ version 2005/12/01 or later.
         c
         < {
             \@@_cell_end:
-            #1
             \hbox_set_end: 
             \bool_if:NT \g_@@_rotate_bool \@@_rotate_cell_box:
+            #1
             \@@_adjust_size_box:
             \makebox [ #4 ] [ #3 ] { \box_use_drop:N \l_@@_cell_box }   
           }
@@ -11240,7 +11431,7 @@ version 2005/12/01 or later.
       {
         { ! \seq_if_empty_p:N \g_@@_notes_seq }
         { ! \seq_if_empty_p:N \g_@@_notes_in_caption_seq }
-        { ! \tl_if_empty_p:V \l_@@_tabularnote_tl }
+        { ! \tl_if_empty_p:V \g_@@_tabularnote_tl }
       }
       \@@_insert_tabularnotes:
     \cs_set_eq:NN \tabularnote \@@_tabularnote_error:n
@@ -11308,7 +11499,11 @@ version 2005/12/01 or later.
 %    \begin{macrocode}
     \group_begin:
     \l_@@_notes_code_before_tl
-    \tl_if_empty:NF \l_@@_tabularnote_tl { \l_@@_tabularnote_tl \par }
+    \tl_if_empty:NF \g_@@_tabularnote_tl 
+      { 
+        \g_@@_tabularnote_tl \par 
+        \tl_gclear:N \g_@@_tabularnote_tl
+      }
 %    \end{macrocode}
 % We compose the tabular notes with a list of \pkg{enumitem}. The |\strut| and
 % the |\unskip| are designed to give the ability to put a |\bottomrule| at the
@@ -12234,6 +12429,17 @@ version 2005/12/01 or later.
         \tl_if_empty:NT \l_@@_caption_tl
           { \@@_error_or_warning:n { label~without~caption } }
       }
+    \NewDocumentEnvironment { TabularNote } { b }
+      { 
+        \bool_if:NTF \l_@@_in_code_after_bool
+          { \@@_error_or_warning:n { TabularNote~in~CodeAfter } }
+          {
+            \tl_if_empty:NF \g_@@_taublarnote_tl
+              { \tl_gput_right:Nn \g_@@_tabularnote_tl { \par } }
+            \tl_gput_right:Nn \g_@@_tabularnote_tl { ##1 } 
+          }
+      }
+      { }
     \bool_set_true:N \l_@@_NiceTabular_bool 
     \NiceArray { #2 }
   }
@@ -12489,7 +12695,7 @@ version 2005/12/01 or later.
 %    \end{macrocode}
 %
 % \bigskip
-% Now, the internal |code-after| and then, the |\CodeAfter|.
+% Now, the pre-code-after and then, the |\CodeAfter|.
 %    \begin{macrocode}
     \bool_if:NT \c_@@_tikz_loaded_bool
       {  
@@ -12509,8 +12715,8 @@ version 2005/12/01 or later.
     \cs_set_eq:NN \OverBrace \@@_OverBrace
     \cs_set_eq:NN \ShowCellNames \@@_ShowCellNames
     \cs_set_eq:NN \line \@@_line
-    \g_@@_internal_code_after_tl
-    \tl_gclear:N \g_@@_internal_code_after_tl
+    \g_@@_pre_code_after_tl
+    \tl_gclear:N \g_@@_pre_code_after_tl
 %    \end{macrocode}
 % When |light-syntax| is used, we insert systematically a |\CodeAfter| in the
 % flow. Thus, it's possible to have two instructions |\CodeAfter| and the second
@@ -12527,10 +12733,20 @@ version 2005/12/01 or later.
 %    \end{macrocode}
 %
 % \medskip
+% The following code is a security for the case the user has used \pkg{babel}
+% with the option \pkg{spanish}: in that case, the characters |>| and |<| are
+% activated and Tikz is not able to solve the problem (even with the Tikz
+% library \pkg{babel}).
+%    \begin{macrocode}
+    \int_compare:nNnT { \char_value_catcode:n { 60 } } = { 13 }
+      { \@@_rescan_for_spanish:N \g_nicematrix_code_after_tl }
+%    \end{macrocode}
+% \medskip
 % And here's the |\CodeAfter|. Since the |\CodeAfter| may begin with an
 % ``argument'' between square brackets of the options, we extract and treat that
 % potential ``argument'' with the command |\@@_CodeAfter_keys:|.
 %    \begin{macrocode}
+    \bool_set_true:N \l_@@_in_code_after_bool
     \exp_last_unbraced:NV \@@_CodeAfter_keys: \g_nicematrix_code_after_tl
     \scan_stop: 
     \tl_gclear:N \g_nicematrix_code_after_tl
@@ -12539,27 +12755,28 @@ version 2005/12/01 or later.
 % 
 % 
 % \medskip
-% |\g_nicematrix_code_before_tl| is for instructions in the cells of the array such as
+% |\g_@@_pre_code_before_tl| is for instructions in the cells of the array such as
 % |\rowcolor| and |\cellcolor| (when the key |colortbl-like| is in
 % force). These instructions will be written on the |aux| file to be added to
 % the |code-before| in the next run.
 %    \begin{macrocode}
+    \tl_if_empty:NF \g_@@_pre_code_before_tl
+      {
+        \tl_gput_right:Nx \g_@@_aux_tl
+          {
+            \tl_gset:Nn \exp_not:N \g_@@_pre_code_before_tl 
+              { \exp_not:V \g_@@_pre_code_before_tl }
+          }
+        \tl_gclear:N \g_@@_pre_code_before_tl 
+      }
     \tl_if_empty:NF \g_nicematrix_code_before_tl
       {
-%    \end{macrocode}
-% The command |\rowcolor| in tabular will in fact use |\rectanglecolor| in order
-% to follow the behaviour of |\rowcolor| of \pkg{colortbl}. That's why there may
-% be a command |\rectanglecolor| in |\g_nicematrix_code_before_tl|. In order to avoid an
-% error during the expansion, we define a protected version of |\rectanglecolor|.
-%    \begin{macrocode}
-        \cs_set_protected:Npn \rectanglecolor { }
-        \cs_set_protected:Npn \columncolor { }
         \tl_gput_right:Nx \g_@@_aux_tl
           {
             \tl_gset:Nn \exp_not:N \g_@@_code_before_tl 
               { \exp_not:V \g_nicematrix_code_before_tl }
           }
-        \bool_set_true:N \l_@@_code_before_bool
+        \tl_gclear:N \g_nicematrix_code_before_tl
       }
 %    \end{macrocode}
 %
@@ -14465,6 +14682,7 @@ version 2005/12/01 or later.
 \NewDocumentCommand \@@_RowStyle:n { O { } m }
   { 
     \group_begin:
+    \tl_clear:N \l_tmpa_tl % value of \rowcolor
     \tl_clear:N \l_@@_color_tl
     \int_set:Nn \l_@@_key_nb_rows_int 1
     \keys_set:nn { NiceMatrix / RowStyle } { #1 }
@@ -14477,7 +14695,7 @@ version 2005/12/01 or later.
 % First, the end of the current row (we remind that |\RowStyle| applies to the
 % \emph{end} of the current row). 
 %    \begin{macrocode}
-        \tl_gput_right:Nx \g_nicematrix_code_before_tl 
+        \tl_gput_right:Nx \g_@@_pre_code_before_tl
           { 
 %    \end{macrocode}
 % The command |\@@_exp_color_arg:NV| is \emph{fully expandable}.
@@ -14491,7 +14709,7 @@ version 2005/12/01 or later.
 %    \begin{macrocode}
         \int_compare:nNnT \l_@@_key_nb_rows_int > 1 
           {
-            \tl_gput_right:Nx \g_nicematrix_code_before_tl 
+            \tl_gput_right:Nx \g_@@_pre_code_before_tl
               { 
                 \@@_exp_color_arg:NV \@@_rowcolor \l_tmpa_tl 
                   { 
@@ -14607,8 +14825,15 @@ version 2005/12/01 or later.
 % |\l_tmpa_int| will remain equal to $0$.
 %    \begin{macrocode}
     \int_zero:N \l_tmpa_int
-    \seq_map_indexed_inline:Nn \g_@@_colors_seq
-      { \tl_if_eq:nnT { #1 } { ##2 } { \int_set:Nn \l_tmpa_int { ##1 } } }
+%    \end{macrocode}
+% We don't take into account the colors like |myserie!!+| because those colors
+% are special color from a |\definecolorseries| of \pkg{xcolor}.
+%    \begin{macrocode}
+    \str_if_in:nnF { #1 } { !! }
+      {
+        \seq_map_indexed_inline:Nn \g_@@_colors_seq
+          { \tl_if_eq:nnT { #1 } { ##2 } { \int_set:Nn \l_tmpa_int { ##1 } } }
+      }
     \int_compare:nNnTF \l_tmpa_int = \c_zero_int
 %    \end{macrocode}
 % First, the case where the color is a \emph{new} color (not in the sequence).
@@ -15099,19 +15324,17 @@ version 2005/12/01 or later.
 %    \begin{macrocode}
 \NewDocumentCommand \@@_cellcolor_tabular { O { } m }
   {
-    \peek_remove_spaces:n
-      {
-        \tl_gput_right:Nx \g_nicematrix_code_before_tl
-          { 
+    \tl_gput_right:Nx \g_@@_pre_code_before_tl
+      { 
 %    \end{macrocode}
 % We must not expand the color (|#2|) because the color may contain the token
 % |!| which may be activated by some packages (ex.: \pkg{babel} with the option
 % |french| on latex and pdflatex).
 %    \begin{macrocode}
-            \@@_cellcolor [ #1 ] { \exp_not:n { #2 } } 
-              { \int_use:N \c@iRow - \int_use:N \c@jCol } 
-          }   
-      }
+        \@@_cellcolor [ #1 ] { \exp_not:n { #2 } } 
+          { \int_use:N \c@iRow - \int_use:N \c@jCol } 
+      }   
+     \ignorespaces
   }
 %    \end{macrocode}
 % 
@@ -15121,15 +15344,13 @@ version 2005/12/01 or later.
 %    \begin{macrocode}
 \NewDocumentCommand \@@_rowcolor_tabular { O { } m }
   {
-    \peek_remove_spaces:n
-      {
-        \tl_gput_right:Nx \g_nicematrix_code_before_tl      
-          { 
-            \@@_rectanglecolor [ #1 ] { \exp_not:n { #2 } } 
-              { \int_use:N \c@iRow - \int_use:N \c@jCol } 
-              { \int_use:N \c@iRow - \exp_not:n { \int_use:N \c@jCol } }
-          }
-      }  
+    \tl_gput_right:Nx \g_@@_pre_code_before_tl
+      { 
+        \@@_rectanglecolor [ #1 ] { \exp_not:n { #2 } } 
+          { \int_use:N \c@iRow - \int_use:N \c@jCol } 
+          { \int_use:N \c@iRow - \exp_not:n { \int_use:N \c@jCol } }
+      }
+    \ignorespaces
   }
 %    \end{macrocode}
 %
@@ -15151,7 +15372,7 @@ version 2005/12/01 or later.
 % instructions in the |\CodeBefore| in order to fill color by color (to avoid
 % the thin white lines).
 %    \begin{macrocode}
-        \tl_gput_left:Nx \g_nicematrix_code_before_tl
+        \tl_gput_left:Nx \g_@@_pre_code_before_tl
           { 
             \exp_not:N \columncolor [ #1 ] 
               { \exp_not:n { #2 } } { \int_use:N \c@jCol } 
@@ -15898,7 +16119,7 @@ version 2005/12/01 or later.
   {
     \@@_compute_rule_width:n { multiplicity = #1 , #2 }
     \skip_vertical:n { \l_@@_rule_width_dim }
-    \tl_gput_right:Nx \g_@@_internal_code_after_tl
+    \tl_gput_right:Nx \g_@@_pre_code_after_tl
       { 
         \@@_hline:n 
           { 
@@ -16114,7 +16335,7 @@ version 2005/12/01 or later.
           {
             \@@_compute_rule_width:n { #1 }
             \skip_vertical:n { \l_@@_rule_width_dim }
-            \tl_gput_right:Nx \g_@@_internal_code_after_tl
+            \tl_gput_right:Nx \g_@@_pre_code_after_tl
               { 
                 \@@_hline:n 
                   { 
@@ -16168,7 +16389,7 @@ version 2005/12/01 or later.
     \str_if_in:nnTF { #2 } { - } 
       { \@@_cut_on_hyphen:w #2 \q_stop }  
       { \@@_cut_on_hyphen:w #2 - #2 \q_stop }  
-    \tl_gput_right:Nx \g_@@_internal_code_after_tl
+    \tl_gput_right:Nx \g_@@_pre_code_after_tl
       { 
         \@@_hline:n 
           { 
@@ -16218,7 +16439,7 @@ version 2005/12/01 or later.
 %    \begin{macrocode}
     \tl_gput_right:Nx \g_@@_preamble_tl
       { \exp_not:N ! { \skip_horizontal:n { \dim_use:N \l_@@_rule_width_dim } } }
-    \tl_gput_right:Nx \g_@@_internal_code_after_tl
+    \tl_gput_right:Nx \g_@@_pre_code_after_tl
       { 
         \@@_vline:n 
           { 
@@ -16276,8 +16497,10 @@ version 2005/12/01 or later.
   {
     \bool_lazy_all:nT
       {
-        { \int_compare_p:nNn \l_tmpa_tl > { #1 - 1 } }
-        { \int_compare_p:nNn \l_tmpa_tl < { #3 + 2 } }
+        {
+           ( \int_compare_p:nNn \l_tmpa_tl =  { #1 } )
+           || ( \int_compare_p:nNn \l_tmpa_tl = { #3 + 1 } )
+        }
         { \int_compare_p:nNn \l_tmpb_tl > { #2 - 1 } }
         { \int_compare_p:nNn \l_tmpb_tl < { #4 + 1 } }
       }
@@ -16292,8 +16515,10 @@ version 2005/12/01 or later.
       {
         { \int_compare_p:nNn \l_tmpa_tl > { #1 - 1 } }
         { \int_compare_p:nNn \l_tmpa_tl < { #3 + 1 } }
-        { \int_compare_p:nNn \l_tmpb_tl > { #2 - 1 } }
-        { \int_compare_p:nNn \l_tmpb_tl < { #4 + 2 } }
+        {
+          ( \int_compare_p:nNn \l_tmpb_tl = { #2 } )
+          || ( \int_compare_p:nNn \l_tmpb_tl = { #4 + 1 } )
+        }
       }
       { \bool_gset_false:N \g_tmpa_bool }
   }
@@ -17082,7 +17307,7 @@ version 2005/12/01 or later.
     \int_gincr:N \g_@@_block_box_int
     \cs_set_protected_nopar:Npn \diagbox ##1 ##2
       {
-        \tl_gput_right:Nx \g_@@_internal_code_after_tl    
+        \tl_gput_right:Nx \g_@@_pre_code_after_tl    
           { 
             \@@_actually_diagbox:nnnnnn 
               { \int_use:N \c@iRow }
@@ -17253,16 +17478,16 @@ version 2005/12/01 or later.
       {   
         \l_tmpa_tl
         { \exp_not:n { #3 } }
-        \exp_not:n 
-          { 
-            {
-              \bool_if:NTF \l_@@_NiceTabular_bool
-                { 
-                  \group_begin:
-                  \bool_if:NF \l_@@_respect_arraystretch_bool 
-                    { \cs_set:Npn \arraystretch { 1 } }
+        {
+          \bool_if:NTF \l_@@_NiceTabular_bool
+            { 
+              \group_begin:
+              \bool_if:NF \l_@@_respect_arraystretch_bool 
+                { \cs_set:Npn \exp_not:N \arraystretch { 1 } }
+              \exp_not:n
+                {
                   \dim_zero:N \extrarowheight 
-                  #4
+                  #4  
 %    \end{macrocode}
 % If the box is rotated (the key |\rotate| may be in the previous |#4|), the
 % tabular used for the content of the cell will be constructed with a format
@@ -17271,21 +17496,24 @@ version 2005/12/01 or later.
 % the tabular is the same as the external alignment of the tabular (that is to
 % say the position of the block in its zone of merged cells).
 %    \begin{macrocode}
-                  \bool_if:NT \g_@@_rotate_bool
-                    { \str_set:Nn \l_@@_hpos_block_str c }
-                  \use:x 
-                    { 
-                      \exp_not:N \begin { tabular } [ \l_@@_vpos_of_block_tl ] 
-                      { @ { } \l_@@_hpos_block_str @ { } } 
-                    }
-                    #5 
-                  \end { tabular } 
-                  \group_end:
-                } 
-                { 
-                  \group_begin:
-                  \bool_if:NF \l_@@_respect_arraystretch_bool 
-                    { \cs_set:Npn \arraystretch { 1 } }
+                   \bool_if:NT \g_@@_rotate_bool
+                     { \str_set:Nn \l_@@_hpos_block_str c }
+                   \use:x 
+                     { 
+                       \exp_not:N \begin { tabular } [ \l_@@_vpos_of_block_tl ] 
+                       { @ { } \l_@@_hpos_block_str @ { } } 
+                     }
+                     #5 
+                   \end { tabular } 
+                }
+              \group_end:
+            } 
+            { 
+              \group_begin:
+              \bool_if:NF \l_@@_respect_arraystretch_bool 
+                { \cs_set:Npn \exp_not:N \arraystretch { 1 } }
+              \exp_not:n
+                {
                   \dim_zero:N \extrarowheight 
                   #4 
                   \bool_if:NT \g_@@_rotate_bool
@@ -17299,10 +17527,10 @@ version 2005/12/01 or later.
                     #5 
                   \end { array } 
                   \c_math_toggle_token
-                  \group_end:
                 }
+              \group_end:
             }
-          }
+        }
       }  
   } 
 %    \end{macrocode}
@@ -17367,6 +17595,9 @@ version 2005/12/01 or later.
     v-center .bool_set:N = \l_@@_v_center_bool ,
     v-center .default:n = true , 
     v-center .initial:n = false ,
+    transparent .bool_set:N = \l_@@_transparent_bool ,
+    transparent .default:n = true , 
+    transparent .initial:n = false ,
     unknown .code:n = \@@_error:n { Unknown~key~for~Block }
   }
 %    \end{macrocode}
@@ -17472,8 +17703,11 @@ version 2005/12/01 or later.
               { \int_use:N \l_@@_last_row_int - \int_use:N \l_@@_last_col_int } 
           }  
       }
-    \bool_if:nT
-      { ! \l_@@_vlines_block_bool && ! \l_@@_hlines_block_bool }
+    \bool_if:nF
+      { 
+        \l_@@_transparent_bool 
+       || ( \l_@@_vlines_block_bool && \l_@@_hlines_block_bool ) 
+      }
       {
 %    \end{macrocode}
 % The sequence of the positions of the blocks (excepted the blocks with the key
@@ -17486,9 +17720,6 @@ version 2005/12/01 or later.
 %    \end{macrocode}
 %
 % \bigskip
-% We have a problem here: if the final user has used the keys |hlines| and
-% |color| together, the frame of the block is drawn with the color specified by
-% |color| but the key |hlines| is no-op.
 %    \begin{macrocode}
     \bool_lazy_and:nnT
       { ! (\tl_if_empty_p:N \l_@@_draw_tl) }
@@ -17527,7 +17758,7 @@ version 2005/12/01 or later.
 %    \begin{macrocode}
     \tl_if_empty:NF \l_@@_fill_tl
       {
-        \tl_gput_right:Nx \g_nicematrix_code_before_tl
+        \tl_gput_right:Nx \g_@@_pre_code_before_tl
           { 
             \exp_not:N \roundedrectanglecolor 
               \exp_args:NV \tl_if_head_eq_meaning:nNTF \l_@@_fill_tl [
@@ -17559,7 +17790,7 @@ version 2005/12/01 or later.
 %    \begin{macrocode}
     \cs_set_protected_nopar:Npn \diagbox ##1 ##2
       {
-        \tl_gput_right:Nx \g_@@_internal_code_after_tl    
+        \tl_gput_right:Nx \g_@@_pre_code_after_tl    
           { 
             \@@_actually_diagbox:nnnnnn 
               { #1 } 
@@ -17628,7 +17859,7 @@ version 2005/12/01 or later.
 %    \begin{macrocode}
     \pgfpicture 
       \pgfrememberpicturepositiononpagetrue
-      \pgf@relevantforpicturesizefalse
+      \pgf@relevantforpicturesizefalse 
       \@@_qpoint:n { row - #1 } 
       \dim_set_eq:NN \l_tmpa_dim \pgf@y
       \@@_qpoint:n { col - #2 } 
@@ -17912,10 +18143,9 @@ version 2005/12/01 or later.
           { \pgfpoint \l_@@_tmpc_dim \l_tmpb_dim }
           { \pgfpoint \l_@@_tmpd_dim \l_tmpa_dim }
         \pgfsetlinewidth { 1.1 \l_@@_line_width_dim }
-%    \end{macrocode}
-% We can't use |\pgfusepathqstroke| because of the key |rounded-corners|.
-%    \begin{macrocode}
-        \pgfusepath { stroke }
+        \dim_compare:nNnTF \l_@@_rounded_corners_dim = \c_zero_dim
+          { \pgfusepathqstroke }
+          { \pgfusepath { stroke } }
       }
     \endpgfpicture
     \group_end:
@@ -17960,7 +18190,8 @@ version 2005/12/01 or later.
               { 
                 position = ##1 ,
                 start = \l_@@_tmpc_tl ,
-                end = \int_eval:n { \l_tmpa_tl - 1 }
+                end = \int_eval:n { \l_tmpa_tl - 1 } ,
+                total-width = \dim_use:N \l_@@_line_width_dim % added 2022-08-06
               }
           } 
       }
@@ -17984,7 +18215,7 @@ version 2005/12/01 or later.
                 position = ##1 , 
                 start = \l_@@_tmpd_tl , 
                 end = \int_eval:n { \l_tmpb_tl - 1 } ,
-                total-width = \arrayrulewidth 
+                total-width = \dim_use:N \l_@@_line_width_dim % added 2022-08-06
               } 
           }
       }
@@ -18186,7 +18417,13 @@ version 2005/12/01 or later.
     columns-type .value_required:n = true ,
     l .meta:n = { columns-type = l } ,
     r .meta:n = { columns-type = r } , 
-    c .meta:n = { columns-type = c } 
+    c .meta:n = { columns-type = c } ,
+    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 .value_required:n = true , 
   }
 %    \end{macrocode}
 % 
@@ -18319,7 +18556,7 @@ version 2005/12/01 or later.
 %    \begin{macrocode}
 \cs_new_protected:Npn \@@_diagbox:nn #1 #2
   {
-    \tl_gput_right:Nx \g_@@_internal_code_after_tl    
+    \tl_gput_right:Nx \g_@@_pre_code_after_tl    
       { 
         \@@_actually_diagbox:nnnnnn
           { \int_use:N \c@iRow } 
@@ -18503,7 +18740,7 @@ version 2005/12/01 or later.
 % (and |{pNiceArray}|, |{pNiceMatrix}|, etc.).
 % 
 % A delimiter in the preamble of the array will write an instruction
-% |\@@_delimiter:nnn| in the |\g_@@_internal_code_after_tl| (and also
+% |\@@_delimiter:nnn| in the |\g_@@_pre_code_after_tl| (and also
 % potentially add instructions in the preamble provided to |\array| in order to
 % add space between columns).
 % 
@@ -18657,11 +18894,11 @@ version 2005/12/01 or later.
             }
             { \@@_error:n { Invalid~name } }
         } ,
+    name .value_required:n = true ,
     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 ,
-    name .value_required:n = true ,
     unknown .code:n = \@@_error:n { Unknown~key~for~SubMatrix }
   }
 %    \end{macrocode}
@@ -18672,8 +18909,20 @@ version 2005/12/01 or later.
   {
     \peek_remove_spaces:n
       { 
-        \tl_gput_right:Nn \g_@@_internal_code_after_tl
-          { \SubMatrix { #1 } { #2 } { #3 } { #4 } [ #5 ] }
+        \tl_gput_right:Nx \g_@@_pre_code_after_tl
+          { 
+            \SubMatrix { #1 } { #2 } { #3 } { #4 } 
+              [ 
+                delimiters / color = \l_@@_delimiters_color_tl , 
+                hlines = \l_@@_submatrix_hlines_clist ,
+                vlines = \l_@@_submatrix_vlines_clist ,
+                extra-height = \dim_use:N \l_@@_submatrix_extra_height_dim ,
+                left-xshift = \dim_use:N \l_@@_submatrix_left_xshift_dim ,
+                right-xshift = \dim_use:N \l_@@_submatrix_right_xshift_dim ,
+                slim = \bool_to_str:N \l_@@_submatrix_slim_bool ,
+                #5 
+              ] 
+          }
         \@@_SubMatrix_in_code_before_i { #2 } { #3 }
       }
   }
@@ -18703,7 +18952,7 @@ version 2005/12/01 or later.
 % 
 %
 % \bigskip
-% In the internal |code-after| and in the |\CodeAfter| the following command
+% In the pre-code-after and in the |\CodeAfter| the following command
 % |\@@_SubMatrix| will be linked to |\SubMatrix|. 
 % \begin{itemize}
 % \item |#1| is the left delimiter;
@@ -19248,9 +19497,9 @@ version 2005/12/01 or later.
           { \@@_error:nn { Construct~too~large } { \OverBrace } }
       }
       {
-        \tl_clear:N \l_tmpa_tl % added the 2022-02-25
+        \tl_clear:N \l_tmpa_tl 
         \keys_set:nn { NiceMatrix / Brace } { #4 }
-        \tl_if_empty:NF \l_tmpa_tl { \color { \l_tmpa_tl } } % added the 2022-02-25
+        \tl_if_empty:NF \l_tmpa_tl { \color { \l_tmpa_tl } } 
         \pgfpicture 
         \pgfrememberpicturepositiononpagetrue
         \pgf@relevantforpicturesizefalse
@@ -19397,7 +19646,7 @@ version 2005/12/01 or later.
 % \subsection*{The command \textbackslash ShowCellNames}
 %
 %    \begin{macrocode}
-\NewDocumentCommand \@@_ShowCellNames { }
+\NewDocumentCommand \@@_ShowCellNames_CodeBefore { }
  {
    \dim_zero_new:N \g_@@_tmpc_dim
    \dim_zero_new:N \g_@@_tmpd_dim
@@ -19410,6 +19659,7 @@ version 2005/12/01 or later.
        \@@_qpoint:n { row - \int_eval:n { ##1 + 1 } } 
        \dim_gset:Nn \g_tmpa_dim { ( \l_tmpa_dim + \pgf@y ) / 2 }
        \dim_gset:Nn \g_tmpb_dim { \l_tmpa_dim - \pgf@y }
+       \bool_if:NTF \l_@@_in_code_after_bool
        \end { pgfpicture }
        \int_step_inline:nn \c@jCol
          {
@@ -19421,7 +19671,8 @@ version 2005/12/01 or later.
            \@@_qpoint:n { col - \int_eval:n { ####1 + 1 } } 
            \dim_gset:Nn \g_@@_tmpd_dim { \pgf@x - \g_@@_tmpc_dim }
            \dim_gset_eq:NN \g_@@_tmpe_dim \pgf@x
-           \end { pgfpicture }
+           \endpgfpicture
+           \end { pgfpicture } 
            \fp_set:Nn \l_tmpa_fp 
              { 
                \fp_min:nn
@@ -19454,6 +19705,98 @@ version 2005/12/01 or later.
  }
 %    \end{macrocode}
 %
+%    \begin{macrocode}
+\NewDocumentCommand \@@_ShowCellNames { }
+ {
+   \bool_if:NT \l_@@_in_code_after_bool
+     { 
+       \pgfpicture
+       \pgfrememberpicturepositiononpagetrue
+       \pgf@relevantforpicturesizefalse
+       \pgfpathrectanglecorners
+         { \@@_qpoint:n { 1 } }
+         { \@@_qpoint:n { \int_eval:n { \c@iRow + 1 } } }
+       \pgfsetfillopacity { 0.75 }
+       \pgfsetfillcolor { white }
+       \pgfusepathqfill
+       \endpgfpicture
+     }
+   \dim_zero_new:N \g_@@_tmpc_dim
+   \dim_zero_new:N \g_@@_tmpd_dim
+   \dim_zero_new:N \g_@@_tmpe_dim
+   \int_step_inline:nn \c@iRow
+     {
+       \bool_if:NTF \l_@@_in_code_after_bool
+         {
+           \pgfpicture
+           \pgfrememberpicturepositiononpagetrue
+           \pgf@relevantforpicturesizefalse
+         }
+         { \begin { pgfpicture } }
+       \@@_qpoint:n { row - ##1 } 
+       \dim_set_eq:NN \l_tmpa_dim \pgf@y
+       \@@_qpoint:n { row - \int_eval:n { ##1 + 1 } } 
+       \dim_gset:Nn \g_tmpa_dim { ( \l_tmpa_dim + \pgf@y ) / 2 }
+       \dim_gset:Nn \g_tmpb_dim { \l_tmpa_dim - \pgf@y }
+       \bool_if:NTF \l_@@_in_code_after_bool
+         { \endpgfpicture }
+         { \end { pgfpicture } }
+       \int_step_inline:nn \c@jCol
+         {
+           \hbox_set:Nn \l_tmpa_box 
+             { 
+               \normalfont \Large \sffamily \bfseries
+               \bool_if:NTF \l_@@_in_code_after_bool
+                 { \color { red } }
+                 { \color { red ! 50 } }
+               ##1 - ####1 
+             } 
+           \bool_if:NTF \l_@@_in_code_after_bool
+             {
+               \pgfpicture
+               \pgfrememberpicturepositiononpagetrue
+               \pgf@relevantforpicturesizefalse
+             }
+             { \begin { pgfpicture } }
+           \@@_qpoint:n { col - ####1 } 
+           \dim_gset_eq:NN \g_@@_tmpc_dim \pgf@x
+           \@@_qpoint:n { col - \int_eval:n { ####1 + 1 } } 
+           \dim_gset:Nn \g_@@_tmpd_dim { \pgf@x - \g_@@_tmpc_dim }
+           \dim_gset_eq:NN \g_@@_tmpe_dim \pgf@x
+           \bool_if:NTF \l_@@_in_code_after_bool
+             { \endpgfpicture }
+             { \end { pgfpicture } }
+           \fp_set:Nn \l_tmpa_fp 
+             { 
+               \fp_min:nn
+                 {
+                   \fp_min:nn 
+                     { \dim_ratio:nn { \g_@@_tmpd_dim } { \box_wd:N \l_tmpa_box } }
+                     { \dim_ratio:nn { \g_tmpb_dim } { \box_ht_plus_dp:N \l_tmpa_box } } 
+                 }
+                 { 1.0 }
+             }
+           \box_scale:Nnn \l_tmpa_box { \fp_use:N \l_tmpa_fp } { \fp_use:N \l_tmpa_fp }
+           \pgfpicture
+           \pgfrememberpicturepositiononpagetrue
+           \pgf@relevantforpicturesizefalse
+           \pgftransformshift 
+             { 
+               \pgfpoint 
+                 { 0.5 * ( \g_@@_tmpc_dim + \g_@@_tmpe_dim ) } 
+                 { \dim_use:N \g_tmpa_dim } 
+             } 
+           \pgfnode
+             { rectangle }
+             { center }
+             { \box_use:N \l_tmpa_box }
+             { }
+             { }
+           \endpgfpicture
+         }
+     }
+ }
+%    \end{macrocode}
 % 
 % \bigskip
 % \subsection*{We process the options at package loading}
@@ -19681,7 +20024,7 @@ version 2005/12/01 or later.
 \@@_msg_new:nn { too~much~cols~for~matrix~with~last~col }
   { 
     Too~much~columns.\\
-    In~the~row~\int_eval:n { \c@jCol - 1 },~
+    In~the~row~\int_eval:n { \c@iRow - 1 },~
     you~try~to~use~more~columns~
     than~allowed~by~your~\@@_full_name_env:.\@@_message_hdotsfor:\ 
     The~maximal~number~of~columns~is~\int_eval:n { \l_@@_last_col_int - 1 }~
@@ -19904,6 +20247,15 @@ version 2005/12/01 or later.
   }
 %    \end{macrocode}
 % 
+%
+%    \begin{macrocode}
+\@@_msg_new:nn { W~warning }
+  { 
+    Line~\msg_line_number:.~The~cell~is~too~wide~for~your~column~'W'~
+    (row~\int_use:N \c@iRow). 
+  }
+%    \end{macrocode}
+%
 %    \begin{macrocode}
 \@@_msg_new:nn { Construct~too~large }
   {
@@ -19951,6 +20303,7 @@ version 2005/12/01 or later.
     Incompatible~keys.\\
     You~can't~use~the~keys~'hlines',~'vlines'~or~'hvlines'~for~a~
     '\token_to_str:N \Block'~when~the~key~'color'~or~'draw'~is~used.\\
+    Maybe~it~will~possible~in~future~version.\\
     Your~key~will~be~discarded.
   }
 %    \end{macrocode}
@@ -19967,7 +20320,16 @@ version 2005/12/01 or later.
   }
 %    \end{macrocode}
 %
-%   \begin{macrocode}
+%    \begin{macrocode}
+\@@_msg_new:nn { ragged2e~not~loaded }
+  {
+    You~have~to~load~'ragged2e'~in~order~to~use~the~key~'\l_keys_key_str'~in~
+    your~column~'\l_@@_vpos_col_str'~(or~'X').~The~key~'\str_lowercase:V
+    \l_keys_key_str'~will~be~used~instead. 
+  }
+%    \end{macrocode}
+% 
+%    \begin{macrocode}
 \@@_msg_new:nn { Invalid~name }
   {
     Invalid~name.\\
@@ -20153,7 +20515,7 @@ version 2005/12/01 or later.
   {
     Tikz~not~loaded.\\
     You~can't~use~the~key~'tikz'~for~the~command~'\token_to_str:N
-    \Block'~because~you~have~not~loaded~Tikz.~
+    \Block'~because~you~have~not~loaded~tikz.~
     This~key~will~be~ignored.
   }
 %    \end{macrocode}
@@ -20221,8 +20583,10 @@ version 2005/12/01 or later.
   {
     Forbidden~command.\\
     You~can't~use~the~command~\token_to_str:N\tabularnote\ 
-    ~in~a~\@@_full_name_env:.~This~command~is~available~only~in~
-    \{NiceTabular\},~\{NiceArray\}~and~\{NiceMatrix\}. \\
+    ~here.~This~command~is~available~only~in~
+    \{NiceTabular\},~\{NiceTabular*\}~and~\{NiceTabularX\}~or~in~
+    the~argument~of~a~command~\token_to_str:N \caption\ included~
+    in~an~environment~{table}. \\
     This~command~will~be~ignored.
   }
 %    \end{macrocode}
@@ -20264,7 +20628,7 @@ version 2005/12/01 or later.
   {
     Tikz~not~loaded.\\
     You~have~used~the~key~'tikz'~in~the~definition~of~a~
-    customized~line~(with~'custom-line')~but~Tikz~is~not~loaded.~
+    customized~line~(with~'custom-line')~but~tikz~is~not~loaded.~
     You~can~go~on~but~you~will~have~another~error~if~you~actually~
     use~that~custom~line.
   }
@@ -20275,7 +20639,7 @@ version 2005/12/01 or later.
   {
     Tikz~not~loaded.\\
     You~have~used~the~key~'tikz'~in~a~key~'borders'~(of~a~
-    command~'\token_to_str:N\Block')~but~Tikz~is~not~loaded.~
+    command~'\token_to_str:N\Block')~but~tikz~is~not~loaded.~
     That~key~will~be~ignored.
   }
 %    \end{macrocode}
@@ -20332,6 +20696,16 @@ version 2005/12/01 or later.
 %    \end{macrocode}
 %
 %    \begin{macrocode}
+\@@_msg_new:nn { TabularNote~in~CodeAfter }
+  {
+    Environment~{TabularNote}~forbidden.\\
+    You~must~use~{TabularNote}~at~the~end~of~your~{NiceTabular}~
+    but~*before*~the~\token_to_str:N \CodeAfter.\\
+    This~environment~{TabularNote}~will~be~ignored.
+  }
+%    \end{macrocode}
+% 
+%    \begin{macrocode}
 \@@_msg_new:nn { varwidth~not~loaded }
   {
     varwidth~not~loaded.\\
@@ -20370,7 +20744,7 @@ version 2005/12/01 or later.
   {
     The~available~keys~are~(in~alphabetic~order):~b,~borders,~c,~draw,~fill,~
     hlines,~hvlines,~l,~line-width,~name,~rounded-corners,~r,~respect-arraystretch, 
-    ~t,~tikz~and~vlines.  
+    ~t,~tikz,~transparent~and~vlines.  
   }
 %    \end{macrocode}
 %
@@ -20419,6 +20793,22 @@ version 2005/12/01 or later.
     The~latter~is~for~the~command~\token_to_str:N \line.
   }
 %    \end{macrocode}
+%
+%    \begin{macrocode}
+\@@_msg_new:nnn { Unknown~key~for~CodeBefore }
+  {
+    Unknown~key.\\
+    The~key~'\l_keys_key_str'~is~unknown.\\
+    It~will~be~ignored. \\
+    \c_@@_available_keys_str
+  }
+  {
+    The~available~keys~are~(in~alphabetic~order):~
+    create-cell-nodes,~
+    delimiters/color~and~
+    sub-matrix~(several~subkeys).
+  }
+%    \end{macrocode}
 % 
 %    \begin{macrocode}
 \@@_msg_new:nnn { Unknown~key~for~SubMatrix }
@@ -20532,12 +20922,14 @@ version 2005/12/01 or later.
     right-margin,~
     rules~(with~the~subkeys~'color'~and~'width'),~
     small,~
-    sub-matrix~(several~subkeys),
+    sub-matrix~(several~subkeys),~
     vlines,~
     xdots~(several~subkeys).
   }
 %    \end{macrocode}
 %
+% For `|{NiceArray}|`, the set of keys is the same as for |{NiceMatrix}|
+% excepted that there is no |l| and |r|.
 %    \begin{macrocode}
 \@@_msg_new:nnn { Unknown~key~for~NiceArray }
   { 
@@ -20566,7 +20958,6 @@ version 2005/12/01 or later.
     create-extra-nodes,~
     create-medium-nodes,~
     create-large-nodes,~
-    delimiters/color,~
     extra-left-margin,~
     extra-right-margin,~
     first-col,~
@@ -20578,8 +20969,6 @@ version 2005/12/01 or later.
     left-margin,~
     light-syntax,~
     name,~
-    notes/bottomrule,~
-    notes/para,~
     nullify-dots,~
     renew-dots,~
     respect-arraystretch,~
@@ -20600,7 +20989,7 @@ version 2005/12/01 or later.
 % \medskip
 % 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 also the keys |t|, |c| and~|b|).
+% set of keys, there is no |l| and |r|).
 %    \begin{macrocode}
 \@@_msg_new:nnn { Unknown~key~for~NiceMatrix }
   { 
@@ -20630,7 +21019,6 @@ version 2005/12/01 or later.
     create-extra-nodes,~
     create-medium-nodes,~
     create-large-nodes,~
-    delimiters~(several~subkeys),~
     extra-left-margin,~
     extra-right-margin,~
     first-col,~
@@ -20702,8 +21090,7 @@ version 2005/12/01 or later.
     left-margin,~
     light-syntax,~
     name,~
-    notes/bottomrule,~
-    notes/para,~
+    notes~(several~subkeys),~
     nullify-dots,~
     renew-dots,~
     respect-arraystretch,~
@@ -21349,6 +21736,14 @@ version 2005/12/01 or later.
 % Correction of a bug: it's now possible to use |\OverBrace| and |\UnderBrace|
 % with \pkg{unicode-math} (with XeLaTeX or LuaLaTeX).
 % 
+% \subsection*{Changes between version 6.12 and 6.13}
+%
+% New environment |{TabularNote}| in |{NiceTabular}| with the same semantic as
+% the key |tabularnote| (for legibility).
+%
+% The command |\Hline| nows accepts options (between square brackets).
+%
+%
 % \newpage
 % \tableofcontents
 %
@@ -21356,7 +21751,6 @@ version 2005/12/01 or later.
 % Local Variables:
 % TeX-fold-mode: t
 % TeX-fold-preserve-comments: nil
-% flyspell-mode: nil
 % fill-column: 80
 % End:
 
-- 
cgit v1.2.3

