texlive[56887] Master/texmf-dist: nicematrix (8nov20)

commits+karl at tug.org commits+karl at tug.org
Sun Nov 8 22:43:02 CET 2020


Revision: 56887
          http://tug.org/svn/texlive?view=revision&revision=56887
Author:   karl
Date:     2020-11-08 22:43:02 +0100 (Sun, 08 Nov 2020)
Log Message:
-----------
nicematrix (8nov20)

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-11-08 21:42:44 UTC (rev 56886)
+++ trunk/Master/texmf-dist/doc/latex/nicematrix/nicematrix-french.tex	2020-11-08 21:43:02 UTC (rev 56887)
@@ -413,14 +413,24 @@
 |\Block| pour placer un élément au centre d'un rectangle de cases fusionnées. 
 
 La commande |\Block| doit être utilisée dans la case supérieure gauche du bloc
-avec deux arguments. Le premier argument est la taille de ce bloc avec la
-syntaxe $i$-$j$ où $i$ est le nombre de rangées et $j$ le nombre de colonnes du
-bloc. Le deuxième argument, est, sans surprise, le contenu du bloc.
+avec deux arguments. 
 
-Dans |{NiceTabular}|, le contenu est composé en mode texte. Dans les autres
-environnements, il est composé en mode mathématique.
+\begin{itemize}
+\item Le premier argument est la taille de ce bloc avec la syntaxe $i$-$j$ où
+$i$ est le nombre de rangées et $j$ le nombre de colonnes du bloc.
 
+\colorbox{yellow!50}{\bfseries Nouveau 5.6}\enskip Si cet argument est laissé
+blanc, la valeur par défaut est |1-1|. Si le nombre de rangées n'est pas
+indiqué, le bloc s'étend jusqu'à la dernière rangée (idem pour les colonnes).
 
+\item Le deuxième argument, est le contenu du bloc. On peut utiliser |\\| dans
+ce contenu pour avoir un contenu sur plusieurs lignes. Dans |{NiceTabular}|, le
+contenu est composé en mode texte tandis que, dans les autres environnements, il
+est composé en mode mathématique.
+\end{itemize}
+
+
+
 \interitem
 Voici un exemple d'utilisation de la commande |\Block| dans une matrice mathématique.
 
@@ -447,7 +457,10 @@
 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.
+LaTeX qui sera inséré \emph{avant} le début du mode mathématique.\footnote{Cet
+  argument entre chevrons peut aussi être utilisé pour insérer une commande de
+  fonte comme |\bfseries| dans le cas où la commande |\\| est utilisée dans le
+  contenu du bloc.} 
 
 \medskip
 \begin{BVerbatim}[baseline=c,boxwidth=10.6cm]
@@ -469,8 +482,7 @@
 
 
 \bigskip
-\colorbox{yellow!30}{Nouveau 5.3}\enskip On peut régler le positionnement
-horizontal du bloc avec l'une des clés |l|, |c| et |r|.
+On peut régler le positionnement horizontal du bloc avec l'une des clés |l|, |c| et |r|.
 
 
 \medskip
@@ -493,10 +505,11 @@
 
 
 \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).
+\textbf{On doit remarquer que, par défaut, les blocs ne créent pas d'espace}. Il
+n'y a exception que pour les blocs mono-rangée et les blocs mono-colonne comme
+expliqué juste après.
 
+
 \medskip
 Dans l'exemple suivant, on a dû élargir à la main les colonnes 2 et 3 (avec la
 construction |wc{...}| de \pkg{array}).
@@ -524,6 +537,7 @@
 
 
 
+
 \subsection{Les blocs mono-colonne}
 
 \colorbox{yellow!30}{Nouveau 5.4}\enskip Les blocs mono-colonne ont un
@@ -534,7 +548,7 @@
 
 \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).
+avoir sa propre spécification d'alignement horizontal).
 
 \item Les spécifications de fontes imposées à une colonne via la construction
 |>{...}| dans le préambule du tableau sont prises en compte pour les
@@ -574,6 +588,63 @@
 \end{scope}
 
 
+\subsection{Les blocs mono-rangée}
+
+\colorbox{yellow!50}{\textbf{Nouveau 5.6}}\enskip Pour les blocs mono-rangée, la
+hauteur (\emph{height}) et la profondeur (\emph{depth}) naturelles sont prises en
+compte pour la hauteur et la largeur de la rangée en cours (comme le fait la
+commande standard |\multicolumn| de LaTeX).
+
+
+
+
+\subsection{Les blocs mono-cellule}
+
+Les blocs mono-cellule héritent des caractéristiques des blocs mono-colonne et
+des blocs mono-rangée.
+
+\medskip
+Il y a deux raisons à l'utilisation d'un bloc mono-cellule.
+
+\begin{itemize}
+\item Un bloc mono-cellule permet d'utiliser la commande |\\| pour composer le
+bloc sur plusieurs lignes.
+
+\item On peut utiliser l'option d'alignement horizontal du bloc pour déroger à
+la consigne générale donnée dans le préambule pour cette colonne.
+\end{itemize}
+
+\medskip
+\begin{BVerbatim}[baseline=c,boxwidth=10cm]
+\begin{NiceTabular}{cc}
+\toprule
+Écrivain 
+& ~emphase#\Block[l]{}{année de\\ naissance}@ \\
+\midrule
+Hugo & 1802 \\
+Balzac & 1799 \\
+\bottomrule
+\end{NiceTabular}
+\end{BVerbatim}
+%
+\begin{NiceTabular}{cc}
+\toprule
+Écrivain 
+& \Block[l]{}{année de\\ naissance} \\
+\midrule
+Hugo & 1802 \\
+Balzac & 1799 \\
+\bottomrule
+\end{NiceTabular}
+
+\medskip
+On rappelle que si le premier argument obligatoire de |\Block| est laisssé
+blanc, alors le bloc est mono-cellule\footnote{On peut considérer que la valeur par
+défaut de ce premier argument obligatoire est |1-1|.}.
+
+
+
+
 \subsection{Petite remarque}
 
 On remarquera que le centrage horizontal du contenu des blocs est
@@ -836,7 +907,7 @@
 \label{hvlines}
 
 La clé |hvlines| demande le tracé de tous les filets horizontaux et verticaux
-(sauf dans les blocs et dans les blocks virtuels déterminés par des
+(sauf dans les blocs et dans les blocs virtuels déterminés par des
 lignes en pointillés).
 
 \medskip
@@ -862,7 +933,7 @@
 \subsection{La clé hvlines-except-corners}
 
 La clé |hvlines-except-corners| demande le tracé de tous les filets horizontaux
-et verticaux sauf dans les blocs (y compris dans les blocks virtuels déterminés par des
+et verticaux sauf dans les blocs (y compris dans les blocs virtuels déterminés par des
 lignes en pointillés) et sauf dans les coins vides. 
 
 \medskip
@@ -2266,7 +2337,7 @@
   de la cellule courante.} (pour un exemple, voir page
 \pageref{exemple-CodeAfter}). \colorbox{yellow!50}{\textbf{Nouveau 5.5}}\enskip
 Avant la version 5.5, il fallait parfois mettre le mot-clé |\omit| devant
-|\CodeAfter| dans certains circonstances. Depuis la version 5.5, on ne doit
+|\CodeAfter| dans certaines circonstances. Depuis la version 5.5, on ne doit
 \emph{jamais} mettre |\omit|.
 
 
@@ -2910,11 +2981,21 @@
 
 \subsection{Les nœuds correspondant aux contenus des cases}
 
-L'extension \pkg{nicematrix} crée un nœud PGF-Tikz pour chaque case (non vide)
+L'extension \pkg{nicematrix} crée un nœud PGF-Tikz pour chaque case non vide
 du tableau considéré. Ces nœuds sont utilisés, entre autres, pour tracer les
 lignes en pointillés entre les cases du tableau.
 
 \smallskip
+\textbf{Attention} : Par défaut, aucun nœud n'est créé dans une case vide. 
+
+\smallskip
+\colorbox{yellow!50}{\textbf{Nouveau 5.6}}\enskip 
+Néanmoins, on peut forcer la création d'un nœud avec la commande
+|\NotEmpty|.\footnote{Il faut toutefois remarquer qu'avec cette commande, la
+  case est considérée comme non vide, ce qui a des conséquences sur le tracé des
+lignes pointillées (cf.~p.~\pageref{Cdots}).}
+
+\bigskip
 Tous les nœuds du document doivent avoir des noms deux à deux distincts et le
 nom de ces nœuds doit donc faire intervenir le numéro de l'environnement
 courant. Les environnements créés par \pkg{nicematrix} sont en effet numérotés
@@ -2937,6 +3018,8 @@
 case considérée. On peut les utiliser avec \textsc{pgf} mais l'utilisateur final
 préférera sans doute utiliser Tikz (qui est une sur-couche de \textsc{pgf}). Il
 faut néanmoins se souvenir que \pkg{nicematrix} ne charge pas Tikz par défault.
+Dans les exemples qui suivent, on suppose que Tikz a été chargé par
+l'utilisateur. 
 
 \bigskip
 \begin{BVerbatim}[baseline=c,boxwidth=11cm]
@@ -2962,8 +3045,8 @@
 
 \bigskip
 Dans le |code-after|, et si Tikz est chargé, les choses sont plus simples. On
-peut (et on doit) désigner les nœuds sous la forme $i$-$j$ : il n'y a pas besoin
-de préciser l'environnement qui est évidemment l'environnement courant.
+peut (et on doit) désigner les nœuds sous la forme $i$-$j$ : il n'y a pas à
+préciser l'environnement qui est évidemment l'environnement courant.
 
 
 \medskip
@@ -3328,7 +3411,7 @@
 hachures). Il est possible de programmer une telle commande |\hatchcell| comme
 suit, en utilisant explicitement la variable publique
 |\g_nicematrix_code_before_tl| (ce code nécessite le chargement préalable de la
-bibliothèque Tikz \pkg{patterns}).
+bibliothèque Tikz \pkg{patterns} : |\usetikzlibrary{patterns}|).
 
 
 \begin{scope}
