texlive[56574] Master/texmf-dist: nicematrix (6oct20)

commits+karl at tug.org commits+karl at tug.org
Tue Oct 6 23:58:56 CEST 2020


Revision: 56574
          http://tug.org/svn/texlive?view=revision&revision=56574
Author:   karl
Date:     2020-10-06 23:58:56 +0200 (Tue, 06 Oct 2020)
Log Message:
-----------
nicematrix (6oct20)

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

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

Modified: trunk/Master/texmf-dist/doc/latex/nicematrix/nicematrix-french.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/nicematrix/nicematrix-french.tex	2020-10-06 21:58:35 UTC (rev 56573)
+++ trunk/Master/texmf-dist/doc/latex/nicematrix/nicematrix-french.tex	2020-10-06 21:58:56 UTC (rev 56574)
@@ -32,6 +32,7 @@
 
 \usepackage{multicol}
 \setlength{\columnseprule}{0.4pt}
+\def\LetterAt{@}
 
 \def\interitem{\vspace{7mm plus 2 mm minus 3mm}}          
 \def\emphase{\bgroup\color{RoyalPurple}\let\next=}
@@ -404,9 +405,12 @@
 \section{Les blocs}
 
 \label{Block}
+
+\subsection{Cas général}
+
+
 Dans les environnements de \pkg{nicematrix}, on peut utiliser la commande
-|\Block| pour placer un élément au centre d'un rectangle de cases fusionnées. La
-commande |\Block| ne crée pas d'espace par elle-même.
+|\Block| pour placer un élément au centre d'un rectangle de cases fusionnées. 
 
 La commande |\Block| doit être utilisée dans la case supérieure gauche du bloc
 avec deux arguments. Le premier argument est la taille de ce bloc avec la
@@ -416,11 +420,92 @@
 Dans |{NiceTabular}|, le contenu est composé en mode texte. Dans les autres
 environnements, il est composé en mode mathématique.
 
+
+\interitem
+Voici un exemple d'utilisation de la commande |\Block| dans une matrice mathématique.
+
 \medskip
+\begin{BVerbatim}[baseline=c,boxwidth=10.6cm]
+$\begin{bNiceArray}{ccc|c}[margin]
+~emphase#\Block{3-3}{A}@ & & & 0 \\
+& \hspace*{1cm} & & \Vdots \\
+& & & 0 \\
+\hline
+0 & \Cdots& 0 & 0
+\end{bNiceArray}$
+\end{BVerbatim}
+$\begin{bNiceArray}{ccc|c}[margin]
+\Block{3-3}{A} & & & 0 \\
+& \hspace*{1cm} & & \Vdots \\
+& & & 0 \\
+\hline
+0 & \Cdots& 0 & 0
+\end{bNiceArray}$
+
+\bigskip
+On peut souhaiter agrandir la taille du «$A$» placé dans le bloc de l'exemple
+précédent. Comme il est composé en mode mathématique, on ne peut pas directement
+utiliser une commande comme |\large|, |\Large| ou |\LARGE|. C'est pourquoi une
+option à mettre entre chevrons est proposée par |\Block| pour spécifier du code
+LaTeX qui sera inséré \emph{avant} le début du mode mathématique.
+
+\medskip
+\begin{BVerbatim}[baseline=c,boxwidth=10.6cm]
+$\begin{bNiceArray}{ccc|c}[margin]
+\Block{3-3}~emphase#<\LARGE>@{A} & & & 0 \\
+& \hspace*{1cm} & & \Vdots \\
+& & & 0 \\
+\hline
+0 & \Cdots& 0 & 0
+\end{bNiceArray}$
+\end{BVerbatim}
+$\begin{bNiceArray}{ccc|c}[margin]
+\Block{3-3}<\LARGE>{A} & & & 0 \\
+& \hspace*{1cm} & & \Vdots \\
+& & & 0 \\
+\hline
+0 & \Cdots& 0 & 0
+\end{bNiceArray}$
+
+
+\bigskip
+On peut régler le positionnement horizontal du bloc avec l'une des clés |l|, |c|
+et |r|.
+
+
+\medskip
+\begin{BVerbatim}[baseline=c,boxwidth=10.6cm]
+$\begin{bNiceArray}{ccc|c}[margin]
+\Block~emphase#[r]@{3-3}<\LARGE>{A} & & & 0 \\
+& \hspace*{1cm} & & \Vdots \\
+& & & 0 \\
+\hline
+0 & \Cdots& 0 & 0
+\end{bNiceArray}$
+\end{BVerbatim}
+$\begin{bNiceArray}{ccc|c}[margin]
+\Block[r]{3-3}<\LARGE>{A} & & & 0 \\
+& \hspace*{1cm} & & \Vdots \\
+& & & 0 \\
+\hline
+0 & \Cdots& 0 & 0
+\end{bNiceArray}$
+
+
+\interitem
+\textbf{On doit remarquer que, par défaut, les blocs ne créent pas d'espace}
+(seuls les blocks mono-colonne font exception dans une certaine mesure : voir
+plus bas).
+
+\medskip
+Dans l'exemple suivant, on a dû élargir à la main les colonnes 2 et 3 (avec la
+construction |wc{...}| de \pkg{array}).
+
+\medskip
 \begin{BVerbatim}
-\begin{NiceTabular}{cccc}
+\begin{NiceTabular}~emphase#{cwc{2cm}wc{3cm}c}@
 rose      & tulipe & marguerite & dahlia \\
-violette  & ~emphase#\Block{2-2}{\LARGE\color{blue} fleurs}@  & & souci \\
+violette  & \Block{2-2}{\LARGE\color{blue}De très jolies fleurs}  & & souci \\
 pervenche & & & lys \\
 arum      & iris & jacinthe & muguet 
 \end{NiceTabular}
@@ -429,9 +514,9 @@
 
 \medskip
 \begin{center}
-\begin{NiceTabular}{cccc}
+\begin{NiceTabular}{cwc{2cm}wc{3cm}c}
 rose      & tulipe & marguerite & dahlia \\
-violette  & \Block{2-2}{\LARGE\color{blue} fleurs}  & & souci \\
+violette  & \Block{2-2}{\LARGE\color{blue}De très jolies fleurs}  & & souci \\
 pervenche & & & lys \\
 arum      & iris & jacinthe & muguet 
 \end{NiceTabular}
@@ -438,7 +523,60 @@
 \end{center}
 
 
