summaryrefslogtreecommitdiff
path: root/Master
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2021-04-09 20:05:12 +0000
committerKarl Berry <karl@freefriends.org>2021-04-09 20:05:12 +0000
commit4d4e9cf8c67a4f888152eb7e0293798df3de61ac (patch)
treebedcd053691aec3c250b6d0645cc81e0993f114e /Master
parenta049d84c2062a620ce9028c2eea5cfebc0190e98 (diff)
nicematrix (9apr21)
git-svn-id: svn://tug.org/texlive/trunk@58803 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master')
-rw-r--r--Master/texmf-dist/doc/latex/nicematrix/nicematrix-french.pdfbin426449 -> 455133 bytes
-rw-r--r--Master/texmf-dist/doc/latex/nicematrix/nicematrix-french.tex340
-rw-r--r--Master/texmf-dist/doc/latex/nicematrix/nicematrix.pdfbin1183755 -> 1212783 bytes
-rw-r--r--Master/texmf-dist/source/latex/nicematrix/nicematrix.dtx598
-rw-r--r--Master/texmf-dist/tex/latex/nicematrix/nicematrix.sty190
5 files changed, 712 insertions, 416 deletions
diff --git a/Master/texmf-dist/doc/latex/nicematrix/nicematrix-french.pdf b/Master/texmf-dist/doc/latex/nicematrix/nicematrix-french.pdf
index f9d2004bed0..98af2c5843c 100644
--- a/Master/texmf-dist/doc/latex/nicematrix/nicematrix-french.pdf
+++ b/Master/texmf-dist/doc/latex/nicematrix/nicematrix-french.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/nicematrix/nicematrix-french.tex b/Master/texmf-dist/doc/latex/nicematrix/nicematrix-french.tex
index 8656d61f09f..d92e274140f 100644
--- a/Master/texmf-dist/doc/latex/nicematrix/nicematrix-french.tex
+++ b/Master/texmf-dist/doc/latex/nicematrix/nicematrix-french.tex
@@ -58,7 +58,7 @@
\NewDocumentCommand {\cls} {m} {\textsf{#1}}
\setlength{\parindent}{0pt}
-
+\skip \footins = 2 \bigskipamount
\begin{document}
@@ -143,7 +143,9 @@ L'idée de \pkg{nicematrix} est de créer des nœuds \textsc{pgf} derrière les
tableaux créés par \pkg{array} et de les utiliser pour développer de nouvelles fonctionnalités. Comme toujours avec
\textsc{pgf}, les coordonnées de ces nœuds sont écrites dans le fichier |.aux| pour être utilisées à la
compilation suivante. C'est pourquoi l'utilisation de \pkg{nicematrix} nécessite \textbf{plusieurs compilations
- successives}.
+ successives}.\footnote{Si vous utilisez Overleaf, Overleaf effectue
+ automatiquement le nombre de
+ compilations nécessaire.}
\bigskip
La plupart des fonctionnalités de \pkg{nicematrix} sont accessibles sans avoir à utiliser explicitement
@@ -189,20 +191,25 @@ environnements correspondants de l'\pkg{amsmath} (qui est chargée par
\pkg{nicematrix}) : |{matrix}|, |{pmatrix}|, etc.
\medskip
+\textbf{On conseille d'utiliser prioritairement les environnements classiques et de
+n'utiliser les environnements de \pkg{nicematrix} que lorsqu'on utilise les
+fonctionnalités supplémentaires offertes par ces environnements (cela permet
+d'économiser la mémoire).}
+
+\medskip
Tous les environnements de l'extension \pkg{nicematrix} acceptent, entre
crochets, une liste optionnelle de paires de la forme \textsl{clé=valeur}.
{\bfseries Il doit n'y avoir aucun espace devant le crochet ouvrant (|[|) de
cette liste d'options.}
\bigskip
-\textbf{Important}
+\textbf{Important}\par\nobreak
Avant la version 5.0, il fallait, pour des raisons techniques, utiliser les
lettres |L|, |C| et |R| au lieu de |l|, |c| et |r| dans les préambules des
-environnements de \pkg{nicematrix}.
-
-Pour pouvoir continuer à utiliser ces lettres |L|, |C| et |R|, \pkg{nicematrix}
-doit être chargé avec l'option |define-L-C-R|.
+environnements de \pkg{nicematrix}. Pour pouvoir continuer à utiliser ces
+lettres |L|, |C| et |R|, \pkg{nicematrix} doit être chargé avec l'option
+|define-L-C-R|.
\begin{Verbatim}
\usepackage[define-L-C-R]{nicematrix}
\end{Verbatim}
@@ -516,14 +523,16 @@ tableau) ;
trace également le cadre avec cette couleur.
\item la clé |line-width| fixe la largeur des filets servant pour le cadre (n'a
d'intérêt que si |draw| est utilisée) ;
-\item \colorbox{yellow!50}{\textbf{Nouveau 5.12}}\enskip la clé
-|rounded-corners| impose des coins arrondis (pour le cadre dessiné par |draw| et
-le fond dessiné par |fill|) avec un rayon égal à la valeur de cette clé (la
-valeur par défaut est 4~pt\footnote{Cette valeur par défaut est la valeur
- initiale des \emph{rounded corners} de Tikz.}).
-\item \colorbox{yellow!50}{\textbf{Nouveau 5.13}}\enskip la clé |borders| permet
-de ne tracer que certaines des bordures du bloc : cette clé prend comme valeur
-une liste d'éléments parmi les suivants : |left|, |right|, |top| et |bottom|.
+\item la clé |rounded-corners| impose des coins arrondis (pour le cadre dessiné
+par |draw| et le fond dessiné par |fill|) avec un rayon égal à la valeur de
+cette clé (la valeur par défaut est 4~pt\footnote{Cette valeur par défaut est la
+ valeur initiale des \emph{rounded corners} de Tikz.}) ;
+\item la clé |borders| permet de ne tracer que certaines des bordures du bloc :
+cette clé prend comme valeur une liste d'éléments parmi les suivants : |left|,
+|right|, |top| et |bottom| ;
+\item \colorbox{yellow!50}{\bfseries Nouveau 5.14}\enskip les clés |t| et |b|
+réglent la ligne de base qui sera donnée au bloc quand celui-ci est constitué de
+plusieurs lignes (séparées par la commande |\\|).
\end{itemize}
@@ -641,6 +650,8 @@ la consigne générale donnée dans le préambule pour cette colonne.
|rounded-corners|.\footnote{Pour colorier simplement le fond d'une case, il n'y a pas besoin
d'utiliser un bloc mono-case : on peut utiliser la commande |\cellcolor| si la
clé |colortbl-like| est utilisée : voir p.~\pageref{colortbl-like}.}
+
+\item On peut tracer ou plusieurs bordures de la case avec la clé |borders|.
\end{itemize}
\medskip
@@ -752,7 +763,8 @@ Marie & Pauline \\ \hline
\bigskip
En revanche, les filets verticaux ne sont pas tracés à l'intérieur des blocs
-(créés par |\Block|: cf.~p.~\pageref{Block}).
+(créés par |\Block|: cf.~p.~\pageref{Block}) ni dans les coins (dont la création
+est demandée par la clé |corners|: cf.~p.~\pageref{corners}).
\bigskip
@@ -903,30 +915,48 @@ p.~\pageref{OnlyMainNiceMatrix}.
\bigskip
-\subsection{La commande \textbackslash Hline}
+\subsection{Les outils de nicematrix pour tracer des filets}
-On a dit que les traits verticaux spécifiés par un symbole «\verb+|+» dans le
-préambule (pour les environnements à préambule, bien entendu) n'étaient pas
-tracés dans les blocs.\footnote{Ces blocs sont ceux créés par les commandes
- \verb|\Block| et \verb|\multicolumn| mais aussi ceux délimités implicitement
- par des lignes en pointillés continues (créées par \verb|\Cdots|, etc.).}
+Les outils proposés par \pkg{nicematrix} pour tracer des filets sont les
+suivants :
+\begin{itemize}
+\item les clés |hlines|, |vlines| et |hvlines| ;
+\item le spécificateur «\verb+|+» dans le préambule (pour les environnements à
+préambule) ;
+\item la commande |\Hline|.
+\end{itemize}
-\smallskip
-\colorbox{yellow!50}{\textbf{Nouveau 5.13}}\enskip Pour proposer des filets horizontaux
-ayant le même comportement, l'extension \pkg{nicematrix} fournit la commande
-|\Hline|.
+\bigskip
+\textbf{Ces outils ont en commun de ne pas tracer les filets dans les blocs ni
+ dans les coins vides (quand la clé |corners| est utilisée).}
+\begin{itemize}
+\item Les blocs en question sont :
+\begin{itemize}
+\item ceux créés par la commande |\Block|\footnote{Et aussi la commande \verb|\multicolumn| même s'il
+ est recommandé d'utiliser plutôt \verb|\Block| quand on utilise l'extension
+ \pkg{nicematrix}.} de \pkg{nicematrix} présentée
+p.~\pageref{Block};
+\item ceux délimités implicitement par des lignes en pointillés continues, créées
+par |\Cdots|, |\Vdots|, etc. : cf.~p.~\pageref{Cdots}.
+\end{itemize}
+\item Les coins sont créés par la clé |corners| détaillée un peu plus loin : cf.
+p.~\pageref{corners}.
+\end{itemize}
+En particulier, cette remarque explique la différence entre la commande standard
+|\hline| et la commande |\Hline| proposée par \pkg{nicematrix}.
\bigskip
-\subsection{Les clés hlines et vlines}
+\subsubsection{Les clés hlines et vlines}
-La clé |hlines| demande un tracé de tous les filets horizontaux et la clé
-|vlines| demande un tracé de tous les filets verticaux (sauf dans les blocs,
-créés par |\Block| et dans les blocs virtuels déterminés par des lignes en
-pointillés : |\Cdots|, |\Vdots|, etc.). En fait, dans les environnements avec
-délimiteurs (comme |{pNiceMatrix}| ou |{bNiceArray}|), les filets extérieurs ne
-sont pas tracés (ce qui est le comportement certainement attendu).
+\medskip
+Les clés |hlines| et |vlines| (qui, bien sûr, tracent des filets horizontaux et
+verticaux) prennent comme valeur une liste de numéros qui sont les numéros des
+filets à tracer. Si aucune valeur n'est donnée, tous les filets sont tracés.
+En fait, pour les environnements avec délimiteurs (comme |{pNiceMatrix}| ou
+|{bNiceArray}|), la clé |vlines| ne trace pas les filets extérieurs (ce qui est
+le comportement certainement attendu).
\medskip
\begin{BVerbatim}[baseline=c,boxwidth=10.6cm]
@@ -942,25 +972,19 @@ $\begin{pNiceMatrix}[vlines,rules/width=0.2pt]
1 & 2 & 3 & 4 & 5 & 6
\end{pNiceMatrix}$
-\medskip
-\colorbox{yellow!50}{\textbf{Nouveau 5.13}}\enskip Il est possible de donner à
-la clé |vlines| une liste de numéros qui seront les numéros des filets verticaux
-qui seront tracés. Il en est de même pour |hlines|.
-\subsection{La clé hvlines}
+\subsubsection{La clé hvlines}
\label{hvlines}
-La clé |hvlines| demande le tracé de tous les filets horizontaux et verticaux
-(sauf dans les blocs et dans les blocs virtuels déterminés par des
-lignes en pointillés et sauf les filets correspondants à des clés |draw| de
-commandes |\Block|, filets qui sont tracés avec leurs caractéristiques).
+La clé |hvlines|, qui ne prend pas de valeur, est la conjonction des clés
+|hlines| et |vlines|.
-\medskip
+\smallskip
\begin{Verbatim}
\begin{NiceTabular}{cccc}[~emphase#hvlines@,rules/color=blue,rules/width=1pt]
rose & tulipe & marguerite & dahlia \\
-violette & \Block[~emphase#draw=red@]{2-2}{\LARGE fleurs} & & souci \\
+violette & \Block[draw=red]{2-2}{\LARGE fleurs} & & souci \\
pervenche & & & lys \\
arum & iris & jacinthe & muguet
\end{NiceTabular}
@@ -975,78 +999,116 @@ arum & iris & jacinthe & muguet
\end{NiceTabular}
\end{center}
+\bigskip
+\subsubsection{Les coins (vides)}
+\label{corners}
-\subsection{La clé hvlines-except-corners}
+Les quatre coins d'un tableau seront notés |NW|, |SW|, |NE| et |SE| (\emph{north west}, \emph{south west}, \emph{north
+ east} et \emph{south east} en anglais).
-\label{except-corners}
+\smallskip
+Pour chacun de ces coins, on appellera \emph{coin vide} (ou tout simplement
+\emph{coin}) la réunion de toutes les cases vides situées dans au moins un
+rectangle entièrement constitué de cases vides partant de ce coin.\footnote{Pour
+ être complet, on doit préciser que toute case située dans un bloc (même si
+ elle vide) n'est pas prise en compte pour la détermination des coins. Ce
+ comportement est naturel.}
-La clé |hvlines-except-corners| demande le tracé de tous les filets horizontaux
-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.
+\smallskip
+On peut néanmoins imposer à une case sans contenu d'être considérée
+comme non vide par \pkg{nicematrix} avec la commande |\NotEmpty|.
-\medskip
-\begin{Verbatim}
-\begin{NiceTabular}{*{6}{c}}[~emphase#hvlines-except-corners@,cell-space-top-limit=3pt]
+\bigskip
+\begin{minipage}{9cm}
+Dans l'exemple ci-contre (où B est au centre d'un bloc de taille $2\times 2$),
+on a colorié en bleu clair les quatre coins (vides) du tableau.
+\end{minipage}\hspace{2cm}%
+\begin{NiceTabular}{*{6}{c}}[cell-space-top-limit=3pt]
+\CodeBefore
+ \rectanglecolor{blue!10}{1-1}{4-2}
+ \rectanglecolor{blue!10}{1-1}{1-4}
+ \rectanglecolor{blue!10}{1-6}{3-6}
+ \rectanglecolor{blue!10}{7-1}{9-1}
+ \rectanglecolor{blue!10}{7-5}{9-6}
+\Body
& & & & A \\
& & A & A & A \\
& & & A \\
& & A & A & A & A \\
A & A & A & A & A & A \\
A & A & A & A & A & A \\
+ & A & A & A \\
& \Block{2-2}{B} & & A \\
& & & A \\
- & A & A & A \\
\end{NiceTabular}
-\end{Verbatim}
-%
-\begin{center}
-\begin{NiceTabular}{*{6}{c}}[hvlines-except-corners,cell-space-top-limit=3pt]
+
+
+\bigskip
+\colorbox{yellow!50}{\textbf{Nouveau 5.14}}\enskip 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). \emph{Remarque} : Dans les versions précédentes de
+\pkg{nicematrix}, il n'y avait qu'une clé |hvlines-except-corners| (maintenant
+considérée comme obsolète).
+
+\bigskip
+\begin{BVerbatim}[boxwidth=11cm,baseline=c]
+\NiceMatrixOptions{cell-space-top-limit=3pt}
+\begin{NiceTabular}{*{6}{c}}[~emphase#corners@,hvlines]
& & & & A \\
& & A & A & A \\
& & & A \\
& & A & A & A & A \\
A & A & A & A & A & A \\
A & A & A & A & A & A \\
+ & A & A & A \\
& \Block{2-2}{B} & & A \\
& & & A \\
+\end{NiceTabular}
+\end{BVerbatim}
+\begin{NiceTabular}{*{6}{c}}[corners,hvlines,cell-space-top-limit=3pt]
+ & & & & A \\
+ & & A & A & A \\
+ & & & A \\
+ & & A & A & A & A \\
+A & A & A & A & A & A \\
+A & A & A & A & A & A \\
& A & A & A \\
+ & \Block{2-2}{B} & & A \\
+ & & & A \\
\end{NiceTabular}
-\end{center}
-
-Comme on le voit, un «coin vide» est constitué de la réunion de tous les
-rectangles vides partant de la case située exactement dans le coin.
-\bigskip
-On peut passer en argument de |\hvlines-except-corners| une liste de coins à
-prendre en considération, les coins étant désignés par |NW|, |SW|, |NE| et |SE|
-(\emph{north west}, \emph{south west}, \emph{north east} et \emph{south east}).
+\vspace{1cm}
+On peut aussi donner comme valeur à la clé |corners| une liste de coins à
+prendre en considération (les coins sont notés |NW|, |SW|, |NE| et |SE| et
+doivent être séparés par des virgules).
\medskip
\begin{BVerbatim}[boxwidth=11cm,baseline=c]
-\begin{NiceTabular}{*{6}{c}}%
- [~emphase#hvlines-except-corners=NE@,cell-space-top-limit=3pt]
+\NiceMatrixOptions{cell-space-top-limit=3pt}
+\begin{NiceTabular}{*{6}{c}}[~emphase#corners=NE@,hvlines]
1\\
1&1\\
1&2&1\\
1&3&3&1\\
1&4&6&4&1\\
-1&5&10&10&5&1
+ & & & & &1
\end{NiceTabular}
\end{BVerbatim}
\begin{NiceTabular}{*{6}{c}}%
- [c,hvlines-except-corners=NE,cell-space-top-limit=3pt]
+ [c,corners=NE,hvlines,cell-space-top-limit=3pt]
1\\
1&1\\
1&2&1\\
1&3&3&1\\
1&4&6&4&1\\
-1&5&10&10&5&1
+ & & & & &1
\end{NiceTabular}
-\medskip
+\bigskip
$\triangleright$ Le concept de coins est aussi utilisé par la commande
|\arraycolor| dans le |\CodeBefore| qui accepte en option une clé
-|except-corners| : cf.~p.~\pageref{arraycolor}.
+|except-corners|: cf.~p.~\pageref{arraycolor}.
\subsection{La commande \textbackslash diagbox}
@@ -1202,9 +1264,9 @@ L'extension \pkg{nicematrix} fournit une clé |code-before| pour du code qui ser
exécuté avant le tracé du tableau.
\smallskip
-\colorbox{yellow!50}{\textbf{Nouveau 5.12}}\enskip Une syntaxe alternative est
-proposée : on peut placer le contenu de ce |code-before| entre les mots-clés
-|\CodeBefore| et |\Body| juste au début de l'environnement.
+Une syntaxe alternative est proposée : on peut placer le contenu de ce
+|code-before| entre les mots-clés |\CodeBefore| et |\Body| juste au début de
+l'environnement.
\begin{Verbatim}
\begin{pNiceArray}{~textsl#preamble@}
@@ -1216,7 +1278,7 @@ proposée : on peut placer le contenu de ce |code-before| entre les mots-clés
\end{Verbatim}
\smallskip
-De nouvelles commandes sont disponibles dans ce |\CodeBefore| :
+De nouvelles commandes sont disponibles dans ce |\CodeBefore|:
|\cellcolor|, |\rectanglecolor|, |\rowcolor|, |\columncolor|, |\rowcolors|
|\chessboardcolors| et |\arraycolor|.\footnote{On pourra remarquer que, dans le
\verb|\CodeBefore|, des nœuds PGF/Tikz de la forme \verb+(i-|j)+ correspondant
@@ -1369,12 +1431,12 @@ correspond à l'espace colorimétrique). Les clés disponibles sont |cols|,
\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
-la forme $i$|-|$j$.
+la forme $i$|-|$j$ (où $i$ et $j$ peuvent être remplacés par |*|).
\item Avec la clé |restart|, chacun des intervalles de rangées spécifié par le
premier argument de |\rowcolors| recommence avec la même
couleur.\footnote{Autrement, la couleur d'une rangée ne dépend que de la parité
- de son numéro.}
+ de son numéro absolu.}
\item Avec la clé |respect-blocks|, qui est de type booléen, les «rangées»
@@ -1488,13 +1550,12 @@ $\begin{pNiceMatrix}[baseline=1, r, margin]
On a utilisé la clé |r| qui impose que toutes les colonnes soient alignées à
droite (cf. p.~\pageref{key-R}).
-\item \colorbox{yellow!50}{\textbf{Nouveau 5.13}}\enskip 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. Elle est surtout intéressante du fait de la clé |except-corners|
-qu'elle accepte entre crochets en troisième argument (optionnel). La définition
-des coins a été donnée p.~\pageref{except-corners} quand on a présenté la clé
-|hvlines-except-corners|.
+\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. Elle est surtout intéressante du
+fait de la clé |except-corners| qu'elle accepte entre crochets en troisième
+argument (optionnel). La définition des coins a été donnée p.~\pageref{corners}
+quand on a présenté la clé~|corners|.
\label{arraycolor}
@@ -2406,10 +2467,10 @@ b & a & b & \Ddots & & \Vdots \\
Les lignes pointillées délimitent des blocs virtuels qui ont le même
comportement vis à vis des filets que les blocs créés par |\Block| (les filets
-spécifiés par le spécificateur \verb+|+ dans le préambule et par les clés
-|vlines|, |hlines|, |hvlines| et |hvlines-except-corners| ne sont pas tracés
-dans les blocs).
-
+spécifiés par le spécificateur \verb+|+ dans le préambule, la commande |\Hline|
+et par les clés |vlines|, |hlines| et |hvlines| ne sont pas tracés dans les
+blocs).\footnote{En revanche, la commande \verb|\line| dans le \verb|\CodeAfter|
+ (cf.~p.~\pageref{line-in-code-after}) ne crée pas de bloc.}
\medskip
\begin{BVerbatim}[baseline=c,boxwidth=10.6cm]
@@ -2433,7 +2494,7 @@ $\begin{bNiceMatrix}[margin,hvlines]
\label{code-after}
On a présenté p.~\pageref{code-before} la clé |code-before|. Il existe en fait
une clé similaire |code-after| qui peut être utilisée pour indiquer du code qui
-sera exécuté après la construction du tableau.
+sera exécuté \emph{après} la construction du tableau.
\medskip
Pour améliorer la lisibilité du code, une syntaxe alternative est proposée : on
@@ -2454,12 +2515,17 @@ Par ailleurs, deux commandes spéciales sont disponibles dans le |\CodeAfter| :
\subsection{La commande \textbackslash line dans le \textbackslash CodeAfter}
+\label{line-in-code-after}
La commande |\line| permet de tracer directement des lignes en pointillés entre
les cases. Elle prend deux arguments correspondant aux deux cases à relier,
chacun de la forme $i$-$j$ où $i$ est le numéro de ligne et $j$ est le numéro de
-colonne. Elle peut par exemple être utilisée pour tracer une ligne entre deux
-cases adjacentes comme dans l'exemple suivant.
-\label{line-in-code-after}
+colonne. Les options disponibles pour personnaliser les lignes pointillées créées par
+|\Cdots|, |\Vdots|, etc. peuvent aussi être passées à cette commande (cf.
+p.~\pageref{customization}).
+
+\medskip
+Cette commande peut par exemple être utilisée pour tracer une ligne entre deux
+cases adjacentes.
\medskip
\begin{BVerbatim}[baseline=c,boxwidth=11cm]
@@ -2483,10 +2549,29 @@ I & 0 & \Cdots &0 \\
\end{pNiceMatrix}$
\end{scope}
+\bigskip
+Elle peut aussi être utilisée pour tracer une ligne diagonale non parallèle aux
+autres lignes diagonales (par défaut, les lignes tracées par |\Ddots| sont
+«parallélisées» : cf~p.~\pageref{parallelization}).
+
\medskip
-Les options disponibles pour personnaliser les lignes pointillées créées par
-|\Cdots|, |\Vdots|, etc. peuvent aussi être passées à cette commande (cf.
-p.~\pageref{customization}).
+\begin{BVerbatim}
+\begin{bNiceMatrix}
+1 & \Cdots & & 1 & 2 & \Cdots & 2 \\
+0 & \Ddots & & \Vdots & \Vdots & \hspace*{2.5cm} & \Vdots \\
+\Vdots & \Ddots & & & & & \\
+0 & \Cdots & 0 & 1 & 2 & \Cdots & 2
+~emphase#\CodeAfter \line[shorten=6pt]{1-5}{4-7}@
+\end{bNiceMatrix}
+\end{BVerbatim}
+\[\begin{bNiceMatrix}
+1 & \Cdots & & 1 & 2 & \Cdots & 2 \\
+0 & \Ddots & & \Vdots & \Vdots & \hspace*{2.5cm} & \Vdots \\
+\Vdots & \Ddots & & & & & \\
+0 & \Cdots & 0 & 1 & 2 & \Cdots & 2
+\CodeAfter \line[shorten=6pt]{1-5}{4-7}
+\end{bNiceMatrix}\]
+
\subsection{La commande \textbackslash SubMatrix dans le \textbackslash CodeAfter}
@@ -3314,7 +3399,8 @@ lignes en pointillés entre les cases du tableau.
\smallskip
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}).}
+lignes pointillées (cf.~p.~\pageref{Cdots}) et la déterminations des «coins»
+(cf. p.~\pageref{corners}).}
\bigskip
Tous les nœuds du document doivent avoir des noms deux à deux distincts et le
@@ -3632,25 +3718,28 @@ noix & noisette & brugnon
\label{noeuds-i}
-\colorbox{yellow!30}{Nouveau 5.11}\enskip L'extension \pkg{nicematrix}
-crée un nœud PGF-Tikz nommé simplement $i$ (précédé du préfixe habituel) à
-l'intersection du filet horizontal de numéro $i$ et du filet vertical de
-numéro~$j$ (ou plutôt la position potentielle de ces filets car ils ne sont
-peut-être pas tracés). Ces nœuds sont accessibles dans le |\CodeAfter| mais
-aussi dans le |code-before|.
+L'extension \pkg{nicematrix} crée un nœud PGF-Tikz nommé simplement $i$ (précédé
+du préfixe habituel) à l'intersection du filet horizontal de numéro $i$ et du
+filet vertical de numéro~$i$ (ou plutôt la position potentielle de ces filets
+car ils ne sont peut-être pas tracés). Le dernier nœud a aussi un alias nommé
+simplement |last|.
+
+\smallskip
+\colorbox{yellow!50}{\textbf{Nouveau 5.14}}\enskip Il existe aussi un nœud nommé
+$i$|.5| à mi-chemin entre le nœud $i$ et le nœud $i+1$.
+Ces nœuds sont accessibles dans le
+|\CodeAfter| mais aussi dans le |\CodeBefore|.
-\colorbox{yellow!50}{Nouveau 5.13}\enskip Le dernier nœud a aussi un alias nommé
-|last|.
\begin{center}
\begin{NiceTabular}{ccc}[hvlines,rules={width=1pt,color=gray}]
-rose & tulipe & lys \\
-arum & iris & violette \\
-muguet & dahlia & souci
+ & tulipe & lys \\
+arum & & violette mauve \\
+muguet & dahlia
\CodeAfter
\tiny
\begin{tikzpicture}
-\foreach \i in {1,2,3,4}
+\foreach \i in {1,1.5,2,2.5,3,3.5,4}
{
\fill [red] (\i) circle (0.5mm) ;
\node [red,above right] at (\i) {\i} ;
@@ -3663,7 +3752,7 @@ muguet & dahlia & souci
\bigskip
Si on utilise Tikz (on rappelle que \pkg{nicematrix} ne charge pas Tikz mais
uniquement \textsc{pgf} qui est une sous-couche de Tikz), on peut donc accéder
-(dans le |\CodeAfter| mais aussi dans le |code-before|) à l'intersection du filet
+(dans le |\CodeAfter| mais aussi dans le |\CodeBefore|) à l'intersection du filet
horizontal~$i$ et du filet vertical~$j$ avec la syntaxe |(|$i$\verb+-|+$j$|)|.
@@ -3700,8 +3789,30 @@ horizontal~$i$ et du filet vertical~$j$ avec la syntaxe |(|$i$\verb+-|+$j$|)|.
1 & 8 & 28 & 56 & 70 & 56 & 28 & 8 & 1
\end{NiceMatrix}\]
+\bigskip
+Les nœuds de la forme $i$|.5| peuvent être utilisés par exemple pour barrer une
+ligne (si on a chargé Tikz).
+
+\smallskip
+\begin{BVerbatim}[boxwidth=11cm,baseline=c]
+$\begin{pNiceArray}{ccc|c}
+2 & 1 & 3 & 0 \\
+3 & 3 & 1 & 0 \\
+3 & 3 & 1 & 0
+\CodeAfter
+ \tikz \draw [red] (~emphase#3.5@-|1) -- (~emphase#3.5@-|last) ;
+\end{pNiceArray}$
+\end{BVerbatim}
+$\begin{pNiceArray}{ccc|c}
+2 & 1 & 3 & 0 \\
+3 & 3 & 1 & 0 \\
+3 & 3 & 1 & 0
+\CodeAfter
+ \tikz \draw [red] (3.5-|1) -- (3.5-|last) ;
+\end{pNiceArray}$
-\subsection{Les nœuds correspondant aux commandes \textbackslash SubMatrix}
+
+\subsection{Les nœuds correspondants aux commandes \textbackslash SubMatrix}
\label{node-sub-matrix}
@@ -3880,6 +3991,8 @@ est sans effet.
\subsection{Lignes diagonales}
+\label{parallelization}
+
Par défaut, toutes les lignes diagonales\footnote{On parle des lignes créées par
|\Ddots| et non des lignes créées par une commande |\line| dans le
|\CodeAfter|.} d'un même tableau sont «parallélisées». Cela signifie que la
@@ -4382,9 +4495,8 @@ précédentes. C'est que les parenthèses, en LaTeX, n'ont pas toutes la même
largeur suivant leur taille.
\medskip
-\colorbox{yellow!50}{\textbf{Nouveau 5.12}}\enskip Pour résoudre ce problème, on
-peut demander que les délimiteurs soient composés avec leur largeur maximale
-grâce à la clé booléenne |delimiters/max-width|.
+Pour résoudre ce problème, on peut demander que les délimiteurs soient composés
+avec leur largeur maximale grâce à la clé booléenne |delimiters/max-width|.
\begin{Verbatim}[formatcom=\small\color{gray}]
~emphase#\begin{NiceMatrixBlock}[auto-columns-width]@
diff --git a/Master/texmf-dist/doc/latex/nicematrix/nicematrix.pdf b/Master/texmf-dist/doc/latex/nicematrix/nicematrix.pdf
index 00cce2d6b76..c228e67e678 100644
--- a/Master/texmf-dist/doc/latex/nicematrix/nicematrix.pdf
+++ b/Master/texmf-dist/doc/latex/nicematrix/nicematrix.pdf
Binary files differ
diff --git a/Master/texmf-dist/source/latex/nicematrix/nicematrix.dtx b/Master/texmf-dist/source/latex/nicematrix/nicematrix.dtx
index 38269b145ca..fb4ebed732f 100644
--- a/Master/texmf-dist/source/latex/nicematrix/nicematrix.dtx
+++ b/Master/texmf-dist/source/latex/nicematrix/nicematrix.dtx
@@ -15,8 +15,8 @@
%
% \fi
% \iffalse
-\def\myfileversion{5.13}
-\def\myfiledate{2021/03/23}
+\def\myfileversion{5.14}
+\def\myfiledate{2021/04/08}
%
%
%<*batchfile>
@@ -70,6 +70,7 @@ version 2005/12/01 or later.
\usepackage{varwidth}
\def\LetterAt{@}
\parindent 0pt
+\skip \footins = 2 \bigskipamount
\EnableCrossrefs
\makeatletter
@@ -190,7 +191,8 @@ version 2005/12/01 or later.
% use these nodes to develop new features. As usual with \textsc{pgf}, the
% coordinates of these nodes are written in the |.aux| to be used on the next
% compilation and that's why \pkg{nicematrix} may need \textbf{several
-% compilations}.
+% compilations}.\footnote{If you use Overleaf, Overleaf will do automatically
+% the right number of compilations.}
%
% \bigskip
% Most features of \pkg{nicematrix} may be used without explicit use of
@@ -239,13 +241,18 @@ version 2005/12/01 or later.
% corresponding environments of \pkg{amsmath} (which is loaded by
% \pkg{nicematrix}): |{matrix}|, |{pmatrix}|, etc.
%
+% \medskip
+% \textbf{It's recommended to use primarily the classical environments and to use the
+% environments of \pkg{nicematrix} only when some feature provided by these
+% environments is used (this will save memory).}
+%
% \medskip
% All the environments of the package \pkg{nicematrix} accept, between square
% brackets, an optional list of \textsl{key=value} pairs. \textbf{There must be
% no space before the opening bracket (|[|) of this list of options.}
%
%\bigskip
-% \textbf{Important}
+% \textbf{Important}\par\nobreak
%
% Before the version 5.0, it was mandatory to use, for technical reasons, the
% letters |L|, |C| et |R| instead of |l|, |c| et |r| in the preambles of the
@@ -561,15 +568,16 @@ version 2005/12/01 or later.
% content of the block but draws also the frame of the block with that color;
% \item the key |line-width| is the width (thickness) of the frame (this key
% should be used only when the key |draw| is in force);
-% \item \colorbox{yellow!50}{\textbf{New 5.12}}\enskip the key |rounded-corners|
-% requires rounded corners (for the frame drawn by |draw| and the shape drawn by
-% |fill|) 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.}).
-% \item \colorbox{yellow!50}{\textbf{New 5.13}}\enskip the key |borders| provides
-% the ability to draw only some borders of the blocks; the value of that key is
-% a (comma-separated) list of elements covered by |left|, |right|, |top| and
-% |bottom|.
+% \item the key |rounded-corners| requires rounded corners (for the frame drawn
+% by |draw| and the shape drawn by |fill|) 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.});
+% \item the key |borders| provides the ability to draw only some borders of the
+% blocks; the value of that key is a (comma-separated) list of elements covered
+% by |left|, |right|, |top| and |bottom|;
+% \item \colorbox{yellow!50}{\bfseries New 5.14}\enskip the keys |t| and |b| fix
+% the base line that will be given to the block when it has a multi-line content
+% (the lines are separated by |\\|).
% \end{itemize}
%
% \interitem
@@ -679,6 +687,8 @@ version 2005/12/01 or later.
% background of a unique celle, there is no point using the command |\Block|:
% it's possible to use the command |\cellcolor| (when the key |colortbl-like| is
% used).}
+%
+% \item It's possible to draw one or several borders of the cell with the key |borders|.
% \end{itemize}
%
% \bigskip
@@ -785,7 +795,8 @@ version 2005/12/01 or later.
%
% \bigskip
% However, the vertical rules are not drawn in the blocks (created by |\Block|:
-% cf.~p.~\pageref{Block}).
+% cf.~p.~\pageref{Block}) nor in the corners (created by the key |corner|:
+% cf.~p.~\pageref{corners}).
%
% \bigskip
% If you use \pkg{booktabs} (which provides |\toprule|, |\midrule|,
@@ -926,26 +937,45 @@ version 2005/12/01 or later.
% page~\pageref{OnlyMainNiceMatrix}.
%
%
-% \subsection{The command \textbackslash Hline}
+% \subsection{The tools of nicematrix for the rules}
%
-% We have said that the vertical rules specified by a symbol ``\verb+|+'' in the
-% preamble (for the environments with preamble, of course) are not drawn in the
-% blocks.\footnote{Those blocks are those created by the commands \verb|\Block|
-% and |\multicolumn| but also those implicitely determined by the continuous
-% dotted lines (created by \verb|\Cdots|, etc.).}
+% Here are the tools provided by \pkg{nicematrix} for the rules.
+% \begin{itemize}
+% \item the keys |hlines|, |vlines| and |hvlines|;
+% \item the specifier ``\verb+|+'' in the preamble (for the environments with
+% preamble);
+% \item the command |\Hline|.
+% \end{itemize}
+%
+% \medskip
+% \textbf{All these tools don't draw the rules in the blocks nor in the
+% empty corners (when the key |corners| is used).}
+% \begin{itemize}
+% \item These blocks are:
+% \begin{itemize}
+% \item the blocks created by the command |\Block|\footnote{And also the command \verb|\multicolumn| also
+% it's recommended to use instead |\Block| in the environments of
+% \pkg{nicematrix}.} presented
+% p.~\pageref{Block};
+% \item the blocks implicitely delimited by the continuous dotted lines created
+% by |\Cdots|, |Vdots|, etc. (cf.~p.~\pageref{Cdots}).
+% \end{itemize}
+% \item The corners are created by the key |corners| explained below (see p.~\pageref{corners}).
+% \end{itemize}
%
-% \smallskip
-% \colorbox{yellow!50}{\textbf{New 5.13}}\enskip In order to have horizontal
-% rules with the same behaviour, \pkg{nicematrix} provides the command |\Hline|.
+% In particular, this remark explains the difference between the standard
+% command |\hline| and the command |\Hline| provided by \pkg{nicematrix}.
%
%
-% \subsection{The keys hlines and vlines}
+% \subsubsection{The keys hlines and vlines}
%
-% The key |hlines| draws all the horizontal rules and the key |vlines| draws all
-% the vertical rules excepted in the blocks, created by |\Block| and the virtual
-% blocks determined by dotted lines: |\Cdots|, |\Vdots|, etc.. In fact, in the
-% environments with delimiters (as |{pNiceMatrix}| or |{bNiceArray}|) the
-% exterior rules are not drawn (as expected).
+% The keys |hlines| and |vlines| (which draw, of course, horizontal and vertical
+% rules) take in as value a list of numbers which are the numbers of the rules
+% to draw.
+%
+% In fact, for the environments with delimiters (such as |{pNiceMatrix}| or
+% |{bNiceArray}|), the key |vlines| don't draw the exterior rules (this is
+% certainly the expected behaviour).
%
% \medskip
% \begin{BVerbatim}[baseline=c,boxwidth=10.6cm]
@@ -962,21 +992,13 @@ version 2005/12/01 or later.
% \end{pNiceMatrix}$
%
%
-% \bigskip
-% \colorbox{yellow!50}{\textbf{New 5.13}}\enskip It's possible to provide to the
-% key |vlines| a (comma-separated) list of numbers, which are the numbers of the
-% vertical rules to draw. The key |hlines| has a similar behaviour.
%
-%
-% \subsection{The key hvlines}
+% \subsubsection{The key hvlines}
% \label{hvlines}
%
-% The key |hvlines| draws all the vertical and horizontal rules (excepted
-% in the blocks and the virtual blocks determined by dotted lines and excepted
-% the rules corresponding of the frame of the blocks using the key |draw| which
-% are drawn with their own characteristics).
+% The key |hvlines| (no value) is the conjonction of the keys |hlines| and |vlines|.
%
-% \medskip
+% \smallskip
% \begin{Verbatim}
% \setlength{\arrayrulewidth}{1pt}
% \begin{NiceTabular}{cccc}[~emphase#hvlines@,rules/color=blue]
@@ -998,71 +1020,104 @@ version 2005/12/01 or later.
% \end{center}
%
%
-% \subsection{The key hvlines-except-corners}
+% \subsubsection{The (empty) corners}
%
-% \label{except-corners}
+% \label{corners}
%
-% The key |hvlines-except-corners| draws all the horizontal and vertical rules,
-% excepted in the blocks (and the virtual blocks determined by dotted lines) and
-% excepted in the empty corners.
+% The four |corners| of an array will be designed by |NW|, |SW|, |NE| and |SE|
+% (\emph{north west}, \emph{south west}, \emph{north east} and \emph{south east}).
%
-% \medskip
-% \begin{Verbatim}
-% \begin{NiceTabular}{*{6}{c}}[~emphase#hvlines-except-corners@,cell-space-top-limit=3pt]
+% For each of these corners, we will call \emph{empty corner} (or simply
+% \emph{corner}) the reunion of all the empty rectangles starting from the cell
+% actually in the corner of the array.\footnote{For sake of completeness, we
+% should also say that a cell contained in a block (even an empty cell) is not
+% taken into account for the determination of the corners. That behaviour is natural.}
+%
+% However, it's possible, for a cell without content, to require \pkg{nicemarix}
+% to consider that cell as not empty with the key |\NotEmpty|.
+%
+%\bigskip
+% \begin{minipage}{9cm}
+% In the example on the right (where B is in the center of a block of size
+% $2\times2$), we have colored in blue the four (empty) corners of the array.
+% \end{minipage}\hspace{2cm}%
+% \begin{NiceTabular}{*{6}{c}}[cell-space-top-limit=3pt]
+% \CodeBefore
+% \rectanglecolor{blue!10}{1-1}{4-2}
+% \rectanglecolor{blue!10}{1-1}{1-4}
+% \rectanglecolor{blue!10}{1-6}{3-6}
+% \rectanglecolor{blue!10}{7-1}{9-1}
+% \rectanglecolor{blue!10}{7-5}{9-6}
+% \Body
% & & & & A \\
% & & A & A & A \\
% & & & A \\
% & & A & A & A & A \\
% A & A & A & A & A & A \\
% A & A & A & A & A & A \\
+% & A & A & A \\
% & \Block{2-2}{B} & & A \\
% & & & A \\
-% & A & A & A \\
% \end{NiceTabular}
-% \end{Verbatim}
-% %
-% \begin{center}
-% \begin{NiceTabular}{*{6}{c}}[hvlines-except-corners,cell-space-top-limit=3pt]
+%
+% \bigskip
+% \colorbox{yellow!50}{\textbf{New 5.14}}\enskip 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). \emph{Remark}: In the previous versions of \pkg{nicematrix},
+% there was only a key |hvlines-except-corners| (now considered as obsolete).
+%
+% \bigskip
+% \begin{BVerbatim}[boxwidth=11cm,baseline=c]
+% \NiceMatrixOptions{cell-space-top-limit=3pt}
+% \begin{NiceTabular}{*{6}{c}}[~emphase#corners@,hvlines]
% & & & & A \\
% & & A & A & A \\
% & & & A \\
% & & A & A & A & A \\
% A & A & A & A & A & A \\
% A & A & A & A & A & A \\
+% & A & A & A \\
% & \Block{2-2}{B} & & A \\
% & & & A \\
+% \end{NiceTabular}
+% \end{BVerbatim}
+% \begin{NiceTabular}{*{6}{c}}[corners,hvlines,cell-space-top-limit=3pt]
+% & & & & A \\
+% & & A & A & A \\
+% & & & A \\
+% & & A & A & A & A \\
+% A & A & A & A & A & A \\
+% A & A & A & A & A & A \\
% & A & A & A \\
+% & \Block{2-2}{B} & & A \\
+% & & & A \\
% \end{NiceTabular}
-% \end{center}
%
-% As we can see, an ``empty corner'' is composed by the reunion of all the empty
-% rectangles starting from the cell actually in the corner of the array.
%
% \bigskip
-% It's possible to give as value to the key |\hvlines-except-corners| a list of
-% the corners to take into consideration. The corners are designed by |NW|,
-% |SW|, |NE| and |SE| (\emph{north west}, \emph{south west}, \emph{north east}
-% and \emph{south east}).
+% It's also possible to provide to the key |corners| a (comma-separated) list of
+% corners (designed by |NW|, |SW|, |NE| and |SE|).
%
-% \bigskip
+% \medskip
% \begin{BVerbatim}[boxwidth=11cm,baseline=c]
-% \begin{NiceTabular}{*{6}{c}}%
-% [~emphase#hvlines-except-corners=NE@,cell-space-top-limit=3pt]
+% \NiceMatrixOptions{cell-space-top-limit=3pt}
+% \begin{NiceTabular}{*{6}{c}}[~emphase#corners=NE@,hvlines]
% 1\\
% 1&1\\
% 1&2&1\\
% 1&3&3&1\\
% 1&4&6&4&1\\
-% 1&5&10&10&5&1
+% & & & & &1
% \end{NiceTabular}
% \end{BVerbatim}
-% \begin{NiceTabular}{*{6}{c}}[c,hvlines-except-corners=NE,cell-space-top-limit=3pt]
+% \begin{NiceTabular}{*{6}{c}}[c,corners=NE,hvlines,cell-space-top-limit=3pt]
% 1\\
% 1&1\\
% 1&2&1\\
% 1&3&3&1\\
% 1&4&6&4&1\\
-% 1&5&10&10&5&1
+% & & & & &1
% \end{NiceTabular}
%
% \bigskip
@@ -1213,10 +1268,10 @@ version 2005/12/01 or later.
% The extension \pkg{nicematrix} provides a key |code-before| for some code that
% will be executed before the drawing of the tabular.
%
-% \medskip
-% \colorbox{yellow!50}{\textbf{New 5.12}}\enskip An alternative syntax is
-% provided: it's possible to put the content of that |code-before| between the
-% keywords |\CodeBefore| and |\Body| at the beginning of the environment.
+% \medskip
+% An alternative syntax is provided: it's possible to put the content of that
+% |code-before| between the keywords |\CodeBefore| and |\Body| at the beginning
+% of the environment.
%
% \begin{Verbatim}
% \begin{pNiceArray}{~textsl#preamble@}
@@ -1379,10 +1434,10 @@ version 2005/12/01 or later.
% \begin{itemize}
% \item The key |cols| describes a set of columns. The command |\rowcolors| will
% color only the cells of these columns. The value is a comma-separated list of
-% intervals of the form $i$-$j$.
+% intervals of the form $i$-$j$ (where $i$ or $j$ may be replaced by |*|).
% \item With the key |restart|, each interval of rows (specified by the first
% mandatory argument) begins with the same color.\footnote{Otherwise, the color
-% of a given row relies only upon the parity of its number.}
+% of a given row relies only upon the parity of its absolute number.}
% \item With the key |respect-blocks| the ``rows'' alternately colored may extend over
% several rows if they have to incorporate blocks (created with the command
% |\Block|: cf.~p.~\pageref{Block}).
@@ -1489,14 +1544,12 @@ version 2005/12/01 or later.
% p.~\pageref{key-R}).
%
%
-% \item \colorbox{yellow!50}{\textbf{New 5.13}}\enskip
-% 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}). This command is useful thanks to its key
-% |except-corners| (in the third argument, which is a optional argument between
-% square brackets). The definition of these ``corners'' has been given
-% p.~\pageref{except-corners} when we have presented the key
-% |hvlines-except-corners|.
+% \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}). This command is useful thanks to its
+% key |except-corners| (in the third argument, which is a optional argument
+% between square brackets). The definition of these ``corners'' has been given
+% p.~\pageref{corners} when we have presented the key |corners|.
%
% \label{arraycolor}
%
@@ -2387,8 +2440,10 @@ version 2005/12/01 or later.
%
% The dotted lines determine virtual blocks which have the same behaviour
% regarding the rules (the rules specified by the specifier \verb+|+ in the
-% preamble and by the keys |hlines|, |vlines|, |hvlines| and
-% |hvlines-except-corners| are not drawn within the blocks).
+% preamble, by the command |\Hline| and by the keys |hlines|, |vlines| and
+% |hvlines| are not drawn within the blocks).\footnote{On the other side, the
+% command \verb|\line| in the \verb|\CodeAfter|
+% (cf.~p.~\pageref{line-in-code-after}) does \emph{not} create block.}
%
% \medskip
% \begin{BVerbatim}[baseline=c,boxwidth=10.6cm]
@@ -2412,19 +2467,19 @@ version 2005/12/01 or later.
%
% \label{code-after}
% The option |code-after| may be used to give some code that will be executed
-% after the construction of the matrix.\footnote{There is also a key
+% \emph{after} the construction of the matrix.\footnote{There is also a key
% |code-before| described p.~\pageref{code-before}.}
%
% \medskip
% For the legibility of the code, an alternative syntax is provided: it's
-% possible to give the instructions of the |\code-after| at the end of the
+% possible to give the instructions of the |code-after| at the end of the
% environment, after the keyword |\CodeAfter|. Although |\CodeAfter| is a
% keyword, it takes in an optional argument (between square brackets). The keys
% accepted form a subset of the keys of the command |\WithArrowsOptions|.
%
%
% \medskip
-% The experienced users may use, for instance, the PGF/Tikz nodes created by
+% The experienced users may, for instance, use the PGF/Tikz nodes created by
% \pkg{nicematrix} in the |\CodeAfter|. These nodes are described further
% beginning on p.~\pageref{PGF-nodes}.
%
@@ -2434,11 +2489,16 @@ version 2005/12/01 or later.
%
% \subsection{The command \textbackslash line in the \textbackslash CodeAfter}
%
+% \label{line-in-code-after}
% The command |\line| draws directly dotted lines between nodes. It takes in two
% arguments for the two cells to link, both of the form $i$-$j$ where is the
-% number of the row and $j$ is the number of the column. It may be used, for
-% example, to draw a dotted line between two adjacent
-% cells. \label{line-in-code-after}
+% number of the row and $j$ is the number of the column. The options available
+% for the customisation of the dotted lines created by |\Cdots|, |\Vdots|, etc.
+% are also available for this command (cf. p.~\pageref{customisation}).
+%
+% \bigskip
+% This command may be used, for example, to draw a dotted line between two
+% adjacent cells.
%
% \medskip
% \begin{BVerbatim}[baseline=c,boxwidth=11cm]
@@ -2462,10 +2522,29 @@ version 2005/12/01 or later.
% \end{pNiceMatrix}$
% \end{scope}
%
+% \bigskip
+% It can also be used to draw a diagonal line not parallel to the other diagonal
+% lines (by default, the dotted lines drawn by |\Ddots| are ``parallelized'':
+% cf.~p.~\pageref{parallelization}).
+%
% \medskip
-% The options available for the customisation of the dotted lines created by
-% |\Cdots|, |\Vdots|, etc. are also available for this command (cf.
-% p.~\pageref{customisation}).
+% \begin{BVerbatim}
+% \begin{bNiceMatrix}
+% 1 & \Cdots & & 1 & 2 & \Cdots & 2 \\
+% 0 & \Ddots & & \Vdots & \Vdots & \hspace*{2.5cm} & \Vdots \\
+% \Vdots & \Ddots & & & & & \\
+% 0 & \Cdots & 0 & 1 & 2 & \Cdots & 2
+% ~emphase#\CodeAfter \line[shorten=6pt]{1-5}{4-7}@
+% \end{bNiceMatrix}
+% \end{BVerbatim}
+% \[\begin{bNiceMatrix}
+% 1 & \Cdots & & 1 & 2 & \Cdots & 2 \\
+% 0 & \Ddots & & \Vdots & \Vdots & \hspace*{2.5cm} & \Vdots \\
+% \Vdots & \Ddots & & & & & \\
+% 0 & \Cdots & 0 & 1 & 2 & \Cdots & 2
+% \CodeAfter \line[shorten=6pt]{1-5}{4-7}
+% \end{bNiceMatrix}\]
+%
%
%
% \subsection{The command \textbackslash SubMatrix in the \textbackslash CodeAfter}
@@ -3277,10 +3356,11 @@ version 2005/12/01 or later.
% \textbf{Caution} : By default, no node is created in a empty cell.
%
% \smallskip
-% 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}).}
+% 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}) and the computation of the ``corners''
+% (cf.~p.~\pageref{corners}).}
%
% \medskip
% The nodes of a document must have distinct names. That's why the names of the
@@ -3589,24 +3669,26 @@ version 2005/12/01 or later.
% \subsection{The nodes which indicate the position of the rules}
%
% \label{nodes-i}
-% \colorbox{yellow!30}{New 5.11}\enskip The package \pkg{nicematrix}
-% creates a PGF/Tikz node merely called $i$ (with the classical prefix) at the
-% intersection of the horizontal rule of number~$i$ and the vertical rule of
-% number~$j$ (more specifically the potential position of those rules because
-% maybe there are not actually drawn). These nodes are available in the
-% |code-before| and the |\CodeAfter|.
-%
-% \colorbox{yellow!50}{\textbf{New 5.13}}\enskip The last node has also an alias called
-% |last|.
+% The package \pkg{nicematrix} creates a PGF/Tikz node merely called $i$ (with
+% the classical prefix) at the intersection of the horizontal rule of number~$i$
+% and the vertical rule of number~$i$ (more specifically the potential position
+% of those rules because maybe there are not actually drawn). The last node has
+% also an alias called |last|.
+%
+% \colorbox{yellow!50}{\textbf{New 5.14}}\enskip There is also a node called
+% $i$|.5| midway between the node $i$ and the node $i+1$.
+%
+% These nodes are available in the |\CodeBefore| and the |\CodeAfter|.
+%
% \begin{center}
% \begin{NiceTabular}{ccc}[hvlines,rules/width=1pt,rules/color=gray]
-% rose & tulipe & lys \\
-% arum & iris & violette \\
-% muguet & dahlia & souci
+% & tulipe & lys \\
+% arum & & violette mauve \\
+% muguet & dahlia
% \CodeAfter
% \tiny
% \begin{tikzpicture}
-% \foreach \i in {1,2,3,4}
+% \foreach \i in {1,1.5,2,2.5,3,3.5,4}
% {
% \fill [red] (\i) circle (0.5mm) ;
% \node [red,above right] at (\i) {\i} ;
@@ -3618,7 +3700,7 @@ version 2005/12/01 or later.
% \bigskip
% If we use Tikz (we remind that \pkg{nicematrix} does not load Tikz by default,
% by only \textsc{pgf}, which is a sub-layer of Tikz), we can access, in the
-% |\CodeAfter| but also in the |code-before|, to the intersection of the
+% |\CodeAfter| but also in the |\CodeBefore|, to the intersection of the
% (potential) horizontal rule~$i$ and the (potential) vertical rule~$j$ with the
% syntax |(|$i$\verb+-|+$j$|)|.
%
@@ -3655,6 +3737,29 @@ version 2005/12/01 or later.
% 1 & 8 & 28 & 56 & 70 & 56 & 28 & 8 & 1
% \end{NiceMatrix}\]
%
+%
+% \bigskip
+% The nodes of the form $i$|.5| may be used, for example to cross a row of a
+% matrix (if Tikz is loaded).
+%
+% \smallskip
+% \begin{BVerbatim}[boxwidth=11cm,baseline=c]
+% $\begin{pNiceArray}{ccc|c}
+% 2 & 1 & 3 & 0 \\
+% 3 & 3 & 1 & 0 \\
+% 3 & 3 & 1 & 0
+% \CodeAfter
+% \tikz \draw [red] (~emphase#3.5@-|1) -- (~emphase#3.5@-|last) ;
+% \end{pNiceArray}$
+% \end{BVerbatim}
+% $\begin{pNiceArray}{ccc|c}
+% 2 & 1 & 3 & 0 \\
+% 3 & 3 & 1 & 0 \\
+% 3 & 3 & 1 & 0
+% \CodeAfter
+% \tikz \draw [red] (3.5-|1) -- (3.5-|last) ;
+% \end{pNiceArray}$
+%
% \subsection{The nodes corresponding to the command \textbackslash SubMatrix}
%
% \label{node-sub-matrix}
@@ -3829,6 +3934,7 @@ version 2005/12/01 or later.
%
% \subsection{Diagonal lines}
%
+% \label{parallelization}
% By default, all the diagonal lines\footnote{We speak of the lines created by
% |\Ddots| and not the lines created by a command |\line| in |code-after|.} of a
% same array are ``parallelized''. That means that the first diagonal line is
@@ -4319,9 +4425,9 @@ version 2005/12/01 or later.
% (smaller parenthesis are a bit slimer).
%
% \medskip
-% \colorbox{yellow!50}{\textbf{New 5.12}}\enskip In order the solve that
-% problem, it's possible to require the delimiters to be composed with the
-% maximal width, thanks to the boolean key |delimiters/max-width|.
+% In order the solve that problem, it's possible to require the delimiters to be
+% composed with the maximal width, thanks to the boolean key
+% |delimiters/max-width|.
%
% \begin{Verbatim}[formatcom=\small\color{gray}]
% ~emphase#\begin{NiceMatrixBlock}[auto-columns-width]@
@@ -4689,7 +4795,7 @@ version 2005/12/01 or later.
% \end{pNiceArray}\]
%
%
-% \subsection{Utilisation of \textbackslash SubMatrix in the code-before}
+% \subsection{Utilisation of \textbackslash SubMatrix in the \textbackslash CodeBefore}
%
% In the following example, we illustrate the mathematical product of two
% matrices.
@@ -5658,7 +5764,7 @@ version 2005/12/01 or later.
%
% \medskip
% We are able to determine the number of columns specified in the preamble (for
-% the environments with explicit preamble, of course and without the potential
+% the environments with explicit preamble of course and without the potential
% exterior columns).
% \begin{macrocode}
\int_new:N \g_@@_static_num_of_col_int
@@ -5693,10 +5799,15 @@ version 2005/12/01 or later.
% \end{macrocode}
%
% \medskip
-% The parameter of position of the label of a block (|c|, |r| or |l|).
+% The parameters of position of the label of a block. For the horizontal
+% position, the possible values are |c|, |r| and |l|. For the vertical position,
+% the possible values are |c|, |t| and |b|. Of course, it would be intesting to
+% program a key |T| and a key |B|.
% \begin{macrocode}
-\tl_new:N \l_@@_pos_of_block_tl
-\tl_set:Nn \l_@@_pos_of_block_tl { c }
+\tl_new:N \l_@@_hpos_of_block_tl
+\tl_set:Nn \l_@@_hpos_of_block_tl { c }
+\tl_new:N \l_@@_vpos_of_block_tl
+\tl_set:Nn \l_@@_vpos_of_block_tl { c }
% \end{macrocode}
%
% \medskip
@@ -6186,12 +6297,9 @@ version 2005/12/01 or later.
%
%
% \bigskip
-% The flag |\l_@@_except_corners_bool| will be raised when the key
-% |except-corners| will be used. In that case, the corners will be computed
-% before we draw rules and the rules won't be drawn in the corners. As expected,
-% the key |hvlines-except-corners| raises the key |except-corners|.
+% The following parameter correspond to the key |corners|.
% \begin{macrocode}
-\clist_new:N \l_@@_except_corners_clist
+\clist_new:N \l_@@_corners_clist
% \end{macrocode}
%
% \begin{macrocode}
@@ -6435,15 +6543,18 @@ version 2005/12/01 or later.
\keys_define:nn { NiceMatrix / Env }
{
delimiters/max-width .bool_set:N = \l_@@_delimiters_max_width_bool ,
- except-corners .clist_set:N = \l_@@_except_corners_clist ,
- except-corners .default:n = { NW , SW , NE , SE } ,
+% \end{macrocode}
+% The key |hvlines-except-corners| is now deprecated.
+% \begin{macrocode}
hvlines-except-corners .code:n =
{
- \clist_set:Nn \l_@@_except_corners_clist { #1 }
+ \clist_set:Nn \l_@@_corners_clist { #1 }
\clist_set:Nn \l_@@_vlines_clist { all }
\clist_set:Nn \l_@@_hlines_clist { all }
} ,
hvlines-except-corners .default:n = { NW , SW , NE , SE } ,
+ corners .clist_set:N = \l_@@_corners_clist ,
+ corners .default:n = { NW , SW , NE , SE } ,
code-before .code:n =
{
\tl_if_empty:nF { #1 }
@@ -6828,7 +6939,6 @@ version 2005/12/01 or later.
% \begin{macrocode}
\int_compare:nNnT \c@jCol = 1
{ \int_compare:nNnT \l_@@_first_col_int = 1 \@@_begin_of_row: }
- \int_gset:Nn \g_@@_col_total_int { \int_max:nn \g_@@_col_total_int \c@jCol }
% \end{macrocode}
% The content of the cell is composed in the box |\l_@@_cell_box| because we want
% to compute some dimensions of the box. The |\hbox_set_end:| corresponding to
@@ -7023,6 +7133,7 @@ version 2005/12/01 or later.
\@@_node_for_the_cell:
{ \box_use_drop:N \l_@@_cell_box }
}
+ \int_gset:Nn \g_@@_col_total_int { \int_max:nn \g_@@_col_total_int \c@jCol }
\bool_gset_false:N \g_@@_empty_cell_bool
\bool_gset_false:N \g_@@_not_empty_cell_bool
}
@@ -8136,7 +8247,7 @@ version 2005/12/01 or later.
% \end{macrocode}
%
% First, we have to store our preamble in the token register |\@temptokena|
-% (those ``token registers'' are not supported by \pkg{expl3}).
+% (those ``token registers'' are \emph{not} supported by \pkg{expl3}).
% \begin{macrocode}
\exp_args:NV \@temptokena \g_@@_preamble_tl
% \end{macrocode}
@@ -9862,6 +9973,22 @@ version 2005/12/01 or later.
}
% \end{macrocode}
%
+% \bigskip
+% We define a new \textsc{pgf} shape for the diag nodes because we want to
+% provide a anchor called |.5| for those nodes.
+% \begin{macrocode}
+\pgfdeclareshape { @@_diag_node }
+ {
+ \savedanchor { \five }
+ {
+ \dim_gset_eq:NN \pgf@x \l_tmpa_dim
+ \dim_gset_eq:NN \pgf@y \l_tmpb_dim
+ }
+ \anchor { 5 } { \five }
+ \anchor { center } { \pgfpointorigin }
+ }
+% \end{macrocode}
+%
%
% \bigskip
% The following command creates the diagonal nodes (in fact, if the matrix is
@@ -9871,13 +9998,35 @@ version 2005/12/01 or later.
{
\pgfpicture
\pgfrememberpicturepositiononpagetrue
- \int_step_inline:nn { \int_max:nn \c@iRow \c@jCol + 1 }
+ \int_step_inline:nn { \int_max:nn \c@iRow \c@jCol }
{
- \@@_qpoint:n { row - \int_min:nn { ##1 } { \c@iRow + 1 } }
- \dim_set_eq:NN \l_tmpa_dim \pgf@y
\@@_qpoint:n { col - \int_min:nn { ##1 } { \c@jCol + 1 } }
- \pgfcoordinate { \@@_env: - ##1 } { \pgfpoint \pgf@x \l_tmpa_dim }
+ \dim_set_eq:NN \l_tmpa_dim \pgf@x
+ \@@_qpoint:n { row - \int_min:nn { ##1 } { \c@iRow + 1 } }
+ \dim_set_eq:NN \l_tmpb_dim \pgf@y
+ \@@_qpoint:n { col - \int_min:nn { ##1 + 1 } { \c@jCol + 1 } }
+ \dim_set_eq:NN \l_tmpc_dim \pgf@x
+ \@@_qpoint:n { row - \int_min:nn { ##1 + 1 } { \c@iRow + 1 } }
+ \dim_set_eq:NN \l_tmpd_dim \pgf@y
+ \pgftransformshift { \pgfpoint \l_tmpa_dim \l_tmpb_dim }
+% \end{macrocode}
+% Now, |\l_tmpa_dim| and |\l_tmpb_dim| become the width and the height of the
+% node (of shape |@à_diag_node|) that we will construct.
+% \begin{macrocode}
+ \dim_set:Nn \l_tmpa_dim { ( \l_tmpc_dim - \l_tmpa_dim ) / 2 }
+ \dim_set:Nn \l_tmpb_dim { ( \l_tmpd_dim - \l_tmpb_dim ) / 2 }
+ \pgfnode { @@_diag_node } { center } { } { \@@_env: - ##1 } { }
}
+% \end{macrocode}
+% Now, the last node. Of course, that is only a |coordinate| because there is
+% not |.5| anchor for that node.
+% \begin{macrocode}
+ \int_set:Nn \l_tmpa_int { \int_max:nn \c@iRow \c@jCol + 1 }
+ \@@_qpoint:n { row - \int_min:nn { \l_tmpa_int } { \c@iRow + 1 } }
+ \dim_set_eq:NN \l_tmpa_dim \pgf@y
+ \@@_qpoint:n { col - \int_min:nn { \l_tmpa_int } { \c@jCol + 1 } }
+ \pgfcoordinate
+ { \@@_env: - \int_use:N \l_tmpa_int } { \pgfpoint \pgf@x \l_tmpa_dim }
\pgfnodealias
{ \@@_env: - last }
{ \@@_env: - \int_eval:n { \int_max:nn \c@iRow \c@jCol + 1 } }
@@ -9885,35 +10034,6 @@ version 2005/12/01 or later.
}
% \end{macrocode}
%
-% \bigskip
-% As for now, the ½ nodes are not documented and they are created only in the
-% native \textsc{utf8} engines, that is to say XeLaTeX and LuaLaTeX.
-% \begin{macrocode}
-\bool_if:nT
- { \sys_if_engine_xetex_p: || \sys_if_engine_luatex_p: }
- { \tl_put_right:Nn \@@_create_diag_nodes: \@@_create_half_nodes: }
-% \end{macrocode}
-%
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_create_half_nodes:
- {
- \int_step_inline:nn { \int_max:nn \c@iRow \c@jCol }
- {
- \pgfpicture
- \pgfrememberpicturepositiononpagetrue
- \pgfcoordinate { \@@_env: - ##1 ½ }
- {
- \pgfpointscale { 0.5 }
- {
- \pgfpointadd
- { \@@_qpoint:n { ##1 } }
- { \@@_qpoint:n { \int_eval:n { ##1 + 1 } } }
- }
- }
- \endpgfpicture
- }
- }
-% \end{macrocode}
%
% \bigskip
% \subsection*{We draw the dotted lines}
@@ -10754,21 +10874,13 @@ version 2005/12/01 or later.
{
\bool_if:NTF \l_@@_initial_open_bool
{
- % \@@_qpoint:n { row - \int_use:N \l_@@_initial_i_int }
- % \dim_set_eq:NN \l_@@_y_initial_dim \pgf@y
\@@_open_y_initial_dim:
- % \@@_qpoint:n { col - \@@_succ:n \l_@@_initial_j_int }
- % \dim_set_eq:NN \l_@@_x_initial_dim \pgf@x
\@@_open_x_initial_dim:
}
{ \@@_set_initial_coords_from_anchor:n { south~west } }
\bool_if:NTF \l_@@_final_open_bool
{
- % \@@_qpoint:n { row - \@@_succ:n \l_@@_final_i_int }
- % \dim_set_eq:NN \l_@@_y_final_dim \pgf@y
\@@_open_y_final_dim:
- % \@@_qpoint:n { col - \int_use:N \l_@@_final_j_int }
- % \dim_set_eq:NN \l_@@_x_final_dim \pgf@x
\@@_open_x_final_dim:
}
{ \@@_set_final_coords_from_anchor:n { north~east } }
@@ -11247,10 +11359,6 @@ version 2005/12/01 or later.
\exp_args:NNe
\@@_old_multicolumn
{ #1 }
-% \end{macrocode}
-% We will have to replace |\tl_lower_case:n| in the future since it seems to be
-% deprecated.
-% \begin{macrocode}
{
\exp_args:Ne \str_case:nn { \str_foldcase:n { #2 } }
{
@@ -11925,7 +12033,7 @@ version 2005/12/01 or later.
% \end{macrocode}
% First, we compute the corners.
% \begin{macrocode}
- \clist_set:Nn \l_@@_except_corners_clist { #3 }
+ \clist_set:Nn \l_@@_corners_clist { #3 }
\@@_compute_corners:
% \end{macrocode}
% Now, for each cell of the array (excepted the potential exterior rows and
@@ -12151,8 +12259,13 @@ version 2005/12/01 or later.
\tl_if_in:NnTF \l_tmpa_tl { - }
{ \@@_cut_on_hyphen:w ##1 \q_stop }
{ \@@_cut_on_hyphen:w ##1 - ##1 \q_stop }
- \tl_if_empty:NT \l_tmpa_tl { \tl_set:Nn \l_tmpa_tl { 1 } }
- \tl_if_empty:NT \l_tmpb_tl
+ \bool_lazy_or:nnT
+ { \tl_if_blank_p:V \l_tmpa_tl }
+ { \str_if_eq_p:Vn \l_tmpa_tl { * } }
+ { \tl_set:Nn \l_tmpa_tl { 1 } }
+ \bool_lazy_or:nnT
+ { \tl_if_blank_p:V \l_tmpb_tl }
+ { \str_if_eq_p:Vn \l_tmpb_tl { * } }
{ \tl_set:Nx \l_tmpb_tl { \int_use:N \c@jCol } }
\int_compare:nNnT \l_tmpb_tl > \c@jCol
{ \tl_set:Nx \l_tmpb_tl { \int_use:N \c@jCol } }
@@ -12220,7 +12333,7 @@ version 2005/12/01 or later.
% \end{macrocode}
%
% \bigskip
-% When the user uses the key |colortbll-like|, the following command will
+% When the user uses the key |colortbl-like|, the following command will
% be linked to |\rowcolor| in the tabular.
% \begin{macrocode}
\NewDocumentCommand \@@_rowcolor_tabular { O { } m }
@@ -12234,15 +12347,23 @@ version 2005/12/01 or later.
}
% \end{macrocode}
%
+%
% \bigskip
% \begin{macrocode}
\NewDocumentCommand \@@_columncolor_preamble { O { } m }
{
- \int_compare:nNnT \c@iRow = 1
+% \end{macrocode}
+% With the following line, we test whether the cell is the first one we
+% encounter in its column (don't forget that some rows may be incomplete).
+% \begin{macrocode}
+ \int_compare:nNnT \c@jCol > \g_@@_col_total_int
{
% \end{macrocode}
% You use |gput_left| because we want the specification of colors for the
% columns drawn before the specifications of color for the rows (and the cells).
+% Be careful: maybe this is not effective since we have an analyze of the
+% instructions in the |\CodeBefore| in order to fill color by color (to avoid
+% the thin white lines).
% \begin{macrocode}
\tl_gput_left:Nx \g_nicematrix_code_before_tl
{
@@ -12360,7 +12481,7 @@ version 2005/12/01 or later.
{ \@@_test_vline_in_block:nnnn ##1 }
\seq_map_inline:Nn \g_@@_pos_of_stroken_blocks_seq
{ \@@_test_vline_in_stroken_block:nnnn ##1 }
- \clist_if_empty:NF \l_@@_except_corners_clist
+ \clist_if_empty:NF \l_@@_corners_clist
\@@_test_in_corner_v:
\bool_if:NTF \g_tmpa_bool
{
@@ -12474,7 +12595,7 @@ version 2005/12/01 or later.
% The following command draws a complete vertical rule in the column |#1| (|#2|
% is the number of consecutive rules specified by the number of \verb+|+ in the
% preamble). This command will be used if there is no block in the array (and
-% the key |except-corners| is not used).
+% the key |corners| is not used).
% \begin{macrocode}
\cs_new_protected:Npn \@@_vline_i_complete:nn #1 #2
{ \@@_vline_ii:nnnn { #1 } { #2 } 1 { \int_use:N \c@iRow } }
@@ -12483,7 +12604,7 @@ version 2005/12/01 or later.
% \bigskip
% The command |\@@_draw_hlines:| draws all the vertical rules excepted in the
% blocks, in the virtual blocks (determined by a command such as |\Cdots|) and in
-% the corners (if the key |except-corners| is used).
+% the corners (if the key |corners| is used).
% \begin{macrocode}
\cs_new_protected:Npn \@@_draw_vlines:
{
@@ -12541,7 +12662,7 @@ version 2005/12/01 or later.
{ \@@_test_hline_in_block:nnnn ##1 }
\seq_map_inline:Nn \g_@@_pos_of_stroken_blocks_seq
{ \@@_test_hline_in_stroken_block:nnnn ##1 }
- \clist_if_empty:NF \l_@@_except_corners_clist \@@_test_in_corner_h:
+ \clist_if_empty:NF \l_@@_corners_clist \@@_test_in_corner_h:
\bool_if:NTF \g_tmpa_bool
{
\tl_if_empty:NT \l_tmpc_tl
@@ -12657,7 +12778,7 @@ version 2005/12/01 or later.
% \bigskip
% The command |\@@_draw_hlines:| draws all the horizontal rules excepted in the
% blocks (even the virtual drawn determined by commands such as |\Cdots| and in
-% the corners (if the key |except-corners| is used).
+% the corners (if the key |corners| is used).
% \begin{macrocode}
\cs_new_protected:Npn \@@_draw_hlines:
{
@@ -12775,9 +12896,9 @@ version 2005/12/01 or later.
% \end{macrocode}
%
% \bigskip
-% \subsubsection*{The key except-corners}
+% \subsubsection*{The key corners}
%
-% When the key |except-corners| is raised, the rules are not drawn in the
+% When the key |corners| is raised, the rules are not drawn in the
% corners. Of course, we have to compute the corners before we begin to draw the
% rules.
%
@@ -12789,7 +12910,7 @@ version 2005/12/01 or later.
% empty cells (and not in a block) considered in the corners of the array.
% \begin{macrocode}
\seq_clear_new:N \l_@@_empty_corner_cells_seq
- \clist_map_inline:Nn \l_@@_except_corners_clist
+ \clist_map_inline:Nn \l_@@_corners_clist
{
\str_case:nnF { ##1 }
{
@@ -13611,12 +13732,16 @@ version 2005/12/01 or later.
% \begin{macrocode}
\keys_define:nn { NiceMatrix / Block / FirstPass }
{
- l .code:n = \tl_set:Nn \l_@@_pos_of_block_tl l ,
+ l .code:n = \tl_set:Nn \l_@@_hpos_of_block_tl l ,
l .value_forbidden:n = true ,
- r .code:n = \tl_set:Nn \l_@@_pos_of_block_tl r ,
+ r .code:n = \tl_set:Nn \l_@@_hpos_of_block_tl r ,
r .value_forbidden:n = true ,
- c .code:n = \tl_set:Nn \l_@@_pos_of_block_tl c ,
+ c .code:n = \tl_set:Nn \l_@@_hpos_of_block_tl c ,
c .value_forbidden:n = true ,
+ t .code:n = \tl_set:Nn \l_@@_vpos_of_block_tl t ,
+ t .value_forbidden:n = true ,
+ b .code:n = \tl_set:Nn \l_@@_vpos_of_block_tl b ,
+ b .value_forbidden:n = true ,
color .tl_set:N = \l_@@_color_tl ,
color .value_required:n = true ,
}
@@ -13680,15 +13805,19 @@ version 2005/12/01 or later.
{ \int_set:Nn \l_tmpb_int { #2 } }
% \end{macrocode}
%
+% \medskip
+% If the block is mono-column.
% \begin{macrocode}
\int_compare:nNnTF \l_tmpb_int = 1
{
\tl_if_empty:NTF \l_@@_cell_type_tl
- { \tl_set:Nn \l_@@_pos_of_block_tl c }
- { \tl_set_eq:NN \l_@@_pos_of_block_tl \l_@@_cell_type_tl }
+ { \tl_set:Nn \l_@@_hpos_of_block_tl c }
+ { \tl_set_eq:NN \l_@@_hpos_of_block_tl \l_@@_cell_type_tl }
}
- { \tl_set:Nn \l_@@_pos_of_block_tl c }
+ { \tl_set:Nn \l_@@_hpos_of_block_tl c }
% \end{macrocode}
+% The value of |\l_@@_hpos_of_block_tl| may be modified by the keys of the
+% command |\Block| that we will analyze now.
%
% \medskip
% \begin{macrocode}
@@ -13775,18 +13904,24 @@ version 2005/12/01 or later.
% the tabular is the same as the external alignment of the tabular (that is to
% say the position of the block in its zone of merged cells).
% \begin{macrocode}
- \bool_if:NT \g_@@_rotate_bool { \tl_set:Nn \l_@@_pos_of_block_tl c }
+ \bool_if:NT \g_@@_rotate_bool { \tl_set:Nn \l_@@_hpos_of_block_tl c }
\bool_if:NTF \l_@@_NiceTabular_bool
{
- \exp_args:Nnx \begin { tabular }
- { @ { } \l_@@_pos_of_block_tl @ { } }
+ \use:x
+ {
+ \exp_not:N \begin { tabular } [ \l_@@_vpos_of_block_tl ]
+ { @ { } \l_@@_hpos_of_block_tl @ { } }
+ }
#5
\end { tabular }
}
{
\c_math_toggle_token
- \exp_args:Nnx \begin { array }
- { @ { } \l_@@_pos_of_block_tl @ { } }
+ \use:x
+ {
+ \exp_not:N \begin { array } [ \l_@@_vpos_of_block_tl ]
+ { @ { } \l_@@_hpos_of_block_tl @ { } }
+ }
#5
\end { array }
\c_math_toggle_token
@@ -13847,11 +13982,11 @@ version 2005/12/01 or later.
% \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
+% |\l_@@_hpos_of_block_tl|. However, maybe there were no key of the horizontal
% alignement and that's why we put a key corresponding to the value of
-% |\l_@@_pos_of_block_tl|, which is fixed by the type of current column.
+% |\l_@@_hpos_of_block_tl|, which is fixed by the type of current column.
% \begin{macrocode}
- { \exp_not:n { #3 } , \l_@@_pos_of_block_tl }
+ { \exp_not:n { #3 } , \l_@@_hpos_of_block_tl }
{
\box_use_drop:c
{ g_@@_ block _ box _ \int_use:N \g_@@_block_box_int _ box }
@@ -13890,9 +14025,12 @@ version 2005/12/01 or later.
% 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 @ { } }
+ { \tl_set:Nn \l_@@_hpos_of_block_tl c }
+ \use:x
+ {
+ \exp_not:N \begin { tabular } [ \l_@@_vpos_of_block_tl ]
+ { @ { } \l_@@_hpos_of_block_tl @ { } }
+ }
#5
\end { tabular }
\group_end:
@@ -13903,10 +14041,15 @@ version 2005/12/01 or later.
\dim_set_eq:NN \extrarowheight \c_zero_dim
#4
\bool_if:NT \g_@@_rotate_bool
- { \tl_set:Nn \l_@@_pos_of_block_tl c }
+ { \tl_set:Nn \l_@@_hpos_of_block_tl c }
\c_math_toggle_token
- \exp_args:Nnx \begin { array }
- { @ { } \l_@@_pos_of_block_tl @ { } } #5 \end { array }
+ \use:x
+ {
+ \exp_not:N \begin { array } [ \l_@@_vpos_of_block_tl ]
+ { @ { } \l_@@_hpos_of_block_tl @ { } }
+ }
+ #5
+ \end { array }
\c_math_toggle_token
\group_end:
}
@@ -13937,12 +14080,16 @@ version 2005/12/01 or later.
borders .value_required:n = true ,
line-width .dim_set:N = \l_@@_line_width_dim ,
line-width .value_required:n = true ,
- l .code:n = \tl_set:Nn \l_@@_pos_of_block_tl l ,
+ l .code:n = \tl_set:Nn \l_@@_hpos_of_block_tl l ,
l .value_forbidden:n = true ,
- r .code:n = \tl_set:Nn \l_@@_pos_of_block_tl r ,
+ r .code:n = \tl_set:Nn \l_@@_hpos_of_block_tl r ,
r .value_forbidden:n = true ,
- c .code:n = \tl_set:Nn \l_@@_pos_of_block_tl c ,
+ c .code:n = \tl_set:Nn \l_@@_hpos_of_block_tl c ,
c .value_forbidden:n = true ,
+ t .code:n = \tl_set:Nn \l_@@_vpos_of_block_tl t ,
+ t .value_forbidden:n = true ,
+ b .code:n = \tl_set:Nn \l_@@_vpos_of_block_tl b ,
+ b .value_forbidden:n = true ,
unknown .code:n = \@@_error:n { Unknown~key~for~Block }
}
% \end{macrocode}
@@ -14266,7 +14413,7 @@ version 2005/12/01 or later.
\pgfpointanchor
{ \@@_env: - #1 - #2 - block - short }
{
- \str_case:Vn \l_@@_pos_of_block_tl
+ \str_case:Vn \l_@@_hpos_of_block_tl
{
c { center }
l { west }
@@ -14281,7 +14428,7 @@ version 2005/12/01 or later.
\pgfnode
{ rectangle }
{
- \str_case:Vn \l_@@_pos_of_block_tl
+ \str_case:Vn \l_@@_hpos_of_block_tl
{
c { base }
l { base~west }
@@ -14302,18 +14449,18 @@ version 2005/12/01 or later.
% If we are in the first column, we must put the block as if it was with the key~|r|.
% \begin{macrocode}
\int_compare:nNnT { #2 } = 0
- { \tl_set:Nn \l_@@_pos_of_block_tl r }
+ { \tl_set:Nn \l_@@_hpos_of_block_tl r }
\bool_if:nT \g_@@_last_col_found_bool
{
\int_compare:nNnT { #2 } = \g_@@_col_total_int
- { \tl_set:Nn \l_@@_pos_of_block_tl l }
+ { \tl_set:Nn \l_@@_hpos_of_block_tl l }
}
\pgftransformshift
{
\pgfpointanchor
{ \@@_env: - #1 - #2 - block - short }
{
- \str_case:Vn \l_@@_pos_of_block_tl
+ \str_case:Vn \l_@@_hpos_of_block_tl
{
c { center }
l { west }
@@ -14325,7 +14472,7 @@ version 2005/12/01 or later.
\pgfnode
{ rectangle }
{
- \str_case:Vn \l_@@_pos_of_block_tl
+ \str_case:Vn \l_@@_hpos_of_block_tl
{
c { center }
l { west }
@@ -14659,7 +14806,7 @@ version 2005/12/01 or later.
% \end{macrocode}
% We put the cell with |\diagbox| in the sequence |\g_@@_pos_of_blocks_seq|
% because a cell with |\diagbox| must be considered as non empty by the key
-% |except-corners|.
+% |corners|.
% \begin{macrocode}
\seq_gput_right:Nx \g_@@_pos_of_blocks_seq
{
@@ -15857,7 +16004,7 @@ version 2005/12/01 or later.
\@@_msg_new:nn { bad~corner }
{
#1~is~an~incorrect~specification~for~a~corner~(in~the~keys~
- 'except-corners'~and~'hvlines-except-corners').~The~available~
+ 'corners'~and~'except-corners').~The~available~
values~are:~NW,~SW,~NE~and~SE.\\
If~you~go~on,~this~specification~of~corner~will~be~ignored.
}
@@ -16093,6 +16240,7 @@ version 2005/12/01 or later.
code-for-first-row,~
code-for-last-col,~
code-for-last-row,~
+ corners,~
create-extra-nodes,~
create-medium-nodes,~
create-large-nodes,~
@@ -16102,7 +16250,6 @@ version 2005/12/01 or later.
first-row,~
hlines,~
hvlines,~
- hvlines-except-corners,~
last-col,~
last-row,~
left-margin,~
@@ -16144,6 +16291,7 @@ version 2005/12/01 or later.
code-for-last-row,~
colortbl-like,~
columns-width,~
+ corners,~
create-extra-nodes,~
create-medium-nodes,~
create-large-nodes,~
@@ -16154,7 +16302,6 @@ version 2005/12/01 or later.
first-row,~
hlines,~
hvlines,~
- hvlines-except-corners,~
last-col,~
last-row,~
left-margin,~
@@ -16168,6 +16315,7 @@ version 2005/12/01 or later.
rules~(with~the~subkeys~'color'~and~'width'),~
small,~
t,~
+ tabularnote,~
vlines,~
xdots/color,~
xdots/shorten~and~
@@ -16202,6 +16350,7 @@ version 2005/12/01 or later.
code-for-last-row,~
colortbl-like,~
columns-width,~
+ corners,~
create-extra-nodes,~
create-medium-nodes,~
create-large-nodes,~
@@ -16212,7 +16361,6 @@ version 2005/12/01 or later.
first-row,~
hlines,~
hvlines,~
- hvlines-except-corners,~
l,~
last-col,~
last-row,~
@@ -16256,6 +16404,7 @@ version 2005/12/01 or later.
code-for-last-row,~
colortbl-like,~
columns-width,~
+ corners,~
create-extra-nodes,~
create-medium-nodes,~
create-large-nodes,~
@@ -16265,7 +16414,6 @@ version 2005/12/01 or later.
first-row,~
hlines,~
hvlines,~
- hvlines-except-corners,~
last-col,~
last-row,~
left-margin,~
@@ -16278,6 +16426,7 @@ version 2005/12/01 or later.
right-margin,~
rules~(with~the~subkeys~'color'~and~'width'),~
t,~
+ tabularnote,~
vlines,~
xdots/color,~
xdots/shorten~and~
@@ -16766,6 +16915,15 @@ version 2005/12/01 or later.
% The keys |vlines| and |hlines| takes in as value a (comma-separated) list of
% numbers (for the rules to draw).
%
+%
+% \subsection*{Changes between versions 5.13 and 5.14}
+%
+% Nodes of the forme |(1.5)|, |(2.5)|, |(3.5)|, etc.
+%
+% Keys |t| and |b| for the command |\Block|.
+%
+% Key |corners|.
+%
% \PrintIndex
%
% \tableofcontents
diff --git a/Master/texmf-dist/tex/latex/nicematrix/nicematrix.sty b/Master/texmf-dist/tex/latex/nicematrix/nicematrix.sty
index da3db9af6f1..1c9828f225f 100644
--- a/Master/texmf-dist/tex/latex/nicematrix/nicematrix.sty
+++ b/Master/texmf-dist/tex/latex/nicematrix/nicematrix.sty
@@ -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.13}
-\def\myfiledate{2021/03/23}
+\def\myfileversion{5.14}
+\def\myfiledate{2021/04/08}
\RequirePackage{pgfcore}
\usepgfmodule{shapes}
\RequirePackage{l3keys2e}
@@ -323,8 +323,10 @@
\dim_new:N \l__nicematrix_rounded_corners_dim
\tl_new:N \l__nicematrix_color_tl
\dim_new:N \l__nicematrix_line_width_dim
-\tl_new:N \l__nicematrix_pos_of_block_tl
-\tl_set:Nn \l__nicematrix_pos_of_block_tl { c }
+\tl_new:N \l__nicematrix_hpos_of_block_tl
+\tl_set:Nn \l__nicematrix_hpos_of_block_tl { c }
+\tl_new:N \l__nicematrix_vpos_of_block_tl
+\tl_set:Nn \l__nicematrix_vpos_of_block_tl { c }
\bool_new:N \l__nicematrix_draw_first_bool
\int_new:N \g__nicematrix_block_box_int
\dim_new:N \l__nicematrix_submatrix_extra_height_dim
@@ -481,7 +483,7 @@
\bool_new:N \l__nicematrix_exterior_arraycolsep_bool
\bool_new:N \l__nicematrix_parallelize_diags_bool
\bool_set_true:N \l__nicematrix_parallelize_diags_bool
-\clist_new:N \l__nicematrix_except_corners_clist
+\clist_new:N \l__nicematrix_corners_clist
\dim_new:N \l__nicematrix_notes_above_space_dim
\AtBeginDocument { \dim_set:Nn \l__nicematrix_notes_above_space_dim { 1 mm } }
\bool_new:N \l__nicematrix_nullify_dots_bool
@@ -597,15 +599,15 @@
\keys_define:nn { NiceMatrix / Env }
{
delimiters/max-width .bool_set:N = \l__nicematrix_delimiters_max_width_bool ,
- except-corners .clist_set:N = \l__nicematrix_except_corners_clist ,
- except-corners .default:n = { NW , SW , NE , SE } ,
hvlines-except-corners .code:n =
{
- \clist_set:Nn \l__nicematrix_except_corners_clist { #1 }
+ \clist_set:Nn \l__nicematrix_corners_clist { #1 }
\clist_set:Nn \l__nicematrix_vlines_clist { all }
\clist_set:Nn \l__nicematrix_hlines_clist { all }
} ,
hvlines-except-corners .default:n = { NW , SW , NE , SE } ,
+ corners .clist_set:N = \l__nicematrix_corners_clist ,
+ corners .default:n = { NW , SW , NE , SE } ,
code-before .code:n =
{
\tl_if_empty:nF { #1 }
@@ -852,7 +854,6 @@
\int_gincr:N \c@jCol
\int_compare:nNnT \c@jCol = 1
{ \int_compare:nNnT \l__nicematrix_first_col_int = 1 \__nicematrix_begin_of_row: }
- \int_gset:Nn \g__nicematrix_col_total_int { \int_max:nn \g__nicematrix_col_total_int \c@jCol }
\hbox_set:Nw \l__nicematrix_cell_box
\bool_if:NF \l__nicematrix_NiceTabular_bool
{
@@ -968,6 +969,7 @@
\__nicematrix_node_for_the_cell:
{ \box_use_drop:N \l__nicematrix_cell_box }
}
+ \int_gset:Nn \g__nicematrix_col_total_int { \int_max:nn \g__nicematrix_col_total_int \c@jCol }
\bool_gset_false:N \g__nicematrix_empty_cell_bool
\bool_gset_false:N \g__nicematrix_not_empty_cell_bool
}
@@ -2509,43 +2511,46 @@
\cs_if_exist:NT \theiRow { \int_gset_eq:NN \c@iRow \l__nicematrix_old_iRow_int }
\cs_if_exist:NT \thejCol { \int_gset_eq:NN \c@jCol \l__nicematrix_old_jCol_int }
}
+\pgfdeclareshape { __nicematrix_diag_node }
+ {
+ \savedanchor { \five }
+ {
+ \dim_gset_eq:NN \pgf@x \l_tmpa_dim
+ \dim_gset_eq:NN \pgf@y \l_tmpb_dim
+ }
+ \anchor { 5 } { \five }
+ \anchor { center } { \pgfpointorigin }
+ }
\cs_new_protected:Npn \__nicematrix_create_diag_nodes:
{
\pgfpicture
\pgfrememberpicturepositiononpagetrue
- \int_step_inline:nn { \int_max:nn \c@iRow \c@jCol + 1 }
+ \int_step_inline:nn { \int_max:nn \c@iRow \c@jCol }
{
- \__nicematrix_qpoint:n { row - \int_min:nn { ##1 } { \c@iRow + 1 } }
- \dim_set_eq:NN \l_tmpa_dim \pgf@y
\__nicematrix_qpoint:n { col - \int_min:nn { ##1 } { \c@jCol + 1 } }
- \pgfcoordinate { \__nicematrix_env: - ##1 } { \pgfpoint \pgf@x \l_tmpa_dim }
- }
+ \dim_set_eq:NN \l_tmpa_dim \pgf@x
+ \__nicematrix_qpoint:n { row - \int_min:nn { ##1 } { \c@iRow + 1 } }
+ \dim_set_eq:NN \l_tmpb_dim \pgf@y
+ \__nicematrix_qpoint:n { col - \int_min:nn { ##1 + 1 } { \c@jCol + 1 } }
+ \dim_set_eq:NN \l_tmpc_dim \pgf@x
+ \__nicematrix_qpoint:n { row - \int_min:nn { ##1 + 1 } { \c@iRow + 1 } }
+ \dim_set_eq:NN \l_tmpd_dim \pgf@y
+ \pgftransformshift { \pgfpoint \l_tmpa_dim \l_tmpb_dim }
+ \dim_set:Nn \l_tmpa_dim { ( \l_tmpc_dim - \l_tmpa_dim ) / 2 }
+ \dim_set:Nn \l_tmpb_dim { ( \l_tmpd_dim - \l_tmpb_dim ) / 2 }
+ \pgfnode { __nicematrix_diag_node } { center } { } { \__nicematrix_env: - ##1 } { }
+ }
+ \int_set:Nn \l_tmpa_int { \int_max:nn \c@iRow \c@jCol + 1 }
+ \__nicematrix_qpoint:n { row - \int_min:nn { \l_tmpa_int } { \c@iRow + 1 } }
+ \dim_set_eq:NN \l_tmpa_dim \pgf@y
+ \__nicematrix_qpoint:n { col - \int_min:nn { \l_tmpa_int } { \c@jCol + 1 } }
+ \pgfcoordinate
+ { \__nicematrix_env: - \int_use:N \l_tmpa_int } { \pgfpoint \pgf@x \l_tmpa_dim }
\pgfnodealias
{ \__nicematrix_env: - last }
{ \__nicematrix_env: - \int_eval:n { \int_max:nn \c@iRow \c@jCol + 1 } }
\endpgfpicture
}
-\bool_if:nT
- { \sys_if_engine_xetex_p: || \sys_if_engine_luatex_p: }
- { \tl_put_right:Nn \__nicematrix_create_diag_nodes: \__nicematrix_create_half_nodes: }
-\cs_new_protected:Npn \__nicematrix_create_half_nodes:
- {
- \int_step_inline:nn { \int_max:nn \c@iRow \c@jCol }
- {
- \pgfpicture
- \pgfrememberpicturepositiononpagetrue
- \pgfcoordinate { \__nicematrix_env: - ##1 ½ }
- {
- \pgfpointscale { 0.5 }
- {
- \pgfpointadd
- { \__nicematrix_qpoint:n { ##1 } }
- { \__nicematrix_qpoint:n { \int_eval:n { ##1 + 1 } } }
- }
- }
- \endpgfpicture
- }
- }
\cs_new_protected:Npn \__nicematrix_find_extremities_of_line:nnnn #1 #2 #3 #4
{
\cs_set:cpn { __nicematrix _ dotted _ #1 - #2 } { }
@@ -3062,21 +3067,13 @@
{
\bool_if:NTF \l__nicematrix_initial_open_bool
{
- % \__nicematrix_qpoint:n { row - \int_use:N \l__nicematrix_initial_i_int }
- % \dim_set_eq:NN \l__nicematrix_y_initial_dim \pgf@y
\__nicematrix_open_y_initial_dim:
- % \__nicematrix_qpoint:n { col - \__nicematrix_succ:n \l__nicematrix_initial_j_int }
- % \dim_set_eq:NN \l__nicematrix_x_initial_dim \pgf@x
\__nicematrix_open_x_initial_dim:
}
{ \__nicematrix_set_initial_coords_from_anchor:n { south~west } }
\bool_if:NTF \l__nicematrix_final_open_bool
{
- % \__nicematrix_qpoint:n { row - \__nicematrix_succ:n \l__nicematrix_final_i_int }
- % \dim_set_eq:NN \l__nicematrix_y_final_dim \pgf@y
\__nicematrix_open_y_final_dim:
- % \__nicematrix_qpoint:n { col - \int_use:N \l__nicematrix_final_j_int }
- % \dim_set_eq:NN \l__nicematrix_x_final_dim \pgf@x
\__nicematrix_open_x_final_dim:
}
{ \__nicematrix_set_final_coords_from_anchor:n { north~east } }
@@ -3799,7 +3796,7 @@
\cs_new_protected:Npn \__nicematrix_arraycolor_code_after:nnn #1 #2 #3
{
\group_begin:
- \clist_set:Nn \l__nicematrix_except_corners_clist { #3 }
+ \clist_set:Nn \l__nicematrix_corners_clist { #3 }
\__nicematrix_compute_corners:
\int_step_inline:nn \c@iRow
{
@@ -3935,8 +3932,13 @@
\tl_if_in:NnTF \l_tmpa_tl { - }
{ \__nicematrix_cut_on_hyphen:w ##1 \q_stop }
{ \__nicematrix_cut_on_hyphen:w ##1 - ##1 \q_stop }
- \tl_if_empty:NT \l_tmpa_tl { \tl_set:Nn \l_tmpa_tl { 1 } }
- \tl_if_empty:NT \l_tmpb_tl
+ \bool_lazy_or:nnT
+ { \tl_if_blank_p:V \l_tmpa_tl }
+ { \str_if_eq_p:Vn \l_tmpa_tl { * } }
+ { \tl_set:Nn \l_tmpa_tl { 1 } }
+ \bool_lazy_or:nnT
+ { \tl_if_blank_p:V \l_tmpb_tl }
+ { \str_if_eq_p:Vn \l_tmpb_tl { * } }
{ \tl_set:Nx \l_tmpb_tl { \int_use:N \c@jCol } }
\int_compare:nNnT \l_tmpb_tl > \c@jCol
{ \tl_set:Nx \l_tmpb_tl { \int_use:N \c@jCol } }
@@ -3987,7 +3989,7 @@
}
\NewDocumentCommand \__nicematrix_columncolor_preamble { O { } m }
{
- \int_compare:nNnT \c@iRow = 1
+ \int_compare:nNnT \c@jCol > \g__nicematrix_col_total_int
{
\tl_gput_left:Nx \g_nicematrix_code_before_tl
{
@@ -4037,7 +4039,7 @@
{ \__nicematrix_test_vline_in_block:nnnn ##1 }
\seq_map_inline:Nn \g__nicematrix_pos_of_stroken_blocks_seq
{ \__nicematrix_test_vline_in_stroken_block:nnnn ##1 }
- \clist_if_empty:NF \l__nicematrix_except_corners_clist
+ \clist_if_empty:NF \l__nicematrix_corners_clist
\__nicematrix_test_in_corner_v:
\bool_if:NTF \g_tmpa_bool
{
@@ -4163,7 +4165,7 @@
{ \__nicematrix_test_hline_in_block:nnnn ##1 }
\seq_map_inline:Nn \g__nicematrix_pos_of_stroken_blocks_seq
{ \__nicematrix_test_hline_in_stroken_block:nnnn ##1 }
- \clist_if_empty:NF \l__nicematrix_except_corners_clist \__nicematrix_test_in_corner_h:
+ \clist_if_empty:NF \l__nicematrix_corners_clist \__nicematrix_test_in_corner_h:
\bool_if:NTF \g_tmpa_bool
{
\tl_if_empty:NT \l_tmpc_tl
@@ -4333,7 +4335,7 @@
\cs_new_protected:Npn \__nicematrix_compute_corners:
{
\seq_clear_new:N \l__nicematrix_empty_corner_cells_seq
- \clist_map_inline:Nn \l__nicematrix_except_corners_clist
+ \clist_map_inline:Nn \l__nicematrix_corners_clist
{
\str_case:nnF { ##1 }
{
@@ -4746,12 +4748,16 @@
}
\keys_define:nn { NiceMatrix / Block / FirstPass }
{
- l .code:n = \tl_set:Nn \l__nicematrix_pos_of_block_tl l ,
+ l .code:n = \tl_set:Nn \l__nicematrix_hpos_of_block_tl l ,
l .value_forbidden:n = true ,
- r .code:n = \tl_set:Nn \l__nicematrix_pos_of_block_tl r ,
+ r .code:n = \tl_set:Nn \l__nicematrix_hpos_of_block_tl r ,
r .value_forbidden:n = true ,
- c .code:n = \tl_set:Nn \l__nicematrix_pos_of_block_tl c ,
+ c .code:n = \tl_set:Nn \l__nicematrix_hpos_of_block_tl c ,
c .value_forbidden:n = true ,
+ t .code:n = \tl_set:Nn \l__nicematrix_vpos_of_block_tl t ,
+ t .value_forbidden:n = true ,
+ b .code:n = \tl_set:Nn \l__nicematrix_vpos_of_block_tl b ,
+ b .value_forbidden:n = true ,
color .tl_set:N = \l__nicematrix_color_tl ,
color .value_required:n = true ,
}
@@ -4776,10 +4782,10 @@
\int_compare:nNnTF \l_tmpb_int = 1
{
\tl_if_empty:NTF \l__nicematrix_cell_type_tl
- { \tl_set:Nn \l__nicematrix_pos_of_block_tl c }
- { \tl_set_eq:NN \l__nicematrix_pos_of_block_tl \l__nicematrix_cell_type_tl }
+ { \tl_set:Nn \l__nicematrix_hpos_of_block_tl c }
+ { \tl_set_eq:NN \l__nicematrix_hpos_of_block_tl \l__nicematrix_cell_type_tl }
}
- { \tl_set:Nn \l__nicematrix_pos_of_block_tl c }
+ { \tl_set:Nn \l__nicematrix_hpos_of_block_tl c }
\keys_set_known:nn { NiceMatrix / Block / FirstPass } { #3 }
\tl_set:Nx \l_tmpa_tl
{
@@ -4822,18 +4828,24 @@
\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 }
+ \bool_if:NT \g__nicematrix_rotate_bool { \tl_set:Nn \l__nicematrix_hpos_of_block_tl c }
\bool_if:NTF \l__nicematrix_NiceTabular_bool
{
- \exp_args:Nnx \begin { tabular }
- { @ { } \l__nicematrix_pos_of_block_tl @ { } }
+ \use:x
+ {
+ \exp_not:N \begin { tabular } [ \l__nicematrix_vpos_of_block_tl ]
+ { @ { } \l__nicematrix_hpos_of_block_tl @ { } }
+ }
#5
\end { tabular }
}
{
\c_math_toggle_token
- \exp_args:Nnx \begin { array }
- { @ { } \l__nicematrix_pos_of_block_tl @ { } }
+ \use:x
+ {
+ \exp_not:N \begin { array } [ \l__nicematrix_vpos_of_block_tl ]
+ { @ { } \l__nicematrix_hpos_of_block_tl @ { } }
+ }
#5
\end { array }
\c_math_toggle_token
@@ -4883,7 +4895,7 @@
\seq_gput_right:Nx \g__nicematrix_blocks_seq
{
\l_tmpa_tl
- { \exp_not:n { #3 } , \l__nicematrix_pos_of_block_tl }
+ { \exp_not:n { #3 } , \l__nicematrix_hpos_of_block_tl }
{
\box_use_drop:c
{ g__nicematrix_ block _ box _ \int_use:N \g__nicematrix_block_box_int _ box }
@@ -4906,9 +4918,12 @@
\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 @ { } }
+ { \tl_set:Nn \l__nicematrix_hpos_of_block_tl c }
+ \use:x
+ {
+ \exp_not:N \begin { tabular } [ \l__nicematrix_vpos_of_block_tl ]
+ { @ { } \l__nicematrix_hpos_of_block_tl @ { } }
+ }
#5
\end { tabular }
\group_end:
@@ -4919,10 +4934,15 @@
\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 }
+ { \tl_set:Nn \l__nicematrix_hpos_of_block_tl c }
\c_math_toggle_token
- \exp_args:Nnx \begin { array }
- { @ { } \l__nicematrix_pos_of_block_tl @ { } } #5 \end { array }
+ \use:x
+ {
+ \exp_not:N \begin { array } [ \l__nicematrix_vpos_of_block_tl ]
+ { @ { } \l__nicematrix_hpos_of_block_tl @ { } }
+ }
+ #5
+ \end { array }
\c_math_toggle_token
\group_end:
}
@@ -4944,12 +4964,16 @@
borders .value_required:n = true ,
line-width .dim_set:N = \l__nicematrix_line_width_dim ,
line-width .value_required:n = true ,
- l .code:n = \tl_set:Nn \l__nicematrix_pos_of_block_tl l ,
+ l .code:n = \tl_set:Nn \l__nicematrix_hpos_of_block_tl l ,
l .value_forbidden:n = true ,
- r .code:n = \tl_set:Nn \l__nicematrix_pos_of_block_tl r ,
+ r .code:n = \tl_set:Nn \l__nicematrix_hpos_of_block_tl r ,
r .value_forbidden:n = true ,
- c .code:n = \tl_set:Nn \l__nicematrix_pos_of_block_tl c ,
+ c .code:n = \tl_set:Nn \l__nicematrix_hpos_of_block_tl c ,
c .value_forbidden:n = true ,
+ t .code:n = \tl_set:Nn \l__nicematrix_vpos_of_block_tl t ,
+ t .value_forbidden:n = true ,
+ b .code:n = \tl_set:Nn \l__nicematrix_vpos_of_block_tl b ,
+ b .value_forbidden:n = true ,
unknown .code:n = \__nicematrix_error:n { Unknown~key~for~Block }
}
\cs_new_protected:Npn \__nicematrix_draw_blocks:
@@ -5122,7 +5146,7 @@
\pgfpointanchor
{ \__nicematrix_env: - #1 - #2 - block - short }
{
- \str_case:Vn \l__nicematrix_pos_of_block_tl
+ \str_case:Vn \l__nicematrix_hpos_of_block_tl
{
c { center }
l { west }
@@ -5134,7 +5158,7 @@
\pgfnode
{ rectangle }
{
- \str_case:Vn \l__nicematrix_pos_of_block_tl
+ \str_case:Vn \l__nicematrix_hpos_of_block_tl
{
c { base }
l { base~west }
@@ -5145,18 +5169,18 @@
}
{
\int_compare:nNnT { #2 } = 0
- { \tl_set:Nn \l__nicematrix_pos_of_block_tl r }
+ { \tl_set:Nn \l__nicematrix_hpos_of_block_tl r }
\bool_if:nT \g__nicematrix_last_col_found_bool
{
\int_compare:nNnT { #2 } = \g__nicematrix_col_total_int
- { \tl_set:Nn \l__nicematrix_pos_of_block_tl l }
+ { \tl_set:Nn \l__nicematrix_hpos_of_block_tl l }
}
\pgftransformshift
{
\pgfpointanchor
{ \__nicematrix_env: - #1 - #2 - block - short }
{
- \str_case:Vn \l__nicematrix_pos_of_block_tl
+ \str_case:Vn \l__nicematrix_hpos_of_block_tl
{
c { center }
l { west }
@@ -5168,7 +5192,7 @@
\pgfnode
{ rectangle }
{
- \str_case:Vn \l__nicematrix_pos_of_block_tl
+ \str_case:Vn \l__nicematrix_hpos_of_block_tl
{
c { center }
l { west }
@@ -6131,7 +6155,7 @@
\__nicematrix_msg_new:nn { bad~corner }
{
#1~is~an~incorrect~specification~for~a~corner~(in~the~keys~
- 'except-corners'~and~'hvlines-except-corners').~The~available~
+ 'corners'~and~'except-corners').~The~available~
values~are:~NW,~SW,~NE~and~SE.\\
If~you~go~on,~this~specification~of~corner~will~be~ignored.
}
@@ -6305,6 +6329,7 @@
code-for-first-row,~
code-for-last-col,~
code-for-last-row,~
+ corners,~
create-extra-nodes,~
create-medium-nodes,~
create-large-nodes,~
@@ -6314,7 +6339,6 @@
first-row,~
hlines,~
hvlines,~
- hvlines-except-corners,~
last-col,~
last-row,~
left-margin,~
@@ -6353,6 +6377,7 @@
code-for-last-row,~
colortbl-like,~
columns-width,~
+ corners,~
create-extra-nodes,~
create-medium-nodes,~
create-large-nodes,~
@@ -6363,7 +6388,6 @@
first-row,~
hlines,~
hvlines,~
- hvlines-except-corners,~
last-col,~
last-row,~
left-margin,~
@@ -6377,6 +6401,7 @@
rules~(with~the~subkeys~'color'~and~'width'),~
small,~
t,~
+ tabularnote,~
vlines,~
xdots/color,~
xdots/shorten~and~
@@ -6404,6 +6429,7 @@
code-for-last-row,~
colortbl-like,~
columns-width,~
+ corners,~
create-extra-nodes,~
create-medium-nodes,~
create-large-nodes,~
@@ -6414,7 +6440,6 @@
first-row,~
hlines,~
hvlines,~
- hvlines-except-corners,~
l,~
last-col,~
last-row,~
@@ -6455,6 +6480,7 @@
code-for-last-row,~
colortbl-like,~
columns-width,~
+ corners,~
create-extra-nodes,~
create-medium-nodes,~
create-large-nodes,~
@@ -6464,7 +6490,6 @@
first-row,~
hlines,~
hvlines,~
- hvlines-except-corners,~
last-col,~
last-row,~
left-margin,~
@@ -6477,6 +6502,7 @@
right-margin,~
rules~(with~the~subkeys~'color'~and~'width'),~
t,~
+ tabularnote,~
vlines,~
xdots/color,~
xdots/shorten~and~