@@ -3527,23 +3610,19 @@
 \end{scope}
 
 \bigskip
-\colorbox{yellow!30}{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]|\rlap{.} 
+On peut choisir l'instruction |\Ddots| qui sera tracée en premier (et qui
+servira pour tracer les suivantes quand la parallélisation est activée) avec la
+clé |draw-first| : |\Ddots[draw-first]|\rlap{.}
 
 \subsection{Les cases «vides»}
 
 \label{empty-cells}
 Une instruction comme |\Ldots|, |\Cdots|, etc. essaye de déterminer la première
-case vide de part et d'autre de la case considérée. Néanmoins, une case vide
+case vide de part et d'autre de la case considérée. Néanmoins, une case «vide»
 n'est pas nécessairement sans contenu dans le codage TeX (c'est-à-dire sans
-aucun token entre les deux esperluettes~|&|). En effet, une case dont le contenu
-est |\hspace*{1cm}| peut être considérée comme vide.
+aucun token entre les deux esperluettes~|&|). Les règles précises sont les
+suivantes : 
 
-\interitem
-Pour \pkg{nicematrix}, les règles précises sont les suivantes :
-
 \begin{itemize}
 \item Une case implicite est vide. Par exemple, dans la matrice suivante
 
@@ -3560,6 +3639,10 @@
 \item Chaque case avec un rendu par TeX de largeur nulle est vide.
 
 \medskip
+\item Une case qui contient la commande |\NotEmpty| est non vide (et un nœud
+PGF/Tikz est créé pour cette case).
+
+\medskip
 \item Une case avec une commande |\Hspace| (ou |\Hspace*|) est vide. Cette
 commande |\Hspace| est une commande définie par l'extension \pkg{nicematrix}
 avec la même signification que |\hspace| excepté que la case où cette commande
@@ -4374,7 +4457,6 @@
 \end{tikzpicture}
 
 
-\newpage
 
 \section*{Autre documentation}
 

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-11-08 21:42:44 UTC (rev 56886)
+++ trunk/Master/texmf-dist/source/latex/nicematrix/nicematrix.dtx	2020-11-08 21:43:02 UTC (rev 56887)
@@ -15,8 +15,8 @@
 %
 % \fi
 % \iffalse
-\def\myfileversion{5.5}
-\def\myfiledate{2020/10/20}
+\def\myfileversion{5.6}
+\def\myfiledate{2020/11/08}
 %
 %
 %<*batchfile>
@@ -165,9 +165,9 @@
 %
 % \bigskip
 % This package requires and \textbf{loads} the packages \pkg{l3keys2e},
-% \pkg{xparse}, \pkg{array}, \pkg{amsmath}, \pkg{pgfcore} and the module
-% \pkg{shapes} of \textsc{pgf} (\pkg{tikz}, which is a layer over \textsc{pgf}
-% is \emph{not} loaded). The final user only has to load the package with
+% \pkg{array}, \pkg{amsmath}, \pkg{pgfcore} and the module \pkg{shapes} of
+% \textsc{pgf} (\pkg{tikz}, which is a layer over \textsc{pgf} is \emph{not}
+% loaded). The final user only has to load the package with
 % |\usepackage{nicematrix}|.
 %
 %
@@ -452,13 +452,23 @@
 % 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
+% two arguments. 
+% 
+% \begin{itemize}
+% \item The first argument is the size of the block with the syntax
 % $i$\verb|-|$j$ where $i$ is the number of rows of the block and $j$ its number
-% of columns. The second argument is the content of the block.
+% of columns. 
 %
-% In |{NiceTabular}| the content of the block is composed in text mode. In the
-% other environments, it is composed in math mode.
+% \colorbox{yellow!50}{\bfseries New 5.6}\enskip If this argument is empty, its
+% default value is |1-1|. If the number of rows is not specified, the block
+% extends until the last row (idem for the columns).
 %
+% \item The second argument is the content of the block. It's possible to use
+% |\\| in that content to have a content on several lines. In |{NiceTabular}|
+% the content of the block is composed in text mode whereas, in the other
+% environments, it is composed in math mode.
+% \end{itemize}
+% 
 %
 % \interitem
 % Here is an example of utilisation of the command |\Block| in mathematical matrices.
@@ -487,7 +497,9 @@
 % 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. 
+% math mode.\footnote{This argument between angular brackets may also be used to
+% insert a command of font such as |\bfseries| when the command |\\| is used in
+% the content of the block.}
 %
 % \medskip
 % \begin{BVerbatim}[baseline=c,boxwidth=10.6cm]
@@ -510,8 +522,8 @@
 % \end{scope}
 %
 % \medskip
-% \colorbox{yellow!30}{New 5.3}\enskip It's possible to set the
-% horizontal position of the block with one of the keys |l|, |c| and |r|.
+% It's possible to set the horizontal position of the block with one of the keys
+% |l|, |c| and |r|.
 %
 %
 % \medskip
@@ -534,8 +546,9 @@
 %
 %
 % \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).