-\interitem On remarquera que le centrage horizontal du contenu des blocs est
+
+\subsection{Les blocs mono-colonne}
+
+\colorbox{yellow!50}{\textbf{Nouveau 5.4}}\enskip Les blocs mono-colonne ont un
+comportement spécial. 
+\begin{itemize}
+\item La largeur naturelle du contenu de ces blocs est prise en compte pour la
+largeur de la colonne courante.
+
+\item La spécification d'alignement horizontal donnée par le type de
+colonne (|c|, |r| ou |l|) est prise en compte pour le bloc (mais le bloc peut
+avoir sa propre specification d'alignement horizontal).
+
+\item Les spécifications de fontes imposées à une colonne via la construction
+|>{...}| dans le préambule du tableau sont prises en compte pour les
+blocs mono-colonne de cette colonne (ce comportement est assez naturel).
+\end{itemize}
+
+
+\medskip
+\begin{scope}
+\hfuzz=10cm
+\begin{BVerbatim}[baseline=c,boxwidth=12cm]
+\begin{NiceTabular}{~LetterAt{}>{\bfseries}lr~LetterAt{}} \hline
+\Block{2-1}{Pierre}    & 12 \\
+                       & 13 \\ \hline
+Jacques                &  8 \\ \hline
+\Block{3-1}{Stéphanie} & 18 \\
+                       & 17 \\
+                       & 15 \\ \hline
+Amélie                 & 20 \\ \hline
+Henri                  & 14 \\ \hline
+\Block{2-1}{Estelle}   & 15 \\
+                       & 19 \\ \hline
+\end{NiceTabular}
+\end{BVerbatim}
+\begin{NiceTabular}{@{}>{\bfseries}lr@{}} \hline
+\Block{2-1}{Pierre}    & 12 \\
+                       & 13 \\ \hline
+Jacques                &  8 \\ \hline
+\Block{3-1}{Stéphanie} & 18 \\
+                       & 17 \\
+                       & 15 \\ \hline
+Amélie                 & 20 \\ \hline
+Henri                  & 14 \\ \hline
+\Block{2-1}{Estelle}   & 15 \\
+                       & 19 \\ \hline
+\end{NiceTabular}
+\end{scope}
+
+
+\subsection{Petite remarque}
+
+On remarquera que le centrage horizontal du contenu des blocs est
 correct même si un espacement des colonnes a été demandé par une instruction
 comme |!{\qquad}| dans le préambule (ce n'est pas le cas avec |\multicolumn|).
 Dans l'exemple suivant, l'en-tête «Premier groupe» est correctement centré.
@@ -476,57 +614,8 @@
 \end{NiceTabular}
 \end{center}
 
-\interitem
-\colorbox{yellow!50}{\textbf{Nouveau 5.3}}\enskip La commande |\Block| accepte
-les options |l|, |c| et |r| pour le placement horizontal.
 
-\interitem
-On peut aussi utiliser la commande |\Block| dans des matrices mathématiques.
 
-\medskip
-\begin{BVerbatim}[baseline=c,boxwidth=10.6cm]
-$\begin{bNiceArray}{ccc|c}[margin]
-~emphase#\Block{3-3}{A}@ & & & 0 \\
-& \hspace*{1cm} & & \Vdots \\
-& & & 0 \\
-\hline
-0 & \Cdots& 0 & 0
-\end{bNiceArray}$
-\end{BVerbatim}
-$\begin{bNiceArray}{ccc|c}[margin]
-\Block{3-3}{A} & & & 0 \\
-& \hspace*{1cm} & & \Vdots \\
-& & & 0 \\
-\hline
-0 & \Cdots& 0 & 0
-\end{bNiceArray}$
-
-\bigskip
-On peut souhaiter agrandir la taille du «$A$» placé dans le bloc de l'exemple
-précédent. Comme il est composé en mode mathématique, on ne peut pas directement
-utiliser une commande comme |\large|, |\Large| ou |\LARGE|. C'est pourquoi une
-option à mettre entre chevrons est proposée par |\Block| pour spécifier du code
-LaTeX qui sera inséré \emph{avant} le début du mode mathématique.
-
-\medskip
-\begin{BVerbatim}[baseline=c,boxwidth=10.6cm]
-$\begin{bNiceArray}{ccc|c}[margin]
-\Block{3-3}~emphase#<\LARGE>@{A} & & & 0 \\
-& \hspace*{1cm} & & \Vdots \\
-& & & 0 \\
-\hline
-0 & \Cdots& 0 & 0
-\end{bNiceArray}$
-\end{BVerbatim}
-$\begin{bNiceArray}{ccc|c}[margin]
-\Block{3-3}<\LARGE>{A} & & & 0 \\
-& \hspace*{1cm} & & \Vdots \\
-& & & 0 \\
-\hline
-0 & \Cdots& 0 & 0
-\end{bNiceArray}$
-
-
 \section{Les filets horizontaux et verticaux}
 
 Les techniques habituelles pour tracer des filets peuvent être utilisées dans
@@ -1146,31 +1235,30 @@
 \begin{BVerbatim}[baseline=c,boxwidth=9cm]
 \begin{NiceTabular}{lr}[hvlines,code-before =
 ~emphase#\rowcolors{1}{blue!10}{}[respect-blocks]@]
-\Block[l]{2-1}{Pierre} & 12 \\
+\Block{2-1}{Pierre}    & 12 \\
                        & 13 \\
-Jacques & 8 \\
-\hphantom{Stéphanie}
-\Block[l]{3-1}{Stéphanie} & 18 \\
-                          & 17 \\
-                          & 15 \\
-Amélie & 20 \\
-Henri & 14 \\
-\Block[l]{2-1}{Estelle} & 15 \\
-                        & 19
+Jacques                &  8 \\
+\Block{3-1}{Stéphanie} & 18 \\
+                       & 17 \\
+                       & 15 \\
+Amélie                 & 20 \\
+Henri                  & 14 \\
+\Block{2-1}{Estelle}   & 15 \\
+                       & 19
 \end{NiceTabular}
 \end{BVerbatim}
-\begin{NiceTabular}{lr}[hvlines,code-before = \rowcolors{1}{blue!10}{}[respect-blocks],baseline=c]
-\Block[l]{2-1}{Pierre} & 12 \\
-                    & 13 \\
-Jacques & 8 \\
-\hphantom{Stéphanie}
-\Block[l]{3-1}{Stéphanie} & 18 \\
+\begin{NiceTabular}{lr}[hvlines,code-before =
+\rowcolors{1}{blue!10}{}[respect-blocks],baseline=c]
+\Block{2-1}{Pierre}    & 12 \\
+                       & 13 \\
+Jacques                &  8 \\
+\Block{3-1}{Stéphanie} & 18 \\
                        & 17 \\
                        & 15 \\
-Amélie & 20 \\
-Henri & 14 \\
-\Block[l]{2-1}{Estelle} & 15 \\
-                     & 19
+Amélie                 & 20 \\
+Henri                  & 14 \\
+\Block{2-1}{Estelle}   & 15 \\
+                       & 19
 \end{NiceTabular}
 \end{scope}
 
@@ -1271,7 +1359,7 @@
 
 \medskip
 \begin{Verbatim}
-\NewDocumentCommand { \Blue } { } { ~emphase#\columncolor{blue!15}@ }
+\NewDocumentCommand { \Blue } { } {~emphase#\columncolor{blue!15}@}
 \begin{NiceTabular}[colortbl-like]{>{\Blue}c>{\Blue}cc} 
 \toprule
 ~emphase#\rowcolor{red!15}@
@@ -1287,7 +1375,7 @@
 
 
 \begin{center}
-\NewDocumentCommand { \Blue } { } { \columncolor{blue!15} }
+\NewDocumentCommand { \Blue } { } {\columncolor{blue!15}}
 \begin{NiceTabular}[colortbl-like]{>{\Blue}c>{\Blue}cc} 
 \toprule
 \rowcolor{red!15}
@@ -2269,7 +2357,8 @@
 \caption{Utilisation de \texttt{\textbackslash tabularnote}\tabularnote{On peut
     mettre une note dans le titre.}}
 \label{t:tabularnote}
-\begin{NiceTabular}{@{}llc@{}}[notes/bottomrule]
+\begin{NiceTabular}{@{}llc@{}}%
+  [notes/bottomrule, tabularnote = Un peu de texte avant les notes.]
 \toprule
 Nom & Prénom & Durée de vie \\
 \midrule
@@ -2304,6 +2393,10 @@
 \item Si la clé |notes/para| est utilisée, les notes sont composées à la fin du
 tableau en un seul paragraphe.
 
+\item \colorbox{yellow!50}{\textbf{Nouveau 5.4}}\enskip
+Il existe une clé |tabularnote| qui permet d'insérer du texte dans la zone
+des notes avant les notes numérotées.
+
 \item Si l'extension \pkg{booktabs} a été chargée (avant ou après
 \pkg{nicematrix}), la clé |notes/bottomrule| permet de faire tracer un
 |\bottomrule| de \pkg{booktabs} \emph{après} les notes.
@@ -2325,7 +2418,8 @@
     tabularnote}~emphase#\tabularnote{On peut!
      ~emphase# mettre une note dans le titre.}!}
 \label{t:tabularnote}
-\begin{NiceTabular}{@{}llc@{}}[~emphase#notes/bottomrule!]
+\begin{NiceTabular}{@{}llc@{}}%
+  [~emphase#notes/bottomrule!, tabularnote = Un peu de texte avant les notes.]
 \toprule
 Nom & Prénom & Durée de vie \\
 \midrule
@@ -3436,7 +3530,7 @@
 \colorbox{yellow!50}{\textbf{Nouveau 5.3}}\enskip On peut choisir l'instruction
   |\Ddots| qui sera tracée en premier (et qui servira pour tracer les suivantes
   quand la parallélisation est activée) avec la clé |draw-first| :
-  |\Ddots[draw-first]|. 
+  |\Ddots[draw-first]|\rlap{.} 
 
 \subsection{Les cases «vides»}
 

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

Modified: trunk/Master/texmf-dist/source/latex/nicematrix/nicematrix.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/nicematrix/nicematrix.dtx	2020-10-06 21:58:35 UTC (rev 56573)
+++ trunk/Master/texmf-dist/source/latex/nicematrix/nicematrix.dtx	2020-10-06 21:58:56 UTC (rev 56574)
@@ -15,8 +15,8 @@
 %
 % \fi
 % \iffalse
-\def\myfileversion{5.3}
-\def\myfiledate{2020/09/03}
+\def\myfileversion{5.4}
+\def\myfiledate{2020/10/06}
 %
 %
 %<*batchfile>
@@ -68,6 +68,7 @@
 \setlength{\columnseprule}{0.4pt}
 \usepackage{footnotehyper}
 \usepackage{varwidth}
+\def\LetterAt{@}
 \parindent 0pt
 
 \EnableCrossrefs
@@ -444,9 +445,11 @@
 % \section{The blocks}
 % \label{Block}
 %
+% \subsection{General case}
+% 
 % In the environments of \pkg{nicematrix}, it's possible to use the command
 % |\Block| in order to place an element in the center of a rectangle of merged
-% cells of the array. The command |\Block| don't create space by itself.
+% cells of the array.
 %
 % The command |\Block| must be used in the upper leftmost cell of the array with
 % two arguments. The first argument is the size of the block with the syntax
@@ -456,11 +459,93 @@
 % In |{NiceTabular}| the content of the block is composed in text mode. In the
 % other environments, it is composed in math mode.
 %
+%
+% \interitem
+% Here is an example of utilisation of the command |\Block| in mathematical matrices.
+%
 % \medskip
+% \begin{BVerbatim}[baseline=c,boxwidth=10.6cm]
+% $\begin{bNiceArray}{ccc|c}[margin]
+% ~emphase#\Block{3-3}{A}@ & & & 0 \\
+% & \hspace*{1cm} & & \Vdots \\
+% & & & 0 \\
+% \hline
+% 0 & \Cdots& 0 & 0
+% \end{bNiceArray}$
+% \end{BVerbatim}
+% $\begin{bNiceArray}{ccc|c}[margin]
+% \Block{3-3}{A} & & & 0 \\
+% & \hspace*{1cm} & & \Vdots \\
+% & & & 0 \\
+% \hline
+% 0 & \Cdots& 0 & 0
+% \end{bNiceArray}$
+%
+% \bigskip
+% One may wish to raise the size of the ``$A$'' placed in the block of the
+% previous  example. Since this element is composed in math mode, it's not
+% possible to use directly a command like |\large|, |\Large| and |\LARGE|.
+% That's why the command |\Block| provides an option between angle brackets to
+% specify some TeX code which will be inserted before the beginning of the
+% math mode. 
+%
+% \medskip
+% \begin{BVerbatim}[baseline=c,boxwidth=10.6cm]
+% $\begin{bNiceArray}{ccc|c}[margin]
+% \Block{3-3}~emphase#<\Large>@{A} & & & 0 \\
+% & \hspace*{1cm} & & \Vdots \\
+% & & & 0 \\
+% \hline
+% 0 & \Cdots& 0 & 0
+% \end{bNiceArray}$
+% \end{BVerbatim}
+% \begin{scope}
+% $\begin{bNiceArray}{ccc|c}[margin]
+% \Block{3-3}<\Large>{A} & & & 0 \\
+% & \hspace*{1cm} & & \Vdots \\
+% & & & 0 \\
+% \hline
+% 0 & \Cdots& 0 & 0
+% \end{bNiceArray}$
+% \end{scope}
+%
+% \medskip
+% \colorbox{yellow!50}{\textbf{New 5.3}}\enskip It's possible to set the
+% horizontal position of the block with one of the keys |l|, |c| and |r|.
+%
+%
+% \medskip
+% \begin{BVerbatim}[baseline=c,boxwidth=10.6cm]
+% $\begin{bNiceArray}{ccc|c}[margin]
+% \Block~emphase#[r]@{3-3}<\LARGE>{A} & & & 0 \\
+% & \hspace*{1cm} & & \Vdots \\
+% & & & 0 \\
+% \hline
+% 0 & \Cdots& 0 & 0
+% \end{bNiceArray}$
+% \end{BVerbatim}
+% $\begin{bNiceArray}{ccc|c}[margin]
+% \Block[r]{3-3}<\LARGE>{A} & & & 0 \\
+% & \hspace*{1cm} & & \Vdots \\
+% & & & 0 \\
+% \hline
+% 0 & \Cdots& 0 & 0
+% \end{bNiceArray}$
+%
+%
+% \interitem
+% {\bfseries One must remark that, by default, the commands |\Blocks| don't create space}
+% (excepted, to some extent, the mono-column blocks: see below).
+%
+% \medskip
+% In the following example, we have had to enlarge by hand the columns 2 and 3
+% (with the construction |wc{...}| of \pkg{array}).
+% 
+% \medskip
 % \begin{BVerbatim}
-% \begin{NiceTabular}{cccc}
+% \begin{NiceTabular}~emphase#{cwc{2cm}wc{3cm}c}@
 % rose      & tulipe & marguerite & dahlia \\
-% violette  & ~emphase#\Block{2-2}{\LARGE\color{blue} fleurs}@  & & souci \\
+% violette  & \Block{2-2}{\LARGE\color{blue}De très jolies fleurs}  & & souci \\
 % pervenche & & & lys \\
 % arum      & iris & jacinthe & muguet 
 % \end{NiceTabular}
@@ -469,15 +554,68 @@
 %
 % \medskip
 % \begin{center}
-% \begin{NiceTabular}{cccc}
+% \begin{NiceTabular}{cwc{2cm}wc{3cm}c}
 % rose      & tulipe & marguerite & dahlia \\
-% violette  & \Block{2-2}{\LARGE\color{blue} fleurs}  & & souci \\
+% violette  & \Block{2-2}{\LARGE\color{blue}De très jolies fleurs}  & & souci \\
 % pervenche & & & lys \\
 % arum      & iris & jacinthe & muguet 
 % \end{NiceTabular}
 % \end{center}
 %
-% \interitem
+%
+% \subsection{The mono-column blocks}
+%
+% % \colorbox{yellow!50}{\textbf{New 5.4}}\enskip The mono-column blocks have a
+% special behaviour.
+%
+% \begin{itemize}
+% \item The natural width of the contents of these blocks is taken into account
+% for the width of the current column.
+%
+% \item The specification of the horizontal position provided by the type of
+% column (|c|, |r| or |l|) is taken into account for the blocks.
+%
+% \item The specifications of font specified for the column by a construction
+% |>{...}| in the preamble of the array are taken into account for the
+% mono-column blocks of that column (this behaviour is probably expected).
+% \end{itemize}
+%
+%
+% \bigskip
+% \begin{scope}
+% \hfuzz=10cm
+% \begin{BVerbatim}[baseline=c,boxwidth=12cm]
+% \begin{NiceTabular}{~LetterAt{}>{\bfseries}lr~LetterAt{}} \hline
+% \Block{2-1}{John}    & 12 \\
+%                      & 13 \\ \hline
+% Steph                &  8 \\ \hline
+% \Block{3-1}{Sarah}   & 18 \\
+%                      & 17 \\
+%                      & 15 \\ \hline
+% Ashley               & 20 \\ \hline
+% Henry                & 14 \\ \hline
+% \Block{2-1}{Madison} & 15 \\
+%                      & 19 \\ \hline
+% \end{NiceTabular}
+% \end{BVerbatim}
+% \begin{NiceTabular}{@{}>{\bfseries}lr@{}}[baseline=c] \hline
+% \Block{2-1}{John}    & 12 \\
+%                      & 13 \\ \hline
+% Steph                &  8 \\ \hline
+% \Block{3-1}{Sarah}   & 18 \\
+%                      & 17 \\
+%                      & 15 \\ \hline
+% Ashley               & 20 \\ \hline
+% Henry                & 14 \\ \hline
+% \Block{2-1}{Madison} & 15 \\
+%                      & 19 \\ \hline
+% \end{NiceTabular}
+% \end{scope}
+%
+% 
+%
+% \subsection{A small remark}
+%
 % One should remark that the horizontal centering of the contents of the blocks
 % is correct even when an instruction such as |!{\qquad}| has been used in the
 % preamble of the array in order to increase the space between two columns (this
@@ -518,62 +656,7 @@
 % \end{center}
 %
 %
-% \interitem
-% \colorbox{yellow!50}{\textbf{New 5.3}}\enskip 
 %
-% It's possible to use with the command |\Block| the options |l|, |r| and |c|
-% for the horizontal positionning.
-%
-%
-% \interitem
-% It's also possible to use the command |\Block| in mathematical matrices.
-%
-% \medskip
-% \begin{BVerbatim}[baseline=c,boxwidth=10.6cm]
-% $\begin{bNiceArray}{ccc|c}[margin]
-% ~emphase#\Block{3-3}{A}@ & & & 0 \\
-% & \hspace*{1cm} & & \Vdots \\
-% & & & 0 \\
-% \hline
-% 0 & \Cdots& 0 & 0
-% \end{bNiceArray}$
-% \end{BVerbatim}
-% $\begin{bNiceArray}{ccc|c}[margin]
-% \Block{3-3}{A} & & & 0 \\
-% & \hspace*{1cm} & & \Vdots \\
-% & & & 0 \\
-% \hline
-% 0 & \Cdots& 0 & 0
-% \end{bNiceArray}$
-%
-% \bigskip
-% One may wish to raise the size of the ``$A$'' placed in the block of the
-% previous  example. Since this element is composed in math mode, it's not
-% possible to use directly a command like |\large|, |\Large| and |\LARGE|.
-% That's why the command |\Block| provides an option between angle brackets to
-% specify some TeX code which will be inserted before the beginning of the
-% math mode. 
-%
-% \medskip
-% \begin{BVerbatim}[baseline=c,boxwidth=10.6cm]
-% $\begin{bNiceArray}{ccc|c}[margin]
-% \Block{3-3}~emphase#<\Large>@{A} & & & 0 \\
-% & \hspace*{1cm} & & \Vdots \\
-% & & & 0 \\
-% \hline
-% 0 & \Cdots& 0 & 0
-% \end{bNiceArray}$
-% \end{BVerbatim}
-% \begin{scope}
-% $\begin{bNiceArray}{ccc|c}[margin]
-% \Block{3-3}<\Large>{A} & & & 0 \\
-% & \hspace*{1cm} & & \Vdots \\
-% & & & 0 \\
-% \hline
-% 0 & \Cdots& 0 & 0
-% \end{bNiceArray}$
-% \end{scope}
-%
 % \section{The rules}
 % 
 % The usual techniques for the rules may be used in the environments of
@@ -1140,7 +1223,7 @@
 % \begin{scope}
 % \hfuzz=10cm
 % \begin{BVerbatim}[baseline=c,boxwidth=9cm]
-% \begin{NiceTabular}{lr}[hlines,code-before = ~emphase#\rowcolors{1}{blue!10}{}@]
+% \begin{NiceTabular}{~LetterAt{}lr~LetterAt{}}[hlines,code-before = ~emphase#\rowcolors{1}{blue!10}{}@]
 % John & 12 \\
 % Stephen & 8 \\
 % Sarah & 18 \\
@@ -1149,7 +1232,7 @@
 % Madison & 15 
 % \end{NiceTabular}
 % \end{BVerbatim}
-% \begin{NiceTabular}{lr}[hlines,code-before = \rowcolors{1}{blue!10}{},baseline=3]
+% \begin{NiceTabular}{@{}lr@{}}[hlines,code-before = \rowcolors{1}{blue!10}{},baseline=3]
 % John & 12 \\
 % Stephen & 8 \\
 % Sarah & 18 \\
@@ -1162,7 +1245,7 @@
 % \bigskip
 % \colorbox{yellow!30}{\textbf{New 5.2}}\enskip There is a key |respect-blocks|
 % for the instruction |\rowcolors|. With that key, the ``rows'' alternately
-% colored may extend over several row if they have to incorporate blocks.
+% colored may extend over several rows if they have to incorporate blocks.
 %
 % \medskip
 % \begin{scope}
@@ -1170,28 +1253,29 @@
 % \begin{BVerbatim}[baseline=c,boxwidth=9cm]
 % \begin{NiceTabular}{lr}[hvlines,code-before =
 % ~emphase#\rowcolors{1}{blue!10}{}[respect-blocks]@]
-% \Block[l]{2-1}{John} & 12 \\
-%                     & 13 \\
-% Stephen & 8 \\
-% \Block[l]{3-1}{Sarah} & 18 \\
-%                        & 17 \\
-%                        & 15 \\
-% Ashley & 20 \\
-% Henry & 14 \\
-% \Block[l]{2-1}{Madison} & 15 \\
+% \Block{2-1}{John}    & 12 \\
+%                      & 13 \\
+% Steph                &  8 \\
+% \Block{3-1}{Sarah}   & 18 \\
+%                      & 17 \\
+%                      & 15 \\
+% Ashley               & 20 \\
+% Henry                & 14 \\
+% \Block{2-1}{Madison} & 15 \\
 %                      & 19
 % \end{NiceTabular}
 % \end{BVerbatim}
-% \begin{NiceTabular}{lr}[hvlines,code-before = \rowcolors{1}{blue!10}{}[respect-blocks],baseline=c]
-% \Block[l]{2-1}{John} & 12 \\
-%                     & 13 \\
-% Stephen & 8 \\
-% \Block[l]{3-1}{Sarah} & 18 \\
-%                        & 17 \\
-%                        & 15 \\
-% Ashley & 20 \\
-% Henry & 14 \\
-% \Block[l]{2-1}{Madison} & 15 \\
+% \begin{NiceTabular}{lr}[hvlines,code-before =
+% \rowcolors{1}{blue!10}{}[respect-blocks],baseline=c]
+% \Block{2-1}{John}    & 12 \\
+%                      & 13 \\
+% Steph                &  8 \\
+% \Block{3-1}{Sarah}   & 18 \\
+%                      & 17 \\
+%                      & 15 \\
+% Ashley               & 20 \\
+% Henry                & 14 \\
+% \Block{2-1}{Madison} & 15 \\
 %                      & 19
 % \end{NiceTabular}
 % \end{scope}
@@ -2274,6 +2358,10 @@
 % \item If the key |notes/para| is used, the notes are composed at the end of
 % the array in a single paragraph (as with the key |para| of \pkg{threeparttable}).
 %
+% \item \colorbox{yellow!50}{\textbf{New 5.4}}\enskip There is a key
+% |tabularnote| which provides a way to insert some texte in the zone of the
+% notes before the numbered tabular notes.
+%
 % \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. 
@@ -2299,7 +2387,8 @@
 % \caption{Use of \texttt{\textbackslash tabularnote}~emphase#\tabularnote{It's possible!
 %     ~emphase#to put a note in the caption.}}!
 % \label{t:tabularnote}
-% \begin{NiceTabular}{@{}llc@{}[~emphase#notes/bottomrule!]
+% \begin{NiceTabular}{@{}llc@{}
+% [~emphase#notes/bottomrule!, tabularnote = Some text before the notes.]
 % \toprule
 % Last name & First name & Length of life \\
 % \midrule
@@ -2323,7 +2412,8 @@
 % \caption{Use of \texttt{\textbackslash tabularnote}\tabularnote{It's possible
 %     to put a note in the caption.}}
 % \label{t:tabularnote}
-% \begin{NiceTabular}{@{}llc@{}}[notes/bottomrule]
+% \begin{NiceTabular}{@{}llc@{}}[notes/bottomrule, 
+%    tabularnote = Some text before the notes.] 
 % \toprule
 % Last name & First name & Length of life \\
 % \midrule
@@ -4341,6 +4431,21 @@
 \RequirePackage { xparse }
 %    \end{macrocode}
 %
+%    \begin{macrocode}
+\cs_set_eq:NN \box_use_drop_i:N \box_use_drop:N 
+\cs_set_eq:NN \box_use_drop_ii:N \box_use_drop:N 
+\cs_set_eq:NN \box_use_drop_iii:N \box_use_drop:N 
+\cs_set_eq:NN \box_use_drop_iv:N \box_use_drop:N 
+\cs_set_eq:NN \box_use_drop_v:N \box_use_drop:N 
+\cs_set_eq:NN \box_use_drop_vi:N \box_use_drop:N 
+\cs_set_eq:NN \box_use_drop_vii:N \box_use_drop:N 
+\cs_set_eq:NN \box_use_drop_viii:N \box_use_drop:N 
+\cs_set_eq:NN \box_use_drop_ix:N \box_use_drop:N 
+\cs_set_eq:NN \box_use_drop_x:N \box_use_drop:N 
+\cs_set_eq:NN \box_use_drop_xi:N \box_use_drop:N 
+\cs_set_eq:NN \box_use_drop_xii:N \box_use_drop:N 
+%    \end{macrocode}
+%
 % \bigskip
 %    \begin{macrocode}
 \cs_new_protected:Npn \@@_error:n { \msg_error:nn { nicematrix } }
@@ -4621,11 +4726,6 @@
 %    \end{macrocode}
 %
 % 
-% \bigskip
-%    \begin{macrocode}
-\cs_new:Npn \@@_tab_or_array_colsep:
-  { \bool_if:NTF \l_@@_NiceTabular_bool \tabcolsep \arraycolsep }
-%    \end{macrocode}
 %
 % \bigskip
 % \textbf{The column S of siunitx}\par\nobreak
@@ -4856,6 +4956,24 @@
 %    \end{macrocode}
 %
 % \bigskip
+% The following token list will contain the type of the current cell (|l|, |c|
+% or |r|). It will be used by the blocks.
+%    \begin{macrocode}
+\tl_new:N \l_@@_cell_type_tl
+\tl_set:Nn \l_@@_cell_type_tl { c }
+%    \end{macrocode}
+% 
+% \bigskip
+% When there is a mono-column block (created by the command |\Block|), we want
+% to take into account the width of that block for the width of the column.
+% That's why we compute the width of that block in the |\g_@@_blocks_width_dim|
+% and, after the construction of the box |\l_@@_cell_box|, we change the width
+% of that box to take into account the length |\g_@@_blocks_width_dim|.
+%    \begin{macrocode}
+\dim_new:N \g_@@_blocks_width_dim
+%    \end{macrocode}
+%
+% \bigskip
 % The sequence |\g_@@_names_seq| will be the list of all the names of
 % environments used (via the option |name|) in the document: two environments
 % must not have the same name. However, it's possible to use the option
@@ -4901,7 +5019,13 @@
 %    \end{macrocode}
 % 
 % \bigskip
+% The following boolean will be raised when the command |\rotate| is used.
 %    \begin{macrocode}
+\bool_new:N \g_@@_rotate_bool
+%    \end{macrocode}
+%
+% \bigskip
+%    \begin{macrocode}
 \cs_new_protected:Npn \@@_test_if_math_mode:
   { 
     \if_mode_math: \else:
@@ -5106,7 +5230,7 @@
 \tl_new:N \l_@@_pos_of_block_tl
 \tl_set:Nn \l_@@_pos_of_block_tl { c }
 %    \end{macrocode}
-% 
+%
 % \medskip
 % Used when the key |draw-first| is used for |\Ddots| or |\Iddots|.
 %    \begin{macrocode}
@@ -5113,6 +5237,13 @@
 \bool_new:N \l_@@_draw_first_bool
 %    \end{macrocode}
 % 
+% \medskip
+% The blocks which use the key |-| will store their content in a box. These
+% boxes are numbered with the following counter.
+%    \begin{macrocode}
+\int_new:N \g_@@_block_box_int
+%    \end{macrocode}
+% 
 % \bigskip
 % \textbf{Variables for the exterior rows and columns}\par\nobreak
 %
@@ -5224,6 +5355,14 @@
 %    \end{macrocode}
 %
 % \bigskip
+% However, before the actual tabular notes, it's possible to put a text
+% 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
+%    \end{macrocode}
+% 
+% \bigskip
 % The following counter will be used to count the number of successive tabular
 % notes such as in  
 % |\tabularnote{Note 1}\tabularnote{Note 2}\tabularnote{Note 3}|. 
@@ -5286,7 +5425,11 @@
         \newlist { tabularnotes } { enumerate } { 1 }
         \setlist [ tabularnotes ]
           {
-            noitemsep , leftmargin = * , align = left , labelsep = 0pt ,
+            topsep = 0pt ,
+            noitemsep , 
+            leftmargin = * , 
+            align = left , 
+            labelsep = 0pt ,
             label = 
               \@@_notes_label_in_list:n { \@@_notes_style:n { tabularnotesi } } , 
           }
@@ -5331,7 +5474,7 @@
 % We expand the content of the note at the point of use of
 % |\tabularnote| as does |\footnote|.
 %    \begin{macrocode}
-                \seq_gput_right:Nx \g_@@_tabularnotes_seq { #1 } 
+                \seq_gput_right:Nn \g_@@_tabularnotes_seq { #1 } 
                 \peek_meaning:NF \tabularnote
                   {
 %    \end{macrocode}
@@ -6087,6 +6230,8 @@
     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 ,
     unknown .code:n = \@@_error:n { Unknown~option~for~NiceArray } 
   }
 %    \end{macrocode}
@@ -6118,6 +6263,8 @@
     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 ,
     last-col .code:n = \tl_if_empty:nF {#1}
                          { \@@_error:n { last-col~non~empty~for~NiceArray } } 
                        \int_zero:N \l_@@_last_col_int ,
@@ -6239,6 +6386,34 @@
   }
 %    \end{macrocode}
 % 
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_rotate_cell_box:
+  {
+    \box_rotate:Nn \l_@@_cell_box { 90 } 
+    \int_compare:nNnT \c at iRow = \l_@@_last_row_int 
+      { 
+        \vbox_set_top:Nn \l_@@_cell_box 
+          { 
+            \vbox_to_zero:n { }
+            \skip_vertical:n { - \box_ht:N \@arstrutbox + 0.8 ex } 
+            \box_use:N \l_@@_cell_box 
+          } 
+      } 
+    \bool_gset_false:N \g_@@_rotate_bool
+  }
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_adjust_width_box:
+  {
+    \dim_compare:nNnT \g_@@_blocks_width_dim > \c_zero_dim
+      {
+        \box_set_wd:Nn \l_@@_cell_box
+          { \dim_max:nn { \box_wd:N \l_@@_cell_box } \g_@@_blocks_width_dim }  
+        \dim_gzero:N \g_@@_blocks_width_dim 
+      }
+  }
+%    \end{macrocode}
 % 
 %    \begin{macrocode}
 \cs_new_protected:Npn \@@_end_Cell:
@@ -6245,6 +6420,8 @@
   { 
     \@@_math_toggle_token: 
     \hbox_set_end:
+    \bool_if:NT \g_@@_rotate_bool \@@_rotate_cell_box:
+    \@@_adjust_width_box:
 %    \end{macrocode}
 %
 %    \begin{macrocode}
@@ -6292,11 +6469,11 @@
 % \end{itemize}
 %    \begin{macrocode}
     \bool_if:NTF \g_@@_empty_cell_bool
-      { \box_use_drop:N \l_@@_cell_box }
+      { \box_use_drop_i:N \l_@@_cell_box }
       {
         \dim_compare:nNnTF { \box_wd:N \l_@@_cell_box } > \c_zero_dim
           \@@_node_for_the_cell:
-          { \box_use_drop:N \l_@@_cell_box }
+          { \box_use_drop_ii:N \l_@@_cell_box }
       }
     \bool_gset_false:N \g_@@_empty_cell_bool
   } 
@@ -6319,7 +6496,7 @@
     \pgfnode 
       { rectangle } 
       { base } 
-      { \box_use_drop:N \l_@@_cell_box }
+      { \box_use_drop_iii:N \l_@@_cell_box }
       { \@@_env: - \int_use:N \c at iRow - \int_use:N \c at jCol }
       { }
     \str_if_empty:NF \l_@@_name_str
@@ -6776,6 +6953,7 @@
     \bgroup
     \tl_set:Nn \l_@@_left_delim_tl { #1 }
     \tl_set:Nn \l_@@_right_delim_tl { #2 }
+    \int_gzero:N \g_@@_block_box_int
     \dim_zero:N \g_@@_width_last_col_dim
     \dim_zero:N \g_@@_width_first_col_dim
     \bool_gset_false:N \g_@@_row_of_col_done_bool
@@ -6800,11 +6978,13 @@
 %    \end{macrocode}
 %
 % We deactivate Tikz externalization because we will use \textsc{pgf} pictures
-% with the options |overlay| and |remember picture| (or equivalent forms).
+% with the options |overlay| and |remember picture| (or equivalent forms). We
+% deactivate with |\tikzexternaldisable| and not with
+% |\tikzset{external/export=false}| which is \emph{not} equivalent.
 %    \begin{macrocode}
     \cs_if_exist:NT \tikz at library@external at loaded
       {
-        \tikzset { external / export = false }
+        \tikzexternaldisable
         \cs_if_exist:NT \ifstandalone
           { \tikzset { external / optimize = false } }
       }
@@ -7153,8 +7333,21 @@
 %    \begin{macrocode}
     \int_compare:nNnT \l_@@_first_col_int = 0
       { 
-        \skip_horizontal:N \arraycolsep
-        \skip_horizontal:N \g_@@_width_first_col_dim 
+        \skip_horizontal:N \col at sep
+        \dim_if_exist:cTF { g_@@_ block _ width _col _ 0 _ dim } 
+           {
+             \skip_horizontal:n
+               {
+                 \dim_max:nn
+                   { 
+                     \dim_use:c { g_@@_ block _ width _col _ 0 _ dim } 
+                     - 2 \col at sep
+                   }
+                 \g_@@_width_first_col_dim  
+               } 
+             \dim_gzero:c { g_@@_ block _ width _col _ 0 _ dim } 
+           }
+           { \skip_horizontal:N \g_@@_width_first_col_dim }
       }
 %    \end{macrocode}
 %
@@ -7254,8 +7447,27 @@
 %    \begin{macrocode}           
     \bool_if:NT \g_@@_last_col_found_bool 
       { 
-        \skip_horizontal:N \g_@@_width_last_col_dim 
-        \skip_horizontal:N \arraycolsep 
+        \dim_if_exist:cTF 
+          { g_@@_ block _ width _col _  \int_use:N \g_@@_col_total_int _ dim } 
+          {
+            \skip_horizontal:n
+              {
+                \dim_max:nn
+                  { 
+                    \dim_use:c 
+                      { 
+                        g_@@_ block _ width _col _ 
+                        \int_use:N \g_@@_col_total_int  
+                        _ dim 
+                      } 
+                  }
+                  { \g_@@_width_first_col_dim + \col at sep }
+              } 
+          }
+          { 
+            \skip_horizontal:N \g_@@_width_last_col_dim 
+            \skip_horizontal:N \col at sep 
+          }
       }
     \@@_after_array:
     \egroup 
@@ -7449,7 +7661,12 @@
 %    \begin{macrocode}
 \cs_new_protected:Npn \@@_patch_preamble_i:n #1
   { 
-    \tl_gput_right:Nn \g_@@_preamble_tl { > \@@_Cell: #1 < \@@_end_Cell: } 
+    \tl_gput_right:Nn \g_@@_preamble_tl 
+      { 
+        > { \@@_Cell: \tl_set:Nn \l_@@_cell_type_tl { #1 } } 
+        #1 
+        < \@@_end_Cell:
+      }  
 %    \end{macrocode}
 % We increment the counter of columns.
 %    \begin{macrocode}
@@ -7547,13 +7764,16 @@
         > {
             \hbox_set:Nw \l_@@_cell_box
             \@@_Cell:
+            \tl_set:Nn \l_@@_cell_type_tl { #1 }
           }
         c
         < {
             \@@_end_Cell:
             #1
-            \hbox_set_end:
-            \makebox [ #4 ] [ #3 ] { \box_use_drop:N \l_@@_cell_box }   
+            \hbox_set_end: 
+            \bool_if:NT \g_@@_rotate_bool \@@_rotate_cell_box:
+            \@@_adjust_width_box:
+            \makebox [ #4 ] [ #3 ] { \box_use_drop_iv:N \l_@@_cell_box }   
           }
       }
 %    \end{macrocode}
@@ -7635,7 +7855,7 @@
     \box_set_ht:Nn \l_tmpa_box { \box_ht:N \l_tmpa_box + \l_tmpa_dim } 
     \box_set_dp:Nn \l_tmpa_box { \box_dp:N \l_tmpa_box + \l_tmpb_dim } 
     \str_if_eq:VnTF \l_@@_baseline_str { c }
-      { \box_use_drop:N \l_tmpa_box } 
+      { \box_use_drop_v:N \l_tmpa_box } 
       \@@_put_box_in_flow_i:
   }
 %    \end{macrocode}
@@ -7693,8 +7913,8 @@
 % Now, |\g_tmpa_dim| contains the value of the $y$ translation we have to to.
 %    \begin{macrocode}
     \endpgfpicture
-    \box_move_up:nn \g_tmpa_dim { \box_use_drop:N \l_tmpa_box } 
-    \box_use_drop:N \l_tmpa_box 
+    \box_move_up:nn \g_tmpa_dim { \box_use_drop_vi:N \l_tmpa_box } 
+    \box_use_drop_vii:N \l_tmpa_box 
   }
 %    \end{macrocode}
 %
@@ -7702,11 +7922,13 @@
 %    \begin{macrocode}
 \cs_new_protected:Npn \@@_use_arraybox_with_notes_c:
   {
-    \int_compare:nNnTF \c at tabularnote = 0
-      { \box_use_drop:N \l_@@_the_array_box }
+    \bool_lazy_and:nnTF 
+      { \int_compare_p:nNn \c at tabularnote = 0 }
+      { \tl_if_empty_p:V \l_@@_tabularnote_tl }
+      { \box_use_drop_viii:N \l_@@_the_array_box }
       {
         \begin { minipage } { \box_wd:N \l_@@_the_array_box }
-        \box_use_drop:N \l_@@_the_array_box
+        \box_use_drop_ix:N \l_@@_the_array_box
         \skip_vertical:N 0.65ex 
 %    \end{macrocode}
 % The TeX group is for potential specifications in the
@@ -7714,27 +7936,31 @@
 %    \begin{macrocode}
         \group_begin:
         \l_@@_notes_code_before_tl
+        \tl_if_empty:NF \l_@@_tabularnote_tl { \l_@@_tabularnote_tl \par }
 %    \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
 % end of the notes with a good vertical space.
 %    \begin{macrocode}
-        \bool_if:NTF \l_@@_notes_para_bool
+        \int_compare:nNnF \c at tabularnote = 0 
           {
-            \begin { tabularnotes* }
-              \seq_map_inline:Nn \g_@@_tabularnotes_seq { \item ##1 } \strut 
-            \end { tabularnotes* }
+            \bool_if:NTF \l_@@_notes_para_bool
+              {
+                \begin { tabularnotes* }
+                  \seq_map_inline:Nn \g_@@_tabularnotes_seq { \item ##1 } \strut 
+                \end { tabularnotes* }
 %    \end{macrocode}
 % The following |\par| is mandatory for the event that the user has put
 % |\footnotesize| (for example) in the |notes/code-before|.
 %    \begin{macrocode}
-            \par
+                \par
+              }
+              {
+                \tabularnotes 
+                  \seq_map_inline:Nn \g_@@_tabularnotes_seq { \item ##1 } \strut 
+                \endtabularnotes
+              }
           }
-          {
-            \tabularnotes 
-              \seq_map_inline:Nn \g_@@_tabularnotes_seq { \item ##1 } \strut 
-            \endtabularnotes
-          }
         \unskip
         \group_end:
         \bool_if:NT \l_@@_notes_bottomrule_bool
@@ -7799,18 +8025,31 @@
 % Now, we convert the value of |\l_@@_baseline_str| (which should represent an
 % integer) to an integer stored in |\l_tmpa_int|.
 %    \begin{macrocode}
-    \int_set:Nn \l_tmpa_int \l_@@_baseline_str
-    \bool_lazy_or:nnT
-      { \int_compare_p:nNn \l_tmpa_int < \l_@@_first_row_int }
-      { \int_compare_p:nNn \l_tmpa_int > \g_@@_row_total_int }
-      { 
-        \@@_error:n { bad~value~for~baseline }
-        \int_set:Nn \l_tmpa_int 1
-      }
     \pgfpicture
     \@@_qpoint:n { row - 1 } 
     \dim_gset_eq:NN \g_tmpa_dim \pgf at y
-    \@@_qpoint:n { row - \int_use:N \l_tmpa_int - base }
+    \str_if_in:NnTF \l_@@_baseline_str { line- }
+      {
+        \int_set:Nn \l_tmpa_int
+          {
+            \str_range:Nnn 
+              \l_@@_baseline_str 
+              6 
+              { \str_count:N \l_@@_baseline_str } 
+          }
+        \@@_qpoint:n { row - \int_use:N \l_tmpa_int }
+      }
+      {
+        \int_set:Nn \l_tmpa_int \l_@@_baseline_str
+        \bool_lazy_or:nnT
+          { \int_compare_p:nNn \l_tmpa_int < \l_@@_first_row_int }
+          { \int_compare_p:nNn \l_tmpa_int > \g_@@_row_total_int }
+          { 
+            \@@_error:n { bad~value~for~baseline }
+            \int_set:Nn \l_tmpa_int 1
+          } 
+        \@@_qpoint:n { row - \int_use:N \l_tmpa_int - base }
+      }
     \dim_gsub:Nn \g_tmpa_dim \pgf at y
     \endpgfpicture
     \dim_gadd:Nn \g_tmpa_dim \arrayrulewidth
@@ -8029,15 +8268,19 @@
     \int_compare:nNnT \l_@@_first_col_int = 0 
       { 
         \omit 
-        \skip_horizontal:N  -2\col at sep 
-        \bool_if:NT \l_@@_code_before_bool
-          { \pgfsys at markposition { \@@_env: - col - 0 } } 
-        \pgfpicture 
-        \pgfrememberpicturepositiononpagetrue
-        \pgfcoordinate { \@@_env: - col - 0 } \pgfpointorigin 
-        \str_if_empty:NF \l_@@_name_str
-          { \pgfnodealias { \l_@@_name_str - col - 0 } { \@@_env: - col - 0 } }  
-        \endpgfpicture
+        \hbox_overlap_left:n
+          {
+            \bool_if:NT \l_@@_code_before_bool
+              { \pgfsys at markposition { \@@_env: - col - 0 } } 
+            \pgfpicture 
+            \pgfrememberpicturepositiononpagetrue
+            \pgfcoordinate { \@@_env: - col - 0 } \pgfpointorigin 
+            \str_if_empty:NF \l_@@_name_str
+              { \pgfnodealias { \l_@@_name_str - col - 0 } { \@@_env: - col - 0 } }  
+            \endpgfpicture
+            \skip_horizontal:N 2\col at sep 
+            \skip_horizontal:N \g_@@_width_first_col_dim 
+          }
         & 
       }
     \omit
@@ -8108,7 +8351,7 @@
           { \skip_gset_eq:NN \g_tmpa_skip \l_@@_columns_width_dim } 
         \skip_gadd:Nn \g_tmpa_skip { 2 \col at sep } 
       }
-    \skip_horizontal:N \g_tmpa_skip
+    \skip_horizontal:N \g_tmpa_skip 
     \hbox
       { 
         \bool_if:NT \l_@@_code_before_bool
@@ -8139,12 +8382,12 @@
       { 
         & 
         \omit
+        \int_gincr:N \g_tmpa_int 
 %    \end{macrocode}
 % The incrementation of the counter |\g_tmpa_int| must be done after the |\omit|
 % of the cell.
 %    \begin{macrocode}
-        \int_gincr:N \g_tmpa_int 
-        \skip_horizontal:N \g_tmpa_skip
+        \skip_horizontal:N \g_tmpa_skip 
         \bool_if:NT \l_@@_code_before_bool
           { 
             \hbox
@@ -8171,23 +8414,27 @@
       }
     \bool_if:NT \g_@@_last_col_found_bool
       {
-        \bool_if:NT \l_@@_code_before_bool
-          { 
-            \pgfsys at markposition { \@@_env: - col - \@@_succ:n \g_@@_col_total_int }
-          } 
-        \skip_horizontal:N 2\col at sep
-        \pgfpicture 
-        \pgfrememberpicturepositiononpagetrue
-        \pgfcoordinate { \@@_env: - col - \@@_succ:n \g_@@_col_total_int } 
-          \pgfpointorigin 
-        \str_if_empty:NF \l_@@_name_str
-          { 
-            \pgfnodealias 
-              { \l_@@_name_str - col - \@@_succ:n \g_@@_col_total_int } 
-              { \@@_env: - col - \@@_succ:n \g_@@_col_total_int } 
-          }  
-        \endpgfpicture
-        \skip_horizontal:N -2\col at sep
+        \hbox_overlap_right:n
+          {
+            % \skip_horizontal:N \col at sep
+            \skip_horizontal:N \g_@@_width_last_col_dim 
+            \bool_if:NT \l_@@_code_before_bool
+              { 
+                \pgfsys at markposition 
+                  { \@@_env: - col - \@@_succ:n \g_@@_col_total_int }
+              } 
+            \pgfpicture 
+            \pgfrememberpicturepositiononpagetrue
+            \pgfcoordinate { \@@_env: - col - \@@_succ:n \g_@@_col_total_int } 
+              \pgfpointorigin 
+            \str_if_empty:NF \l_@@_name_str
+              { 
+                \pgfnodealias 
+                  { \l_@@_name_str - col - \@@_succ:n \g_@@_col_total_int } 
+                  { \@@_env: - col - \@@_succ:n \g_@@_col_total_int } 
+              }  
+            \endpgfpicture
+          }
       }
     \cr
   }
@@ -8235,6 +8482,8 @@
       { 
         \@@_math_toggle_token:
         \hbox_set_end:
+        \bool_if:NT \g_@@_rotate_bool \@@_rotate_cell_box:
+        \@@_adjust_width_box:
         \@@_update_for_first_and_last_row:
 %    \end{macrocode}
 % We actualise the width of the ``first column'' because we will use this width
@@ -8250,7 +8499,7 @@
           { 
             \dim_compare:nNnTF { \box_wd:N \l_@@_cell_box } > \c_zero_dim
               \@@_node_for_the_cell:
-              { \box_use_drop:N \l_@@_cell_box }
+              { \box_use_drop_x:N \l_@@_cell_box }
             \skip_horizontal:N \l_@@_left_delim_dim
             \skip_horizontal:N \l_@@_left_margin_dim 
             \skip_horizontal:N \l_@@_extra_left_margin_dim
@@ -8303,6 +8552,8 @@
       { 
         \@@_math_toggle_token:
         \hbox_set_end:
+        \bool_if:NT \g_@@_rotate_bool \@@_rotate_cell_box:
+        \@@_adjust_width_box:
         \@@_update_for_first_and_last_row:
 %    \end{macrocode}
 % We actualise the width of the ``last column'' because we will use this width
@@ -8660,8 +8911,6 @@
       }
     \bool_if:NT \l_@@_hlines_bool \@@_draw_hlines: 
     \bool_if:NT \l_@@_vlines_bool \@@_draw_vlines: 
-    \g_@@_internal_code_after_tl
-    \tl_gclear:N \g_@@_internal_code_after_tl
 %    \end{macrocode}
 %
 % \bigskip
@@ -8671,6 +8920,11 @@
     \cs_set_eq:NN \ialign \@@_old_ialign:
     \seq_if_empty:NF \g_@@_blocks_seq \@@_draw_blocks: 
 %    \end{macrocode}
+%   
+%    \begin{macrocode}
+    \g_@@_internal_code_after_tl
+    \tl_gclear:N \g_@@_internal_code_after_tl
+%    \end{macrocode}
 % 
 % \bigskip
 % Now, the |code-after|.
@@ -9122,7 +9376,7 @@
       {
         \@@_qpoint:n { col - \int_use:N \l_@@_initial_j_int }
         \dim_set_eq:NN \l_@@_x_initial_dim \pgf at x 
-        \dim_add:Nn \l_@@_x_initial_dim \@@_tab_or_array_colsep:
+        \dim_add:Nn \l_@@_x_initial_dim \col at sep
         \@@_qpoint:n { row - \int_use:N \l_@@_initial_i_int - base }
         \dim_set_eq:NN \l_@@_y_initial_dim \pgf at y
       }
@@ -9131,7 +9385,7 @@
       {
         \@@_qpoint:n { col - \@@_succ:n \l_@@_final_j_int }
         \dim_set_eq:NN \l_@@_x_final_dim \pgf at x 
-        \dim_sub:Nn \l_@@_x_final_dim \@@_tab_or_array_colsep:
+        \dim_sub:Nn \l_@@_x_final_dim \col at sep
         \@@_qpoint:n { row - \int_use:N \l_@@_final_i_int - base }
         \dim_set_eq:NN \l_@@_y_final_dim \pgf at y
       }
@@ -9199,8 +9453,7 @@
       { 
         \@@_qpoint:n { col - \int_use:N \l_@@_initial_j_int } 
         \dim_set_eq:NN \l_@@_x_initial_dim \pgf at x 
-        \dim_add:Nn \l_@@_x_initial_dim 
-          { \bool_if:NTF \l_@@_NiceTabular_bool \tabcolsep \arraycolsep } 
+        \dim_add:Nn \l_@@_x_initial_dim \col at sep
       }
       { \@@_set_initial_coords_from_anchor:n { mid~east } }
     \bool_if:NTF \l_@@_final_open_bool
@@ -9207,8 +9460,7 @@
       { 
         \@@_qpoint:n { col - \@@_succ:n \l_@@_final_j_int }
         \dim_set_eq:NN \l_@@_x_final_dim \pgf at x 
-        \dim_sub:Nn \l_@@_x_final_dim 
-          { \bool_if:NTF \l_@@_NiceTabular_bool \tabcolsep \arraycolsep } 
+        \dim_sub:Nn \l_@@_x_final_dim \col at sep
       }
       { \@@_set_final_coords_from_anchor:n { mid~west } }
     \bool_lazy_and:nnTF
@@ -10255,45 +10507,9 @@
 % \vspace{1cm}
 % The command |\@@_rotate:| will be linked to |\rotate| in
 % |{NiceArrayWithDelims}|.  
-% 
-% The command will exit three levels of groups (only two in |{NiceTabular}|
-% because there is not the group of the math mode to exit) in order
-% to execute the command 
-%
-% \qquad ``|\box_rotate:Nn \l_@@_cell_box { 90 }|'' 
-%
-% just after the construction of the box |\l_@@_cell_box|.
 %    \begin{macrocode}
-\cs_new_protected:Npn \@@_rotate: 
-  { 
-    \bool_if:NTF \l_@@_NiceTabular_bool
-      { \group_insert_after:N \@@_rotate_ii: }
-      { \group_insert_after:N \@@_rotate_i: }
-  }
-\cs_new_protected:Npn \@@_rotate_i: { \group_insert_after:N \@@_rotate_ii: }
-\cs_new_protected:Npn \@@_rotate_ii: { \group_insert_after:N \@@_rotate_iii: } 
-\cs_new_protected:Npn \@@_rotate_iii: 
-  { 
-    \box_rotate:Nn \l_@@_cell_box { 90 } 
+\cs_new_protected:Npn \@@_rotate: { \bool_gset_true:N \g_@@_rotate_bool }
 %    \end{macrocode}
-% If we are in the last row, we want all the boxes composed with the command
-% |\rotate| aligned upwards.
-%    \begin{macrocode}
-    \int_compare:nNnT \c at iRow = \l_@@_last_row_int 
-      { 
-        \vbox_set_top:Nn \l_@@_cell_box 
-          { 
-            \vbox_to_zero:n { }
-%    \end{macrocode}
-% |0.8 ex| will be the distance between the principal part of the array and our
-% element (which is composed with |\rotate|).
-%    \begin{macrocode}
-            \skip_vertical:n { - \box_ht:N \@arstrutbox + 0.8 ex } 
-            \box_use:N \l_@@_cell_box 
-          } 
-      }
-  }
-%    \end{macrocode}
 %
 % \bigskip
 % \subsection*{The command \textbackslash line accessible in code-after}
@@ -11468,7 +11684,9 @@
 %    \end{macrocode}
 % We recall that, when externalization is used, |\tikzpicture| and
 % |\endtikzpicture| (or |\pgfpicture| and |\endpgfpicture|) must be directly
-% ``visible''. 
+% ``visible''. That's why we construct now a version of |\@@_hdottedline:n| with
+% the right environment (|\begin{pgfpicture}\end{pgfpicture}| or
+% |\begin{tikzpiture}...\end{tikzpicture}|). 
 %    \begin{macrocode}
     \cs_new_protected:Npx \@@_hdottedline:n #1
       {
@@ -11552,7 +11770,11 @@
     \dim_set:Nn \l_@@_x_initial_dim 
       { 
         \pgf at x + 
-        \bool_if:NTF \l_@@_NiceTabular_bool \tabcolsep \arraycolsep 
+%    \end{macrocode}
+% We do a reduction by |\arraycolsep| for the environments with delimiters (and
+% not for the other).
+%    \begin{macrocode}
+        \bool_if:NTF \l_@@_NiceArray_bool \c_zero_dim \arraycolsep 
         - \l_@@_left_margin_dim 
       } 
     \@@_qpoint:n { col - \@@_succ:n \c at jCol } 
@@ -11559,7 +11781,7 @@
     \dim_set:Nn \l_@@_x_final_dim 
       {            
         \pgf at x - 
-        \bool_if:NTF \l_@@_NiceTabular_bool \tabcolsep \arraycolsep 
+        \bool_if:NTF \l_@@_NiceArray_bool \c_zero_dim \arraycolsep 
         + \l_@@_right_margin_dim 
       }
 %    \end{macrocode}
@@ -12059,6 +12281,21 @@
 % The code deals with the command |\Block|. This command has no direct link with
 % the environment |{NiceMatrixBlock}|. 
 %
+% \bigskip
+% The options of the command |\Block| will be analyzed first in the cell of the
+% array (and once again when the block will be put in the array in the |code-after|).
+%    \begin{macrocode}
+\keys_define:nn { NiceMatrix / Block / FirstPass }
+  {
+    l .code:n = \tl_set:Nn \l_@@_pos_of_block_tl l ,
+    l .value_forbidden:n = true ,
+    r .code:n = \tl_set:Nn \l_@@_pos_of_block_tl r ,
+    r .value_forbidden:n = true ,
+    c .code:n = \tl_set:Nn \l_@@_pos_of_block_tl c ,
+    c .value_forbidden:n = true ,
+  }
+%    \end{macrocode}
+%
 % 
 % The following command will be linked to |\Block| in the environments of
 % \pkg{nicematrix}. We define it with |\NewDocumentCommand| of \pkg{xparse}
@@ -12065,8 +12302,7 @@
 % because it has an optional argument between |<| and |>| (for TeX instructions
 % put before the math mode of the label)
 %
-% It's mandatory to use an expandable command (probably because of the first
-% optional argument?).
+% It's mandatory to use an expandable command (why?).
 %    \begin{macrocode}
 \NewExpandableDocumentCommand \@@_Block: { O { } m D < > { } m }
   { \@@_Block_i #2 \q_stop { #1 } { #3 } { #4 } }
@@ -12088,12 +12324,20 @@
 %    \begin{macrocode}
 \cs_new_protected:Npn \@@_Block_ii:nnnnn #1 #2 #3 #4 #5
   {
-    \bool_if:NT \l_@@_NiceTabular_bool
-      { \tl_if_empty:nF { #4 } { \@@_error:n { angle~option~in~NiceTabular } } } 
 %    \end{macrocode}
 %
+%    \begin{macrocode}
+    \tl_if_empty:NTF \l_@@_cell_type_tl
+      { \tl_set:Nn \l_@@_pos_of_block_tl c }
+      { \tl_set_eq:NN \l_@@_pos_of_block_tl \l_@@_cell_type_tl }
+%    \end{macrocode}
 % \medskip
 %    \begin{macrocode}
+    \keys_set_known:nn { NiceMatrix / Block / FirstPass } { #3 } 
+%    \end{macrocode}
+% 
+% \medskip
+%    \begin{macrocode}
     \tl_set:Nx \l_tmpa_tl
       {
         { \int_use:N \c at iRow }
@@ -12103,7 +12347,7 @@
       }
 %    \end{macrocode}
 % Now, |\l_tmpa_tl|  contains an ``object'' corresponding to the position of the
-% block whith four components surrounded by curly brackets:
+% block whith four components, each of them surrounded by curly brackets:
 % 
 % |{|\textsl{imin}|}{|\textsl{jmin}|}{|\textsl{imax}|}{|\textsl{jmax}|}|.
 % 
@@ -12118,13 +12362,157 @@
 % components:
 %
 % |{|\textsl{imin}|}{|\textsl{jmin}|}{|\textsl{imax}|}{|\textsl{jmax}|}{|\textsl{options}|}{|\textsl{contents}|}|.
+%
+% \medskip
+% If the block is mono-column, we have a special treatment.
 %    \begin{macrocode}
-    \seq_gput_left:Nx \g_@@_blocks_seq
-      {   
-        \l_tmpa_tl
-        { #3 }
-        \exp_not:n { { #4 \@@_math_toggle_token: #5 \@@_math_toggle_token: } }  
-      } 
+    \int_compare:nNnTF { #2 } = 1
+      {
+        \int_gincr:N \g_@@_block_box_int
+        \cs_set_protected_nopar:Npn \diagbox ##1 ##2
+          {
+            \tl_gput_right:Nx \g_@@_internal_code_after_tl    
+              { 
+                \@@_actually_diagbox:nnnnnn 
+                  { \int_use:N \c at iRow }
+                  { \int_use:N \c at jCol }
+                  { \int_eval:n { \c at iRow + #1 - 1 } }
+                  { \int_eval:n { \c at jCol + #2 - 1 } }
+                  { \exp_not:n { ##1 } } { \exp_not:n { ##2 } }
+              }
+          }  
+        \box_gclear_new:c 
+          { g_@@_ block _ box _ \int_use:N \g_@@_block_box_int _ box }
+        \hbox_gset:cn 
+          { g_@@_ block _ box _ \int_use:N \g_@@_block_box_int _ box }
+          { 
+%    \end{macrocode}
+% The main aim of the following |\color_ensure_current:| is to retrieve in the
+% box a color specified for that column in the preamble (e.g. something like
+% |>{\color{red}}|). 
+%    \begin{macrocode}
+            \color_ensure_current: 
+            \bool_if:NTF \l_@@_NiceTabular_bool
+              { 
+                \group_begin:
+                \cs_set:Npn \arraystretch { 1 }
+                \dim_set_eq:NN \extrarowheight \c_zero_dim 
+                #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
+% |c|. In the other cases, the tabular will be constructed with a format equal
+% to the key of position of the box. In other words: the alignement internal to
+% 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
+                  { \tl_set:Nn \l_@@_pos_of_block_tl c }
+                \exp_args:Nnx \begin { tabular } 
+                  { @ { } \l_@@_pos_of_block_tl @ { } } 
+                  #5 
+                \end { tabular } 
+                \group_end:
+              } 
+              { 
+                \group_begin:
+                \cs_set:Npn \arraystretch { 1 }
+                \dim_set_eq:NN \extrarowheight \c_zero_dim 
+                #4 
+                \bool_if:NT \g_@@_rotate_bool
+                  { \tl_set:Nn \l_@@_pos_of_block_tl c }
+                \c_math_toggle_token
+                \exp_args:Nnx \begin { array } 
+                  { @ { } \l_@@_pos_of_block_tl @ { } } 
+                  #5 
+                \end { array } 
+                \c_math_toggle_token 
+                \group_end:
+              }
+          }
+        \bool_if:NT \g_@@_rotate_bool
+          {
+            \box_grotate:cn  
+              { g_@@_ block _ box _ \int_use:N \g_@@_block_box_int _ box }
+              { 90 } 
+            \bool_gset_false:N \g_@@_rotate_bool
+          }
+        \dim_gset:Nn \g_@@_blocks_width_dim
+          {
+            \dim_max:nn
+              \g_@@_blocks_width_dim
+              {
+                \box_wd:c 
+                  { g_@@_ block _ box _ \int_use:N \g_@@_block_box_int _ box } 
+              }
+          }
+        \seq_gput_right:Nx \g_@@_blocks_seq
+          {   
+            \l_tmpa_tl
+%    \end{macrocode}
+% In the list of options |#3|, maybe there is a key for the horizontal alignment
+% (|l|, |r| or |c|). In that case, that key has been read and stored in
+% |\l_@@_pos_of_block_tl|. However, maybe there were no key of the horizontal
+% alignement and that's why we put a key corresponding to the value of
+% |\l_@@_pos_of_block_tl|, which is fixed by the type of current column.
+%    \begin{macrocode}
+            { #3 , \l_@@_pos_of_block_tl }
+            { 
+              \box_use_drop:c 
+                { g_@@_ block _ box _ \int_use:N \g_@@_block_box_int _ box } 
+            }
+          } 
+      }
+%    \end{macrocode}
+% In the standard case, that is to say a |\Block| which is \emph{not} mono-column.
+%    \begin{macrocode}
+      {
+        \seq_gput_right:Nx \g_@@_blocks_seq
+          {   
+            \l_tmpa_tl
+            { #3 }
+            \exp_not:n 
+              { 
+                {
+                  \bool_if:NTF \l_@@_NiceTabular_bool
+                    { 
+                      \group_begin:
+                      \cs_set:Npn \arraystretch { 1 }
+                      \dim_set_eq:NN \extrarowheight \c_zero_dim 
+                      #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
+% |c|. In the other cases, the tabular will be constructed with a format equal
+% to the key of position of the box. In other words: the alignement internal to
+% 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
+                        { \tl_set:Nn \l_@@_pos_of_block_tl c }
+                      \exp_args:Nnx \begin { tabular } 
+                        { @ { } \l_@@_pos_of_block_tl @ { } } 
+                        #5 
+                      \end { tabular } 
+                      \group_end:
+                    } 
+                    { 
+                      \group_begin:
+                      \cs_set:Npn \arraystretch { 1 }
+                      \dim_set_eq:NN \extrarowheight \c_zero_dim 
+                      #4 
+                      \bool_if:NT \g_@@_rotate_bool
+                        { \tl_set:Nn \l_@@_pos_of_block_tl c }
+                      \c_math_toggle_token 
+                      \exp_args:Nnx \begin { array } 
+                        { @ { } \l_@@_pos_of_block_tl @ { } } #5 \end { array } 
+                      \c_math_toggle_token
+                      \group_end:
+                    }
+                } 
+              }
+          } 
+      }
   }
 %    \end{macrocode}
 %
@@ -12135,7 +12523,7 @@
 % ``medium'' one). \textbf{In fact, as of now, it is \emph{not} documented}. Is
 % it really a good idea to provide such a key?
 %   \begin{macrocode}
-\keys_define:nn { NiceMatrix / Block }
+\keys_define:nn { NiceMatrix / Block / SecondPass }
   {
     tikz .tl_set:N = \l_@@_tikz_tl ,
     tikz .value_required:n = true ,
@@ -12166,7 +12554,7 @@
 % The group is for the keys.
 %    \begin{macrocode}
     \group_begin:
-    \keys_set:nn { NiceMatrix / Block } { #5 }
+    \keys_set:nn { NiceMatrix / Block / SecondPass} { #5 }
 %    \end{macrocode}
 %
 %    \begin{macrocode}
@@ -12202,12 +12590,9 @@
       { \int_compare_p:nNn { #4 } > \g_@@_col_total_int }
       { \msg_error:nnnn { nicematrix } { Block~too~large } { #1 } { #2 } }
       {
+        \hbox_set:Nn \l_@@_cell_box { #6 }
+        \bool_if:NT \g_@@_rotate_bool \@@_rotate_cell_box:
 %    \end{macrocode}
-% We put the contents of the cell in the box |\l_@@_cell_box| because we want
-% the command |\rotate| used in the content to be able to rotate the box.
-%    \begin{macrocode}
-        \hbox_set:Nn \l_@@_cell_box { #6 } 
-%    \end{macrocode}
 %
 % \bigskip
 % Let's consider the following |{NiceTabular}|. Because of the instruction
@@ -12359,7 +12744,7 @@
           {
 %    \end{macrocode}
 % We take into account the case of a block of one row in the ``first row'' or
-% the ``end row''.
+% the ``last row''.
 %    \begin{macrocode}
             \int_compare:nNnTF { #1 } = 0
               { \l_@@_code_for_first_row_tl }
@@ -12402,22 +12787,29 @@
                     r { base~east } 
                   } 
               } 
-              { \box_use_drop:N \l_@@_cell_box } { } { }
+              { \box_use_drop_xi:N \l_@@_cell_box } { } { }
           }
 %    \end{macrocode}
 %
 % \medskip
-% If the number of rows is different of $1$, we put the label of the block in
-% using the short node (the label of the block has been composed in
+% If the number of rows is different of $1$, we will put the label of the block
+% in using the short node (the label of the block has been composed in
 % |\l_@@_cell_box|).
 %    \begin{macrocode}
           { 
+%    \end{macrocode}
+% If we are in the first column, we must put the block as if it was with the key~|r|.
+%    \begin{macrocode}
+            \int_compare:nNnT \c at jCol = 0 
+              { \tl_set:Nn \l_@@_pos_of_block_tl r }
+            \int_compare:nNnT \c at jCol = \l_@@_last_col_int
+              { \tl_set:Nn \l_@@_pos_of_block_tl l }
             \pgftransformshift
               {
                 \pgfpointanchor 
                   { \@@_env: - #1 - #2 - block - short } 
                   {
-                     \str_case:Vn \l_@@_pos_of_block_tl
+                    \str_case:Vn \l_@@_pos_of_block_tl
                       {
                         c { center } 
                         l { west } 
@@ -12436,7 +12828,7 @@
                     r { east } 
                   }
               } 
-              { \box_use_drop:N \l_@@_cell_box } { } { }
+              { \box_use_drop_xii:N \l_@@_cell_box } { } { }
           }   
         \endpgfpicture
       }
@@ -13118,14 +13510,6 @@
 %    \end{macrocode}
 % 
 %    \begin{macrocode}
-\@@_msg_new:nn { angle~option~in~NiceTabular }
-  {
-    You~should~not~the~option~between~angle~brackets~(<~and~>)~for~a~command~
-    \token_to_str:N \Block\ in~\{NiceTabular\}.~However,~you~can~go~on.
-  }
-%    \end{macrocode}
-% 
-%    \begin{macrocode}
 \@@_msg_new:nn { tabularnote~forbidden }
   {
     You~can't~use~the~command~\token_to_str:N\tabularnote\ 
@@ -13187,6 +13571,7 @@
   }
 %    \end{macrocode}
 %
+% 
 %    \begin{macrocode}
 \@@_msg_new:nnn { Unknown~key~for~Block } 
   {
@@ -13195,7 +13580,7 @@
     For~a~list~of~the~available~keys,~type~H~<return>.
   }
   {
-    The~available~options~are~(in~alphabetic~order):~c,~
+    The~available~options~are~(in~alphabetic~order):~-,~c,~
     color,~l,~and~r.
   }
 %    \end{macrocode}
@@ -13297,6 +13682,7 @@
     first-row,~
     hlines,~
     hvlines,~
+    hvlines-except-corners,~
     last-col,~
     last-row,~
     left-margin,~
@@ -13353,6 +13739,7 @@
     first-row,~
     hlines,~
     hvlines,~
+    hvlines-except-corners,~
     l,~
     last-col,~
     last-row,~
@@ -13405,6 +13792,7 @@
     first-row,~
     hlines,~
     hvlines,~
+    hvlines-except-corners,~
     last-col,~
     last-row,~
     left-margin,~
@@ -13824,7 +14212,12 @@
 % specify which dotted line will be drawn first (the other lines will be drawn
 % parallel to that one if parallelization is activated).
 %
+% \subsection*{Changes between versions 5.3 and 5.4}
 %
+% Key |tabularnote|.
+%
+% Different behaviour for the mono-column blocks.
+% 
 % \PrintIndex
 % 
 % \tableofcontents

Modified: trunk/Master/texmf-dist/tex/latex/nicematrix/nicematrix.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/nicematrix/nicematrix.sty	2020-10-06 21:58:35 UTC (rev 56573)
+++ trunk/Master/texmf-dist/tex/latex/nicematrix/nicematrix.sty	2020-10-06 21:58:56 UTC (rev 56574)
@@ -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{5.3}
-\def\myfiledate{2020/09/03}
+\def\myfileversion{5.4}
+\def\myfiledate{2020/10/06}
 
 \RequirePackage{pgfcore}
 \usepgfmodule{shapes}
@@ -32,6 +32,18 @@
 \RequirePackage { array }
 \RequirePackage { amsmath }
 \RequirePackage { xparse }
+\cs_set_eq:NN \box_use_drop_i:N \box_use_drop:N
+\cs_set_eq:NN \box_use_drop_ii:N \box_use_drop:N
+\cs_set_eq:NN \box_use_drop_iii:N \box_use_drop:N
+\cs_set_eq:NN \box_use_drop_iv:N \box_use_drop:N
+\cs_set_eq:NN \box_use_drop_v:N \box_use_drop:N
+\cs_set_eq:NN \box_use_drop_vi:N \box_use_drop:N
+\cs_set_eq:NN \box_use_drop_vii:N \box_use_drop:N
+\cs_set_eq:NN \box_use_drop_viii:N \box_use_drop:N
+\cs_set_eq:NN \box_use_drop_ix:N \box_use_drop:N
+\cs_set_eq:NN \box_use_drop_x:N \box_use_drop:N
+\cs_set_eq:NN \box_use_drop_xi:N \box_use_drop:N
+\cs_set_eq:NN \box_use_drop_xii:N \box_use_drop:N
 \cs_new_protected:Npn \__nicematrix_error:n { \msg_error:nn { nicematrix } }
 \cs_new_protected:Npn \__nicematrix_error:nn { \msg_error:nnn { nicematrix } }
 \cs_new_protected:Npn \__nicematrix_error:nnn { \msg_error:nnnn { nicematrix } }
@@ -177,8 +189,6 @@
   { \cs_set:Npn \CT at arc@ { \color [ #1 ] { #2 } } }
 \cs_new_protected:Npn \__nicematrix_set_CT at arc@_ii: #1 \q_stop
   { \cs_set:Npn \CT at arc@ { \color { #1 } } }
-\cs_new:Npn \__nicematrix_tab_or_array_colsep:
-  { \bool_if:NTF \l__nicematrix_NiceTabular_bool \tabcolsep \arraycolsep }
 \bool_new:N \c__nicematrix_siunitx_loaded_bool
 \AtBeginDocument
   {
@@ -252,6 +262,9 @@
   { \pgfpointanchor { \__nicematrix_env: - #1 } { center } }
 \int_new:N \g__nicematrix_NiceMatrixBlock_int
 \dim_new:N \l__nicematrix_columns_width_dim
+\tl_new:N \l__nicematrix_cell_type_tl
+\tl_set:Nn \l__nicematrix_cell_type_tl { c }
+\dim_new:N \g__nicematrix_blocks_width_dim
 \seq_new:N \g__nicematrix_names_seq
 \bool_new:N \l__nicematrix_in_env_bool
 \bool_new:N \l__nicematrix_NiceArray_bool
@@ -258,6 +271,7 @@
 \bool_new:N \l__nicematrix_NiceTabular_bool
 \dim_new:N \l__nicematrix_tabular_width_dim
 \bool_new:N \l__nicematrix_Matrix_bool
+\bool_new:N \g__nicematrix_rotate_bool
 \cs_new_protected:Npn \__nicematrix_test_if_math_mode:
   {
     \if_mode_math: \else:
@@ -300,6 +314,7 @@
 \tl_new:N \l__nicematrix_pos_of_block_tl
 \tl_set:Nn \l__nicematrix_pos_of_block_tl { c }
 \bool_new:N \l__nicematrix_draw_first_bool
+\int_new:N \g__nicematrix_block_box_int
 \int_new:N \l__nicematrix_first_row_int
 \int_set:Nn \l__nicematrix_first_row_int 1
 \int_new:N \l__nicematrix_first_col_int
@@ -313,6 +328,7 @@
 \bool_new:N \g__nicematrix_last_col_found_bool
 \newcounter { tabularnote }
 \seq_new:N \g__nicematrix_tabularnotes_seq
+\tl_new:N \l__nicematrix_tabularnote_tl
 \int_new:N \l__nicematrix_number_of_notes_int
 \cs_new:Npn \__nicematrix_notes_style:n #1 { \textit { \alph { #1 } } }
 \cs_new:Npn \__nicematrix_notes_label_in_tabular:n #1 { \textsuperscript { #1 } }
@@ -329,7 +345,11 @@
         \newlist { tabularnotes } { enumerate } { 1 }
         \setlist [ tabularnotes ]
           {
-            noitemsep , leftmargin = * , align = left , labelsep = 0pt ,
+            topsep = 0pt ,
+            noitemsep ,
+            leftmargin = * ,
+            align = left ,
+            labelsep = 0pt ,
             label =
               \__nicematrix_notes_label_in_list:n { \__nicematrix_notes_style:n { tabularnotesi } } ,
           }
@@ -347,7 +367,7 @@
               { \__nicematrix_error:n { tabularnote~forbidden } }
               {
                 \int_incr:N \l__nicematrix_number_of_notes_int
-                \seq_gput_right:Nx \g__nicematrix_tabularnotes_seq { #1 }
+                \seq_gput_right:Nn \g__nicematrix_tabularnotes_seq { #1 }
                 \peek_meaning:NF \tabularnote
                   {
                     \hbox_set:Nn \l_tmpa_box
@@ -733,6 +753,8 @@
     notes / para .default:n = true ,
     notes / bottomrule .bool_set:N = \l__nicematrix_notes_bottomrule_bool ,
     notes / bottomrule .default:n = true ,
+    tabularnote .tl_set:N = \l__nicematrix_tabularnote_tl ,
+    tabularnote .value_required:n = true ,
     unknown .code:n = \__nicematrix_error:n { Unknown~option~for~NiceArray }
   }
 \keys_define:nn { NiceMatrix / pNiceArray }
@@ -752,6 +774,8 @@
     notes / para .default:n = true ,
     notes / bottomrule .bool_set:N = \l__nicematrix_notes_bottomrule_bool ,
     notes / bottomrule .default:n = true ,
+    tabularnote .tl_set:N = \l__nicematrix_tabularnote_tl ,
+    tabularnote .value_required:n = true ,
     last-col .code:n = \tl_if_empty:nF {#1}
                          { \__nicematrix_error:n { last-col~non~empty~for~NiceArray } }
                        \int_zero:N \l__nicematrix_last_col_int ,
@@ -821,10 +845,35 @@
           }
       }
   }
+\cs_new_protected:Npn \__nicematrix_rotate_cell_box:
+  {
+    \box_rotate:Nn \l__nicematrix_cell_box { 90 }
+    \int_compare:nNnT \c at iRow = \l__nicematrix_last_row_int
+      {
+        \vbox_set_top:Nn \l__nicematrix_cell_box
+          {
+            \vbox_to_zero:n { }
+            \skip_vertical:n { - \box_ht:N \@arstrutbox + 0.8 ex }
+            \box_use:N \l__nicematrix_cell_box
+          }
+      }
+    \bool_gset_false:N \g__nicematrix_rotate_bool
+  }
+\cs_new_protected:Npn \__nicematrix_adjust_width_box:
+  {
+    \dim_compare:nNnT \g__nicematrix_blocks_width_dim > \c_zero_dim
+      {
+        \box_set_wd:Nn \l__nicematrix_cell_box
+          { \dim_max:nn { \box_wd:N \l__nicematrix_cell_box } \g__nicematrix_blocks_width_dim }
+        \dim_gzero:N \g__nicematrix_blocks_width_dim
+      }
+  }
 \cs_new_protected:Npn \__nicematrix_end_Cell:
   {
     \__nicematrix_math_toggle_token:
     \hbox_set_end:
+    \bool_if:NT \g__nicematrix_rotate_bool \__nicematrix_rotate_cell_box:
+    \__nicematrix_adjust_width_box:
     \box_set_ht:Nn \l__nicematrix_cell_box
       { \box_ht:N \l__nicematrix_cell_box + \l__nicematrix_cell_space_top_limit_dim }
     \box_set_dp:Nn \l__nicematrix_cell_box
@@ -833,11 +882,11 @@
       { \dim_max:nn \g__nicematrix_max_cell_width_dim { \box_wd:N \l__nicematrix_cell_box } }
     \__nicematrix_update_for_first_and_last_row:
     \bool_if:NTF \g__nicematrix_empty_cell_bool
-      { \box_use_drop:N \l__nicematrix_cell_box }
+      { \box_use_drop_i:N \l__nicematrix_cell_box }
       {
         \dim_compare:nNnTF { \box_wd:N \l__nicematrix_cell_box } > \c_zero_dim
           \__nicematrix_node_for_the_cell:
-          { \box_use_drop:N \l__nicematrix_cell_box }
+          { \box_use_drop_ii:N \l__nicematrix_cell_box }
       }
     \bool_gset_false:N \g__nicematrix_empty_cell_bool
   }
@@ -854,7 +903,7 @@
     \pgfnode
       { rectangle }
       { base }
-      { \box_use_drop:N \l__nicematrix_cell_box }
+      { \box_use_drop_iii:N \l__nicematrix_cell_box }
       { \__nicematrix_env: - \int_use:N \c at iRow - \int_use:N \c at jCol }
       { }
     \str_if_empty:NF \l__nicematrix_name_str
@@ -1059,6 +1108,7 @@
     \bgroup
     \tl_set:Nn \l__nicematrix_left_delim_tl { #1 }
     \tl_set:Nn \l__nicematrix_right_delim_tl { #2 }
+    \int_gzero:N \g__nicematrix_block_box_int
     \dim_zero:N \g__nicematrix_width_last_col_dim
     \dim_zero:N \g__nicematrix_width_first_col_dim
     \bool_gset_false:N \g__nicematrix_row_of_col_done_bool
@@ -1073,7 +1123,7 @@
       \cs_gset_eq:NN \__nicematrix_old_CT at arc@ \CT at arc@
     \cs_if_exist:NT \tikz at library@external at loaded
       {
-        \tikzset { external / export = false }
+        \tikzexternaldisable
         \cs_if_exist:NT \ifstandalone
           { \tikzset { external / optimize = false } }
       }
@@ -1257,8 +1307,21 @@
     \int_compare:nNnT \l__nicematrix_last_row_int > { -1 } { \int_gdecr:N \c at iRow }
     \int_compare:nNnT \l__nicematrix_first_col_int = 0
       {
-        \skip_horizontal:N \arraycolsep
-        \skip_horizontal:N \g__nicematrix_width_first_col_dim
+        \skip_horizontal:N \col at sep
+        \dim_if_exist:cTF { g__nicematrix_ block _ width _col _ 0 _ dim }
+           {
+             \skip_horizontal:n
+               {
+                 \dim_max:nn
+                   {
+                     \dim_use:c { g__nicematrix_ block _ width _col _ 0 _ dim }
+                     - 2 \col at sep
+                   }
+                 \g__nicematrix_width_first_col_dim
+               }
+             \dim_gzero:c { g__nicematrix_ block _ width _col _ 0 _ dim }
+           }
+           { \skip_horizontal:N \g__nicematrix_width_first_col_dim }
       }
     \bool_if:NTF \l__nicematrix_NiceArray_bool
       {
@@ -1312,8 +1375,27 @@
       }
     \bool_if:NT \g__nicematrix_last_col_found_bool
       {
-        \skip_horizontal:N \g__nicematrix_width_last_col_dim
-        \skip_horizontal:N \arraycolsep
+        \dim_if_exist:cTF
+          { g__nicematrix_ block _ width _col _  \int_use:N \g__nicematrix_col_total_int _ dim }
+          {
+            \skip_horizontal:n
+              {
+                \dim_max:nn
+                  {
+                    \dim_use:c
+                      {
+                        g__nicematrix_ block _ width _col _
+                        \int_use:N \g__nicematrix_col_total_int
+                        _ dim
+                      }
+                  }
+                  { \g__nicematrix_width_first_col_dim + \col at sep }
+              }
+          }
+          {
+            \skip_horizontal:N \g__nicematrix_width_last_col_dim
+            \skip_horizontal:N \col at sep
+          }
       }
     \__nicematrix_after_array:
     \egroup
@@ -1407,7 +1489,12 @@
   }
 \cs_new_protected:Npn \__nicematrix_patch_preamble_i:n #1
   {
-    \tl_gput_right:Nn \g__nicematrix_preamble_tl { > \__nicematrix_Cell: #1 < \__nicematrix_end_Cell: }
+    \tl_gput_right:Nn \g__nicematrix_preamble_tl
+      {
+        > { \__nicematrix_Cell: \tl_set:Nn \l__nicematrix_cell_type_tl { #1 } }
+        #1
+        < \__nicematrix_end_Cell:
+      }
     \int_gincr:N \c at jCol
     \__nicematrix_patch_preamble_viii:n
   }
@@ -1469,6 +1556,7 @@
         > {
             \hbox_set:Nw \l__nicematrix_cell_box
             \__nicematrix_Cell:
+            \tl_set:Nn \l__nicematrix_cell_type_tl { #1 }
           }
         c
         < {
@@ -1475,7 +1563,9 @@
             \__nicematrix_end_Cell:
             #1
             \hbox_set_end:
-            \makebox [ #4 ] [ #3 ] { \box_use_drop:N \l__nicematrix_cell_box }
+            \bool_if:NT \g__nicematrix_rotate_bool \__nicematrix_rotate_cell_box:
+            \__nicematrix_adjust_width_box:
+            \makebox [ #4 ] [ #3 ] { \box_use_drop_iv:N \l__nicematrix_cell_box }
           }
       }
     \int_gincr:N \c at jCol
@@ -1518,7 +1608,7 @@
     \box_set_ht:Nn \l_tmpa_box { \box_ht:N \l_tmpa_box + \l_tmpa_dim }
     \box_set_dp:Nn \l_tmpa_box { \box_dp:N \l_tmpa_box + \l_tmpb_dim }
     \str_if_eq:VnTF \l__nicematrix_baseline_str { c }
-      { \box_use_drop:N \l_tmpa_box }
+      { \box_use_drop_v:N \l_tmpa_box }
       \__nicematrix_put_box_in_flow_i:
   }
 \cs_new_protected:Npn \__nicematrix_put_box_in_flow_i:
@@ -1559,31 +1649,37 @@
         }
       \dim_gsub:Nn \g_tmpa_dim \pgf at y
     \endpgfpicture
-    \box_move_up:nn \g_tmpa_dim { \box_use_drop:N \l_tmpa_box }
-    \box_use_drop:N \l_tmpa_box
+    \box_move_up:nn \g_tmpa_dim { \box_use_drop_vi:N \l_tmpa_box }
+    \box_use_drop_vii:N \l_tmpa_box
   }
 \cs_new_protected:Npn \__nicematrix_use_arraybox_with_notes_c:
   {
-    \int_compare:nNnTF \c at tabularnote = 0
-      { \box_use_drop:N \l__nicematrix_the_array_box }
+    \bool_lazy_and:nnTF
+      { \int_compare_p:nNn \c at tabularnote = 0 }
+      { \tl_if_empty_p:V \l__nicematrix_tabularnote_tl }
+      { \box_use_drop_viii:N \l__nicematrix_the_array_box }
       {
         \begin { minipage } { \box_wd:N \l__nicematrix_the_array_box }
-        \box_use_drop:N \l__nicematrix_the_array_box
+        \box_use_drop_ix:N \l__nicematrix_the_array_box
         \skip_vertical:N 0.65ex
         \group_begin:
         \l__nicematrix_notes_code_before_tl
-        \bool_if:NTF \l__nicematrix_notes_para_bool
+        \tl_if_empty:NF \l__nicematrix_tabularnote_tl { \l__nicematrix_tabularnote_tl \par }
+        \int_compare:nNnF \c at tabularnote = 0
           {
-            \begin { tabularnotes* }
-              \seq_map_inline:Nn \g__nicematrix_tabularnotes_seq { \item ##1 } \strut
-            \end { tabularnotes* }
-            \par
+            \bool_if:NTF \l__nicematrix_notes_para_bool
+              {
+                \begin { tabularnotes* }
+                  \seq_map_inline:Nn \g__nicematrix_tabularnotes_seq { \item ##1 } \strut
+                \end { tabularnotes* }
+                \par
+              }
+              {
+                \tabularnotes
+                  \seq_map_inline:Nn \g__nicematrix_tabularnotes_seq { \item ##1 } \strut
+                \endtabularnotes
+              }
           }
-          {
-            \tabularnotes
-              \seq_map_inline:Nn \g__nicematrix_tabularnotes_seq { \item ##1 } \strut
-            \endtabularnotes
-          }
         \unskip
         \group_end:
         \bool_if:NT \l__nicematrix_notes_bottomrule_bool
@@ -1621,18 +1717,31 @@
   {
     \str_if_eq:VnT \l__nicematrix_baseline_str { t }
       { \tl_set:Nn \l__nicematrix_baseline_str { 1 } }
-    \int_set:Nn \l_tmpa_int \l__nicematrix_baseline_str
-    \bool_lazy_or:nnT
-      { \int_compare_p:nNn \l_tmpa_int < \l__nicematrix_first_row_int }
-      { \int_compare_p:nNn \l_tmpa_int > \g__nicematrix_row_total_int }
-      {
-        \__nicematrix_error:n { bad~value~for~baseline }
-        \int_set:Nn \l_tmpa_int 1
-      }
     \pgfpicture
     \__nicematrix_qpoint:n { row - 1 }
     \dim_gset_eq:NN \g_tmpa_dim \pgf at y
-    \__nicematrix_qpoint:n { row - \int_use:N \l_tmpa_int - base }
+    \str_if_in:NnTF \l__nicematrix_baseline_str { line- }
+      {
+        \int_set:Nn \l_tmpa_int
+          {
+            \str_range:Nnn
+              \l__nicematrix_baseline_str
+              6
+              { \str_count:N \l__nicematrix_baseline_str }
+          }
+        \__nicematrix_qpoint:n { row - \int_use:N \l_tmpa_int }
+      }
+      {
+        \int_set:Nn \l_tmpa_int \l__nicematrix_baseline_str
+        \bool_lazy_or:nnT
+          { \int_compare_p:nNn \l_tmpa_int < \l__nicematrix_first_row_int }
+          { \int_compare_p:nNn \l_tmpa_int > \g__nicematrix_row_total_int }
+          {
+            \__nicematrix_error:n { bad~value~for~baseline }
+            \int_set:Nn \l_tmpa_int 1
+          }
+        \__nicematrix_qpoint:n { row - \int_use:N \l_tmpa_int - base }
+      }
     \dim_gsub:Nn \g_tmpa_dim \pgf at y
     \endpgfpicture
     \dim_gadd:Nn \g_tmpa_dim \arrayrulewidth
@@ -1739,15 +1848,19 @@
     \int_compare:nNnT \l__nicematrix_first_col_int = 0
       {
         \omit
-        \skip_horizontal:N  -2\col at sep
-        \bool_if:NT \l__nicematrix_code_before_bool
-          { \pgfsys at markposition { \__nicematrix_env: - col - 0 } }
-        \pgfpicture
-        \pgfrememberpicturepositiononpagetrue
-        \pgfcoordinate { \__nicematrix_env: - col - 0 } \pgfpointorigin
-        \str_if_empty:NF \l__nicematrix_name_str
-          { \pgfnodealias { \l__nicematrix_name_str - col - 0 } { \__nicematrix_env: - col - 0 } }
-        \endpgfpicture
+        \hbox_overlap_left:n
+          {
+            \bool_if:NT \l__nicematrix_code_before_bool
+              { \pgfsys at markposition { \__nicematrix_env: - col - 0 } }
+            \pgfpicture
+            \pgfrememberpicturepositiononpagetrue
+            \pgfcoordinate { \__nicematrix_env: - col - 0 } \pgfpointorigin
+            \str_if_empty:NF \l__nicematrix_name_str
+              { \pgfnodealias { \l__nicematrix_name_str - col - 0 } { \__nicematrix_env: - col - 0 } }
+            \endpgfpicture
+            \skip_horizontal:N 2\col at sep
+            \skip_horizontal:N \g__nicematrix_width_first_col_dim
+          }
         &
       }
     \omit
@@ -1852,23 +1965,27 @@
       }
     \bool_if:NT \g__nicematrix_last_col_found_bool
       {
-        \bool_if:NT \l__nicematrix_code_before_bool
+        \hbox_overlap_right:n
           {
-            \pgfsys at markposition { \__nicematrix_env: - col - \__nicematrix_succ:n \g__nicematrix_col_total_int }
+            % \skip_horizontal:N \col at sep
+            \skip_horizontal:N \g__nicematrix_width_last_col_dim
+            \bool_if:NT \l__nicematrix_code_before_bool
+              {
+                \pgfsys at markposition
+                  { \__nicematrix_env: - col - \__nicematrix_succ:n \g__nicematrix_col_total_int }
+              }
+            \pgfpicture
+            \pgfrememberpicturepositiononpagetrue
+            \pgfcoordinate { \__nicematrix_env: - col - \__nicematrix_succ:n \g__nicematrix_col_total_int }
+              \pgfpointorigin
+            \str_if_empty:NF \l__nicematrix_name_str
+              {
+                \pgfnodealias
+                  { \l__nicematrix_name_str - col - \__nicematrix_succ:n \g__nicematrix_col_total_int }
+                  { \__nicematrix_env: - col - \__nicematrix_succ:n \g__nicematrix_col_total_int }
+              }
+            \endpgfpicture
           }
-        \skip_horizontal:N 2\col at sep
-        \pgfpicture
-        \pgfrememberpicturepositiononpagetrue
-        \pgfcoordinate { \__nicematrix_env: - col - \__nicematrix_succ:n \g__nicematrix_col_total_int }
-          \pgfpointorigin
-        \str_if_empty:NF \l__nicematrix_name_str
-          {
-            \pgfnodealias
-              { \l__nicematrix_name_str - col - \__nicematrix_succ:n \g__nicematrix_col_total_int }
-              { \__nicematrix_env: - col - \__nicematrix_succ:n \g__nicematrix_col_total_int }
-          }
-        \endpgfpicture
-        \skip_horizontal:N -2\col at sep
       }
     \cr
   }
@@ -1897,6 +2014,8 @@
       {
         \__nicematrix_math_toggle_token:
         \hbox_set_end:
+        \bool_if:NT \g__nicematrix_rotate_bool \__nicematrix_rotate_cell_box:
+        \__nicematrix_adjust_width_box:
         \__nicematrix_update_for_first_and_last_row:
         \dim_gset:Nn \g__nicematrix_width_first_col_dim
           { \dim_max:nn \g__nicematrix_width_first_col_dim { \box_wd:N \l__nicematrix_cell_box } }
@@ -1904,7 +2023,7 @@
           {
             \dim_compare:nNnTF { \box_wd:N \l__nicematrix_cell_box } > \c_zero_dim
               \__nicematrix_node_for_the_cell:
-              { \box_use_drop:N \l__nicematrix_cell_box }
+              { \box_use_drop_x:N \l__nicematrix_cell_box }
             \skip_horizontal:N \l__nicematrix_left_delim_dim
             \skip_horizontal:N \l__nicematrix_left_margin_dim
             \skip_horizontal:N \l__nicematrix_extra_left_margin_dim
@@ -1939,6 +2058,8 @@
       {
         \__nicematrix_math_toggle_token:
         \hbox_set_end:
+        \bool_if:NT \g__nicematrix_rotate_bool \__nicematrix_rotate_cell_box:
+        \__nicematrix_adjust_width_box:
         \__nicematrix_update_for_first_and_last_row:
         \dim_gset:Nn \g__nicematrix_width_last_col_dim
           { \dim_max:nn \g__nicematrix_width_last_col_dim { \box_wd:N \l__nicematrix_cell_box } }
@@ -2135,10 +2256,10 @@
       }
     \bool_if:NT \l__nicematrix_hlines_bool \__nicematrix_draw_hlines:
     \bool_if:NT \l__nicematrix_vlines_bool \__nicematrix_draw_vlines:
+    \cs_set_eq:NN \ialign \__nicematrix_old_ialign:
+    \seq_if_empty:NF \g__nicematrix_blocks_seq \__nicematrix_draw_blocks:
     \g__nicematrix_internal_code_after_tl
     \tl_gclear:N \g__nicematrix_internal_code_after_tl
-    \cs_set_eq:NN \ialign \__nicematrix_old_ialign:
-    \seq_if_empty:NF \g__nicematrix_blocks_seq \__nicematrix_draw_blocks:
     \bool_if:NT \c__nicematrix_tikz_loaded_bool
       {
         \tikzset
@@ -2406,7 +2527,7 @@
       {
         \__nicematrix_qpoint:n { col - \int_use:N \l__nicematrix_initial_j_int }
         \dim_set_eq:NN \l__nicematrix_x_initial_dim \pgf at x
-        \dim_add:Nn \l__nicematrix_x_initial_dim \__nicematrix_tab_or_array_colsep:
+        \dim_add:Nn \l__nicematrix_x_initial_dim \col at sep
         \__nicematrix_qpoint:n { row - \int_use:N \l__nicematrix_initial_i_int - base }
         \dim_set_eq:NN \l__nicematrix_y_initial_dim \pgf at y
       }
@@ -2415,7 +2536,7 @@
       {
         \__nicematrix_qpoint:n { col - \__nicematrix_succ:n \l__nicematrix_final_j_int }
         \dim_set_eq:NN \l__nicematrix_x_final_dim \pgf at x
-        \dim_sub:Nn \l__nicematrix_x_final_dim \__nicematrix_tab_or_array_colsep:
+        \dim_sub:Nn \l__nicematrix_x_final_dim \col at sep
         \__nicematrix_qpoint:n { row - \int_use:N \l__nicematrix_final_i_int - base }
         \dim_set_eq:NN \l__nicematrix_y_final_dim \pgf at y
       }
@@ -2448,8 +2569,7 @@
       {
         \__nicematrix_qpoint:n { col - \int_use:N \l__nicematrix_initial_j_int }
         \dim_set_eq:NN \l__nicematrix_x_initial_dim \pgf at x
-        \dim_add:Nn \l__nicematrix_x_initial_dim
-          { \bool_if:NTF \l__nicematrix_NiceTabular_bool \tabcolsep \arraycolsep }
+        \dim_add:Nn \l__nicematrix_x_initial_dim \col at sep
       }
       { \__nicematrix_set_initial_coords_from_anchor:n { mid~east } }
     \bool_if:NTF \l__nicematrix_final_open_bool
@@ -2456,8 +2576,7 @@
       {
         \__nicematrix_qpoint:n { col - \__nicematrix_succ:n \l__nicematrix_final_j_int }
         \dim_set_eq:NN \l__nicematrix_x_final_dim \pgf at x
-        \dim_sub:Nn \l__nicematrix_x_final_dim
-          { \bool_if:NTF \l__nicematrix_NiceTabular_bool \tabcolsep \arraycolsep }
+        \dim_sub:Nn \l__nicematrix_x_final_dim \col at sep
       }
       { \__nicematrix_set_final_coords_from_anchor:n { mid~west } }
     \bool_lazy_and:nnTF
@@ -3154,27 +3273,7 @@
     \int_step_inline:nnn { #1 } { #1 + #3 - 1 }
       { \cs_set:cpn { __nicematrix _ dotted _ ##1 - #2 } { } }
   }
-\cs_new_protected:Npn \__nicematrix_rotate:
-  {
-    \bool_if:NTF \l__nicematrix_NiceTabular_bool
-      { \group_insert_after:N \__nicematrix_rotate_ii: }
-      { \group_insert_after:N \__nicematrix_rotate_i: }
-  }
-\cs_new_protected:Npn \__nicematrix_rotate_i: { \group_insert_after:N \__nicematrix_rotate_ii: }
-\cs_new_protected:Npn \__nicematrix_rotate_ii: { \group_insert_after:N \__nicematrix_rotate_iii: }
-\cs_new_protected:Npn \__nicematrix_rotate_iii:
-  {
-    \box_rotate:Nn \l__nicematrix_cell_box { 90 }
-    \int_compare:nNnT \c at iRow = \l__nicematrix_last_row_int
-      {
-        \vbox_set_top:Nn \l__nicematrix_cell_box
-          {
-            \vbox_to_zero:n { }
-            \skip_vertical:n { - \box_ht:N \@arstrutbox + 0.8 ex }
-            \box_use:N \l__nicematrix_cell_box
-          }
-      }
-  }
+\cs_new_protected:Npn \__nicematrix_rotate: { \bool_gset_true:N \g__nicematrix_rotate_bool }
 \cs_new:Npn \__nicematrix_double_int_eval:n #1-#2 \q_stop
   { \int_eval:n { #1 } - \int_eval:n { #2 } }
 \AtBeginDocument
@@ -3921,7 +4020,7 @@
     \dim_set:Nn \l__nicematrix_x_initial_dim
       {
         \pgf at x +
-        \bool_if:NTF \l__nicematrix_NiceTabular_bool \tabcolsep \arraycolsep
+        \bool_if:NTF \l__nicematrix_NiceArray_bool \c_zero_dim \arraycolsep
         - \l__nicematrix_left_margin_dim
       }
     \__nicematrix_qpoint:n { col - \__nicematrix_succ:n \c at jCol }
@@ -3928,7 +4027,7 @@
     \dim_set:Nn \l__nicematrix_x_final_dim
       {
         \pgf at x -
-        \bool_if:NTF \l__nicematrix_NiceTabular_bool \tabcolsep \arraycolsep
+        \bool_if:NTF \l__nicematrix_NiceArray_bool \c_zero_dim \arraycolsep
         + \l__nicematrix_right_margin_dim
       }
     \tl_set:Nn \l_tmpa_tl { ( }
@@ -4191,13 +4290,24 @@
           { \int_use:N \g__nicematrix_env_int - \__nicematrix_i: - \__nicematrix_j: \l__nicematrix_suffix_tl}
       }
   }
+\keys_define:nn { NiceMatrix / Block / FirstPass }
+  {
+    l .code:n = \tl_set:Nn \l__nicematrix_pos_of_block_tl l ,
+    l .value_forbidden:n = true ,
+    r .code:n = \tl_set:Nn \l__nicematrix_pos_of_block_tl r ,
+    r .value_forbidden:n = true ,
+    c .code:n = \tl_set:Nn \l__nicematrix_pos_of_block_tl c ,
+    c .value_forbidden:n = true ,
+  }
 \NewExpandableDocumentCommand \__nicematrix_Block: { O { } m D < > { } m }
   { \__nicematrix_Block_i #2 \q_stop { #1 } { #3 } { #4 } }
 \cs_new:Npn \__nicematrix_Block_i #1-#2 \q_stop { \__nicematrix_Block_ii:nnnnn { #1 } { #2 } }
 \cs_new_protected:Npn \__nicematrix_Block_ii:nnnnn #1 #2 #3 #4 #5
   {
-    \bool_if:NT \l__nicematrix_NiceTabular_bool
-      { \tl_if_empty:nF { #4 } { \__nicematrix_error:n { angle~option~in~NiceTabular } } }
+    \tl_if_empty:NTF \l__nicematrix_cell_type_tl
+      { \tl_set:Nn \l__nicematrix_pos_of_block_tl c }
+      { \tl_set_eq:NN \l__nicematrix_pos_of_block_tl \l__nicematrix_cell_type_tl }
+    \keys_set_known:nn { NiceMatrix / Block / FirstPass } { #3 }
     \tl_set:Nx \l_tmpa_tl
       {
         { \int_use:N \c at iRow }
@@ -4206,14 +4316,124 @@
         { \int_eval:n { \c at jCol + #2 - 1 } }
       }
     \seq_gput_left:NV \g__nicematrix_pos_of_blocks_seq \l_tmpa_tl
-    \seq_gput_left:Nx \g__nicematrix_blocks_seq
+    \int_compare:nNnTF { #2 } = 1
       {
-        \l_tmpa_tl
-        { #3 }
-        \exp_not:n { { #4 \__nicematrix_math_toggle_token: #5 \__nicematrix_math_toggle_token: } }
+        \int_gincr:N \g__nicematrix_block_box_int
+        \cs_set_protected_nopar:Npn \diagbox ##1 ##2
+          {
+            \tl_gput_right:Nx \g__nicematrix_internal_code_after_tl
+              {
+                \__nicematrix_actually_diagbox:nnnnnn
+                  { \int_use:N \c at iRow }
+                  { \int_use:N \c at jCol }
+                  { \int_eval:n { \c at iRow + #1 - 1 } }
+                  { \int_eval:n { \c at jCol + #2 - 1 } }
+                  { \exp_not:n { ##1 } } { \exp_not:n { ##2 } }
+              }
+          }
+        \box_gclear_new:c
+          { g__nicematrix_ block _ box _ \int_use:N \g__nicematrix_block_box_int _ box }
+        \hbox_gset:cn
+          { g__nicematrix_ block _ box _ \int_use:N \g__nicematrix_block_box_int _ box }
+          {
+            \color_ensure_current:
+            \bool_if:NTF \l__nicematrix_NiceTabular_bool
+              {
+                \group_begin:
+                \cs_set:Npn \arraystretch { 1 }
+                \dim_set_eq:NN \extrarowheight \c_zero_dim
+                #4
+                \bool_if:NT \g__nicematrix_rotate_bool
+                  { \tl_set:Nn \l__nicematrix_pos_of_block_tl c }
+                \exp_args:Nnx \begin { tabular }
+                  { @ { } \l__nicematrix_pos_of_block_tl @ { } }
+                  #5
+                \end { tabular }
+                \group_end:
+              }
+              {
+                \group_begin:
+                \cs_set:Npn \arraystretch { 1 }
+                \dim_set_eq:NN \extrarowheight \c_zero_dim
+                #4
+                \bool_if:NT \g__nicematrix_rotate_bool
+                  { \tl_set:Nn \l__nicematrix_pos_of_block_tl c }
+                \c_math_toggle_token
+                \exp_args:Nnx \begin { array }
+                  { @ { } \l__nicematrix_pos_of_block_tl @ { } }
+                  #5
+                \end { array }
+                \c_math_toggle_token
+                \group_end:
+              }
+          }
+        \bool_if:NT \g__nicematrix_rotate_bool
+          {
+            \box_grotate:cn
+              { g__nicematrix_ block _ box _ \int_use:N \g__nicematrix_block_box_int _ box }
+              { 90 }
+            \bool_gset_false:N \g__nicematrix_rotate_bool
+          }
+        \dim_gset:Nn \g__nicematrix_blocks_width_dim
+          {
+            \dim_max:nn
+              \g__nicematrix_blocks_width_dim
+              {
+                \box_wd:c
+                  { g__nicematrix_ block _ box _ \int_use:N \g__nicematrix_block_box_int _ box }
+              }
+          }
+        \seq_gput_right:Nx \g__nicematrix_blocks_seq
+          {
+            \l_tmpa_tl
+            { #3 , \l__nicematrix_pos_of_block_tl }
+            {
+              \box_use_drop:c
+                { g__nicematrix_ block _ box _ \int_use:N \g__nicematrix_block_box_int _ box }
+            }
+          }
       }
+      {
+        \seq_gput_right:Nx \g__nicematrix_blocks_seq
+          {
+            \l_tmpa_tl
+            { #3 }
+            \exp_not:n
+              {
+                {
+                  \bool_if:NTF \l__nicematrix_NiceTabular_bool
+                    {
+                      \group_begin:
+                      \cs_set:Npn \arraystretch { 1 }
+                      \dim_set_eq:NN \extrarowheight \c_zero_dim
+                      #4
+                      \bool_if:NT \g__nicematrix_rotate_bool
+                        { \tl_set:Nn \l__nicematrix_pos_of_block_tl c }
+                      \exp_args:Nnx \begin { tabular }
+                        { @ { } \l__nicematrix_pos_of_block_tl @ { } }
+                        #5
+                      \end { tabular }
+                      \group_end:
+                    }
+                    {
+                      \group_begin:
+                      \cs_set:Npn \arraystretch { 1 }
+                      \dim_set_eq:NN \extrarowheight \c_zero_dim
+                      #4
+                      \bool_if:NT \g__nicematrix_rotate_bool
+                        { \tl_set:Nn \l__nicematrix_pos_of_block_tl c }
+                      \c_math_toggle_token
+                      \exp_args:Nnx \begin { array }
+                        { @ { } \l__nicematrix_pos_of_block_tl @ { } } #5 \end { array }
+                      \c_math_toggle_token
+                      \group_end:
+                    }
+                }
+              }
+          }
+      }
   }
-\keys_define:nn { NiceMatrix / Block }
+\keys_define:nn { NiceMatrix / Block / SecondPass }
   {
     tikz .tl_set:N = \l__nicematrix_tikz_tl ,
     tikz .value_required:n = true ,
@@ -4232,7 +4452,7 @@
 \cs_new_protected:Npn \__nicematrix_Block_iii:nnnnnn #1 #2 #3 #4 #5 #6
   {
     \group_begin:
-    \keys_set:nn { NiceMatrix / Block } { #5 }
+    \keys_set:nn { NiceMatrix / Block / SecondPass} { #5 }
     \tl_if_empty:NF \l__nicematrix_color_tl
       {
         \tl_gput_right:Nx \g_nicematrix_code_before_tl
@@ -4258,6 +4478,7 @@
       { \msg_error:nnnn { nicematrix } { Block~too~large } { #1 } { #2 } }
       {
         \hbox_set:Nn \l__nicematrix_cell_box { #6 }
+        \bool_if:NT \g__nicematrix_rotate_bool \__nicematrix_rotate_cell_box:
         \pgfpicture
           \pgfrememberpicturepositiononpagetrue
           \pgf at relevantforpicturesizefalse
@@ -4352,15 +4573,19 @@
                     r { base~east }
                   }
               }
-              { \box_use_drop:N \l__nicematrix_cell_box } { } { }
+              { \box_use_drop_xi:N \l__nicematrix_cell_box } { } { }
           }
           {
+            \int_compare:nNnT \c at jCol = 0
+              { \tl_set:Nn \l__nicematrix_pos_of_block_tl r }
+            \int_compare:nNnT \c at jCol = \l__nicematrix_last_col_int
+              { \tl_set:Nn \l__nicematrix_pos_of_block_tl l }
             \pgftransformshift
               {
                 \pgfpointanchor
                   { \__nicematrix_env: - #1 - #2 - block - short }
                   {
-                     \str_case:Vn \l__nicematrix_pos_of_block_tl
+                    \str_case:Vn \l__nicematrix_pos_of_block_tl
                       {
                         c { center }
                         l { west }
@@ -4379,7 +4604,7 @@
                     r { east }
                   }
               }
-              { \box_use_drop:N \l__nicematrix_cell_box } { } { }
+              { \box_use_drop_xii:N \l__nicematrix_cell_box } { } { }
           }
         \endpgfpicture
       }
@@ -4781,11 +5006,6 @@
     is~unknown. \\
     This~error~is~fatal.
   }
-\__nicematrix_msg_new:nn { angle~option~in~NiceTabular }
-  {
-    You~should~not~the~option~between~angle~brackets~(<~and~>)~for~a~command~
-    \token_to_str:N \Block\ in~\{NiceTabular\}.~However,~you~can~go~on.
-  }
 \__nicematrix_msg_new:nn { tabularnote~forbidden }
   {
     You~can't~use~the~command~\token_to_str:N\tabularnote\
@@ -4833,7 +5053,7 @@
     For~a~list~of~the~available~keys,~type~H~<return>.
   }
   {
-    The~available~options~are~(in~alphabetic~order):~c,~
+    The~available~options~are~(in~alphabetic~order):~-,~c,~
     color,~l,~and~r.
   }
 \__nicematrix_msg_new:nnn { Unknown~key~for~notes }
@@ -4926,6 +5146,7 @@
     first-row,~
     hlines,~
     hvlines,~
+    hvlines-except-corners,~
     last-col,~
     last-row,~
     left-margin,~
@@ -4975,6 +5196,7 @@
     first-row,~
     hlines,~
     hvlines,~
+    hvlines-except-corners,~
     l,~
     last-col,~
     last-row,~
@@ -5024,6 +5246,7 @@
     first-row,~
     hlines,~
     hvlines,~
+    hvlines-except-corners,~
     last-col,~
     last-row,~
     left-margin,~



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