texlive[66904] Master/texmf-dist: nicematrix (20apr23)

commits+karl at tug.org commits+karl at tug.org
Thu Apr 20 21:59:57 CEST 2023


Revision: 66904
          http://tug.org/svn/texlive?view=revision&revision=66904
Author:   karl
Date:     2023-04-20 21:59:57 +0200 (Thu, 20 Apr 2023)
Log Message:
-----------
nicematrix (20apr23)

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	2023-04-20 19:59:42 UTC (rev 66903)
+++ trunk/Master/texmf-dist/doc/latex/nicematrix/nicematrix-french.tex	2023-04-20 19:59:57 UTC (rev 66904)
@@ -20,7 +20,7 @@
 
 % On utilise \MakeShortVerb de shortvrb et pas \DefineShortVerb de fancyvrb
 % car on ne veut pas que le contenu des petits éléments en verbatim soit colorié
-% en grise
+% en gris
 \usepackage{shortvrb}
 \MakeShortVerb{\|}
 
@@ -63,6 +63,12 @@
 \setlength{\parindent}{0pt}
 \skip \footins = 2 \bigskipamount
 
+
+\NewDocumentCommand{\Definition}{m}
+  {{\setlength{\fboxsep}{1pt}\colorbox{gray!20}{\ttfamily \vphantom{gl}#1}}}
+
+
+
 \begin{document}
 
 \VerbatimFootnotes
@@ -488,10 +494,7 @@
 0 & \Cdots& 0 & 0
 \end{bNiceArray}$
 
-\NewDocumentCommand{\Definition}{m}
-  {{\setlength{\fboxsep}{1pt}\colorbox{gray!20}{\ttfamily \vphantom{gl}#1}}}
 
-
 \interitem
 La commande |\Block| accepte en premier argument optionnel (entre crochets) une
 liste de couples \textsl{clé=valeur}. Les clés sont les suivantes :
@@ -809,7 +812,6 @@
 
 \subsection{Positionnement vertical du contenu des blocs}
 
-\colorbox{yellow!50}{\textbf{Nouveau 6.14}}
 
 Concernant le positionnement vertical, la commande |\Block| admet les clés
 |v-center|\footnote{Cette clé ne peut être nommée \texttt{c} car la clé
@@ -827,11 +829,13 @@
 |\\|) est alignée avec la ligne de base de la dernière des rangées du tableau
 impliquées dans le bloc.
 
-\item Avec la clé |T|, le contenu du bloc est calé vers le haut (avec une marge
-égale au paramètre |inner ysep| de PGF/Tikz --- que l'on peut régler avec |\pgfset|).
+\item Avec la clé |T|, le contenu du bloc est calé vers le haut.
 
-\item Avec la clé |B|, le contenu du bloc est calé vers le bas (avec une marge
-égale au paramètre |inner ysep| de PGF/Tikz).
+\colorbox{yellow!50}{Modification 6.18}\enskip Il n'y a plus de marge verticale.
+Néanmoins, le contenu du bloc est (toujours) composé en interne dans une |{minipage}|, un
+|{tabular}| ou un |{array}|, ce qui fait qu'il y souvent déjà une marge.
+
+\item Avec la clé |B|, le contenu du bloc est calé vers le bas.
 \end{itemize}
 
 Quand aucune clé n'est donnée, c'est la clé |v-center| qui s'applique (sauf pour
@@ -850,19 +854,19 @@
 \begin{BVerbatim}[baseline=c,boxwidth=10cm]
 \begin{NiceTabular}{ccc}
 \Block[fill=red!10,~emphase#t@,l]{4-2}{two\\lines}
- & & \Huge first\\
- & & second  \\
- & & third  \\
- & & fourth  \\
+ & & \Huge Un\\
+ & & deux  \\
+ & & trois  \\
+ & & \Huge quatre  \\
 text & text \\
 \end{NiceTabular}
 \end{BVerbatim}
 \begin{NiceTabular}{ccc}
 \Block[fill=red!10,t,l]{4-2}{two\\lines}
- & & \Huge first\\
- & & second  \\
- & & third  \\
- & & fourth  \\
+ & & \Huge Un\\
+ & & deux  \\
+ & & trois  \\
+ & & \Huge quatre  \\
 text & text \\
 \end{NiceTabular}
 
@@ -871,19 +875,19 @@
 \begin{BVerbatim}[baseline=c,boxwidth=10cm]
 \begin{NiceTabular}{ccc}
 \Block[fill=red!10,~emphase#b@,r]{4-2}{two\\lines}
- & & \Huge first\\
- & & second  \\
- & & third  \\
- & & fourth  \\
+ & & \Huge Un\\
+ & & deux  \\
+ & & trois  \\
+ & & \Huge quatre  \\
 text & text \\
 \end{NiceTabular}
 \end{BVerbatim}
 \begin{NiceTabular}{ccc}
 \Block[fill=red!10,b,r]{4-2}{two\\lines}
- & & \Huge first\\
- & & second  \\
- & & third  \\
- & & fourth  \\
+ & & \Huge Un\\
+ & & deux  \\
+ & & trois  \\
+ & & \Huge quatre  \\
 text & text \\
 \end{NiceTabular}
 
@@ -891,19 +895,19 @@
 \begin{BVerbatim}[baseline=c,boxwidth=10cm]
 \begin{NiceTabular}{ccc}
 \Block[fill=red!10,~emphase#T@,l]{4-2}{two\\lines}
- & & \Huge first\\
- & & second  \\
- & & third  \\
- & & fourth  \\
+ & & \Huge Un\\
+ & & deux  \\
+ & & trois  \\
+ & & \Huge quatre  \\
 text & text \\
 \end{NiceTabular}
 \end{BVerbatim}
 \begin{NiceTabular}{ccc}
 \Block[fill=red!10,T,l]{4-2}{two\\lines}
- & & \Huge first\\
- & & second  \\
- & & third  \\
- & & fourth  \\
+ & & \Huge Un\\
+ & & deux  \\
+ & & trois  \\
+ & & \Huge quatre  \\
 text & text \\
 \end{NiceTabular}
 
@@ -912,19 +916,19 @@
 \begin{BVerbatim}[baseline=c,boxwidth=10cm]
 \begin{NiceTabular}{ccc}
 \Block[fill=red!10,~emphase#B@,r]{4-2}{two\\lines}
- & & \Huge first\\
- & & second  \\
- & & third  \\
- & & fourth  \\
+ & & \Huge Un\\
+ & & deux  \\
+ & & trois  \\
+ & & \Huge quatre  \\
 text & text \\
 \end{NiceTabular}
 \end{BVerbatim}
 \begin{NiceTabular}{ccc}
 \Block[fill=red!10,B,r]{4-2}{two\\lines}
- & & \Huge first\\
- & & second  \\
- & & third  \\
- & & fourth  \\
+ & & \Huge Un\\
+ & & deux  \\
+ & & trois  \\
+ & & \Huge quatre  \\
 text & text \\
 \end{NiceTabular}
 
@@ -1207,7 +1211,13 @@
 \end{NiceTabular}
 \end{center}
 
+\medskip
+On remarquera que quand la clé |rounded-corners| est utilisée pour
+l'environnement |{NiceTabular}|, la clé |hvlines| trace des coins
+arrondis pour le tableau : cf. partie~\ref{tabular-rounded-corners},
+p.~\pageref{tabular-rounded-corners}.
 
+
 \medskip
 La clé |hvlines-except-borders| est similaire à la clé |hvlines| mais ne trace
 pas les filets sur les bords horizontaux et verticaux du tableau. Pour un
@@ -1260,9 +1270,12 @@
 
 
 \medskip
-Quand la clé |corners| est utilisée, \pkg{nicematrix} calcule les coins vides et
-ces coins sont alors pris en compte par les outils de tracés de filets (les
-filets ne seront pas tracés dans ces coins vides). 
+Quand la clé |corners|\footnote{La clé \texttt{corners} dont on parle là
+  n'a pas de rapport direct avec la clé \texttt{rounded-corners},
+  décrite dans la partie \ref{tabular-rounded-corners},
+  p.~\pageref{tabular-rounded-corners}.} est utilisée, \pkg{nicematrix} calcule
+les coins vides et ces coins sont alors pris en compte par les outils de tracés
+de filets (les filets ne seront pas tracés dans ces coins vides). 
 
 \medskip
 \begin{BVerbatim}[boxwidth=11cm,baseline=c]
@@ -1319,7 +1332,7 @@
 \end{NiceTabular}
 
 
-\medskip
+\bigskip
 $\triangleright$ Les coins sont également pris en compte par les outils de
 coloriage dans le |\CodeBefore|. Ces outils ne colorient pas les cases qui sont
 dans les coins (cf.~p.~\pageref{color-in-code-before}).
@@ -1664,10 +1677,6 @@
   p.~\pageref{nodes-i}.}
 \label{code-before}
 
-\medskip
-Toutes ces commandes acceptent un argument optionnel (entre crochets et en
-première position) qui est le modèle colorimétrique pour la spécification des
-couleurs.
 
 \medskip
 Ces commandes ne colorient pas les cases qui se trouvent dans les «coins» si la
@@ -1674,12 +1683,32 @@
 clé |corners| a été utilisée. La description de cette clé a été faite
 p.~\pageref{corners}.
 
+\medskip
+Ces commandes respectent les coins arrondis si la clé |rounded-corners| (décrite
+à la partie \ref{tabular-rounded-corners}, p.~\pageref{tabular-rounded-corners})
+a été utilisée.
 
 \medskip
+Toutes ces commandes acceptent un argument optionnel, entre crochets et en
+première position. Cet argument optionel peut contenir deux éléments (séparés
+par une virgule) :
 \begin{itemize}
-\item La commande |\cellcolor| tient son nom de la commande |\cellcolor| de
-\pkg{colortbl}.
+\item le modèle colorimétrique (|RGB|, |rgb|, |HTML|, etc.) comme spécifié par
+l'extension \pkg{xcolor} ;
+\item \colorbox{yellow!50}{\textbf{Nouveau 6.18}}
 
+une spécification d'opacité selon la forme \texttt{opacity = \textsl{valeur}}.
+\end{itemize}
+
+
+\medskip
+On détaille maintenant ces différentes commandes.
+
+\medskip
+\begin{itemize}
+\item La commande \Definition{\textbackslash cellcolor} tient son nom de la
+commande |\cellcolor| de \pkg{colortbl}.
+
 Elle prend en arguments obligatoires une couleur et une liste de cases sous le
 format $i$-$j$ où $i$ est le numéro de ligne et $j$ le numéro de colonne. Malgré
 son nom, elle peut aussi colorier une ligne avec la syntaxe $i$- ou bien une
@@ -1710,9 +1739,9 @@
 
 
 \medskip
-\item La commande |\rectanglecolor| prend trois arguments obligatoires. Le
-premier est la couleur, les deux suivants fournissent la case en haut à gauche
-et la case en bas à droite du rectangle.
+\item La commande \Definition{\textbackslash rectanglecolor} prend trois
+arguments obligatoires. Le premier est la couleur, les deux suivants fournissent
+la case en haut à gauche et la case en bas à droite du rectangle.
 
 \medskip
 \begin{scope}
@@ -1739,15 +1768,16 @@
 
 
 \medskip
-\item La commande |\arraycolor| prend en argument obligatoire une couleur et
-colorie tout le tableau (sauf les éventuelles rangées et colonnes extérieures:
-cf.~p.~\pageref{exterior}) avec cette couleur. Ce n'est qu'un cas particulier de
-la commande |\rectanglecolor|.
+\item La commande \Definition{\textbackslash arraycolor} prend en argument
+obligatoire une couleur et colorie tout le tableau (sauf les éventuelles rangées
+et colonnes extérieures: cf.~p.~\pageref{exterior}) avec cette couleur. Ce n'est
+qu'un cas particulier de la commande |\rectanglecolor|.
 
 \medskip
 \item \label{chessboardcolors}%
-La commande |\chessboardcolors| prend en arguments obligatoires deux
-couleurs et colorie les cases en quinconces avec les deux couleurs.
+La commande \Definition{\textbackslash chessboardcolors} prend en arguments
+obligatoires deux couleurs et colorie les cases en quinconces avec les deux
+couleurs.
 
 \medskip
 \begin{scope}
@@ -1778,11 +1808,11 @@
 
 
 \medskip
-\item La commande |\rowcolor| doit son nom à la commande |\rowcolor| de
-\pkg{colortbl}. Son premier argument obligatoire est la couleur et le deuxième
-est une liste de numéros de rangées ou bien d'intervalles de rangées sous la
-forme $a$-$b$ (un intervalle de la forme $a$- représente toutes les rangées à
-partir de la rangée~$a$).
+\item La commande \Definition{\textbackslash rowcolor} doit son nom à la
+commande |\rowcolor| de \pkg{colortbl}. Son premier argument obligatoire est la
+couleur et le deuxième est une liste de numéros de rangées ou bien d'intervalles
+de rangées sous la forme $a$-$b$ (un intervalle de la forme $a$- représente
+toutes les rangées à partir de la rangée~$a$).
 
 \medskip
 
@@ -1826,13 +1856,14 @@
 
 
 \medskip
-\item La commande |\columncolor| doit son nom à la commande |\columncolor| de
-\pkg{colortbl}. Sa syntaxe est similaire à celle de |\rowcolor|.
+\item La commande \Definition{\textbackslash columncolor} doit son nom à la
+commande |\columncolor| de \pkg{colortbl}. Sa syntaxe est similaire à celle de
+|\rowcolor|.
 
 \medskip
-\item La commande |\rowcolors| (avec un \emph{s}) doit son nom à la commande
-|\rowcolors| de \pkg{colortbl}. Le \emph{s} rappelle
-qu'il y a deux couleurs. Elle colorie alternativement les rangées avec les deux
+\item La commande \Definition{\textbackslash rowcolors} (avec un \emph{s}) doit
+son nom à la commande |\rowcolors| de \pkg{colortbl}. Le \emph{s} rappelle qu'il
+y a deux couleurs. Elle colorie alternativement les rangées avec les deux
 couleurs à partir de la rangée dont le numéro est donné en premier argument
 (obligatoire), comme le fait la commande |\rowcolors| de \pkg{xcolor}.
 
@@ -1843,10 +1874,10 @@
 
 
 \medskip
-La commande |\rowcolors| accepte une liste de couples \textsl{clé=valeur} comme
-argument optionnel en dernière position (l'argument optionnel en première
-position correspond à l'espace colorimétrique). Les clés disponibles sont
-|cols|, |restart| et |respect-blocks|.
+La commande |\rowcolors| accepte une liste de couples
+\textsl{clé=valeur} comme argument optionnel en dernière position (l'argument
+optionnel en première position correspond à l'espace colorimétrique). Les clés
+disponibles sont |cols|, |restart| et |respect-blocks|.
 \begin{itemize}
 \item La clé |cols| décrit un ensemble de colonnes sur lesquelles portera
 l'effet de |\rowcolors|. Cet ensemble de colonnes est une liste d'intervalles de
@@ -1940,11 +1971,11 @@
 
 
 \medskip
-\item L'extension \pkg{nicematrix} propose aussi une commande |\rowlistcolors|.
-Cette commande généralise la commande |\rowcolors|: au lieu de prendre deux
-arguments successifs pour les couleurs, elle prend un seul argument qui est une
-liste de couleurs séparées par des virgules. Dans cette liste, le symbole |=|
-représente une couleur identique à la précédente.
+\item L'extension \pkg{nicematrix} propose aussi une commande \Definition{\textbackslash
+  rowlistcolors}. Cette commande généralise la commande |\rowcolors|: au lieu de
+prendre deux arguments successifs pour les couleurs, elle prend un seul argument
+qui est une liste de couleurs séparées par des virgules. Dans cette liste, le
+symbole |=| représente une couleur identique à la précédente.
 
 \smallskip
 \begin{BVerbatim}[boxwidth=10cm,baseline=c]
@@ -2189,7 +2220,7 @@
 \item La clé |rowcolor| fixe la couleur de fond et la clé |color| fixe la
 couleur du texte.\footnote{La clé |color| utilise la commande |\color| mais
   insère aussi une instruction |\leavevmode| devant. Cela évite un espace
-  vertical parasite dans les cellules qui correspondent à des colonnes de type
+  vertical parasite dans les cases qui correspondent à des colonnes de type
   |p|, |b|, |m|, |X| et |V| (qui débutent en mode vertical).}
 
 \item La clé |bold| impose des caractères gras aux éléments de la rangée, qu'ils
@@ -2493,7 +2524,7 @@
 \pkg{nicematrix}, l'un des intérêts des colonnes de type |V| par rapport aux
 colonnes de type |p|, |m| ou |b| est que, pour les cases d'une telle colonne,
 le nœud PGF-TikZ créé pour le contenu d'une telle case a une largeur ajustée
-au contenu de la cellule en question : cf. p.~\pageref{node-V}. 
+au contenu de la case en question : cf. p.~\pageref{node-V}. 
 
 
 \medskip
@@ -3655,7 +3686,7 @@
 Les commandes |\OverBrace| and |\UnderBrace| permettent de placer des accolades
 horizontales sur une partie du tableau. Ces commandes prennent trois arguments :
 \begin{itemize}
-\item le premier argument est le coin supérieur gauche du rectangle de cellules
+\item le premier argument est le coin supérieur gauche du rectangle de cases
 impliquées dans l'accolade avec la syntaxe habituelle $i$|-|$j$ où $i$ est le
 numéro de rangée et $j$ le numéro de colonne ;
 
@@ -4116,6 +4147,55 @@
 
 \section{Autres fonctionnalités}
 
+\subsection{La clé rounded-corners de \{NiceTabular\}}
+
+\label{tabular-rounded-corners}
+
+\colorbox{yellow!50}{\textbf{Nouveau 6.18}}\par\nobreak
+
+\smallskip
+La clé |rounded-corners| que l'on décrit maintenant n'a pas de lien direct avec
+la clé |corners| (qui sert à spécifier les «coins vides») décrite à la
+partie~\ref{corners}, p.~\pageref{corners}.
+
+\smallskip
+L'environnement |{NiceTabular}| propose une clé |rounded-corners| qui spécifie
+que le tableau devra avoir des coins arrondis avec le rayon égal à la valeur
+de cette clé (la valeur par défaut est 4~pt\footnote{Cette valeur est la valeur
+  par défaut des «\texttt{rounded corners}» de PGF/Tikz.}). Plus précisément,
+cette clé a deux effets que l'on décrit maintenant.
+\begin{itemize}
+\item Toutes les commandes de coloriage de cases, colonnes et rangées (que ce
+soit dans le |\CodeBefore| ou bien directement dans le tableau (quand la clé
+|colortbl-like| est utilisée) respectent ces coins arrondis pour le tableau.
+
+\item Quand la clé |hvlines| est utilisée, les filets extérieurs sont tracés
+avec des coins arrondis.
+\end{itemize}
+
+\bigskip
+\begin{BVerbatim}[baseline=c,boxwidth=9.5cm]
+\begin{NiceTabular}{ccc}[hvlines,~emphase#rounded-corners@]
+\CodeBefore
+  \rowcolor{red!15}{1}
+\Body
+  Nom & Prénom & Profession \\
+  Arvy & Jacques & Dentiste \\
+  Jalon & Amandine & Dentiste \\
+\end{NiceTabular}
+\end{BVerbatim}
+\begin{NiceTabular}{ccc}[hvlines,rounded-corners]
+\CodeBefore
+  \rowcolor{red!15}{1}
+\Body
+  Nom & Prénom & Profession \\
+  Arvy & Jacques & Dentiste \\
+  Jalon & Amandine & Dentiste \\
+  Sept & Huit & Neuf 
+\end{NiceTabular}
+
+
+
 \subsection{Commande \textbackslash ShowCellNames}
 
 
@@ -4168,7 +4248,7 @@
 \end{pNiceArray}$
 
 \medskip
-En revanche, les colonnes |d| de l'extension \pkg{dcolumn} ne sont pas prises en
+En revanche, les colonnes |d| de l'extension \pkg{dcolumn} ne sont \emph{pas} prises en
 charge par \pkg{nicematrix}.
 
 
@@ -4656,9 +4736,9 @@
 \label{node-V}
 Quand l'extension \pkg{varwidth} est chargée, les colonnes de type |V| définies
 par \pkg{varwidth} sont prises en charge par \pkg{nicematrix}. Il peut être
-intéressant de préciser que, pour une cellule située dans une colonne de type
-|V|, le nœud PGF-TikZ créé par \pkg{nicematrix} pour le contenu de cette cellule
-a une largeur ajustée au contenu de cette cellule. Cela est en contraste avec le
+intéressant de préciser que, pour une case située dans une colonne de type
+|V|, le nœud PGF-TikZ créé par \pkg{nicematrix} pour le contenu de cette case
+a une largeur ajustée au contenu de cette case. Cela est en contraste avec le
 cas des colonnes de type |p|, |m| ou |b| dans lesquelles les nœuds ont toujours
 une largeur égale à la largeur de la colonne. Dans l'exemple suivant, la
 commande |\lipsum| est fournie par l'extension éponyme.
@@ -4920,7 +5000,7 @@
     \hline
     u_n &-& u_0 &=& nr \\
 \CodeAfter
-    \tikz[very thick, red, opacity=0.4,name suffix = -medium]
+    \tikz[very thick, red, opacity=0.4, name suffix = -medium]
     \draw (1-1.north west) -- (2-3.south east)
     (2-1.north west) -- (3-3.south east)
     (3-1.north west) -- (4-3.south east)
@@ -5112,7 +5192,7 @@
 
 \medskip
 \emph{Exemple} : On souhaite écrire une commande |\crossbox| qui barre en croix
-la cellule courante. Cette commande prendra en argument optionnel une liste de
+la case courante. Cette commande prendra en argument optionnel une liste de
 couples \textsl{clé}-\textsl{valeur} qui sera passée à TikZ avant que la croix
 ne soit tracée.
 
@@ -5559,34 +5639,8 @@
 \end{center}
 
 
-\vspace{1cm}
-Cet exemple montre l'utilisation de \pkg{nicematrix} en conjonction avec
-\pkg{tcolorbox}. Si on souhaite seulement faire un tableau avec un cadre
-extérieur aux coins arrondis, il n'est pas nécessaire d'utiliser \pkg{tcolorbox} :
-on peut tracer un |\Block| avec la commande |rounded-corners|.
 
-\medskip
-\begin{BVerbatim}[baseline=c,boxwidth=10.5cm]
-\begin{NiceTabular}{rcl}[hvlines-except-borders]
-\Block[draw,transparent,~emphase#rounded-corners@]{*-*}{}
-  One & Two & Three \\
-  Men & Mice & Lions \\
-  Upper & Middle & Lower
-\end{NiceTabular}
-\end{BVerbatim}
-\begin{NiceTabular}{rcl}[hvlines-except-borders]
-\Block[draw,transparent,rounded-corners]{*-*}{}
-  One & Two & Three \\
-  Men & Mice & Lions \\
-  Upper & Middle & Lower
-\end{NiceTabular}
 
-\medskip
-On a utilisé la clé |transparent| de manière à avoir les filets spécifiés par 
-|hvlines-except-borders| tracés dans le bloc (par défaut, les filets ne sont
-pas tracés dans les blocs).
-
-
 \subsection{Notes dans les tableaux}
 
 \label{ex:notes}
@@ -6291,7 +6345,7 @@
 de la matrice, on peut utiliser la technique précédente trois fois.
 
 \begin{Verbatim}
-\[\begin{pNiceArray}{ccc}[last-col]
+\[\begin{pNiceArray}{ccc}[last-col, margin = 2pt]
 \CodeBefore [create-cell-nodes]
   \begin{tikzpicture}
 ~emphase#  \node [highlight = (1-1) (1-3)] {} ;@
@@ -6305,7 +6359,7 @@
 \end{pNiceArray}\]
 \end{Verbatim}
 
-\[\begin{pNiceArray}{ccc}[last-col]
+\[\begin{pNiceArray}{ccc}[last-col, margin = 2pt]
 \CodeBefore [create-cell-nodes]
   \begin{tikzpicture}
   \node [highlight = (1-1) (1-3)] {} ;
@@ -6323,7 +6377,7 @@
 moyens» au lieu des «nœuds normaux».
 
 \begin{Verbatim}
-\[\begin{pNiceArray}{ccc}[last-col,create-medium-nodes]
+\[\begin{pNiceArray}{ccc}[last-col, margin = 2pt, create-medium-nodes]
 \CodeBefore [create-cell-nodes]
   \begin{tikzpicture} ~emphase#[name suffix = -medium]@
   \node [highlight = (1-1) (1-3)] {} ;
@@ -6338,7 +6392,7 @@
 \end{Verbatim}
 
 
-\[\begin{pNiceArray}{ccc}[last-col,create-medium-nodes]
+\[\begin{pNiceArray}{ccc}[last-col, margin = 2pt, create-medium-nodes]
 \CodeBefore [create-cell-nodes]
   \begin{tikzpicture} [name suffix = -medium]
   \node [highlight = (1-1) (1-3)] {} ;
@@ -6441,7 +6495,7 @@
 \label{triangular}
 
 Dans l'exemple suivant, on utilise le style PGF/Tikz |nicematrix/cell-node| pour faire
-tourner le contenu des cellules (rotation que l'on compense ensuite en faisant
+tourner le contenu des cases (rotation que l'on compense ensuite en faisant
 tourner tout le tableau avec la commande |\adjustbox| de l'extension éponyme,
 qui doit donc être chargée préalablement).
 

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	2023-04-20 19:59:42 UTC (rev 66903)
+++ trunk/Master/texmf-dist/source/latex/nicematrix/nicematrix.dtx	2023-04-20 19:59:57 UTC (rev 66904)
@@ -17,8 +17,8 @@
 %
 % \fi
 % \iffalse
-\def\myfileversion{6.17}
-\def\myfiledate{2023/03/31}
+\def\myfileversion{6.18}
+\def\myfiledate{2023/04/19}
 %
 %
 %<*batchfile>
@@ -850,7 +850,6 @@
 %
 % \subsection{Vertical position of the content of the block}
 %
-% \colorbox{yellow!50}{\textbf{New 6.14}}
 %
 % For the vertical position, the command |\Blocks| accepts the keys
 % |v-center|\footnote{That key could not have been named |c| since the key |c|
@@ -866,11 +865,14 @@
 % block (we recall that the content of a block may contains several lines
 % separated by |\\|) is aligned with the baseline of the last of the rows of the
 % array involved in the block.
-% \item With the key |T|, the content of the block is set upwards with only a
-% margin equal to the PGF/Tikz parameter |inner ysep| (use |\pgfset| to change
-% the value of that parameter).
-% \item With the key |B|, the content of the block is set downwards with only a
-% margin equal to the PGF/Tikz parameter |inner ysep|.
+% \item With the key |T|, the content of the block is set upwards. 
+% 
+% \colorbox{yellow!50}{\textbf{Modification 6.18}}\enskip No vertical margin is
+% added. However, the contents of the block is (always) composed by
+% \pkg{nicematrix} in a |{minipage}|, a |{tabular}| or an |{array}| and, hence,
+% there will still remain a margin (in most cases).
+%
+% \item With the key |B|, the content of the block is set downwards.
 % \end{itemize}
 % 
 % When no key is given, the key |v-center| applies (excepted in the mono-row blocks).
@@ -890,19 +892,19 @@
 % \begin{BVerbatim}[baseline=c,boxwidth=10cm]
 % \begin{NiceTabular}{ccc}
 % \Block[fill=red!10,~emphase#t@,l]{4-2}{two\\lines}
-%  & & \Huge first\\
-%  & & second  \\
-%  & & third  \\
-%  & & fourth  \\
+%  & & \Huge Un\\
+%  & & deux  \\
+%  & & trois  \\
+%  & & \Huge quatre  \\
 % text & text \\
 % \end{NiceTabular}
 % \end{BVerbatim}
 % \begin{NiceTabular}{ccc}
 % \Block[fill=red!10,t,l]{4-2}{two\\lines}
-%  & & \Huge first\\
-%  & & second  \\
-%  & & third  \\
-%  & & fourth  \\
+%  & & \Huge Un\\
+%  & & deux  \\
+%  & & trois  \\
+%  & & \Huge quatre  \\
 % text & text \\
 % \end{NiceTabular}
 %
@@ -911,19 +913,19 @@
 % \begin{BVerbatim}[baseline=c,boxwidth=10cm]
 % \begin{NiceTabular}{ccc}
 % \Block[fill=red!10,~emphase#b@,r]{4-2}{two\\lines}
-%  & & \Huge first\\
-%  & & second  \\
-%  & & third  \\
-%  & & fourth  \\
+%  & & \Huge Un\\
+%  & & deux  \\
+%  & & trois  \\
+%  & & \Huge quatre  \\
 % text & text \\
 % \end{NiceTabular}
 % \end{BVerbatim}
 % \begin{NiceTabular}{ccc}
 % \Block[fill=red!10,b,r]{4-2}{two\\lines}
-%  & & \Huge first\\
-%  & & second  \\
-%  & & third  \\
-%  & & fourth  \\
+%  & & \Huge Un\\
+%  & & deux  \\
+%  & & trois  \\
+%  & & \Huge quatre  \\
 % text & text \\
 % \end{NiceTabular}
 %
@@ -931,19 +933,19 @@
 % \begin{BVerbatim}[baseline=c,boxwidth=10cm]
 % \begin{NiceTabular}{ccc}
 % \Block[fill=red!10,~emphase#T@,l]{4-2}{two\\lines}
-%  & & \Huge first\\
-%  & & second  \\
-%  & & third  \\
-%  & & fourth  \\
+%  & & \Huge Un\\
+%  & & deux  \\
+%  & & trois  \\
+%  & & \Huge quatre  \\
 % text & text \\
 % \end{NiceTabular}
 % \end{BVerbatim}
 % \begin{NiceTabular}{ccc}
 % \Block[fill=red!10,T,l]{4-2}{two\\lines}
-%  & & \Huge first\\
-%  & & second  \\
-%  & & third  \\
-%  & & fourth  \\
+%  & & \Huge Un\\
+%  & & deux  \\
+%  & & trois  \\
+%  & & \Huge quatre  \\
 % text & text \\
 % \end{NiceTabular}
 %
@@ -952,22 +954,23 @@
 % \begin{BVerbatim}[baseline=c,boxwidth=10cm]
 % \begin{NiceTabular}{ccc}
 % \Block[fill=red!10,~emphase#B@,r]{4-2}{two\\lines}
-%  & & \Huge first\\
-%  & & second  \\
-%  & & third  \\
-%  & & fourth  \\
+%  & & \Huge Un\\
+%  & & deux  \\
+%  & & trois  \\
+%  & & \Huge quatre  \\
 % text & text \\
 % \end{NiceTabular}
 % \end{BVerbatim}
 % \begin{NiceTabular}{ccc}
 % \Block[fill=red!10,B,r]{4-2}{two\\lines}
-%  & & \Huge first\\
-%  & & second  \\
-%  & & third  \\
-%  & & fourth  \\
+%  & & \Huge Un\\
+%  & & deux  \\
+%  & & trois  \\
+%  & & \Huge quatre  \\
 % text & text \\
 % \end{NiceTabular}
 %
+%
 % \end{scope}
 %
 %
@@ -1235,9 +1238,15 @@
 % \end{center}
 %
 % \bigskip
+% It's worth noting that, when the key |rounded-corners| is used for the
+% environment |{NiceTabular}|, the key |hvlines| draws rounded corners for the
+% exterior frame of the tabular: cf. part~\ref{tabular-rounded-corners},
+% p.~\pageref{tabular-rounded-corners}.
+% 
+% \bigskip
 % The key |hvlines-except-borders| is similar to the key |hvlines| but does not
 % draw the rules on the horizontal and vertical borders of the array. For an
-% example of use of that key, see the part ``Use with tcolorbox`,
+% example of use of that key, see the part ``Use with tcolorbox'',
 % p.~\pageref{tcolorbox}. 
 %
 % \subsubsection{The (empty) corners}
@@ -1255,7 +1264,7 @@
 % natural. The precise definition of a ``non-empty cell'' is given below (cf.
 % p.~\pageref{empty-cells}).}
 % 
-% However, it's possible, for a cell without content, to require \pkg{nicemarix}
+% However, it's possible, for a cell without content, to require \pkg{nicematrix}
 % to consider that cell as not empty with the key |\NotEmpty|.
 % 
 %\bigskip
@@ -1283,9 +1292,12 @@
 % \end{NiceTabular}
 %
 % \bigskip
-% When the key |corners| is used, \pkg{nicematrix} computes the (empty) corners
-% and these corners will be taken into account by the tools for drawing the
-% rules (the rules won't be drawn in the corners). 
+% When the key |corners|\footnote{The key \texttt{corners} that we describe now
+% has no direct link with the key \texttt{rounded-corners} described in the part
+% \ref{tabular-rounded-corners}, p.~\pageref{tabular-rounded-corners}} is used,
+% \pkg{nicematrix} computes the (empty) corners and these corners will be taken
+% into account by the tools for drawing the rules (the rules won't be drawn in
+% the corners).
 %
 % \bigskip
 % \begin{BVerbatim}[boxwidth=11cm,baseline=c]
@@ -1675,18 +1687,33 @@
 % \label{code-before}
 %
 % \medskip
-% All these commands accept an optional argument (between square brackets and
-% in first position) which is the color model for the specification of the
-% colors.
+% These commands don't color the cells which are in the ``corners'' if the key
+% |corners| is used. That key has been described p.~\pageref{corners}.
 %
 % \medskip
-% These commands don't color the cells which are in the ``corners'' if the key
-% |corners| is used. This key has been described p.~\pageref{corners}.
+% These commands respect the rounded corners if the key |rounded-corners|
+% (described in the part \ref{tabular-rounded-corners} at the
+% page~\pageref{tabular-rounded-corners}) has been used.
+%
+% \medskip
+% All these commands accept an optional argument, between square brackets and
+% in first position. That optional argument may contain two elements (separated
+% by a comma)
+% \begin{itemize}
+% \item the colorimetric space (|RGB|, |rgb|, |HTML|, etc) as specified by the
+% the extension \pkg{xcolor};
+% \item \colorbox{yellow!50}{\textbf{New 6.18}}\par\nobreak
+% a specification of opacity f the form \texttt{opacity = \textsl{value}}.
+% \end{itemize}
 % 
+% \bigskip
+% 
+% We describe now in detail those commands.
+%
 % \medskip
 % \begin{itemize}
-% \item The command |\cellcolor| takes its name from the command |\cellcolor| of
-% \pkg{colortbl}.
+% \item The command \Definition{\textbackslash cellcolor} takes its name from
+% the command |\cellcolor| of \pkg{colortbl}.
 %
 % This command takes in as mandatory arguments a color and a list of cells, each
 % of which with the format $i$-$j$ where $i$ is the number of the row and $j$ the
@@ -1718,9 +1745,9 @@
 % \end{scope}
 %
 % \bigskip
-% \item The command |\rectanglecolor| takes three mandatory arguments. The first
-% is the color. The second is the upper-left cell of the rectangle and the third
-% is the lower-right cell of the rectangle.
+% \item The command \Definition{\textbackslash rectanglecolor} takes three
+% mandatory arguments. The first is the color. The second is the upper-left cell
+% of the rectangle and the third is the lower-right cell of the rectangle.
 %
 % \medskip
 % \begin{scope}
@@ -1746,15 +1773,16 @@
 % \end{scope}
 % 
 % \bigskip
-% \item The command |\arraycolor| takes in as mandatory argument a color and
-% color the whole tabular with that color (excepted the potential exterior rows
-% and columns: cf.~p.~\pageref{exterior}). It's only a particular case of
-% |\rectanglecolor|. 
+% \item The command \Definition{\textbackslash arraycolor} takes in as mandatory
+% argument a color and color the whole tabular with that color (excepted the
+% potential exterior rows and columns: cf.~p.~\pageref{exterior}). It's only a
+% particular case of |\rectanglecolor|.
 %
 % 
 % \bigskip
-% \item The command |\chessboardcolors| takes in as mandatory arguments two colors
-% and it colors the cells of the tabular in quincunx with these colors.
+% \item The command \Definition{\textbackslash chessboardcolors} takes in as
+% mandatory arguments two colors and it colors the cells of the tabular in
+% quincunx with these colors.
 %
 % \medskip
 % \begin{scope}
@@ -1785,10 +1813,11 @@
 %
 %
 % \bigskip
-% \item The command |\rowcolor| takes its name from the command |\rowcolor| of
-% \pkg{colortbl}. Its first mandatory argument is the color and the second is a
-% comma-separated list of rows or interval of rows with the form $a$-$b$ (an
-% interval of the form $a$- represent all the rows from the row $a$ until the end).
+% \item The command \Definition{\textbackslash rowcolor} takes its name from the
+% command |\rowcolor| of \pkg{colortbl}. Its first mandatory argument is the
+% color and the second is a comma-separated list of rows or interval of rows
+% with the form $a$-$b$ (an interval of the form $a$- represent all the rows
+% from the row $a$ until the end).
 % 
 % \medskip
 % \begin{scope}
@@ -1829,17 +1858,17 @@
 %
 %
 % \bigskip
-% \item The command |\columncolor| takes its name from the command
-% |\columncolor| of \pkg{colortbl}. Its syntax is similar to the syntax of
-% |\rowcolor|.
+% \item The command \Definition{\textbackslash columncolor} takes its name from
+% the command |\columncolor| of \pkg{colortbl}. Its syntax is similar to the
+% syntax of |\rowcolor|.
 % 
 % \bigskip
-% \item The command |\rowcolors| (with a \emph{s}) takes its name from the
-% command |\rowcolors| of \pkg{colortbl}. The \emph{s} emphasizes
-% the fact that there is \emph{two} colors. This command colors alternately the
-% rows of the tabular with the two colors (provided in second and third
-% argument), beginning with the row whose number is given in first (mandatory)
-% argument.
+% \item The command \Definition{\textbackslash rowcolors} (with a \emph{s})
+% takes its name from the command |\rowcolors| of \pkg{colortbl}. The \emph{s}
+% emphasizes the fact that there is \emph{two} colors. This command colors
+% alternately the rows of the tabular with the two colors (provided in second
+% and third argument), beginning with the row whose number is given in first
+% (mandatory) argument.
 %
 % In fact, the first (mandatory) argument is, more generally, a comma separated
 % list of intervals describing the rows involved in the action of |\rowcolors|
@@ -1936,11 +1965,11 @@
 %
 %
 % \bigskip
-% \item The extension \pkg{nicematrix} provides also a command |\rowlistcolors|.
-% This command generalises the command |\rowcolors|: instead of two successive
-% arguments for the colors, this command takes in an argument which is a
-% (comma-separated) list of colors. In that list, the symbol |=| represent a
-% color identical to the previous one.
+% \item The extension \pkg{nicematrix} provides also a command
+% \Definition{\textbackslash rowlistcolors}. This command generalises the
+% command |\rowcolors|: instead of two successive arguments for the colors, this
+% command takes in an argument which is a (comma-separated) list of colors. In
+% that list, the symbol |=| represent a color identical to the previous one.
 %
 % \smallskip
 % \begin{BVerbatim}[boxwidth=10cm,baseline=c]
@@ -4068,15 +4097,63 @@
 %
 % \section{Other features}
 %
+% \subsection{The key rounded-corners of \{NiceTabular\}}
+%
+% \label{tabular-rounded-corners}
+% \colorbox{yellow!50}{\textbf{New 6.18}}\par\nobreak
+%
+% \smallskip
+% The key |rounded-corners| that we will descrite now has no direct link with
+% the key |corners| (which is used to specify ``empty corners'') described in
+% the part~\ref{corners}, p.~\pageref{corners}.
+%
+% \smallskip
+% The environment |{NiceTabular}| provides also a key |rounded-corners| which
+% specify that the tabular should have rounded corners with a radius equal to
+% the value of that key (the default value is 4~pt\footnote{This value is the
+% initial value of the \emph{rounded corners} of Tikz.}). More precisely, that
+% key has two effects that we describe now.
+% \begin{itemize}
+% \item All the commands for coloring the cells, columns and rows (in the
+% |\CodeBefore| but also directly in the array if the key |colortbl-like| is
+% used) will respect those rounded corners.
+%
+% \item When the key |hvlines| is used, the exterior rules will be drawn with
+% rounded corners.
+% \end{itemize}
 
+% \bigskip
+% \begin{BVerbatim}[baseline=c,boxwidth=9cm]
+% \begin{NiceTabular}
+%   [hvlines,~emphase#rounded-corners@]
+%   {ccc}
+% \CodeBefore
+%   \rowcolor{red!15}{1}
+% \Body
+% Last name & First name & Profession \\
+% Arvy & Jacques & Physicist \\
+% Jalon & Amandine & Physicist
+% \end{NiceTabular}
+% \end{BVerbatim}
+% \begin{NiceTabular}{ccc}[hvlines,rounded-corners]
+% \CodeBefore
+%   \rowcolor{red!15}{1}
+% \Body
+% Last name & First name & Profession \\
+% Arvy & Jacques & Physicist \\
+% Jalon & Amandine & Physicist
+% \end{NiceTabular}
+%
+%
 % \subsection{Command \textbackslash ShowCellNames}
 %
 % The command |\ShowCellNames|, which may be used in the |\CodeBefore| and in
-% the |\CodeAfter| display the name (with the form $i$-$j$) of each cell. When
+% the |\CodeAfter| displays the name (with the form $i$-$j$) of each cell. When
 % used in the |\CodeAfter|, that command applies a semi-transparent white
 % rectangle to fade the array (caution: some \textsc{pdf} readers don't support
 % transparency). 
 %
+% \medskip
 % \begin{BVerbatim}[baseline=c,boxwidth=10.6cm]
 % \begin{NiceTabular}{ccc}[hvlines,cell-space-limits=3pt]
 %   \Block{2-2}{} &           & test \\
@@ -4858,7 +4935,7 @@
 %     \hline
 %     u_n &-& u_0 &=& nr \\
 % \CodeAfter
-%     \tikz[very thick, red, opacity=0.4,name suffix = -medium]
+%     \tikz[very thick, red, opacity=0.4, name suffix = -medium]
 %     \draw (1-1.north west) -- (2-3.south east)
 %     (2-1.north west) -- (3-3.south east)
 %     (3-1.north west) -- (4-3.south east)
@@ -4878,7 +4955,7 @@
 %     \hline
 %     u_n &-& u_0 &=& nr \\
 %     \CodeAfter
-%     \tikz[very thick, red, opacity=0.4,name suffix = -medium]
+%     \tikz[very thick, red, opacity=0.4, name suffix = -medium]
 %     \draw (1-1.north west) -- (2-3.south east)
 %     (2-1.north west) --(3-3.south east)
 %     (3-1.north west) -- (4-3.south east)
@@ -6200,7 +6277,7 @@
 % this matrix, we can use the previous technique three times.
 %
 % \begin{Verbatim}
-% \[\begin{pNiceArray}{ccc}[last-col]
+% \[\begin{pNiceArray}{ccc}[last-col, margin = 2pt]
 % \CodeBefore [create-cell-nodes]
 %   \begin{tikzpicture}
 % ~emphase#  \node [highlight = (1-1) (1-3)] {} ;@
@@ -6215,7 +6292,7 @@
 % \end{Verbatim}
 %
 %
-% \[\begin{pNiceArray}{ccc}[last-col]
+% \[\begin{pNiceArray}{ccc}[last-col, margin = 2pt]
 % \CodeBefore [create-cell-nodes]
 %   \begin{tikzpicture}
 %   \node [highlight = (1-1) (1-3)] {} ;
@@ -6233,7 +6310,7 @@
 % nodes'' instead of the ``normal nodes''. 
 %
 % \begin{Verbatim}
-% \[\begin{pNiceArray}{ccc}[last-col,create-medium-nodes]
+% \[\begin{pNiceArray}{ccc}[last-col, margin = 2pt, create-medium-nodes]
 % \CodeBefore [create-cell-nodes]
 %   \begin{tikzpicture} ~emphase#[name suffix = -medium]@
 %   \node [highlight = (1-1) (1-3)] {} ;
@@ -6248,7 +6325,7 @@
 % \end{Verbatim}
 %
 % 
-%\[\begin{pNiceArray}{ccc}[last-col,create-medium-nodes]
+%\[\begin{pNiceArray}{ccc}[last-col, margin = 2pt, create-medium-nodes]
 % \CodeBefore [create-cell-nodes]
 %   \begin{tikzpicture} [name suffix = -medium]
 %   \node [highlight = (1-1) (1-3)] {} ;
@@ -6597,27 +6674,25 @@
 %    \end{macrocode}
 %
 % \bigskip
-% Here, the box |\l_tmpa_box| will be used as sandbox to take our security test. 
+% Here, the box |\l_tmpa_box| will be used as sandbox to take our security test.
+% This code has benne modified in version 6.18 (see question 682891 on TeX
+% StackExchange). 
 %    \begin{macrocode}
-\hook_gput_code:nnn { begindocument } { . }
+\hook_gput_code:nnn { begindocument / after } { . }
   {
     \@ifpackageloaded { mdwtab }
       { \@@_fatal:n { mdwtab~loaded } }
       {
-        \@ifpackageloaded { fontspec }
-          { }
+        \bool_if:NF \c_@@_no_test_for_array_bool
           {
-            \bool_if:NF \c_@@_no_test_for_array_bool
-              {
-                \group_begin:
-                  \hbox_set:Nn \l_tmpa_box
-                    {
-                      \begin { tabular } { c > { \@@_security_test:n } c c }
-                      text & & text
-                      \end { tabular }
-                    }
-                \group_end:
-              }
+            \group_begin:
+              \hbox_set:Nn \l_tmpa_box
+                {
+                  \begin { tabular } { c > { \@@_security_test:n } c c }
+                  text & & text
+                  \end { tabular }
+                }
+            \group_end:
           }
       } 
   }
@@ -7174,6 +7249,13 @@
 %    \end{macrocode}
 %
 % \bigskip
+% The following dimension will be used by the command |\Block| for the blocks
+% with a key of vertical position equal to |T| or |B|.
+%    \begin{macrocode}
+\dim_new:N \l_@@_block_ysep_dim
+%    \end{macrocode}
+% 
+% \bigskip
 % The following dimension correspond to the key |width| (which may be fixed in
 % |\NiceMatrixOptions| but also in an environment |{NiceTabular}|).
 %    \begin{macrocode}
@@ -7377,6 +7459,9 @@
 %    \end{macrocode}
 %
 % \bigskip
+% The value of the key |code-before| will be added to the left of
+% |\g_@@_pre_code_before_tl|. Idem for the code between |\CodeBefore| and
+% |\Body|. 
 %    \begin{macrocode} 
 \tl_new:N \g_nicematrix_code_before_tl
 \tl_new:N \g_@@_pre_code_before_tl
@@ -7586,7 +7671,7 @@
 % 
 % \medskip
 % The following flag will be raised if the key |width| is used in an environment
-% |{NiceTabular}| (not in a comamnd |\NiceMatrixOptions|). You use it to raise
+% |{NiceTabular}| (not in a command |\NiceMatrixOptions|). You use it to raise
 % an error when this key is used while no column |X| is used.
 %    \begin{macrocode}
 \bool_new:N \l_@@_width_used_bool
@@ -7648,6 +7733,15 @@
 % |corners| is used). 
 % 
 % \medskip
+% The following dimension corresponds to the key |rounded-corners| available in
+% an individual environment |{NiceTabular}|. When that key is used, a clipping
+% is applied in the |\CodeBefore| of the environment in order to have rounded
+% corners for the potential colored panels.
+%    \begin{macrocode}
+\dim_new:N \l_@@_tab_rounded_corners_dim
+%    \end{macrocode}
+% 
+% \medskip
 % The following token list correspond to the key |color| of the command |\Block|
 % and also the key |color| of the command |\RowStyle|.
 %    \begin{macrocode}
@@ -7712,12 +7806,21 @@
 \dim_new:N \l_@@_submatrix_left_xshift_dim
 \dim_new:N \l_@@_submatrix_right_xshift_dim
 \clist_new:N \l_@@_hlines_clist 
-\clist_new:N \l_@@_vlines_clist 
+\clist_new:N \l_@@_vlines_clist
 \clist_new:N \l_@@_submatrix_hlines_clist 
 \clist_new:N \l_@@_submatrix_vlines_clist 
 %    \end{macrocode}
 %
+% \medskip
+% The following key is set when the keys |hvlines| and |hvlines-except-borders|
+% are used. It's used only to change slightly the clipping path set by the key
+% |rounded-corners| (for a |{tabular}|).
+%    \begin{macrocode}
+\bool_new:N \l_@@_hvlines_bool
+%    \end{macrocode}
+% 
 %
+%
 % \bigskip
 % The following flag will be used by (for instance) |\@@_vline_ii:|.
 % When |\l_@@_dotted_bool| is |true|, a dotted line (with our system) will be drawn.
@@ -8475,6 +8578,7 @@
 %    \begin{macrocode}
 \tl_new:N \l_@@_delimiters_color_tl
 %    \end{macrocode}
+%
 % 
 % \bigskip
 % Sometimes, we want to have several arrays vertically juxtaposed in order to
@@ -8619,6 +8723,7 @@
     vlines-in-sub-matrix .value_required:n = true ,
     hvlines .code:n = 
       { 
+        \bool_set_true:N \l_@@_hvlines_bool
         \clist_set:Nn \l_@@_vlines_clist { all }
         \clist_set:Nn \l_@@_hlines_clist { all }
       } ,
@@ -8626,6 +8731,7 @@
       { 
         \clist_set:Nn \l_@@_vlines_clist { all }
         \clist_set:Nn \l_@@_hlines_clist { all }
+        \bool_set_true:N \l_@@_hvlines_bool
         \bool_set_true:N \l_@@_except_borders_bool
       } ,
     parallelize-diags .bool_set:N = \l_@@_parallelize_diags_bool ,
@@ -8996,6 +9102,8 @@
     width .code:n = \dim_set:Nn \l_@@_width_dim { #1 } 
                     \bool_set_true:N \l_@@_width_used_bool ,
     width .value_required:n = true ,
+    rounded-corners .dim_set:N = \l_@@_tab_rounded_corners_dim ,
+    rounded-corners .default:n = 4 pt ,
     notes .code:n = \keys_set:nn { NiceMatrix / notes } { #1 } , 
     tabularnote .tl_gset:N = \g_@@_tabularnote_tl ,
     tabularnote .value_required:n = true ,
@@ -9745,7 +9853,7 @@
     \cs_set_eq:NN \Block \@@_Block:
     \cs_set_eq:NN \rotate \@@_rotate:
     \cs_set_eq:NN \OnlyMainNiceMatrix \@@_OnlyMainNiceMatrix:n
-    \cs_set_eq:NN \dotfill \@@_old_dotfill:
+    \cs_set_eq:NN \dotfill \@@_dotfill:
     \cs_set_eq:NN \CodeAfter \@@_CodeAfter:
     \cs_set_eq:NN \diagbox \@@_diagbox:nn
     \cs_set_eq:NN \NotEmpty \@@_NotEmpty:
@@ -10989,7 +11097,11 @@
                 \keys_set:nn { NiceMatrix / ColumnTypes } { #1 } 
                 \@@_patch_preamble:n 
               }
-              { \@@_fatal:nn { unknown~column~type } { #1 } }
+              { 
+                \tl_if_eq:nnT { #1 } { S }
+                  { \@@_fatal:n { unknown~column~type~S } }
+                  { \@@_fatal:nn { unknown~column~type } { #1 } }
+              }
           }
       }
   }
@@ -12027,7 +12139,11 @@
         \@@_W: { \@@_patch_m_preamble_v:nnnn { \@@_special_W: } #1 } 
         \q_stop { }
       }
-      { \@@_fatal:nn { unknown~column~type } { #1 } }
+      { 
+        \tl_if_eq:nnT { #1 } { S }
+          { \@@_fatal:n { unknown~column~type~S } }
+          { \@@_fatal:nn { unknown~column~type } { #1 } }
+      }
   }
 %    \end{macrocode}
 %
@@ -13294,6 +13410,36 @@
       { \dim_set_eq:NN \l_@@_width_dim \linewidth }
     \str_gset:Nn \g_@@_name_env_str { NiceTabular }
     \keys_set:nn { NiceMatrix / NiceTabular } { #1 , #3 }
+    \int_compare:nNnT \l_@@_tab_rounded_corners_dim > \c_zero_dim
+      {
+        \bool_if:NT \l_@@_hvlines_bool
+          {
+            \bool_set_true:N \l_@@_except_borders_bool
+            % we should try to be more efficient in the number of lines of code here
+            \tl_if_empty:NTF \l_@@_rules_color_tl
+              {
+                \tl_gput_right:Nn \g_@@_pre_code_after_tl
+                  { 
+                    \@@_stroke_block:nnn 
+                      { rounded-corners = \dim_use:N \l_@@_tab_rounded_corners_dim }
+                      { 1-1 }
+                      { \int_use:N \c at iRow - \int_use:N \c at jCol }
+                  }
+              }
+              {
+                \tl_gput_right:Nn \g_@@_pre_code_after_tl
+                  { 
+                    \@@_stroke_block:nnn 
+                      { 
+                        rounded-corners = \dim_use:N \l_@@_tab_rounded_corners_dim ,
+                        draw = \l_@@_rules_color_tl
+                      }
+                      { 1-1 }
+                      { \int_use:N \c at iRow - \int_use:N \c at jCol }
+                  }
+              }
+          }
+      }
     \tl_if_empty:NF \l_@@_short_caption_tl
       {
         \tl_if_empty:NT \l_@@_caption_tl
@@ -15748,19 +15894,115 @@
   {
     \pgfpicture
     \pgf at relevantforpicturesizefalse
+%    \end{macrocode}
+% If the final user has used the key |rounded-corners| for the environment
+% |{NiceTabular}|, we will clip to a rectangle with rounded corners before
+% filling the rectangles.
+%    \begin{macrocode}
+    \dim_compare:nNnT \l_@@_tab_rounded_corners_dim > \c_zero_dim
+      {
+        \pgfsetcornersarced
+          {
+            \pgfpoint
+              { \l_@@_tab_rounded_corners_dim } 
+              { \l_@@_tab_rounded_corners_dim }
+          }
+%    \end{macrococde}
+% Because we want \pkg{nicematrix} compatible with arrays constructed by
+% \pkg{array}, the nodes for the rows and columns (that is to say the nodes
+% |row-|\textsl{i} and |col-|\textsl{j}) have not always the expected position,
+% that is to say, there is sometimes a slight shifting of something such as
+% |\arrayrulewidth|. Now, for the clipping, we have to change slightly the
+% position of that clipping whether a rounded rectangle around the array is
+% required. That's the point which is tested in the following line.
+%    \begin{macrocode}
+        \bool_if:NTF \l_@@_hvlines_bool 
+          {
+            \pgfpathrectanglecorners
+              { 
+                \pgfpointadd
+                  { \@@_qpoint:n { row-1 } }
+                  { \pgfpoint { 0.5 \arrayrulewidth } { \c_zero_dim } }
+              }
+              { 
+                \pgfpointadd
+                  {
+                    \@@_qpoint:n 
+                      { \int_eval:n { \int_max:nn \c at iRow \c at jCol + 1 } } 
+                  }
+                  { \pgfpoint \c_zero_dim { 0.5 \arrayrulewidth } }
+              }
+          }
+          {
+            \pgfpathrectanglecorners
+              { \@@_qpoint:n { row-1 } }
+              { 
+                \pgfpointadd
+                  {
+                    \@@_qpoint:n 
+                      { \int_eval:n { \int_max:nn \c at iRow \c at jCol + 1 } } 
+                  }
+                  { \pgfpoint \c_zero_dim \arrayrulewidth } 
+              }
+          }
+        \pgfusepath { clip }
+      }
     \seq_map_indexed_inline:Nn \g_@@_colors_seq
       {
-        \color ##2
-        \use:c { g_@@_color _ ##1 _tl }
-        \tl_gclear:c { g_@@_color _ ##1 _tl }
-        \pgfusepath { fill }
+        \begin { pgfscope }
+          \@@_color_opacity ##2
+          \use:c { g_@@_color _ ##1 _tl }
+          \tl_gclear:c { g_@@_color _ ##1 _tl }
+          \pgfusepath { fill }
+        \end { pgfscope }
       }
     \endpgfpicture
   }
 %    \end{macrocode}
-% 
 %
+% \bigskip
+% The following command will extract the potential key |opacity| in its optional
+% argument (between square brackets) and (of course) then apply the command |\color|.
 %    \begin{macrocode}
+\cs_new_protected:Npn \@@_color_opacity
+  {
+    \peek_meaning:NTF [
+      { \@@_color_opacity:w }
+      { \@@_color_opacity:w [ ] }
+  }
+%    \end{macrocode}
+%
+% \bigskip
+% The command |\@@_color_opacity:w| takes in as argument only the optional
+% argument. One may consider that the second argument (the actual definition of
+% the color) is provided by currification.
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_color_opacity:w [ #1 ] 
+  {
+    \tl_clear:N \l_tmpa_tl
+    \keys_set_known:nnN { nicematrix / color-opacity } { #1 } \l_tmpb_tl 
+%    \end{macrocode}
+% |\l_tmpa_tl| (if not empty) is now the opacity and |\l_tmpb_tl| (if not empty) is now the colorimetric space.
+%    \begin{macrocode}
+    \tl_if_empty:NF \l_tmpa_tl { \exp_args:NV \pgfsetfillopacity \l_tmpa_tl }
+    \tl_if_empty:NTF \l_tmpb_tl 
+      { \@declaredcolor }
+      { \use:x { \exp_not:N \@undeclaredcolor [ \l_tmpb_tl ] } }
+  }
+%    \end{macrocode}
+%
+% \bigskip
+% The following set of keys is used by the command |\@@_color_opacity:wn|.
+%    \begin{macrocode}
+\keys_define:nn { nicematrix / color-opacity }
+  {
+    opacity .tl_set:N         = \l_tmpa_tl ,
+    opacity .value_required:n = true 
+  }
+%    \end{macrocode}
+% 
+% \bigskip
+%    \begin{macrocode}
 \cs_new_protected:Npn \@@_cartesian_color:nn #1 #2
   {
     \tl_set:Nn \l_@@_rows_tl { #1 }
@@ -18237,7 +18479,16 @@
 % because we want to be able to take into account a potential instruction of
 % color of the font in |\g_@@_row_style_tl|.
 %    \begin{macrocode}
-        \int_compare:nNnT { #1 } = 1 \g_@@_row_style_tl
+        \int_compare:nNnT { #1 } = 1 
+          {
+            \int_compare:nNnTF \c at iRow = 0 
+              \l_@@_code_for_first_row_tl
+              {
+                \int_compare:nNnT \c at iRow = \l_@@_last_row_int 
+                  \l_@@_code_for_last_row_tl
+              }
+            \g_@@_row_style_tl
+          }
         \group_begin:
         \bool_if:NF \l_@@_respect_arraystretch_bool 
           { \cs_set:Npn \arraystretch { 1 } }
@@ -18897,20 +19148,6 @@
       }
 %    \end{macrocode}
 %
-% We take into account the case of a block of one row in the ``first row'' or
-% the ``last row''.
-%    \begin{macrocode}
-    \int_compare:nNnT { #1 } = 0
-      { 
-        \int_compare:nNnT { #3 } = 0
-          { \l_@@_code_for_first_row_tl }
-      }
-    \int_compare:nNnT { #1 } = \l_@@_last_row_int
-      { 
-        \int_compare:nNnT { #3 } = \l_@@_last_row_int
-          { \l_@@_code_for_last_row_tl }
-      }
-%    \end{macrocode}
 %
 % \medskip
 % Now, we will put the label of the block.
@@ -18980,7 +19217,11 @@
               }
               { \l_tmpa_tl }
           }
-        \pgfset { inner~xsep = \c_zero_dim } 
+        \pgfset 
+          { 
+            inner~xsep = \c_zero_dim ,
+            inner~ysep = \l_@@_block_ysep_dim 
+          } 
         \pgfnode 
           { rectangle } 
           { \l_tmpa_tl }
@@ -19484,12 +19725,8 @@
 % case of use of |\dotfill| ``internally'' in the cell (e.g. |\hbox to 1cm {\dotfill}|).
 %    \begin{macrocode}
     \@@_old_dotfill
-    \bool_if:NT \l_@@_NiceTabular_bool
-      { \group_insert_after:N \@@_dotfill_ii: }
-      { \group_insert_after:N \@@_dotfill_i: }
+    \tl_gput_right:Nn \g_@@_cell_after_hook_tl \@@_dotfill_i:
   }
-\cs_new_protected:Npn \@@_dotfill_i: { \group_insert_after:N \@@_dotfill_ii: }
-\cs_new_protected:Npn \@@_dotfill_ii: { \group_insert_after:N \@@_dotfill_iii: } 
 %    \end{macrocode}
 % Now, if the box if not empty (unfornately, we can't actually test whether the
 % box is empty and that's why we only consider it's width), we insert
@@ -19496,7 +19733,7 @@
 % |\@@_dotfill| (which is the saved version of |\dotfill|) in the cell of the
 % array, and it will extend, since it is no longer in |\l_@@_cell_box|.
 %    \begin{macrocode}
-\cs_new_protected:Npn \@@_dotfill_iii: 
+\cs_new_protected:Npn \@@_dotfill_i: 
   { \dim_compare:nNnT { \box_wd:N \l_@@_cell_box } = \c_zero_dim  \@@_old_dotfill } 
 %    \end{macrocode}
 % 
@@ -20946,19 +21183,38 @@
     \seq_if_in:NVTF \g_@@_types_of_matrix_seq \g_@@_name_env_str
       { 
         \int_compare:nNnTF \l_@@_last_col_int = { -2 }
-        { \@@_fatal:n { too~much~cols~for~matrix } }
-        {
-          \int_compare:nNnTF \l_@@_last_col_int = { -1 }
-            { \@@_fatal:n { too~much~cols~for~matrix } }
-            {
-              \bool_if:NF \l_@@_last_col_without_value_bool
-                { \@@_fatal:n { too~much~cols~for~matrix~with~last~col } }
-            }
-        }
+          { \@@_fatal:n { too~much~cols~for~matrix } }
+          {
+            \int_compare:nNnTF \l_@@_last_col_int = { -1 }
+              { \@@_fatal:n { too~much~cols~for~matrix } }
+              {
+                \bool_if:NF \l_@@_last_col_without_value_bool
+                  { \@@_fatal:n { too~much~cols~for~matrix~with~last~col } }
+              }
+          }
       }
-      { \@@_fatal:n { too~much~cols~for~array } }
+      { 
+        \bool_lazy_and:nnTF
+          { \bool_if_p:n \c_@@_tabularx_loaded_bool }
+          { ! \str_if_eq_p:Vn \g_@@_name_env_str { NiceTabularX } }
+          { 
+            \int_compare:nNnTF \c at iRow = \c_zero_int 
+              { \@@_fatal:n { X~columns~with~tabularx } }
+              { 
+                \@@_fatal:nn { too~much~cols~for~array } 
+                  { 
+                    However,~this~message~may~be~erroneous:~
+                    maybe~you~have~used~X~columns~while~'tabularx'~is~loaded,~
+                    ~which~is~forbidden~(however,~it's~still~possible~to~use~ 
+                    X~columns~in~{NiceTabularX}).
+                  }
+              }
+          }
+          { \@@_fatal:nn { too~much~cols~for~array } { } }
+      }
   }
 %    \end{macrocode}
+%
 % 
 % The following command must \emph{not} be protected since it's used in an error message.
 %    \begin{macrocode}
@@ -21025,12 +21281,22 @@
     ~you~try~to~use~more~columns~than~allowed~by~your~
     \@@_full_name_env:.\@@_message_hdotsfor:\ The~maximal~number~of~columns~is~ 
     \int_use:N \g_@@_static_num_of_col_int\ 
-    ~(plus~the~potential~exterior~ones).~ 
+    ~(plus~the~potential~exterior~ones).~#1 
     This~error~is~fatal.
   }
 %    \end{macrocode}
 %
-
+% \medskip
+%    \begin{macrocode}
+\@@_msg_new:nn { X~columns~with~tabularx }
+  {
+    There~is~a~problem.\\
+    You~have~probably~used~X~columns~in~your~environment~{\g_@@_name_env_str}.~
+    That's~not~allowed~because~'tabularx'~is~loaded~(however,~you~can~use~X~columns~
+    in~an~environment~{NiceTabularX}).\\
+    This~error~is~fatal.
+  }
+%    \end{macrocode}
 % 
 %    \begin{macrocode}
 \@@_msg_new:nn { columns~not~used }
@@ -21538,6 +21804,17 @@
 %    \end{macrocode}
 %
 %    \begin{macrocode}
+\@@_msg_new:nn { unknown~column~type~S }
+  {
+    Bad~column~type.\\
+    The~column~type~'S'~in~your~\@@_full_name_env:\ is~unknown. \\
+    If~you~want~to~use~the~column~type~'S'~of~siunitx,~you~should~
+    load~that~package. \\
+    This~error~is~fatal.
+  }
+%    \end{macrocode}
+% 
+%    \begin{macrocode}
 \@@_msg_new:nn { tabularnote~forbidden }
   {
     Forbidden~command.\\
@@ -22061,6 +22338,7 @@
     renew-dots,~
     respect-arraystretch,~
     right-margin,~
+    rounded-corners,~
     rules~(with~the~subkeys~'color'~and~'width'),~
     short-caption,~
     t,~
@@ -22116,6 +22394,19 @@
 % \nolinkurl{https:www.tug.org/svn/texlive/trunk/Master/texmf-dist/tex/latex/nicematrix/nicematrix.sty}
 % }
 %
+% \subsection*{Changes between version 6.17 and 6.18}
+% 
+% New key |opacity| in the commands to color cells, rows and columns.
+%
+% New key |rounded-corners| for a whole tabular.
+% 
+%
+% \subsection*{Changes between version 6.16 and 6.17}
+%
+% New PGF/Tikz style |nicematrix/cell-node|.
+%
+% New key |pgf-node-code|
+%
 % \subsection*{Changes between version 6.15 and 6.16}
 %
 % It's now possible to put any LaTeX extensible delimiter (|\lgroup|, |\langle|,

Modified: trunk/Master/texmf-dist/tex/latex/nicematrix/nicematrix.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/nicematrix/nicematrix.sty	2023-04-20 19:59:42 UTC (rev 66903)
+++ trunk/Master/texmf-dist/tex/latex/nicematrix/nicematrix.sty	2023-04-20 19:59:57 UTC (rev 66904)
@@ -18,8 +18,8 @@
 %% and version 1.3 or later is part of all distributions of
 %% LaTeX version 2005/12/01 or later.
 %% 
-\def\myfileversion{6.17}
-\def\myfiledate{2023/03/31}
+\def\myfileversion{6.18}
+\def\myfiledate{2023/04/19}
 
 
 \RequirePackage{pgfcore}
@@ -98,25 +98,21 @@
     \peek_meaning:NF \unskip { \__nicematrix_error:n { Internal~error } }
     #1
   }
-\hook_gput_code:nnn { begindocument } { . }
+\hook_gput_code:nnn { begindocument / after } { . }
   {
     \@ifpackageloaded { mdwtab }
       { \__nicematrix_fatal:n { mdwtab~loaded } }
       {
-        \@ifpackageloaded { fontspec }
-          { }
+        \bool_if:NF \c__nicematrix_no_test_for_array_bool
           {
-            \bool_if:NF \c__nicematrix_no_test_for_array_bool
-              {
-                \group_begin:
-                  \hbox_set:Nn \l_tmpa_box
-                    {
-                      \begin { tabular } { c > { \__nicematrix_security_test:n } c c }
-                      text & & text
-                      \end { tabular }
-                    }
-                \group_end:
-              }
+            \group_begin:
+              \hbox_set:Nn \l_tmpa_box
+                {
+                  \begin { tabular } { c > { \__nicematrix_security_test:n } c c }
+                  text & & text
+                  \end { tabular }
+                }
+            \group_end:
           }
       }
   }
@@ -371,6 +367,7 @@
 \dim_new:N \g__nicematrix_blocks_wd_dim
 \dim_new:N \g__nicematrix_blocks_ht_dim
 \dim_new:N \g__nicematrix_blocks_dp_dim
+\dim_new:N \l__nicematrix_block_ysep_dim
 \dim_new:N \l__nicematrix_width_dim
 \seq_new:N \g__nicematrix_names_seq
 \bool_new:N \l__nicematrix_in_env_bool
@@ -457,6 +454,7 @@
 \seq_new:N \l__nicematrix_tikz_seq
 \clist_new:N \l__nicematrix_borders_clist
 \dim_new:N \l__nicematrix_rounded_corners_dim
+\dim_new:N \l__nicematrix_tab_rounded_corners_dim
 \tl_new:N \l__nicematrix_color_tl
 \dim_new:N \l__nicematrix_line_width_dim
 \str_new:N \l__nicematrix_hpos_block_str
@@ -475,6 +473,7 @@
 \clist_new:N \l__nicematrix_vlines_clist
 \clist_new:N \l__nicematrix_submatrix_hlines_clist
 \clist_new:N \l__nicematrix_submatrix_vlines_clist
+\bool_new:N \l__nicematrix_hvlines_bool
 \bool_new:N \l__nicematrix_dotted_bool
 \bool_new:N \l__nicematrix_in_caption_bool
 \int_new:N \l__nicematrix_first_row_int
@@ -848,6 +847,7 @@
     vlines-in-sub-matrix .value_required:n = true ,
     hvlines .code:n =
       {
+        \bool_set_true:N \l__nicematrix_hvlines_bool
         \clist_set:Nn \l__nicematrix_vlines_clist { all }
         \clist_set:Nn \l__nicematrix_hlines_clist { all }
       } ,
@@ -855,6 +855,7 @@
       {
         \clist_set:Nn \l__nicematrix_vlines_clist { all }
         \clist_set:Nn \l__nicematrix_hlines_clist { all }
+        \bool_set_true:N \l__nicematrix_hvlines_bool
         \bool_set_true:N \l__nicematrix_except_borders_bool
       } ,
     parallelize-diags .bool_set:N = \l__nicematrix_parallelize_diags_bool ,
@@ -1105,6 +1106,8 @@
     width .code:n = \dim_set:Nn \l__nicematrix_width_dim { #1 }
                     \bool_set_true:N \l__nicematrix_width_used_bool ,
     width .value_required:n = true ,
+    rounded-corners .dim_set:N = \l__nicematrix_tab_rounded_corners_dim ,
+    rounded-corners .default:n = 4 pt ,
     notes .code:n = \keys_set:nn { NiceMatrix / notes } { #1 } ,
     tabularnote .tl_gset:N = \g__nicematrix_tabularnote_tl ,
     tabularnote .value_required:n = true ,
@@ -1505,7 +1508,7 @@
     \cs_set_eq:NN \Block \__nicematrix_Block:
     \cs_set_eq:NN \rotate \__nicematrix_rotate:
     \cs_set_eq:NN \OnlyMainNiceMatrix \__nicematrix_OnlyMainNiceMatrix:n
-    \cs_set_eq:NN \dotfill \__nicematrix_old_dotfill:
+    \cs_set_eq:NN \dotfill \__nicematrix_dotfill:
     \cs_set_eq:NN \CodeAfter \__nicematrix_CodeAfter:
     \cs_set_eq:NN \diagbox \__nicematrix_diagbox:nn
     \cs_set_eq:NN \NotEmpty \__nicematrix_NotEmpty:
@@ -2098,7 +2101,11 @@
                 \keys_set:nn { NiceMatrix / ColumnTypes } { #1 }
                 \__nicematrix_patch_preamble:n
               }
-              { \__nicematrix_fatal:nn { unknown~column~type } { #1 } }
+              {
+                \tl_if_eq:nnT { #1 } { S }
+                  { \__nicematrix_fatal:n { unknown~column~type~S } }
+                  { \__nicematrix_fatal:nn { unknown~column~type } { #1 } }
+              }
           }
       }
   }
@@ -2710,7 +2717,11 @@
         \__nicematrix_W: { \__nicematrix_patch_m_preamble_v:nnnn { \__nicematrix_special_W: } #1 }
         \q_stop { }
       }
-      { \__nicematrix_fatal:nn { unknown~column~type } { #1 } }
+      {
+        \tl_if_eq:nnT { #1 } { S }
+          { \__nicematrix_fatal:n { unknown~column~type~S } }
+          { \__nicematrix_fatal:nn { unknown~column~type } { #1 } }
+      }
   }
 \cs_new_protected:Npn \__nicematrix_patch_m_preamble_i:n #1
   {
@@ -3482,6 +3493,36 @@
       { \dim_set_eq:NN \l__nicematrix_width_dim \linewidth }
     \str_gset:Nn \g__nicematrix_name_env_str { NiceTabular }
     \keys_set:nn { NiceMatrix / NiceTabular } { #1 , #3 }
+    \int_compare:nNnT \l__nicematrix_tab_rounded_corners_dim > \c_zero_dim
+      {
+        \bool_if:NT \l__nicematrix_hvlines_bool
+          {
+            \bool_set_true:N \l__nicematrix_except_borders_bool
+            % we should try to be more efficient in the number of lines of code here
+            \tl_if_empty:NTF \l__nicematrix_rules_color_tl
+              {
+                \tl_gput_right:Nn \g__nicematrix_pre_code_after_tl
+                  {
+                    \__nicematrix_stroke_block:nnn
+                      { rounded-corners = \dim_use:N \l__nicematrix_tab_rounded_corners_dim }
+                      { 1-1 }
+                      { \int_use:N \c at iRow - \int_use:N \c at jCol }
+                  }
+              }
+              {
+                \tl_gput_right:Nn \g__nicematrix_pre_code_after_tl
+                  {
+                    \__nicematrix_stroke_block:nnn
+                      {
+                        rounded-corners = \dim_use:N \l__nicematrix_tab_rounded_corners_dim ,
+                        draw = \l__nicematrix_rules_color_tl
+                      }
+                      { 1-1 }
+                      { \int_use:N \c at iRow - \int_use:N \c at jCol }
+                  }
+              }
+          }
+      }
     \tl_if_empty:NF \l__nicematrix_short_caption_tl
       {
         \tl_if_empty:NT \l__nicematrix_caption_tl
@@ -4997,15 +5038,76 @@
   {
     \pgfpicture
     \pgf at relevantforpicturesizefalse
+    \dim_compare:nNnT \l__nicematrix_tab_rounded_corners_dim > \c_zero_dim
+      {
+        \pgfsetcornersarced
+          {
+            \pgfpoint
+              { \l__nicematrix_tab_rounded_corners_dim }
+              { \l__nicematrix_tab_rounded_corners_dim }
+          }
+        \bool_if:NTF \l__nicematrix_hvlines_bool
+          {
+            \pgfpathrectanglecorners
+              {
+                \pgfpointadd
+                  { \__nicematrix_qpoint:n { row-1 } }
+                  { \pgfpoint { 0.5 \arrayrulewidth } { \c_zero_dim } }
+              }
+              {
+                \pgfpointadd
+                  {
+                    \__nicematrix_qpoint:n
+                      { \int_eval:n { \int_max:nn \c at iRow \c at jCol + 1 } }
+                  }
+                  { \pgfpoint \c_zero_dim { 0.5 \arrayrulewidth } }
+              }
+          }
+          {
+            \pgfpathrectanglecorners
+              { \__nicematrix_qpoint:n { row-1 } }
+              {
+                \pgfpointadd
+                  {
+                    \__nicematrix_qpoint:n
+                      { \int_eval:n { \int_max:nn \c at iRow \c at jCol + 1 } }
+                  }
+                  { \pgfpoint \c_zero_dim \arrayrulewidth }
+              }
+          }
+        \pgfusepath { clip }
+      }
     \seq_map_indexed_inline:Nn \g__nicematrix_colors_seq
       {
-        \color ##2
-        \use:c { g__nicematrix_color _ ##1 _tl }
-        \tl_gclear:c { g__nicematrix_color _ ##1 _tl }
-        \pgfusepath { fill }
+        \begin { pgfscope }
+          \__nicematrix_color_opacity ##2
+          \use:c { g__nicematrix_color _ ##1 _tl }
+          \tl_gclear:c { g__nicematrix_color _ ##1 _tl }
+          \pgfusepath { fill }
+        \end { pgfscope }
       }
     \endpgfpicture
   }
+\cs_new_protected:Npn \__nicematrix_color_opacity
+  {
+    \peek_meaning:NTF [
+      { \__nicematrix_color_opacity:w }
+      { \__nicematrix_color_opacity:w [ ] }
+  }
+\cs_new_protected:Npn \__nicematrix_color_opacity:w [ #1 ]
+  {
+    \tl_clear:N \l_tmpa_tl
+    \keys_set_known:nnN { nicematrix / color-opacity } { #1 } \l_tmpb_tl
+    \tl_if_empty:NF \l_tmpa_tl { \exp_args:NV \pgfsetfillopacity \l_tmpa_tl }
+    \tl_if_empty:NTF \l_tmpb_tl
+      { \@declaredcolor }
+      { \use:x { \exp_not:N \@undeclaredcolor [ \l_tmpb_tl ] } }
+  }
+\keys_define:nn { nicematrix / color-opacity }
+  {
+    opacity .tl_set:N         = \l_tmpa_tl ,
+    opacity .value_required:n = true
+  }
 \cs_new_protected:Npn \__nicematrix_cartesian_color:nn #1 #2
   {
     \tl_set:Nn \l__nicematrix_rows_tl { #1 }
@@ -6470,7 +6572,16 @@
         \tl_if_empty:NTF \l__nicematrix_color_tl
           { \int_compare:nNnT { #2 } = 1 \set at color }
           { \__nicematrix_color:V \l__nicematrix_color_tl }
-        \int_compare:nNnT { #1 } = 1 \g__nicematrix_row_style_tl
+        \int_compare:nNnT { #1 } = 1
+          {
+            \int_compare:nNnTF \c at iRow = 0
+              \l__nicematrix_code_for_first_row_tl
+              {
+                \int_compare:nNnT \c at iRow = \l__nicematrix_last_row_int
+                  \l__nicematrix_code_for_last_row_tl
+              }
+            \g__nicematrix_row_style_tl
+          }
         \group_begin:
         \bool_if:NF \l__nicematrix_respect_arraystretch_bool
           { \cs_set:Npn \arraystretch { 1 } }
@@ -6917,16 +7028,6 @@
               { south~east }
           }
       }
-    \int_compare:nNnT { #1 } = 0
-      {
-        \int_compare:nNnT { #3 } = 0
-          { \l__nicematrix_code_for_first_row_tl }
-      }
-    \int_compare:nNnT { #1 } = \l__nicematrix_last_row_int
-      {
-        \int_compare:nNnT { #3 } = \l__nicematrix_last_row_int
-          { \l__nicematrix_code_for_last_row_tl }
-      }
     \bool_lazy_any:nTF
       {
         { \str_if_eq_p:Vn \l__nicematrix_vpos_of_block_str { c } }
@@ -6983,7 +7084,11 @@
               }
               { \l_tmpa_tl }
           }
-        \pgfset { inner~xsep = \c_zero_dim }
+        \pgfset
+          {
+            inner~xsep = \c_zero_dim ,
+            inner~ysep = \l__nicematrix_block_ysep_dim
+          }
         \pgfnode
           { rectangle }
           { \l_tmpa_tl }
@@ -7343,13 +7448,9 @@
 \cs_new_protected:Npn \__nicematrix_dotfill:
   {
     \__nicematrix_old_dotfill
-    \bool_if:NT \l__nicematrix_NiceTabular_bool
-      { \group_insert_after:N \__nicematrix_dotfill_ii: }
-      { \group_insert_after:N \__nicematrix_dotfill_i: }
+    \tl_gput_right:Nn \g__nicematrix_cell_after_hook_tl \__nicematrix_dotfill_i:
   }
-\cs_new_protected:Npn \__nicematrix_dotfill_i: { \group_insert_after:N \__nicematrix_dotfill_ii: }
-\cs_new_protected:Npn \__nicematrix_dotfill_ii: { \group_insert_after:N \__nicematrix_dotfill_iii: }
-\cs_new_protected:Npn \__nicematrix_dotfill_iii:
+\cs_new_protected:Npn \__nicematrix_dotfill_i:
   { \dim_compare:nNnT { \box_wd:N \l__nicematrix_cell_box } = \c_zero_dim  \__nicematrix_old_dotfill }
 \cs_new_protected:Npn \__nicematrix_diagbox:nn #1 #2
   {
@@ -8325,17 +8426,35 @@
     \seq_if_in:NVTF \g__nicematrix_types_of_matrix_seq \g__nicematrix_name_env_str
       {
         \int_compare:nNnTF \l__nicematrix_last_col_int = { -2 }
-        { \__nicematrix_fatal:n { too~much~cols~for~matrix } }
-        {
-          \int_compare:nNnTF \l__nicematrix_last_col_int = { -1 }
-            { \__nicematrix_fatal:n { too~much~cols~for~matrix } }
-            {
-              \bool_if:NF \l__nicematrix_last_col_without_value_bool
-                { \__nicematrix_fatal:n { too~much~cols~for~matrix~with~last~col } }
-            }
-        }
+          { \__nicematrix_fatal:n { too~much~cols~for~matrix } }
+          {
+            \int_compare:nNnTF \l__nicematrix_last_col_int = { -1 }
+              { \__nicematrix_fatal:n { too~much~cols~for~matrix } }
+              {
+                \bool_if:NF \l__nicematrix_last_col_without_value_bool
+                  { \__nicematrix_fatal:n { too~much~cols~for~matrix~with~last~col } }
+              }
+          }
       }
-      { \__nicematrix_fatal:n { too~much~cols~for~array } }
+      {
+        \bool_lazy_and:nnTF
+          { \bool_if_p:n \c__nicematrix_tabularx_loaded_bool }
+          { ! \str_if_eq_p:Vn \g__nicematrix_name_env_str { NiceTabularX } }
+          {
+            \int_compare:nNnTF \c at iRow = \c_zero_int
+              { \__nicematrix_fatal:n { X~columns~with~tabularx } }
+              {
+                \__nicematrix_fatal:nn { too~much~cols~for~array }
+                  {
+                    However,~this~message~may~be~erroneous:~
+                    maybe~you~have~used~X~columns~while~'tabularx'~is~loaded,~
+                    ~which~is~forbidden~(however,~it's~still~possible~to~use~
+                    X~columns~in~{NiceTabularX}).
+                  }
+              }
+          }
+          { \__nicematrix_fatal:nn { too~much~cols~for~array } { } }
+      }
   }
 \cs_new:Npn \__nicematrix_message_hdotsfor:
   {
@@ -8383,10 +8502,17 @@
     ~you~try~to~use~more~columns~than~allowed~by~your~
     \__nicematrix_full_name_env:.\__nicematrix_message_hdotsfor:\ The~maximal~number~of~columns~is~
     \int_use:N \g__nicematrix_static_num_of_col_int\
-    ~(plus~the~potential~exterior~ones).~
+    ~(plus~the~potential~exterior~ones).~#1
     This~error~is~fatal.
   }
-
+\__nicematrix_msg_new:nn { X~columns~with~tabularx }
+  {
+    There~is~a~problem.\\
+    You~have~probably~used~X~columns~in~your~environment~{\g__nicematrix_name_env_str}.~
+    That's~not~allowed~because~'tabularx'~is~loaded~(however,~you~can~use~X~columns~
+    in~an~environment~{NiceTabularX}).\\
+    This~error~is~fatal.
+  }
 \__nicematrix_msg_new:nn { columns~not~used }
   {
     Columns~not~used.\\
@@ -8741,6 +8867,14 @@
     is~unknown. \\
     This~error~is~fatal.
   }
+\__nicematrix_msg_new:nn { unknown~column~type~S }
+  {
+    Bad~column~type.\\
+    The~column~type~'S'~in~your~\__nicematrix_full_name_env:\ is~unknown. \\
+    If~you~want~to~use~the~column~type~'S'~of~siunitx,~you~should~
+    load~that~package. \\
+    This~error~is~fatal.
+  }
 \__nicematrix_msg_new:nn { tabularnote~forbidden }
   {
     Forbidden~command.\\
@@ -9181,6 +9315,7 @@
     renew-dots,~
     respect-arraystretch,~
     right-margin,~
+    rounded-corners,~
     rules~(with~the~subkeys~'color'~and~'width'),~
     short-caption,~
     t,~



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