+% {\bfseries One must remark that, by default, the commands |\Blocks| don't create space}.
+% There is exception only for the blocks mono-row and the blocks mono-column as
+% explained just below.
 %
 % \medskip
 % In the following example, we have had to enlarge by hand the columns 2 and 3
@@ -613,7 +626,54 @@
 % \end{scope}
 %
 % 
+% \subsection{The mono-row blocks}
 %
+% \colorbox{yellow!50}{\textbf{New 5.6}}\enskip For the mono-row blocks, the
+% natural height and depth are taken into account for the height and depth of
+% the current row (as does a standard |\multicolumn| of LaTeX).
+%
+% \subsection{The mono-cell blocks}
+%
+% A mono-cell block inherits all the properties of the mono-row blocks and
+% mono-column blocks.
+%
+% \medskip
+% There are two reasons to use a mono-column block:
+% \begin{itemize}
+% \item It's possible to use the command |\\| in a (mono-cell) block.
+%
+% \item It's possible to use the option of horizontal alignment of the block in
+% derogation of the type of column given in the preamble of the array.
+% \end{itemize}
+% 
+% \bigskip
+% \begin{BVerbatim}[baseline=c,boxwidth=10cm]
+% \begin{NiceTabular}{cc}
+% \toprule
+% Write & ~emphase#\Block[l]{}{year\\ of birth}@ \\
+% \midrule
+% Hugo & 1802 \\
+% Balzac & 1799 \\
+% \bottomrule
+% \end{NiceTabular}
+% \end{BVerbatim}
+% \begin{NiceTabular}{cc}
+% \toprule
+% Write & \Block[l]{}{year\\ of birth} \\
+% \midrule
+% Hugo & 1802 \\
+% Balzac & 1799 \\
+% \bottomrule
+% \end{NiceTabular}
+%
+% \medskip
+% We recall that if the first mandatory argument of |\Block| is left blank, the
+% block is mono-cell.\footnote{One may consider that the default value of the
+% first mandatory argument of |\Block| is |1-1|}
+% 
+% 
+%
+%
 % \subsection{A small remark}
 %
 % One should remark that the horizontal centering of the contents of the blocks
@@ -2898,7 +2958,18 @@
 % of the considered array. These nodes are used to draw the dotted lines between
 % the cells of the matrix (inter alia).
 %
+%
 % \smallskip
+% \textbf{Caution} : By default, no node is created in a empty cell.
+%
+% \smallskip
+% \colorbox{yellow!50}{\textbf{New 5.6}}\enskip 
+% However, it's possible to impose the creation of a node with the command |\NotEmpty|.
+% \footnote{One should note that, with that command, the cell is considered as
+% non-empty, which has consequencies for the continuous dotted lines (cf.
+% p.~\pageref{Cdots}).} 
+%
+% \medskip
 % The nodes of a document must have distinct names. That's why the names of the
 % nodes created by \pkg{nicematrix} contains the number of the current
 % environment. Indeed, the environments of \pkg{nicematrix} are numbered by a
@@ -2921,6 +2992,7 @@
 % possible to use these nodes with \textsc{pgf} but the final user will
 % probably prefer to use Tikz (which is a convenient layer upon \textsc{pgf}).
 % However, one should remind that \pkg{nicematrix} doesn't load Tikz by default.
+% In the following examples, we assume that Tikz has been loaded.
 % 
 % \bigskip
 % \begin{BVerbatim}[baseline=c,boxwidth=11cm]
@@ -2944,9 +3016,9 @@
 % Don't forget the options |remember picture| and |overlay|.
 %
 % \bigskip
-% In the |code-after|, and if Tikz is loaded, the things are easier. One may
-% design the nodes with the form $i$-$j$: there is no need to indicate the
-% environment which is of course the current environment.
+% In the |code-after|, the things are easier : one must refer to the nodes with
+% the form $i$-$j$ (we don't have to indicate the environment which is of
+% course the current environment).
 %
 %
 % \medskip
@@ -3304,7 +3376,7 @@
 % cell (with an optional argument between brackets for the color). It's possible
 % to program such command |\hatchcell| as follows, explicitely using the public
 % variable |\g_nicematrix_code_before_tl| (this code requires the Tikz library
-% \pkg{patterns}).
+% \pkg{patterns}: |\usetikzlibrary{patterns}|).
 %
 %
 % \begin{scope}
@@ -3497,23 +3569,18 @@
 %
 % \end{scope}
 %
-% \colorbox{yellow!30}{New 5.3}\enskip It's possible to specify the
-% instruction |\Ddots| which will be drawn first (and which will be used to draw
-% the other diagonal dotted lines when the parallelization is in force) with the
-% key |draw-first|: |\Ddots[draw-first]|.
+% It's possible to specify the instruction |\Ddots| which will be drawn first
+% (and which will be used to draw the other diagonal dotted lines when the
+% parallelization is in force) with the key |draw-first|: |\Ddots[draw-first]|.
 %
 % \subsection{The ``empty'' cells}
 % 
 % \label{empty-cells}
 % An instruction like |\Ldots|, |\Cdots|, etc. tries to determine the first
-% non-empty cells on both sides. However, an empty cell is not necessarily a
+% non-empty cell on both sides. However, an ``empty cell'' is not necessarily a
 % cell with no TeX content (that is to say a cell with no token between the two 
-% ampersands~|&|). Indeed, a cell which only contains |\hspace*{1cm}| may be
-% considered as empty.
+% ampersands~|&|). The precise rules are as follow.
 %
-% \interitem
-% For \pkg{nicematrix}, the precise rules are as follow.
-%
 % \begin{itemize}
 % \item An implicit cell is empty. For example, in the following matrix:
 %
@@ -3529,6 +3596,9 @@
 % \medskip
 % \item Each cell whose TeX ouput has a width equal to zero is empty.
 %
+% \medskip
+% \item A cell containing the command |\NotEmpty| is not empty (and a PGF/Tikz
+% node) is created in that cell.
 %
 % \medskip
 % \item A cell with a command |\Hspace| (or |\Hspace*|) is empty. This command
@@ -4487,9 +4557,9 @@
 %
 % \bigskip
 % We define a command |\iddots| similar to |\ddots| ($\ddots$) but with dots
-% going forward ($\iddots$). We use |\ProvideDocumentCommand| of \pkg{xparse},
-% and so, if the command |\iddots| has already been defined (for example by the
-% package \pkg{mathdots}), we don't define it again. 
+% going forward ($\iddots$). We use |\ProvideDocumentCommand| and so, if the
+% command |\iddots| has already been defined (for example by the package
+% \pkg{mathdots}), we don't define it again.
 % 
 %    \begin{macrocode}
 \ProvideDocumentCommand \iddots { }
@@ -4927,14 +4997,21 @@
 % \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|
+% That's why we compute the width of that block in the |\g_@@_blocks_wd_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|.
+% of that box to take into account the length |\g_@@_blocks_wd_dim|.
 %    \begin{macrocode}
-\dim_new:N \g_@@_blocks_width_dim
+\dim_new:N \g_@@_blocks_wd_dim
 %    \end{macrocode}
 %
 % \bigskip
+% Idem pour the blocks mono-row.
+%    \begin{macrocode}
+\dim_new:N \g_@@_blocks_ht_dim
+\dim_new:N \g_@@_blocks_dp_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
@@ -5033,7 +5110,7 @@
 % 
 % \bigskip
 % The following token list corresponds to the option |code-after| (it's also
-% possible to set the value of that parameter with the command |\CodeAfter|).
+% possible to set the value of that parameter with the keyword |\CodeAfter|).
 %    \begin{macrocode}
 \tl_new:N \g_nicematrix_code_after_tl
 %    \end{macrocode}
@@ -5078,6 +5155,13 @@
 \bool_new:N \g_@@_row_of_col_done_bool
 %    \end{macrocode}
 % 
+% \bigskip
+% It's possible to use the command |\NotEmpty| to specify explicitely that a
+% cell must be considered as non empty by \pkg{nicematrix} (the Tikz nodes are
+% constructed only the non empty cells).
+%    \begin{macrocode}
+\bool_new:N \g_@@_not_empty_cell_bool
+%    \end{macrocode}
 % 
 % \bigskip
 % |\l_@@_code_before_tl| may contain two types of informations:
@@ -6371,14 +6455,26 @@
 %    \end{macrocode}
 %
 %    \begin{macrocode}
-\cs_new_protected:Npn \@@_adjust_width_box:
+\cs_new_protected:Npn \@@_adjust_size_box:
   {
-    \dim_compare:nNnT \g_@@_blocks_width_dim > \c_zero_dim
+    \dim_compare:nNnT \g_@@_blocks_wd_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 
+          { \dim_max:nn { \box_wd:N \l_@@_cell_box } \g_@@_blocks_wd_dim }  
+        \dim_gzero:N \g_@@_blocks_wd_dim 
       }
+    \dim_compare:nNnT \g_@@_blocks_dp_dim > \c_zero_dim
+      {
+        \box_set_dp:Nn \l_@@_cell_box
+          { \dim_max:nn { \box_dp:N \l_@@_cell_box } \g_@@_blocks_dp_dim }  
+        \dim_gzero:N \g_@@_blocks_dp_dim 
+      }
+    \dim_compare:nNnT \g_@@_blocks_ht_dim > \c_zero_dim
+      {
+        \box_set_ht:Nn \l_@@_cell_box
+          { \dim_max:nn { \box_ht:N \l_@@_cell_box } \g_@@_blocks_ht_dim }  
+        \dim_gzero:N \g_@@_blocks_ht_dim 
+      }
   }
 %    \end{macrocode}
 % 
@@ -6388,7 +6484,7 @@
     \@@_math_toggle_token: 
     \hbox_set_end:
     \bool_if:NT \g_@@_rotate_bool \@@_rotate_cell_box:
-    \@@_adjust_width_box:
+    \@@_adjust_size_box:
 %    \end{macrocode}
 %
 %    \begin{macrocode}
@@ -6438,11 +6534,14 @@
     \bool_if:NTF \g_@@_empty_cell_bool
       { \box_use_drop:N \l_@@_cell_box }
       {
-        \dim_compare:nNnTF { \box_wd:N \l_@@_cell_box } > \c_zero_dim
+        \bool_lazy_or:nnTF 
+          \g_@@_not_empty_cell_bool
+          { \dim_compare_p:nNn { \box_wd:N \l_@@_cell_box } > \c_zero_dim }
           \@@_node_for_the_cell:
           { \box_use_drop:N \l_@@_cell_box }
       }
     \bool_gset_false:N \g_@@_empty_cell_bool
+    \bool_gset_false:N \g_@@_not_empty_cell_bool
   } 
 %    \end{macrocode}
 % 
@@ -6832,6 +6931,7 @@
     \cs_set_eq:NN \dotfill \@@_old_dotfill:
     \cs_set_eq:NN \CodeAfter \@@_CodeAfter:
     \cs_set_eq:NN \diagbox \@@_diagbox:nn
+    \cs_set_eq:NN \NotEmpty \@@_NotEmpty:
     \bool_if:NT \l_@@_colortbl_like_bool \@@_colortbl_like:
     \bool_if:NT \l_@@_renew_dots_bool \@@_renew_dots:
 %    \end{macrocode}
@@ -7496,7 +7596,7 @@
           }
           { \tl_gclear:N \g_@@_preamble_tl }
 %    \end{macrocode}
-% The counter |\l_tmpa_int| will be count the number of consecutive occurrences
+% The counter |\l_tmpa_int| will count the number of consecutive occurrences
 % of the symbole \verb+|+.
 %    \begin{macrocode}
         \int_zero:N \l_tmpa_int
@@ -7706,7 +7806,7 @@
         > {
             \hbox_set:Nw \l_@@_cell_box
             \@@_Cell:
-            \tl_set:Nn \l_@@_cell_type_tl { #1 }
+            \tl_set:Nn \l_@@_cell_type_tl { #3 }
           }
         c
         < {
@@ -7714,7 +7814,7 @@
             #1
             \hbox_set_end: 
             \bool_if:NT \g_@@_rotate_bool \@@_rotate_cell_box:
-            \@@_adjust_width_box:
+            \@@_adjust_size_box:
             \makebox [ #4 ] [ #3 ] { \box_use_drop:N \l_@@_cell_box }   
           }
       }
@@ -8445,7 +8545,7 @@
         \@@_math_toggle_token:
         \hbox_set_end:
         \bool_if:NT \g_@@_rotate_bool \@@_rotate_cell_box:
-        \@@_adjust_width_box:
+        \@@_adjust_size_box:
         \@@_update_for_first_and_last_row:
 %    \end{macrocode}
 % We actualise the width of the ``first column'' because we will use this width
@@ -8515,7 +8615,7 @@
         \@@_math_toggle_token:
         \hbox_set_end:
         \bool_if:NT \g_@@_rotate_bool \@@_rotate_cell_box:
-        \@@_adjust_width_box:
+        \@@_adjust_size_box:
         \@@_update_for_first_and_last_row:
 %    \end{macrocode}
 % We actualise the width of the ``last column'' because we will use this width
@@ -8628,6 +8728,14 @@
 %    \end{macrocode}
 %
 % \bigskip
+% The following command will be linked to |\NotEmpty| in the environments of
+% \pkg{nicematrix}. 
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_NotEmpty:
+  { \bool_gset_true:N \g_@@_not_empty_cell_bool }
+%    \end{macrocode}
+%
+% \bigskip
 % \subsection*{The environments \{NiceTabular\}  and \{NiceTabular*\}}
 %
 %    \begin{macrocode}
@@ -8845,6 +8953,13 @@
 %    \begin{macrocode}
     \@@_compute_corners:
 %    \end{macrocode}
+%
+% \bigskip
+% The sequence |\g_@@_pos_of_blocks_seq| must be ``adjusted'' (for the case
+% where the user have written something like |\Block{1-}|).
+%    \begin{macrocode}
+    \@@_adjust_pos_of_blocks_seq:
+%    \end{macrocode}
 % 
 % \bigskip
 % The following code is only for efficiency. We determine whether the potential
@@ -8950,7 +9065,41 @@
 %    \end{macrocode}
 %
 % 
+% \bigskip
+% We remind that the first mandatory argument of the command |\Block| is the
+% size of the block with the special format $i$|-|$j$. However, the user is
+% allowed to omit $i$ or $j$ (or both). This will be interpreted as: the last
+% row (resp. column) of the block will be the last row (resp. column) of the
+% block (without the potential exterior row---resp. column---of the array). By
+% convention, this is stored in |\g_@@_pos_of_blocks_seq| (and
+% |\g_@@_blocks_seq|) as a number of rows (resp. columns) for the block equal to
+% 100. It's possible, after the construction of the array, to replace these
+% values by the correct ones (since we know the number of rows and columns of
+% the array).
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_adjust_pos_of_blocks_seq:
+  {
+    \seq_gclear:N \g_tmpa_seq
+    \seq_map_inline:Nn \g_@@_pos_of_blocks_seq
+      { \@@_adjust_pos_of_blocks_seq_i:nnnn ##1 }
+    \seq_gset_eq:NN \g_@@_pos_of_blocks_seq \g_tmpa_seq
+  }
+%    \end{macrocode}
 % 
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_adjust_pos_of_blocks_seq_i:nnnn #1 #2 #3 #4
+  {
+    \int_compare:nNnTF { #3 } > { 99 }
+      { \int_set_eq:NN \l_tmpa_int \c at iRow }
+      { \int_set:Nn \l_tmpa_int { #3 } }
+    \int_compare:nNnTF { #4 } > { 99 }
+      { \int_set_eq:NN \l_tmpb_int \c at jCol }
+      { \int_set:Nn \l_tmpb_int { #4 } }
+    \seq_gput_right:Nx \g_tmpa_seq
+      { { #1 } { #2 } { \int_use:N \l_tmpa_int } { \int_use:N \l_tmpb_int } }
+  }
+%    \end{macrocode}
+% 
 % \bigskip
 % We recall that, when externalization is used, |\tikzpicture| and
 % |\endtikzpicture| (or |\pgfpicture| and |\endpgfpicture|) must be directly
@@ -10242,8 +10391,8 @@
 %    \end{macrocode}
 %
 %
-% The command |\@@_Hdotsfor_i| is defined with the tools of \pkg{xparse} because
-% it has an optional argument. Note that such a command defined by
+% The command |\@@_Hdotsfor_i| is defined with |\NewDocumentCommand| because it
+% has an optional argument. Note that such a command defined by
 % |\NewDocumentCommand| is protected and that's why we have put the
 % |\multicolumn| before (in the definition of |\@@_Hdotsfor:|).
 %    \begin{macrocode}
@@ -11179,7 +11328,7 @@
 % \subsection*{The horizontal rules}
 %
 % \bigskip
-% The following command will be executed in the |internal-code-after|. The row
+% The following command will be executed in the |internal-code-after|. The rule
 % will be drawn \emph{before} the row |#1|. |#2| is the number of consecutive
 % occurrences of |\Hline|.
 %    \begin{macrocode}
@@ -11196,7 +11345,7 @@
   {
 %    \end{macrocode}
 % |\l_tmpa_tl| is the number of row and |\l_tmpb_tl| the number of column. Whe,
-% we have found a column corresponding to a rule to draw, we note its numver in
+% we have found a column corresponding to a rule to draw, we note its number in
 % |\l_tmpc_tl|. 
 %    \begin{macrocode}
     \tl_set:Nn \l_tmpa_tl { #1 }
@@ -12251,7 +12400,8 @@
 %
 % \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|).
+% array (and once again when the block will be put in the array in the
+% |code-after|). Here is the set of keys for the first pass.
 %    \begin{macrocode}
 \keys_define:nn { NiceMatrix / Block / FirstPass }
   {
@@ -12265,21 +12415,28 @@
 %    \end{macrocode}
 %
 % 
-% The following command will be linked to |\Block| in the environments of
-% \pkg{nicematrix}. We define it with |\NewDocumentCommand| of \pkg{xparse}
-% because it has an optional argument between |<| and |>| (for TeX instructions
-% put before the math mode of the label)
+% The following command |\@@_Block:| will be linked to |\Block| in the
+% environments of \pkg{nicematrix}. We define it with
+% |\NewExpandableDocumentCommand| because it has an optional argument between
+% |<| and |>| (for TeX instructions put before the math mode of the label). It's
+% mandatory to use an expandable command.
 %
-% 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 } }
+  { 
 %    \end{macrocode}
+% If the first mandatory argument of the command (which is the size of the block
+% with the syntax $i$|-|$j$) has not be provided by the user, you use |1-1|
+% (that is to say a block of only one cell).
+%    \begin{macrocode}
+    \tl_if_blank:nTF { #2 } { \@@_Block_i 1-1 \q_stop } { \@@_Block_i #2 \q_stop }
+    { #1 } { #3 } { #4 } 
+  }
+%    \end{macrocode}
 % 
 % \medskip
-% The first mandatory argument of |\@@_Block:| has a special syntax. It must be
-% of the form $i$|-|$j$ where $i$ and $j$ are the size (in rows and columns) of
-% the block.
+% With the following construction, we extract the values of $i$ and $j$ in the
+% first mandatory argument of the command.
 %    \begin{macrocode}
 \cs_new:Npn \@@_Block_i #1-#2 \q_stop { \@@_Block_ii:nnnnn { #1 } { #2 } }
 %    \end{macrocode}
@@ -12299,6 +12456,7 @@
       { \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 } 
@@ -12305,13 +12463,27 @@
 %    \end{macrocode}
 % 
 % \medskip
+% We recall that |#1| and |#2| have been extracted from the first mandatory
+% argument of |\Block| (which is of the syntax $i$|-|$j$). However, the user is
+% allowed to omit $i$ or $j$ (or both). We detect that situation by replacing a
+% missing value by 100 (it's a convention: when the block will actually be drawn
+% these values will be detected and interpreted as \emph{maximal possible value}).
 %    \begin{macrocode}
+    \tl_if_empty:nTF { #1 } 
+      { \int_set:Nn \l_tmpa_int { 100 } }
+      { \int_set:Nn \l_tmpa_int { #1 } }
+    \tl_if_empty:nTF { #2 } 
+      { \int_set:Nn \l_tmpb_int { 100 } }
+      { \int_set:Nn \l_tmpb_int { #2 } }
+%    \end{macrocode}
+%
+%    \begin{macrocode}
     \tl_set:Nx \l_tmpa_tl
       {
         { \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 } }
+        { \int_eval:n { \c at iRow + \l_tmpa_int - 1 } }
+        { \int_eval:n { \c at jCol + \l_tmpb_int - 1 } }
       }
 %    \end{macrocode}
 % Now, |\l_tmpa_tl|  contains an ``object'' corresponding to the position of the
@@ -12332,41 +12504,62 @@
 % |{|\textsl{imin}|}{|\textsl{jmin}|}{|\textsl{imax}|}{|\textsl{jmax}|}{|\textsl{options}|}{|\textsl{contents}|}|.
 %
 % \medskip
-% If the block is mono-column, we have a special treatment.
+% If the block is mono-column or mono-row, we have a special treatment. That's
+% why we have two macros: |\@@_Block_iii:nnnnn| and |\@@_Block_iv:nnnnn| (the five
+% arguments of those macros are provided by curryfication).
 %    \begin{macrocode}
-    \int_compare:nNnTF { #2 } = 1
+    \bool_lazy_or:nnTF 
+      { \int_compare_p:nNn { \l_tmpa_int } = 1 }
+      { \int_compare_p:nNn { \l_tmpb_int } = 1 }
+      { \exp_args:Nxx \@@_Block_iii:nnnnn }
+      { \exp_args:Nxx \@@_Block_iv:nnnnn }
+    { \l_tmpa_int } { \l_tmpb_int } { #3 } { #4 } { #5 } 
+  }
+%    \end{macrocode}
+%
+% 
+% \bigskip
+% The following macro is for the case of a |\Block| which is mono-row or
+% mono-column (or both). In that case, the content of the block is composed
+% right now in a box (because we have to take into account the dimensions of
+% that box for the width of the current column or the height and the depth of the
+% current row). However, that box will be put in the array \emph{after the
+% construction of the array} (by using \textsc{pgf}).
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_Block_iii:nnnnn #1 #2 #3 #4 #5
+  {  
+    \int_gincr:N \g_@@_block_box_int
+    \cs_set_protected_nopar:Npn \diagbox ##1 ##2
       {
-        \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 }
+        \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}
-% If the user has specified a color for the column in the preamble of the array,
-% we want to fix that color in the box we construct. We do that with 
-% |\set at color| and not |\color_ensure_current:| because that command seems to be
-% bugged: it doesn't work in XeLaTeX when \pkg{fontspec} is loaded.
+% For a mono-column block, if the user has specified a color for the column in
+% the preamble of the array, we want to fix that color in the box we construct.
+% We do that with |\set at color| and not |\color_ensure_current:| because that
+% command seems to be bugged: it doesn't work in XeLaTeX when \pkg{fontspec} is
+% loaded.
 %    \begin{macrocode}
-            \set at color
-            \bool_if:NTF \l_@@_NiceTabular_bool
-              { 
-                \group_begin:
-                \cs_set:Npn \arraystretch { 1 }
-                \dim_set_eq:NN \extrarowheight \c_zero_dim 
-                #4
+        \int_compare:nNnT { #2 } = 1 \set at color
+        \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
@@ -12375,50 +12568,82 @@
 % 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
+              { \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
+      }
+    \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
+      }
+%    \end{macrocode}
+% If we are in a mono-column block, we take into account the width of that block
+% for the width of the column.
+%    \begin{macrocode}
+    \int_compare:nNnT { #2 } = 1
+      {
+        \dim_gset:Nn \g_@@_blocks_wd_dim
           {
-            \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
+              \g_@@_blocks_wd_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}
+% If we are in a mono-row block, we take into account the height and the
+% depth of that block for the height and the depth of the row.
+%    \begin{macrocode}
+    \int_compare:nNnT { #1 } = 1
+      {
+        \dim_gset:Nn \g_@@_blocks_ht_dim
+          {
+            \dim_max:nn
+              \g_@@_blocks_ht_dim
+              {
+                \box_ht:c 
+                  { g_@@_ block _ box _ \int_use:N \g_@@_block_box_int _ box } 
+              }
+          } 
+        \dim_gset:Nn \g_@@_blocks_dp_dim
+          {
+            \dim_max:nn
+              \g_@@_blocks_dp_dim
+              {
+                \box_dp: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
@@ -12425,30 +12650,36 @@
 % 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 } 
-            }
-          } 
-      }
+        { #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.
+% 
+% \bigskip
+% The following macro is for the standard case, where the block is not mono-row
+% and not mono-column. In that case, the content of the block is \emph{not}
+% composed right now in a box. The composition in a box will be done further,
+% just after the construction of the array.
 %    \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
+\cs_new_protected:Npn \@@_Block_iv:nnnnn #1 #2 #3 #4 #5
+  {
+    \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
@@ -12457,36 +12688,39 @@
 % 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
+                    { \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}
-%
 % 
 % \bigskip
+% We recall that the options of the command |\Block| are analyzed twice: first
+% in the cell of the array and once again when the block will be put in the
+% array \emph{after the construction of the array} (by using \textsc{pgf}).
+% 
+% \medskip
 % The key |tikz| is for Tikz options used when the \textsc{pgf} node of the
 % block is created (the ``normal'' block node and not the ``short'' one nor the
 % ``medium'' one). \textbf{In fact, as of now, it is \emph{not} documented}. Is
@@ -12531,7 +12765,30 @@
     \keys_set:nn { NiceMatrix / Block / SecondPass} { #5 }
 %    \end{macrocode}
 %
+% The integer |\l_@@_last_row_int| will be the last row of the block and
+% |\l_@@_last_col_int| it's last column.
 %    \begin{macrocode}
+    \int_zero_new:N \l_@@_last_row_int 
+    \int_zero_new:N \l_@@_last_col_int 
+%    \end{macrocode}
+%
+% We remind that the first mandatory argument of the command |\Block| is the
+% size of the block with the special format $i$|-|$j$. However, the user is
+% allowed to omit $i$ or $j$ (or both). This will be interpreted as: the last
+% row (resp. column) of the block will be the last row (resp. column) of the
+% block (without the potential exterior row---resp. column---of the array). By
+% convention, this is stored in |\g_@@_blocks_seq| as a number of rows (resp.
+% columns) for the block equal to 100. That's what we detect now.
+%    \begin{macrocode}
+    \int_compare:nNnTF { #3 } > { 99 }
+      { \int_set_eq:NN \l_@@_last_row_int \c at iRow }
+      { \int_set:Nn \l_@@_last_row_int { #3 } }
+    \int_compare:nNnTF { #4 } > { 99 }
+      { \int_set_eq:NN \l_@@_last_col_int \c at jCol }
+      { \int_set:Nn \l_@@_last_col_int { #4 } }
+%    \end{macrocode}
+% 
+%    \begin{macrocode}
     \tl_if_empty:NF \l_@@_color_tl
       {
         \tl_gput_right:Nx \g_nicematrix_code_before_tl
@@ -12539,7 +12796,7 @@
             \exp_not:N \rectanglecolor 
               { \l_@@_color_tl } 
               { #1 - #2 } 
-              { #3 - #4 } 
+              { \int_use:N \l_@@_last_row_int - \int_use:N \l_@@_last_col_int } 
           }  
       }
 %    \end{macrocode}
@@ -12551,7 +12808,10 @@
         \tl_gput_right:Nx \g_@@_internal_code_after_tl    
           { 
             \@@_actually_diagbox:nnnnnn 
-              { #1 } { #2 } { #3 } { #4 } 
+              { #1 } 
+              { #2 }
+              { \int_use:N \l_@@_last_row_int } 
+              { \int_use:N \l_@@_last_col_int } 
               { \exp_not:n { ##1 } } { \exp_not:n { ##2 } }
           }
       }  
@@ -12560,8 +12820,8 @@
 % \medskip
 %    \begin{macrocode}
     \bool_lazy_or:nnTF
-      { \int_compare_p:nNn { #3 } > \g_@@_row_total_int } 
-      { \int_compare_p:nNn { #4 } > \g_@@_col_total_int }
+      { \int_compare_p:nNn \l_@@_last_row_int > \g_@@_row_total_int } 
+      { \int_compare_p:nNn \l_@@_last_col_int > \g_@@_col_total_int }
       { \msg_error:nnnn { nicematrix } { Block~too~large } { #1 } { #2 } }
       {
         \hbox_set:Nn \l_@@_cell_box { #6 }
@@ -12625,9 +12885,9 @@
           \dim_set_eq:NN \l_tmpa_dim \pgf at y
           \@@_qpoint:n { col - #2 } 
           \dim_set_eq:NN \l_tmpb_dim \pgf at x
-          \@@_qpoint:n { row - \@@_succ:n { #3 } } 
+          \@@_qpoint:n { row - \@@_succ:n { \l_@@_last_row_int } } 
           \dim_set_eq:NN \l_tmpc_dim \pgf at y
-          \@@_qpoint:n { col - \@@_succ:n { #4 } } 
+          \@@_qpoint:n { col - \@@_succ:n { \l_@@_last_col_int } } 
           \dim_set_eq:NN \l_tmpd_dim \pgf at x
 %    \end{macrocode}
 %
@@ -12678,11 +12938,13 @@
           \int_step_inline:nnn \l_@@_first_row_int \g_@@_row_total_int
             {
               \cs_if_exist:cT
-                { pgf @ sh @ ns @ \@@_env: - ##1 - #4 }
+                { pgf @ sh @ ns @ \@@_env: - ##1 - \int_use:N \l_@@_last_col_int }
                 {
                   \seq_if_in:NnF \g_@@_multicolumn_cells_seq { ##1 - #2 }
                     {
-                      \pgfpointanchor { \@@_env: - ##1 - #4 } { east }
+                      \pgfpointanchor 
+                        { \@@_env: - ##1 - \int_use:N \l_@@_last_col_int }  
+                        { east } 
                       \dim_set:Nn \l_tmpd_dim { \dim_max:nn \l_tmpd_dim \pgf at x }
                     }
                 }
@@ -12689,7 +12951,7 @@
             }
           \dim_compare:nNnT \l_tmpd_dim = { - \c_max_dim }
             {
-              \@@_qpoint:n { col - \@@_succ:n { #4 } } 
+              \@@_qpoint:n { col - \@@_succ:n { \l_@@_last_col_int } } 
               \dim_set_eq:NN \l_tmpd_dim \pgf at x
             }
           \@@_pgf_rect_node:nnnnn
@@ -12707,7 +12969,14 @@
             \@@_pgf_rect_node:nnn
               { \@@_env: - #1 - #2 - block - medium }
               { \pgfpointanchor { \@@_env: - #1 - #2 - medium } { north~west } }
-              { \pgfpointanchor { \@@_env: - #3 - #4 - medium } { south~east } } 
+              { 
+                \pgfpointanchor 
+                  { \@@_env: 
+                    - \int_use:N \l_@@_last_row_int 
+                    - \int_use:N \l_@@_last_col_int - medium 
+                  } 
+                  { south~east }  
+              } 
           }
 %    \end{macrocode}
 % \medskip
@@ -14205,12 +14474,18 @@
 %
 % Different behaviour for the mono-column blocks.
 %
-% \subsection*{Changes between versions 5.3 and 5.4}
+% \subsection*{Changes between versions 5.4 and 5.5}
 %
 % The user must never put |\omit| before |\CodeAfter|.
 %
 % Correction of a bug: the tabular notes |\tabularnotes| were not composed when
 % present in a block (except a mono-column block).
+%
+% \subsection*{Changes between versions 5.5 and 5.6}
+%
+% Different behaviour for the mono-row blocks.
+%
+% New command |\NotEmpty|.
 %  
 % \PrintIndex
 % 

Modified: trunk/Master/texmf-dist/tex/latex/nicematrix/nicematrix.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/nicematrix/nicematrix.sty	2020-11-08 21:42:44 UTC (rev 56886)
+++ trunk/Master/texmf-dist/tex/latex/nicematrix/nicematrix.sty	2020-11-08 21:43:02 UTC (rev 56887)
@@ -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.5}
-\def\myfiledate{2020/10/20}
+\def\myfileversion{5.6}
+\def\myfiledate{2020/11/08}
 
 \RequirePackage{pgfcore}
 \usepgfmodule{shapes}
@@ -252,7 +252,9 @@
 \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
+\dim_new:N \g__nicematrix_blocks_wd_dim
+\dim_new:N \g__nicematrix_blocks_ht_dim
+\dim_new:N \g__nicematrix_blocks_dp_dim
 \seq_new:N \g__nicematrix_names_seq
 \bool_new:N \l__nicematrix_in_env_bool
 \bool_new:N \l__nicematrix_NiceArray_bool
@@ -282,6 +284,7 @@
 \int_new:N \l__nicematrix_old_jCol_int
 \tl_new:N \l__nicematrix_rules_color_tl
 \bool_new:N \g__nicematrix_row_of_col_done_bool
+\bool_new:N \g__nicematrix_not_empty_cell_bool
 \tl_new:N \l__nicematrix_code_before_tl
 \bool_new:N \l__nicematrix_code_before_bool
 \dim_new:N \l__nicematrix_x_initial_dim
@@ -848,14 +851,26 @@
       }
     \bool_gset_false:N \g__nicematrix_rotate_bool
   }
-\cs_new_protected:Npn \__nicematrix_adjust_width_box:
+\cs_new_protected:Npn \__nicematrix_adjust_size_box:
   {
-    \dim_compare:nNnT \g__nicematrix_blocks_width_dim > \c_zero_dim
+    \dim_compare:nNnT \g__nicematrix_blocks_wd_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
+          { \dim_max:nn { \box_wd:N \l__nicematrix_cell_box } \g__nicematrix_blocks_wd_dim }
+        \dim_gzero:N \g__nicematrix_blocks_wd_dim
       }
+    \dim_compare:nNnT \g__nicematrix_blocks_dp_dim > \c_zero_dim
+      {
+        \box_set_dp:Nn \l__nicematrix_cell_box
+          { \dim_max:nn { \box_dp:N \l__nicematrix_cell_box } \g__nicematrix_blocks_dp_dim }
+        \dim_gzero:N \g__nicematrix_blocks_dp_dim
+      }
+    \dim_compare:nNnT \g__nicematrix_blocks_ht_dim > \c_zero_dim
+      {
+        \box_set_ht:Nn \l__nicematrix_cell_box
+          { \dim_max:nn { \box_ht:N \l__nicematrix_cell_box } \g__nicematrix_blocks_ht_dim }
+        \dim_gzero:N \g__nicematrix_blocks_ht_dim
+      }
   }
 \cs_new_protected:Npn \__nicematrix_end_Cell:
   {
@@ -862,7 +877,7 @@
     \__nicematrix_math_toggle_token:
     \hbox_set_end:
     \bool_if:NT \g__nicematrix_rotate_bool \__nicematrix_rotate_cell_box:
-    \__nicematrix_adjust_width_box:
+    \__nicematrix_adjust_size_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
@@ -873,11 +888,14 @@
     \bool_if:NTF \g__nicematrix_empty_cell_bool
       { \box_use_drop:N \l__nicematrix_cell_box }
       {
-        \dim_compare:nNnTF { \box_wd:N \l__nicematrix_cell_box } > \c_zero_dim
+        \bool_lazy_or:nnTF
+          \g__nicematrix_not_empty_cell_bool
+          { \dim_compare_p:nNn { \box_wd:N \l__nicematrix_cell_box } > \c_zero_dim }
           \__nicematrix_node_for_the_cell:
           { \box_use_drop:N \l__nicematrix_cell_box }
       }
     \bool_gset_false:N \g__nicematrix_empty_cell_bool
+    \bool_gset_false:N \g__nicematrix_not_empty_cell_bool
   }
 \cs_new_protected:Npn \__nicematrix_node_for_the_cell:
   {
@@ -1072,6 +1090,7 @@
     \cs_set_eq:NN \dotfill \__nicematrix_old_dotfill:
     \cs_set_eq:NN \CodeAfter \__nicematrix_CodeAfter:
     \cs_set_eq:NN \diagbox \__nicematrix_diagbox:nn
+    \cs_set_eq:NN \NotEmpty \__nicematrix_NotEmpty:
     \bool_if:NT \l__nicematrix_colortbl_like_bool \__nicematrix_colortbl_like:
     \bool_if:NT \l__nicematrix_renew_dots_bool \__nicematrix_renew_dots:
     \seq_gclear_new:N \g__nicematrix_multicolumn_cells_seq
@@ -1513,7 +1532,7 @@
         > {
             \hbox_set:Nw \l__nicematrix_cell_box
             \__nicematrix_Cell:
-            \tl_set:Nn \l__nicematrix_cell_type_tl { #1 }
+            \tl_set:Nn \l__nicematrix_cell_type_tl { #3 }
           }
         c
         < {
@@ -1521,7 +1540,7 @@
             #1
             \hbox_set_end:
             \bool_if:NT \g__nicematrix_rotate_bool \__nicematrix_rotate_cell_box:
-            \__nicematrix_adjust_width_box:
+            \__nicematrix_adjust_size_box:
             \makebox [ #4 ] [ #3 ] { \box_use_drop:N \l__nicematrix_cell_box }
           }
       }
@@ -1975,7 +1994,7 @@
         \__nicematrix_math_toggle_token:
         \hbox_set_end:
         \bool_if:NT \g__nicematrix_rotate_bool \__nicematrix_rotate_cell_box:
-        \__nicematrix_adjust_width_box:
+        \__nicematrix_adjust_size_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 } }
@@ -2019,7 +2038,7 @@
         \__nicematrix_math_toggle_token:
         \hbox_set_end:
         \bool_if:NT \g__nicematrix_rotate_bool \__nicematrix_rotate_cell_box:
-        \__nicematrix_adjust_width_box:
+        \__nicematrix_adjust_size_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 } }
@@ -2086,6 +2105,8 @@
       }
       { \use:c { end #1 NiceArray } }
   }
+\cs_new_protected:Npn \__nicematrix_NotEmpty:
+  { \bool_gset_true:N \g__nicematrix_not_empty_cell_bool }
 \NewDocumentEnvironment { NiceTabular } { O { } m ! O { } }
   {
     \str_gset:Nn \g__nicematrix_name_env_str { NiceTabular }
@@ -2197,6 +2218,7 @@
       }
     \__nicematrix_draw_dotted_lines:
     \__nicematrix_compute_corners:
+    \__nicematrix_adjust_pos_of_blocks_seq:
     \bool_lazy_all:nT
       {
         { \seq_if_empty_p:N \g__nicematrix_pos_of_blocks_seq }
@@ -2246,6 +2268,24 @@
     \__nicematrix_restore_iRow_jCol:
     \cs_gset_eq:NN \CT at arc@ \__nicematrix_old_CT at arc@
   }
+\cs_new_protected:Npn \__nicematrix_adjust_pos_of_blocks_seq:
+  {
+    \seq_gclear:N \g_tmpa_seq
+    \seq_map_inline:Nn \g__nicematrix_pos_of_blocks_seq
+      { \__nicematrix_adjust_pos_of_blocks_seq_i:nnnn ##1 }
+    \seq_gset_eq:NN \g__nicematrix_pos_of_blocks_seq \g_tmpa_seq
+  }
+\cs_new_protected:Npn \__nicematrix_adjust_pos_of_blocks_seq_i:nnnn #1 #2 #3 #4
+  {
+    \int_compare:nNnTF { #3 } > { 99 }
+      { \int_set_eq:NN \l_tmpa_int \c at iRow }
+      { \int_set:Nn \l_tmpa_int { #3 } }
+    \int_compare:nNnTF { #4 } > { 99 }
+      { \int_set_eq:NN \l_tmpb_int \c at jCol }
+      { \int_set:Nn \l_tmpb_int { #4 } }
+    \seq_gput_right:Nx \g_tmpa_seq
+      { { #1 } { #2 } { \int_use:N \l_tmpa_int } { \int_use:N \l_tmpb_int } }
+  }
 \AtBeginDocument
   {
     \cs_new_protected:Npx \__nicematrix_draw_dotted_lines:
@@ -4261,7 +4301,10 @@
     c .value_forbidden:n = true ,
   }
 \NewExpandableDocumentCommand \__nicematrix_Block: { O { } m D < > { } m }
-  { \__nicematrix_Block_i #2 \q_stop { #1 } { #3 } { #4 } }
+  {
+    \tl_if_blank:nTF { #2 } { \__nicematrix_Block_i 1-1 \q_stop } { \__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
   {
@@ -4269,128 +4312,165 @@
       { \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_if_empty:nTF { #1 }
+      { \int_set:Nn \l_tmpa_int { 100 } }
+      { \int_set:Nn \l_tmpa_int { #1 } }
+    \tl_if_empty:nTF { #2 }
+      { \int_set:Nn \l_tmpb_int { 100 } }
+      { \int_set:Nn \l_tmpb_int { #2 } }
     \tl_set:Nx \l_tmpa_tl
       {
         { \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 } }
+        { \int_eval:n { \c at iRow + \l_tmpa_int - 1 } }
+        { \int_eval:n { \c at jCol + \l_tmpb_int - 1 } }
       }
     \seq_gput_left:NV \g__nicematrix_pos_of_blocks_seq \l_tmpa_tl
-    \int_compare:nNnTF { #2 } = 1
+    \bool_lazy_or:nnTF
+      { \int_compare_p:nNn { \l_tmpa_int } = 1 }
+      { \int_compare_p:nNn { \l_tmpb_int } = 1 }
+      { \exp_args:Nxx \__nicematrix_Block_iii:nnnnn }
+      { \exp_args:Nxx \__nicematrix_Block_iv:nnnnn }
+    { \l_tmpa_int } { \l_tmpb_int } { #3 } { #4 } { #5 }
+  }
+\cs_new_protected:Npn \__nicematrix_Block_iii:nnnnn #1 #2 #3 #4 #5
+  {
+    \int_gincr:N \g__nicematrix_block_box_int
+    \cs_set_protected_nopar:Npn \diagbox ##1 ##2
       {
-        \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
           {
-            \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 } }
-              }
+            \__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
+      }
+    \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 }
+      {
+        \int_compare:nNnT { #2 } = 1 \set at color
+        \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 }
-        \hbox_gset:cn
-          { g__nicematrix_ block _ box _ \int_use:N \g__nicematrix_block_box_int _ box }
+          { 90 }
+        \bool_gset_false:N \g__nicematrix_rotate_bool
+      }
+    \int_compare:nNnT { #2 } = 1
+      {
+        \dim_gset:Nn \g__nicematrix_blocks_wd_dim
           {
-            \set at color
-            \bool_if:NTF \l__nicematrix_NiceTabular_bool
+            \dim_max:nn
+              \g__nicematrix_blocks_wd_dim
               {
-                \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:
+                \box_wd:c
+                  { g__nicematrix_ block _ box _ \int_use:N \g__nicematrix_block_box_int _ box }
               }
+          }
+      }
+    \int_compare:nNnT { #1 } = 1
+      {
+        \dim_gset:Nn \g__nicematrix_blocks_ht_dim
+          {
+            \dim_max:nn
+              \g__nicematrix_blocks_ht_dim
               {
-                \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:
+                \box_ht:c
+                  { g__nicematrix_ block _ box _ \int_use:N \g__nicematrix_block_box_int _ box }
               }
           }
-        \bool_if:NT \g__nicematrix_rotate_bool
+        \dim_gset:Nn \g__nicematrix_blocks_dp_dim
           {
-            \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
+              \g__nicematrix_blocks_dp_dim
               {
-                \box_wd:c
+                \box_dp: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
       {
-        \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 }
+        }
+      }
+  }
+\cs_new_protected:Npn \__nicematrix_Block_iv:nnnnn #1 #2 #3 #4 #5
+  {
+    \seq_gput_right:Nx \g__nicematrix_blocks_seq
+      {
+        \l_tmpa_tl
+        { #3 }
+        \exp_not:n
           {
-            \l_tmpa_tl
-            { #3 }
-            \exp_not:n
-              {
+            {
+              \bool_if:NTF \l__nicematrix_NiceTabular_bool
                 {
-                  \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:
-                    }
+                  \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:
+                }
+            }
           }
       }
   }
@@ -4417,6 +4497,14 @@
   {
     \group_begin:
     \keys_set:nn { NiceMatrix / Block / SecondPass} { #5 }
+    \int_zero_new:N \l__nicematrix_last_row_int
+    \int_zero_new:N \l__nicematrix_last_col_int
+    \int_compare:nNnTF { #3 } > { 99 }
+      { \int_set_eq:NN \l__nicematrix_last_row_int \c at iRow }
+      { \int_set:Nn \l__nicematrix_last_row_int { #3 } }
+    \int_compare:nNnTF { #4 } > { 99 }
+      { \int_set_eq:NN \l__nicematrix_last_col_int \c at jCol }
+      { \int_set:Nn \l__nicematrix_last_col_int { #4 } }
     \tl_if_empty:NF \l__nicematrix_color_tl
       {
         \tl_gput_right:Nx \g_nicematrix_code_before_tl
@@ -4424,7 +4512,7 @@
             \exp_not:N \rectanglecolor
               { \l__nicematrix_color_tl }
               { #1 - #2 }
-              { #3 - #4 }
+              { \int_use:N \l__nicematrix_last_row_int - \int_use:N \l__nicematrix_last_col_int }
           }
       }
     \cs_set_protected_nopar:Npn \diagbox ##1 ##2
@@ -4432,13 +4520,16 @@
         \tl_gput_right:Nx \g__nicematrix_internal_code_after_tl
           {
             \__nicematrix_actually_diagbox:nnnnnn
-              { #1 } { #2 } { #3 } { #4 }
+              { #1 }
+              { #2 }
+              { \int_use:N \l__nicematrix_last_row_int }
+              { \int_use:N \l__nicematrix_last_col_int }
               { \exp_not:n { ##1 } } { \exp_not:n { ##2 } }
           }
       }
     \bool_lazy_or:nnTF
-      { \int_compare_p:nNn { #3 } > \g__nicematrix_row_total_int }
-      { \int_compare_p:nNn { #4 } > \g__nicematrix_col_total_int }
+      { \int_compare_p:nNn \l__nicematrix_last_row_int > \g__nicematrix_row_total_int }
+      { \int_compare_p:nNn \l__nicematrix_last_col_int > \g__nicematrix_col_total_int }
       { \msg_error:nnnn { nicematrix } { Block~too~large } { #1 } { #2 } }
       {
         \hbox_set:Nn \l__nicematrix_cell_box { #6 }
@@ -4450,9 +4541,9 @@
           \dim_set_eq:NN \l_tmpa_dim \pgf at y
           \__nicematrix_qpoint:n { col - #2 }
           \dim_set_eq:NN \l_tmpb_dim \pgf at x
-          \__nicematrix_qpoint:n { row - \__nicematrix_succ:n { #3 } }
+          \__nicematrix_qpoint:n { row - \__nicematrix_succ:n { \l__nicematrix_last_row_int } }
           \dim_set_eq:NN \l_tmpc_dim \pgf at y
-          \__nicematrix_qpoint:n { col - \__nicematrix_succ:n { #4 } }
+          \__nicematrix_qpoint:n { col - \__nicematrix_succ:n { \l__nicematrix_last_col_int } }
           \dim_set_eq:NN \l_tmpd_dim \pgf at x
           \begin { pgfscope }
           \exp_args:Nx \pgfset { \l__nicematrix_tikz_tl }
@@ -4482,11 +4573,13 @@
           \int_step_inline:nnn \l__nicematrix_first_row_int \g__nicematrix_row_total_int
             {
               \cs_if_exist:cT
-                { pgf @ sh @ ns @ \__nicematrix_env: - ##1 - #4 }
+                { pgf @ sh @ ns @ \__nicematrix_env: - ##1 - \int_use:N \l__nicematrix_last_col_int }
                 {
                   \seq_if_in:NnF \g__nicematrix_multicolumn_cells_seq { ##1 - #2 }
                     {
-                      \pgfpointanchor { \__nicematrix_env: - ##1 - #4 } { east }
+                      \pgfpointanchor
+                        { \__nicematrix_env: - ##1 - \int_use:N \l__nicematrix_last_col_int }
+                        { east }
                       \dim_set:Nn \l_tmpd_dim { \dim_max:nn \l_tmpd_dim \pgf at x }
                     }
                 }
@@ -4493,7 +4586,7 @@
             }
           \dim_compare:nNnT \l_tmpd_dim = { - \c_max_dim }
             {
-              \__nicematrix_qpoint:n { col - \__nicematrix_succ:n { #4 } }
+              \__nicematrix_qpoint:n { col - \__nicematrix_succ:n { \l__nicematrix_last_col_int } }
               \dim_set_eq:NN \l_tmpd_dim \pgf at x
             }
           \__nicematrix_pgf_rect_node:nnnnn
@@ -4504,7 +4597,14 @@
             \__nicematrix_pgf_rect_node:nnn
               { \__nicematrix_env: - #1 - #2 - block - medium }
               { \pgfpointanchor { \__nicematrix_env: - #1 - #2 - medium } { north~west } }
-              { \pgfpointanchor { \__nicematrix_env: - #3 - #4 - medium } { south~east } }
+              {
+                \pgfpointanchor
+                  { \__nicematrix_env:
+                    - \int_use:N \l__nicematrix_last_row_int
+                    - \int_use:N \l__nicematrix_last_col_int - medium
+                  }
+                  { south~east }
+              }
           }
         \int_compare:nNnTF { #1 } = { #3 }
           {



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