summaryrefslogtreecommitdiff
path: root/Master
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2021-08-10 21:14:09 +0000
committerKarl Berry <karl@freefriends.org>2021-08-10 21:14:09 +0000
commit568066f46cf194676ba50742e218cb4bcf10ed88 (patch)
tree366cf7e46fa45dad8368ee0ba80dc3d707dec83d /Master
parent3eff08c9b4df299d023edbd474eb63b5d586baec (diff)
nicematrix (10aug21)
git-svn-id: svn://tug.org/texlive/trunk@60214 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master')
-rw-r--r--Master/texmf-dist/doc/latex/nicematrix/nicematrix-french.pdfbin466543 -> 470144 bytes
-rw-r--r--Master/texmf-dist/doc/latex/nicematrix/nicematrix-french.tex248
-rw-r--r--Master/texmf-dist/doc/latex/nicematrix/nicematrix.pdfbin1355018 -> 1377012 bytes
-rw-r--r--Master/texmf-dist/source/latex/nicematrix/nicematrix.dtx1105
-rw-r--r--Master/texmf-dist/tex/latex/nicematrix/nicematrix.sty434
5 files changed, 1185 insertions, 602 deletions
diff --git a/Master/texmf-dist/doc/latex/nicematrix/nicematrix-french.pdf b/Master/texmf-dist/doc/latex/nicematrix/nicematrix-french.pdf
index 6965309fe96..7a1973e08e3 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 d941d2f9f8a..7d7d915bc38 100644
--- a/Master/texmf-dist/doc/latex/nicematrix/nicematrix-french.tex
+++ b/Master/texmf-dist/doc/latex/nicematrix/nicematrix-french.tex
@@ -139,7 +139,7 @@ l'instruction habituelle : |\usepackage{nicematrix}|.
\bigskip
L'idée de \pkg{nicematrix} est de créer des nœuds \textsc{pgf} derrière les cases et les positions des filets des
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
+\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}.\footnote{Si vous utilisez Overleaf, Overleaf effectue
automatiquement le nombre de
@@ -200,19 +200,6 @@ 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}\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|.
-\begin{Verbatim}
-\usepackage[define-L-C-R]{nicematrix}
-\end{Verbatim}
-\textbf{Cette clé sera probablement supprimée dans une future version de
- \pkg{nicematrix}.}
\section{L'espace vertical entre les rangées}
@@ -512,7 +499,7 @@ $\begin{bNiceArray}{ccc|c}[margin]
\interitem
La commande |\Block| accepte en fait en premier argument optionnel (entre
-crochets) une liste de couples clé-valeur. Les clés sont les suivantes :
+crochets) une liste de couples \textsl{clé=valeur}. Les clés sont les suivantes :
\begin{itemize}
\item les clés |l|, |c| et |r| réglent le positionnement horizontal comme dit
précédemment ;
@@ -589,6 +576,10 @@ Les blocs mono-colonne ont un comportement spécial.
\item La largeur naturelle du contenu de ces blocs est prise en compte pour la
largeur de la colonne courante.
+\colorbox{yellow!50}{\textbf{Nouveau 6.0}}\enskip Dans les colonnes à largeur
+fixée (colonnes |w{...}{...}|, |p{...}|, |b{...}|, |m{...}| et |X|), le contenu
+du bloc est mis en forme comme un paragraphe de cette largeur.
+
\item La spécification d'alignement horizontal donnée par le type de
colonne (|c|, |r| ou |l|) est prise en compte pour le bloc (mais le bloc peut
avoir sa propre spécification d'alignement horizontal).
@@ -1307,8 +1298,8 @@ l'environnement.
\smallskip
De nouvelles commandes sont disponibles dans ce |\CodeBefore|:
-|\cellcolor|, |\rectanglecolor|, |\rowcolor|, |\columncolor|, |\rowcolors|
-|\chessboardcolors| et |\arraycolor|.\footnote{On pourra remarquer que, dans le
+|\cellcolor|, |\rectanglecolor|, |\rowcolor|, |\columncolor|, |\rowcolors|,
+|\rowlistcolors|, |\chessboardcolors| et |\arraycolor|.\footnote{On pourra remarquer que, dans le
\verb|\CodeBefore|, des nœuds PGF/Tikz de la forme \verb+(i-|j)+ correspondant
à la position des filets éventuels sont également accessibles : cf. p.~\pageref{noeuds-i}.}
\label{code-before}
@@ -1590,6 +1581,46 @@ Henri & 14 \\
+
+
+\bigskip
+\item \colorbox{yellow!50}{\textbf{Nouveau 6.0}}\enskip 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.
+
+\smallskip
+\begin{BVerbatim}[boxwidth=10cm,baseline=c]
+\begin{NiceTabular}{c}
+\CodeBefore
+ ~emphase#\rowlistcolors{1}{red!15,blue!15,green!15}@
+\Body
+Mathilde \\
+Pierre \\
+Paul \\
+Amélie \\
+Jacques \\
+Antoine \\
+Stéphanie \\
+\end{NiceTabular}
+\end{BVerbatim}
+\begin{NiceTabular}{c}
+\CodeBefore
+ \rowlistcolors{1}{red!15,blue!15,green!15}
+\Body
+Mathilde \\
+Pierre \\
+Paul \\
+Amélie \\
+Jacques \\
+Antoine \\
+Stéphanie \\
+\end{NiceTabular}
+
+\end{itemize}
+
\bigskip
On rappelle que toutes les commandes de coloriage que l'on vient de décrire ne
colorient pas les cases qui sont dans les «coins». Dans l'exemple suivant, on
@@ -1601,7 +1632,7 @@ utilise la clé |corners| pour demander de considérer le coin \emph{north east}
\begin{BVerbatim}[boxwidth=9cm,baseline=c]
\begin{NiceTabular}{cccccc}[~emphase#corners=NE@,margin,hvlines,first-row,first-col]
\CodeBefore
- ~emphase#\rowcolors{1}{blue!15}{}@
+ ~emphase#\rowlistcolors{1}{blue!15, }@
\Body
& 0 & 1 & 2 & 3 & 4 & 5 & 6 \\
0 & 1 \\
@@ -1615,7 +1646,7 @@ utilise la clé |corners| pour demander de considérer le coin \emph{north east}
\end{BVerbatim}
\begin{NiceTabular}{ccccccc}[corners=NE,margin,hvlines,first-row,first-col]
\CodeBefore
- \rowcolors{1}{blue!15}{}
+ \rowlistcolors{1}{blue!15, }
\Body
& 0 & 1 & 2 & 3 & 4 & 5 & 6 \\
0 & 1 \\
@@ -1628,7 +1659,6 @@ utilise la clé |corners| pour demander de considérer le coin \emph{north east}
\end{NiceTabular}
\end{scope}
-\end{itemize}
\bigskip
@@ -1776,9 +1806,11 @@ La commande |\rotate| est présentée p.~\pageref{rotate}.
\section{La largeur des colonnes}
\label{width}
+\subsection{Techniques de base}
+
Dans les environnements avec un préambule explicite (comme |{NiceTabular}|,
|{NiceArray}|, etc.), il est possible de fixer la largeur d'une colonne avec les
-lettres classiques |w| et |W| de l'extension \pkg{array}.
+lettres classiques |w|, |W|, |p|, |b| et |m| de l'extension \pkg{array}.
\medskip
\begin{BVerbatim}[baseline=c,boxwidth=9cm]
@@ -1797,8 +1829,9 @@ Rio & Tokyo & Oslo
\bigskip
Dans les environnements de \pkg{nicematrix}, il est aussi possible de fixer la
-largeur \emph{minimale} de toutes les colonnes de la matrice directement avec
-l'option |columns-width|.
+largeur \emph{minimale} de toutes les colonnes (à l'exception des éventuelles
+colonnes extérieures: cf. p.~\pageref{exterior}) directement avec l'option
+|columns-width|.
\medskip
\begin{BVerbatim}[baseline=c,boxwidth=10cm]
@@ -1824,7 +1857,7 @@ supprimé (il est évidemment possible de le supprimer en mettant |\tabcolsep| o
Il est possible de donner la valeur spéciale |auto| à l'option |columns-width|:
toutes les colonnes du tableau auront alors une largeur égale à la largeur de la
case la plus large du tableau.\footnote{Le résultat est atteint dès la première
- compilation (mais PGF/Tikz écrivant des informations dans le fichier |.aux|,
+ compilation (mais PGF/Tikz écrivant des informations dans le fichier |aux|,
un message demandant une deuxième compilation apparaîtra).}\par\nobreak
\medskip
@@ -1843,7 +1876,7 @@ $\begin{pNiceMatrix}[columns-width = auto]
\bigskip
Sans surprise, il est possible de fixer la largeur minimale de toutes les
-colonnes de toutes les matrices dans une certaine portion de document avec la
+colonnes de tous les tableaux dans une certaine portion de document avec la
commande |\NiceMatrixOptions|.\par\nobreak
\medskip
@@ -1907,12 +1940,56 @@ $\begin{array}{c}
\end{NiceMatrixBlock}
+\subsection{Les colonnes X}
+
+\colorbox{yellow!50}{\textbf{Nouveau 6.0}}
+
+L'environnement |{NiceTabular}| propose aussi des colonnes |X| similaires à
+celles proposées par l'environnement |{tabularx}| de l'extension éponyme.
+
+La valeur requise par la largeur du tableau peut être passée en argument de la
+clé |width|. La valeur initiale de ce paramètre est |\linewidth|.
+
+Pour se rapprocher davantage de l'environnement |{tabularx}|, \pkg{nicematrix}
+propose aussi un environnement |{NiceTabularX}| qui prend en premier argument
+(obligatoire) la largeur voulue pour le tableau.
+
+Comme avec les extensions \pkg{tabu} et \pkg{tabularray}, le spécificateur |X|
+accepte entre crochets un argument optionnel qui est une liste de clés.
+\begin{itemize}
+\item On peut spécifier un poids pour la colonne en mettant directement un
+entier comme argument du spécificateur |X|. Par exemple, une colonne |X[2]| aura
+une largeur double de celle d'une colonne |X| (qui a un poids de 1).
+\item On peut spécifier l'alignement horizontal avec une des lettres |l|, |c| et
+|r| (qui insèrent respectivement |\raggedright|, |\centering| et |\raggedleft|
+suivi de |\arraybackslash|).
+\item On peut spécifier l'alignement vertical avec l'une des lettres |t| (alias
+|p|), |m| et |b| (qui construisent respectivement des colonnes de types |p|, |m|
+et |b|). La valeur par défaut est |t|.
+\end{itemize}
+
+\begin{Verbatim}
+\begin{NiceTabular}~emphase#[width=9cm]{X[2,l]X[l]}@[hvlines]
+Un texte relativement long qui tient sur plusieurs lignes. &
+Un texte relativement long qui tient sur plusieurs lignes. \\
+Un texte plus court. & Un texte plus court.
+\end{NiceTabular}
+\end{Verbatim}
+
+
+\begin{center}
+\begin{NiceTabular}[width=9cm]{X[2,l]X[l]}[hvlines]
+Un texte relativement long qui tient sur plusieurs lignes. &
+Un texte relativement long qui tient sur plusieurs lignes. \\
+Un texte plus court. & Un texte plus court.
+\end{NiceTabular}
+\end{center}
\bigskip
\section{Les rangées et colonnes extérieures}
Les environnements de \pkg{nicematrix} permettent de composer des rangées et des
colonnes «extérieures» grâce aux options |first-row|, |last-row|, |first-col| et
-|last-col|.
+|last-col|. C'est particulièrement intéressant pour les matrices (mathématiques).
\label{exterior}
Si elle est présente, la «première rangée» (extérieure) est numérotée par $0$
@@ -1970,7 +2047,7 @@ tableau. L'analyse du contenu de l'environnement donne le nombre de rangées
(mais pas le nombre de colonnes).
\item Dans les autres cas, \pkg{nicematrix} détermine le nombre de rangées et de
-colonnes à la première compilation et l'écrit dans le fichier |.aux| pour
+colonnes à la première compilation et l'écrit dans le fichier |aux| pour
pouvoir l'utiliser à la compilation suivante.
\textsl{Néanmoins, il est possible de donner le numéro de la dernière rangée et
@@ -2466,7 +2543,7 @@ Pour la clarté, dans la suite, on utilisera ces noms-là.
\smallskip
L'option |xdots/color| indique bien entendu la couleur de la ligne tracée. On
remarquera néanmoins que les lignes tracées dans les rangées et colonnes
-extérieures (décrites plus loin) bénificient d'un régime spécial : cf.
+extérieures (décrites plus loin) bénéficient d'un régime spécial : cf.
p.~\pageref{exterior}.
@@ -2545,8 +2622,8 @@ 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, 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|
+et par les clés |vlines|, |hlines|, |hvlines| et |hvlines-except-borders| 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
@@ -2707,7 +2784,7 @@ $\begin{NiceArray}{ccc@{\hspace{1.5em}}c}[cell-space-limits=2pt,margin]
\bigskip
\colorbox{yellow!50}{\bfseries Nouveau 5.18}\enskip La commande |\SubMatrix|
accepte en fait également deux arguments optionnels spécifiés par les symboles
-traditionnels |^| et |_| pour des élements en exposant et en indice.
+traditionnels |^| et |_| pour des éléments en exposant et en indice.
\medskip
\begin{scope}
@@ -3184,14 +3261,14 @@ Pour un exemple de personnalisation des notes de tableau, voir p.~\pageref{ex:no
\subsection{Utilisation de \{NiceTabular\} avec threeparttable}
-Si vous souhaitez utiliser l'environnement |{NiceTabular}| ou |{NiceTabular*}|
-dans un environnement |{threeparttable}| de l'extension éponyme, vous devez
-patcher |{threeparttable}| avec le code suivant (avec une version de LaTeX
-postérieure à 2020/10/01).
+Si vous souhaitez utiliser les environnements |{NiceTabular}|, |{NiceTabular*}|
+ou |{NiceTabularX}| dans un environnement |{threeparttable}| de l'extension
+éponyme, vous devez patcher l'environnement |{threeparttable}| avec le code
+suivant (avec une version de LaTeX postérieure à 2020/10/01).
\begin{Verbatim}[commandchars=\~\#\!]
\makeatletter
\AddToHook{env/threeparttable/begin}
- {\TPT@hookin{NiceTabular}\TPT@hookin{NiceTabular*}}
+ {\TPT@hookin{NiceTabular}\TPT@hookin{NiceTabular*}\TPT@hookin{NiceTabularX}}
\makeatother
\end{Verbatim}
@@ -3369,7 +3446,7 @@ colonne courante\footnote{On rappelle que le numéro de la «première rangée»
existe) est $0$ également.}. Bien entendu, l'utilisateur ne doit pas modifier
les valeurs de ces compteurs qui sont utilisés en interne par \pkg{nicematrix}.
-Dans le |code-before| (cf. p. \pageref{code-before}) et dans le |\CodeAfter|
+Dans le |\CodeBefore| (cf. p. \pageref{code-before}) et dans le |\CodeAfter|
(cf. p. \pageref{code-after}), |iRow| représente le nombre total de rangées
(hors éventuelles rangées extérieures) et |jCol| le nombre total de colonnes
(hors potentielles colonnes extérieures).
@@ -3412,8 +3489,8 @@ nommées |\AutoNiceMatrix|, |\pAutoNiceMatrix|, |\bAutoNiceMatrix|,
Chacune de ces commandes prend deux arguments obligatoires : le premier est la
taille de la matrice, sous la forme $n$-$p$, où $n$ est le nombre de rangées et
$p$ est le nombre de colonnes et le deuxième est le motif (c'est-à-dire
-simplement des tokens qui seront insérés dans chaque case de la matrice,
-exceptées celles des éventuelles rangées et colonnes extérieures).
+simplement des tokens qui seront insérés dans chaque case de la matrice).
+
\medskip
\begin{Verbatim}
@@ -4003,78 +4080,99 @@ L'extension \pkg{nicematrix} fournit deux variables internes mais publiques\foot
\end{itemize}
\medskip
-Ces variables constituent le code du «|code-before|» et du «|code-after|». Le
-développeur peut donc les utiliser pour y ajouter du code à partir d'une case
-du tableau (l'affectation devra être globale, ce qui permettra de sortir de la
-case, qui est un groupe au sens de TeX).
+Ces variables constituent le code du «|code-before|» (que l'on rentre souvent
+avec la syntaxte utilisant |\CodeBefore| et |\Body| en début d'environnement et
+du «|code-after|» (que l'on rentre souvent en fin d'environnement après le
+mot-clé |\CodeAfter|). Le développeur peut donc les utiliser pour y ajouter du
+code à partir d'une case du tableau (l'affectation devra être globale, ce qui
+permettra de sortir de la case, qui est un groupe au sens de TeX).
\medskip
On remarquera que l'utilisation de |\g_nicematrix_code_before_tl| nécessite une
compilation supplémentaire (car les instructions sont écrites dans le fichier
|aux| pour être utilisées à la compilation suivante).
-\bigskip
-\emph{Example} : On souhaite écrire une commande |\hatchcell| pour hachurer la
-case courante (avec un argument optionnel entre crochets pour la couleur des
-hachures). Il est possible de programmer une telle commande |\hatchcell| comme
-suit, en utilisant explicitement la variable publique
-|\g_nicematrix_code_before_tl| (ce code nécessite le chargement préalable de la
-bibliothèque Tikz \pkg{patterns} : |\usetikzlibrary{patterns}|).
+
+
+
+\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
+couples \textsl{clé}-\textsl{valeur} qui sera passée à Tikz avant que la croix
+ne soit tracée.
+
+
+On peut alors programmer cette commande |\crossbox| de la manière suivante, qui
+utilise explicitement la variable publique |\g_nicematrix_code_after_tl|.
\begin{scope}
\fvset{commandchars=\§\¤\μ}
\begin{Verbatim}
\ExplSyntaxOn
-\cs_new_protected:Nn \__pantigny_hatch:nnn
+\cs_new_protected:Nn \__pantigny_crossbox:nnn
{
- \tikz \fill [ pattern = north~west~lines , pattern~color = #3 ]
- ( #1 -| #2) rectangle ( \int_eval:n { #1 + 1 } -| \int_eval:n { #2 + 1 } ) ;
+ \tikz \draw [ #3 ]
+ ( #1 -| \int_eval:n { #2 + 1 } ) -- ( \int_eval:n { #1 + 1 } -| #2 )
+ ( #1 -| #2 ) -- ( \int_eval:n { #1 + 1 } -| \int_eval:n { #2 + 1 } ) ;
}
-\NewDocumentCommand \hatchcell { ! O { black } }
+\NewDocumentCommand \crossbox { ! O { } }
{
- \tl_gput_right:Nx §emphase¤\g_nicematrix_code_before_tlμ
- { \__pantigny_hatch:nnn { \arabic { iRow } } { \arabic { jCol } } { #1 } }
+ \tl_gput_right:Nx §emphase¤\g_nicematrix_code_after_tlμ
+ {
+ \__pantigny_crossbox:nnn
+ { \int_use:c { c@iRow } }
+ { \int_use:c { c@jCol } }
+ { \exp_not:n { #1 } }
+ }
}
\ExplSyntaxOff
\end{Verbatim}
\end{scope}
+
\ExplSyntaxOn
-\cs_new_protected:Nn \__pantigny_hatch:nnn
+\cs_new_protected:Nn \__pantigny_crossbox:nnn
{
- \tikz \fill [ pattern = north~west~lines , pattern~color = #3 ]
- ( #1 -| #2 ) rectangle ( \int_eval:n { #1 + 1 } -| \int_eval:n { #2 + 1 } ) ;
+ \tikz \draw [ #3 ]
+ ( #1 -| \int_eval:n { #2 + 1 } ) -- ( \int_eval:n { #1 + 1 } -| #2 )
+ ( #1 -| #2 ) -- ( \int_eval:n { #1 + 1 } -| \int_eval:n { #2 + 1 } ) ;
}
-\NewDocumentCommand \hatchcell { ! O { black } }
+
+\NewDocumentCommand \crossbox { ! O { } }
{
- \tl_gput_right:Nx \g_nicematrix_code_before_tl
- { \__pantigny_hatch:nnn { \arabic { iRow } } { \arabic { jCol } } { #1 } }
+ \tl_gput_right:Nx \g_nicematrix_code_after_tl
+ {
+ \__pantigny_crossbox:nnn
+ { \int_use:c { c@iRow } }
+ { \int_use:c { c@jCol } }
+ { \exp_not:n { #1 } }
+ }
}
\ExplSyntaxOff
-
-
\bigskip
-Voici un exemple d'utilisation.
+Voici un exemple d'utilisation :
\medskip
\begin{BVerbatim}[baseline=c,boxwidth=9cm]
\begin{NiceTabular}{ccc}[hvlines]
-Tokyo & Paris & Londres \\
-Lima & ~emphase#\hatchcell[blue!30]@Oslo & Miami \\
-Los Angeles & Madrid & Rome
+merlan & requin & cabillaud \\
+baleine & ~emphase#\crossbox[red]@ & morue \\
+mante & raie & poule
\end{NiceTabular}
\end{BVerbatim}
\begin{NiceTabular}{ccc}[hvlines]
-Tokyo & Paris & Londres \\
-Lima & \hatchcell[blue!30]Oslo & Miami \\
-Los Angeles & Madrid & Rome
+merlan & requin & cabillaud \\
+baleine & \crossbox[red] & morue \\
+mante & raie & poule
\end{NiceTabular}
+
+
\section{Remarques techniques}
Première remarque : l'extension \pkg{nicematrix} doit être chargée après
@@ -4836,13 +4934,13 @@ a_{41} & a_{42} & a_{43} & \Block[draw]{}{a_{44}} \\
On remarquera que les traits que l'on vient de tracer sont dessinés \emph{après}
la matrice sans modifier la position des composantes de celle-ci. En revanche,
-les traits tracés par |\hline|, |\Hline|, le spécificateur «\verb+|+» ou les options
-|hlines|, |vlines| et |hvlines| «écartent» les composantes de la
-matrice.\footnote{Pour la commande |\cline|, voir la remarque
+les traits tracés par |\hline|, |\Hline|, le spécificateur «\verb+|+» ou les
+options |hlines|, |vlines|, |hvlines| et |hvlines-except-borders| «écartent» les
+composantes de la matrice.\footnote{Pour la commande |\cline|, voir la remarque
p.~\pageref{remark-cline}.}
\vspace{1cm}
-Il est possible de colorier une rangée avec |\rowcolor| dans le |code-before|
+Il est possible de colorier une rangée avec |\rowcolor| dans le |\CodeBefore|
(ou avec |\rowcolor| dans une case de la rangée si on utilise la clé
|colortbl-like| − même si \pkg{colortbl} n'est pas chargé).
diff --git a/Master/texmf-dist/doc/latex/nicematrix/nicematrix.pdf b/Master/texmf-dist/doc/latex/nicematrix/nicematrix.pdf
index db334606dab..12158c89540 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 095a7763900..f2ecb695bc3 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.19}
-\def\myfiledate{2021/07/23}
+\def\myfileversion{6.0}
+\def\myfiledate{2021/08/10}
%
%
%<*batchfile>
@@ -188,7 +188,7 @@ version 2005/12/01 or later.
% The idea of \pkg{nicematrix} is to create \textsc{pgf} nodes under the cells
% and the positions of the rules of the tabular created by \pkg{array} and to
% 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
+% 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}.\footnote{If you use Overleaf, Overleaf will do automatically
% the right number of compilations.}
@@ -250,18 +250,6 @@ version 2005/12/01 or later.
% 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}\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
-% environments of \pkg{nicematrix}. If we want to be able to go on using these
-% letters, \pkg{nicematrix} must be loaded with the option |define-L-C-R|.
-% \begin{Verbatim}
-% \usepackage[define-L-C-R]{nicematrix}
-% \end{Verbatim}
-% \textbf{This key will probably be deleted in a future version of
-% \pkg{nicematrix}.}
%
% \section{The vertical space between the rows}
%
@@ -633,6 +621,10 @@ version 2005/12/01 or later.
% \item The natural width of the contents of these blocks is taken into account
% for the width of the current column.
%
+% \colorbox{yellow!50}{\textbf{New 6.0}}\enskip In the columns with a fixed
+% width (columns |w{...}{...}|, |p{...}|, |b{...}|, |m{...}| and |X|), the
+% content of the block is formatted as a paragraph of that width.
+%
% \item The specification of the horizontal position provided by the type of
% column (|c|, |r| or |l|) is taken into account for the blocks.
%
@@ -1313,9 +1305,9 @@ version 2005/12/01 or later.
%
% New commands are available in that |\CodeBefore|: |\cellcolor|,
% |\rectanglecolor|, |\rowcolor|, |\columncolor|, |\rowcolors|,
-% |\chessboardcolors| and |arraycolor|.\footnote{Remark that, in the
-% \verb|\CodeBefore|, PGF/Tikz nodes of the form ``\verb+(i-|j)+'' are also
-% available to indicate the position to the potential rules:
+% |\rowlistcolors|, |\chessboardcolors| and |arraycolor|.\footnote{Remark that,
+% in the \verb|\CodeBefore|, PGF/Tikz nodes of the form ``\verb+(i-|j)+'' are
+% also available to indicate the position to the potential rules:
% cf.~p.~\pageref{nodes-i}.}
% \label{code-before}
%
@@ -1582,19 +1574,58 @@ version 2005/12/01 or later.
% \end{scope}
%
%
+%
+%
+% \bigskip
+% \item \colorbox{yellow!50}{\textbf{New 6.0}}\enskip 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.
+% \end{itemize}
+%
+% \smallskip
+% \begin{BVerbatim}[boxwidth=10cm,baseline=c]
+% \begin{NiceTabular}{c}
+% \CodeBefore
+% ~emphase#\rowlistcolors{1}{red!15,blue!15,green!15}@
+% \Body
+% Peter \\
+% James \\
+% Abigail \\
+% Elisabeth \\
+% Claudius \\
+% Jane \\
+% Alexandra \\
+% \end{NiceTabular}
+% \end{BVerbatim}
+% \begin{NiceTabular}{c}
+% \CodeBefore
+% \rowlistcolors{1}{red!15,blue!15,green!15}
+% \Body
+% Peter \\
+% James \\
+% Abigail \\
+% Elisabeth \\
+% Claudius \\
+% Jane \\
+% Alexandra \\
+% \end{NiceTabular}
+%
+%
% \medskip
% We recall that all the color commands we have described don't color the cells
% which are in the ``corners''. In the following example, we use the key
% |corners| to require the determination of the corner \emph{north east} (NE).
%
-%
%\medskip
% \begin{scope}
% \hfuzz=11cm
% \begin{BVerbatim}[boxwidth=9cm,baseline=c]
% \begin{NiceTabular}{cccccc}[~emphase#corners=NE@,margin,hvlines,first-row,first-col]
% \CodeBefore
-% ~emphase#\rowcolors{1}{blue!15}{}@
+% ~emphase#\rowlistcolors{1}{blue!15, }@
% \Body
% & 0 & 1 & 2 & 3 & 4 & 5 & 6 \\
% 0 & 1 \\
@@ -1608,7 +1639,7 @@ version 2005/12/01 or later.
% \end{BVerbatim}
% \begin{NiceTabular}{ccccccc}[corners=NE,margin,hvlines,first-row,first-col]
% \CodeBefore
-% \rowcolors{1}{blue!15}{}
+% \rowlistcolors{1}{blue!15, }
% \Body
% & 0 & 1 & 2 & 3 & 4 & 5 & 6 \\
% 0 & 1 \\
@@ -1621,8 +1652,6 @@ version 2005/12/01 or later.
% \end{NiceTabular}
% \end{scope}
%
-% \end{itemize}
-%
%
% \bigskip
% One should remark that all the previous commands are compatible with the
@@ -1765,9 +1794,11 @@ version 2005/12/01 or later.
% \section{The width of the columns}
% \label{width}
%
+% \subsection{Basic tools}
+%
% In the environments with an explicit preamble (like |{NiceTabular}|,
% |{NiceArray}|, etc.), it's possible to fix the width of a given column with
-% the standard letters |w| and |W| of the package \pkg{array}.
+% the standard letters |w|, |W|, |p|, |b| and |m| of the package \pkg{array}.
%
% \medskip
% \begin{BVerbatim}[baseline=c,boxwidth=9cm]
@@ -1786,7 +1817,8 @@ version 2005/12/01 or later.
%
% \bigskip
% In the environments of \pkg{nicematrix}, it's also possible to fix the \emph{minimal}
-% width of all the columns of an array directly with the key |columns-width|.
+% width of all the columns (excepted the potential exterior columns: cf. p.~\pageref{exterior}) directly
+% with the key |columns-width|.
%
% \medskip
% \begin{BVerbatim}[baseline=c,boxwidth=10cm]
@@ -1812,7 +1844,7 @@ version 2005/12/01 or later.
% It's possible to give the special value |auto| to the option |columns-width|:
% all the columns of the array will have a width equal to the widest cell of the
% array.\footnote{The result is achieved with only one compilation (but PGF/Tikz
-% will have written informations in the |.aux| file and a message requiring a
+% will have written informations in the |aux| file and a message requiring a
% second compilation will appear).}\par\nobreak
%
% \medskip
@@ -1831,7 +1863,7 @@ version 2005/12/01 or later.
%
% \bigskip
% Without surprise, it's possible to fix the minimal width of the columns of all
-% the matrices of a current scope with the command
+% the arrays of a current scope with the command
% |\NiceMatrixOptions|.\par\nobreak
%
% \medskip
@@ -1892,13 +1924,57 @@ version 2005/12/01 or later.
% \end{array}$
% \end{NiceMatrixBlock}
%
+% \subsection{The columns X}
+%
+% \colorbox{yellow!50}{\textbf{New 6.0}}
+%
+% The environment |{NiceTabular}| provides |X| columns similar to those provided
+% by the environment |{tabularx}| of the eponymous package.
+%
+% The required width of the tabular may be specified with the key |width|. The
+% initial value of this parameter is |\linewidth|.
+%
+% For sake of similarity with the environment |{tabularx}|, \pkg{nicematrix}
+% also provides an environment |{NiceTabularX}| with a first mandatory argument
+% which is the width of the tabular.
+%
+% As with the packages \pkg{tabu} and \pkg{tabularray}, the specifier |X| takes
+% in an optional argument (between square brackets) which is a list of keys.
+% \begin{itemize}
+% \item It's possible to give a weight for the column by providing an integer
+% directly as argument of the specifier |X|. For example, a column |X[2]| will
+% have a width double of the width of a column |X| (which has a weight equal to $1$).
+% \item It's possible to specify an horizontal alignment with one of the
+% letters |l|, |c| and |r| (which inserts respectively |\raggedright|,
+% |\centering| and |\raggedleft| followed by |\arraybackslash|).
+% \item It's possible to specify a vertical alignement with one of the keys
+% |t| (alias |p|), |m| and |b| (which construct respectively columns of type
+% |p|, |m| and |b|). The default value is |t|.
+% \end{itemize}
+%
+% \begin{Verbatim}
+% \begin{NiceTabular}~emphase#[width=9cm]{X[2,l]X[l]}@[hvlines]
+% a rather long text which fits on several lines
+% & a rather long text which fits on several lines \\
+% a shorter text & a shorter text
+% \end{NiceTabular}
+% \end{Verbatim}
+%
+% \begin{center}
+% \begin{NiceTabular}[width=9cm]{X[2,l]X[l]}[hvlines]
+% a rather long text which fits on several lines
+% & a rather long text which fits on several lines \\
+% a shorter text & a shorter text
+% \end{NiceTabular}
+% \end{center}
%
% \bigskip
% \section{The exterior rows and columns}
%
% The options |first-row|, |last-row|, |first-col| and |last-col| allow the
% composition of exterior rows and columns in the environments of
-% \pkg{nicematrix}.
+% \pkg{nicematrix}. It's particularly interesting for the (methematical)
+% matrices.
% \label{exterior}
%
% A potential ``first row'' (exterior) has the number $0$ (and not $1$). Idem
@@ -2007,7 +2083,7 @@ version 2005/12/01 or later.
% \emph{Remarks}
% \begin{itemize}[beginpenalty=10000]
% \item As shown in the previous example, the horizontal and vertical rules
-% doesn't extend in the exterior rows and columns.
+% don't extend in the exterior rows and columns.
%
% However, if one wishes to define new specifiers for columns in order to draw
% vertical rules (for example thicker than the standard rules), he should
@@ -2015,7 +2091,7 @@ version 2005/12/01 or later.
% page~\pageref{OnlyMainNiceMatrix}.
%
% \item A specification of color present in |code-for-first-row| also applies to
-% a dotted line draw in this exterior ``first row'' (excepted if a value has
+% a dotted line drawn in that exterior ``first row'' (excepted if a value has
% been given to |xdots/color|). Idem for the other exterior rows and columns.
%
% \item Logically, the potential option |columns-width| (described
@@ -2053,7 +2129,7 @@ version 2005/12/01 or later.
% horizontal line; for |\Vdots|, it's a vertical line and for |\Ddots| and
% |\Iddots| diagonal ones. It's possible to change the color of these lines
% with the option |color|.\footnote{It's also possible to change the color of
-% all theses dotted lines with the option |xdots/color| (\textsl{xdots} to
+% all these dotted lines with the option |xdots/color| (\textsl{xdots} to
% remind that it works for |\Cdots|, |\Ldots|, |\Vdots|, etc.): cf. p.
% \pageref{customisation}.}\par\nobreak
%
@@ -2513,10 +2589,11 @@ 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, 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.}
+% preamble, by the command |\Hline| and by the keys |hlines|, |vlines|,
+% |hvlines| and |hvlines-except-borders| 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]
@@ -3140,14 +3217,14 @@ version 2005/12/01 or later.
% \subsection{Use of \{NiceTabular\} with threeparttable}
%
%
-% If you wish to use the environment |{NiceTabular}| or |{NiceTabular*}| in an
-% environment |{threeparttable}| of the eponymous package, you have to patch the
-% environment |{threeparttable}| with the following code (with a version of
-% LaTeX at least 2020/10/01).
+% If you wish to use the environment |{NiceTabular}|, |{NiceTabular*}|
+% |{NiceTabularX}|in an environment |{threeparttable}| of the eponymous package,
+% you have to patch the environment |{threeparttable}| with the following code
+% (with a version of LaTeX at least 2020/10/01).
% \begin{Verbatim}[commandchars=\~\#\!]
% \makeatletter
% \AddToHook{env/threeparttable/begin}
-% {\TPT@hookin{NiceTabular}\TPT@hookin{NiceTabular*}}
+% {\TPT@hookin{NiceTabular}\TPT@hookin{NiceTabular*}\TPT@hookin{NiceTabularX}}
% \makeatother
% \end{Verbatim}
%
@@ -3373,8 +3450,7 @@ version 2005/12/01 or later.
% These commands take in two mandatory arguments. The first is the format of the
% matrix, with the syntax $n$-$p$ where $n$ is the number of rows and $p$ the
% number of columns. The second argument is the pattern (it's a list of tokens
-% which are inserted in each cell of the constructed matrix, excepted in the
-% cells of the potential exterior rows and columns).
+% which are inserted in each cell of the constructed matrix).
%
% \medskip
% \begin{Verbatim}
@@ -3953,9 +4029,11 @@ version 2005/12/01 or later.
%
% \medskip
% These variables contain the code of what we have called the ``|code-before|''
-% and the ``|code-after|''. The developper can use them to add code from a cell
-% of the array (the affectation must be global, allowing to exit the cell, which
-% is a TeX group).
+% (usually specified at the beginning of the environment with the syntax using
+% the keywords |\CodeBefore| and |\Body|) and the ``|code-after|'' (usually
+% specified at the end of the environment after the keyword |\CodeAfter|). The
+% developper can use them to add code from a cell of the array (the affectation
+% must be global, allowing to exit the cell, which is a TeX group).
%
% \medskip
% One should remark that the use of |\g_nicematrix_code_before_tl| needs one
@@ -3963,27 +4041,34 @@ version 2005/12/01 or later.
% used during the next run).
%
% \bigskip
-% \emph{Example} : We want to write a command |\hatchcell| to hatch the current
-% cell (with an optional argument between brackets for the color). It's possible
-% to program such command |\hatchcell| as follows, explicitely using the public
-% variable |\g_nicematrix_code_before_tl| (this code requires the Tikz library
-% \pkg{patterns}: |\usetikzlibrary{patterns}|).
+% \emph{Example} : We want to write a command |\crossbox| to draw a cross in the
+% current cell. This command will take in an optional argument between square
+% brackets for a list of pairs \textsl{key}-\textsl{value} which will be given to
+% Tikz before the drawing.
%
+% It's possible to program such command |\crossbox| as follows, explicitely
+% using the public variable |\g_nicematrix_code_after_tl|.
%
% \begin{scope}
% \fvset{commandchars=\§\¤\μ}
% \begin{Verbatim}
-%\ExplSyntaxOn
-% \cs_new_protected:Nn \__pantigny_hatch:nnn
+% \ExplSyntaxOn
+% \cs_new_protected:Nn \__pantigny_crossbox:nnn
% {
-% \tikz \fill [ pattern = north~west~lines , pattern~color = #3 ]
-% ( #1 -| #2) rectangle ( \int_eval:n { #1 + 1 } -| \int_eval:n { #2 + 1 } ) ;
+% \tikz \draw [ #3 ]
+% ( #1 -| \int_eval:n { #2 + 1 } ) -- ( \int_eval:n { #1 + 1 } -| #2 )
+% ( #1 -| #2 ) -- ( \int_eval:n { #1 + 1 } -| \int_eval:n { #2 + 1 } ) ;
% }
%
-% \NewDocumentCommand \hatchcell { ! O { black } }
+% \NewDocumentCommand \crossbox { ! O { } }
% {
-% \tl_gput_right:Nx §emphase¤\g_nicematrix_code_before_tlμ
-% { \__pantigny_hatch:nnn { \arabic { iRow } } { \arabic { jCol } } { #1 } }
+% \tl_gput_right:Nx §emphase¤\g_nicematrix_code_after_tlμ
+% {
+% \__pantigny_crossbox:nnn
+% { \int_use:c { c@iRow } }
+% { \int_use:c { c@jCol } }
+% { \exp_not:n { #1 } }
+% }
% }
% \ExplSyntaxOff
% \end{Verbatim}
@@ -3991,38 +4076,45 @@ version 2005/12/01 or later.
%
%
% \ExplSyntaxOn
-% \cs_new_protected:Nn \__pantigny_hatch:nnn
+% \cs_new_protected:Nn \__pantigny_crossbox:nnn
% {
-% \tikz \fill [ pattern = north~west~lines , pattern~color = #3 ]
-% ( #1 -| #2 ) rectangle ( \int_eval:n { #1 + 1 } -| \int_eval:n { #2 + 1 } ) ;
+% \tikz \draw [ #3 ]
+% ( #1 -| \int_eval:n { #2 + 1 } ) -- ( \int_eval:n { #1 + 1 } -| #2 )
+% ( #1 -| #2 ) -- ( \int_eval:n { #1 + 1 } -| \int_eval:n { #2 + 1 } ) ;
% }
%
-% \NewDocumentCommand \hatchcell { ! O { black } }
+%
+% \NewDocumentCommand \crossbox { ! O { } }
% {
-% \tl_gput_right:Nx \g_nicematrix_code_before_tl
-% { \__pantigny_hatch:nnn { \arabic { iRow } } { \arabic { jCol } } { #1 } }
+% \tl_gput_right:Nx \g_nicematrix_code_after_tl
+% {
+% \__pantigny_crossbox:nnn
+% { \int_use:c { c@iRow } }
+% { \int_use:c { c@jCol } }
+% { \exp_not:n { #1 } }
+% }
% }
% \ExplSyntaxOff
%
-%
% \bigskip
-% Here is an example of use:
+% Here is an example of utilisation:
%
% \medskip
% \begin{BVerbatim}[baseline=c,boxwidth=9cm]
% \begin{NiceTabular}{ccc}[hvlines]
-% Tokyo & Paris & London \\
-% Lima & ~emphase#\hatchcell[blue!30]@Oslo & Miami \\
-% Los Angeles & Madrid & Roma
+% merlan & requin & cabillaud \\
+% baleine & ~emphase#\crossbox[red]@ & morue \\
+% mante & raie & poule
% \end{NiceTabular}
% \end{BVerbatim}
% \begin{NiceTabular}{ccc}[hvlines]
-% Tokyo & Paris & London \\
-% Lima & \hatchcell[blue!30]Oslo & Miami \\
-% Los Angeles & Madrid & Roma
+% merlan & requin & cabillaud \\
+% baleine & \crossbox[red] & morue \\
+% mante & raie & poule
% \end{NiceTabular}
%
%
+%
% \section{Technical remarks}
%
% \subsection{Definition of new column types}
@@ -4076,7 +4168,7 @@ version 2005/12/01 or later.
%
% \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
+% |\Ddots| and not the lines created by a command |\line| in the |\CodeAfter|.} of a
% same array are ``parallelized''. That means that the first diagonal line is
% drawn and, then, the other lines are drawn parallel to the first one (by
% rotation around the left-most extremity of the line). That's why the position
@@ -4233,7 +4325,7 @@ version 2005/12/01 or later.
%
%
% \bigskip
-% the package \pkg{nicematrix} is not compatible with the class \cls{ieeeaccess}
+% The package \pkg{nicematrix} is not compatible with the class \cls{ieeeaccess}
% (because that class is not compatible with PGF/Tikz).
%
% \section{Examples}
@@ -4767,10 +4859,10 @@ version 2005/12/01 or later.
%
% We should remark that the rules we have drawn are drawn \emph{after} the
% construction of the array and thus, they don't spread the cells of the array.
-% We recall that, on the other side, the commands |\hline| and |\Hline|, the specifier ``"|"''
-% and the options |hlines|, |vlines| and |hvlines| spread the
-% cells.\footnote{For the command |\cline|, see the remark
-% p.~\pageref{remark-cline}.}
+% We recall that, on the other side, the commands |\hline| and |\Hline|, the
+% specifier ``"|"'' and the options |hlines|, |vlines|, |hvlines| and
+% |hvlines-except-borders| spread the cells.\footnote{For the command |\cline|,
+% see the remark p.~\pageref{remark-cline}.}
%
%
% \vspace{1cm}
@@ -5255,9 +5347,7 @@ version 2005/12/01 or later.
\AtBeginDocument
{
\@ifpackageloaded { colortbl }
- {
- \bool_set_true:N \c_@@_colortbl_loaded_bool
- }
+ { \bool_set_true:N \c_@@_colortbl_loaded_bool }
{
% \end{macrocode}
% The command |\CT@arc@| is a command of \pkg{colortbl} which sets the color of
@@ -5294,7 +5384,17 @@ version 2005/12/01 or later.
}
% \end{macrocode}
%
-%
+% \bigskip
+% We will use |\AtBeginEnvironment|. For version of LaTeX posterior to
+% 2020-10-01, the command is available in the LaTeX kernel (\pkg{l3hooks}). For
+% older versions, we load \pkg{etoolbox}.
+% \begin{macrocode}
+\cs_if_exist:NF \AtBeginEnvironment { \RequirePackage { etoolbox } }
+% \end{macrocode}
+% The command |\AtBeginDocument| will be used to patch |{tabular}| in order to
+% come back to the original versions of |\multicolumn| in the |{tabular}| nested
+% in the environments of \pkg{nicematrix}.
+%
% \bigskip
% We have to redefine |\cline| for several reasons. The command |\@@_cline| will
% be linked to |\cline| in the beginning of |{NiceArrayWithDelims}|. The
@@ -5515,26 +5615,6 @@ version 2005/12/01 or later.
% \subsection*{Parameters}
%
% \bigskip
-% For compatibility with versions prior to 5.0, we provide a load-time option
-% |define_L_C_R|. With this option, it's possible to use the letters |L|, |C|
-% and |R| instead of |l|, |c| and |r| in the preamble of the environments of
-% \pkg{nicematrix} as it was mandatory before version~5.0. This key will
-% probably be deleted in a future version.
-% \begin{macrocode}
-\bool_new:N \c_@@_define_L_C_R_bool
-% \end{macrocode}
-%
-%
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_define_L_C_R:
- {
- \newcolumntype L l
- \newcolumntype C c
- \newcolumntype R r
- }
-% \end{macrocode}
-%
-% \bigskip
% The following counter will count the environments |{NiceArray}|. The value of
% this counter will be used to prefix the names of the Tikz nodes created in the
% array.
@@ -5586,6 +5666,19 @@ version 2005/12/01 or later.
% \end{macrocode}
%
% \bigskip
+% The dimension |\l_@@_col_width_dim| will be available in each cell which
+% belongs to a column of fixed width: |w{...}{...}|, |W{...}{...}|, |p{}|,
+% |m{}|, |b{}| but also |X| (when the actual width of that column is known, that
+% is to say after the first compilation). It's the width of that column. It will
+% be used by some commands |\Block|. A non positive value means that the column
+% has no fixed width (it's a column of type |c|, |r|, |l|, etc.).
+% \begin{macrocode}
+\dim_new:N \l_@@_col_width_dim
+\dim_set:Nn \l_@@_col_width_dim { -1 cm }
+% \end{macrocode}
+%
+%
+% \bigskip
% The following counters will be used to count the numbers of rows and columns
% of the array.
% \begin{macrocode}
@@ -5594,11 +5687,13 @@ version 2005/12/01 or later.
% \end{macrocode}
%
% \bigskip
-% The following token list will contain the type of the current cell (|l|, |c|
-% or |r|). It will be used by the blocks.
+% The following token list will contain the type of horizontal alignment of the
+% current cell as provided by the corresponding column. The possible values are
+% |r|, |l|, |c|. For exemple, a column |p[l]{3cm}| will provide the value |l|
+% for all the cells of the column.
% \begin{macrocode}
-\tl_new:N \l_@@_cell_type_tl
-\tl_set:Nn \l_@@_cell_type_tl { c }
+\str_new:N \l_@@_hpos_cell_str
+\str_set:Nn \l_@@_hpos_cell_str { c }
% \end{macrocode}
%
% \bigskip
@@ -5672,6 +5767,13 @@ version 2005/12/01 or later.
% \end{macrocode}
%
% \bigskip
+% In a cell, it will be possible to know whether we are in a cell of a column of
+% type |X| thanks to that flag.
+% \begin{macrocode}
+\bool_new:N \l_@@_X_column_bool
+% \end{macrocode}
+%
+% \bigskip
% We will write in |\g_@@_aux_tl| all the instructions that we have to write on
% the |aux| file for the current environment. The contain of that token list
% will be written on the |aux| file at the end of the environment (in an
@@ -5786,16 +5888,19 @@ version 2005/12/01 or later.
% \end{macrocode}
%
% \bigskip
-% The number of letters |X| in the preamble of the array.
+% The sum of the weights of all the |X|-columns in the preamble. The weight of a
+% |X|-column is given as optional argument between square brackets. The default
+% value, of course, is $1$.
% \begin{macrocode}
-\int_new:N \g_@@_nb_of_X_int
+\int_new:N \g_@@_total_X_weight_int
% \end{macrocode}
%
% If there is at least one |X|-column in the preamble of the array, the
% following flag will be raised via the |aux| file. The length
-% |l_@@_x_columns_dim| will be the width of the |X|-columns. That value is
-% computed after the contruction of the array during the first compilation in
-% order to be used in the following run.
+% |l_@@_x_columns_dim| will be the width of |X|-columns of weight $1$ (the width
+% of a column of weigth $n$ will be that dimension multiplied by~$n$). That
+% value is computed after the construction of the array during the first
+% compilation in order to be used in the following run.
% \begin{macrocode}
\bool_new:N \l_@@_X_columns_aux_bool
\dim_new:N \l_@@_X_columns_dim
@@ -5947,7 +6052,14 @@ version 2005/12/01 or later.
% \begin{macrocode}
\seq_new:N \g_@@_submatrix_names_seq
% \end{macrocode}
-%
+%
+% \medskip
+% The following flag will be raised if the key |width| has been raised. 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
+% \end{macrocode}
+%
% \medskip
% The sequence |\g_@@_multicolumn_cells_seq| will contain the list of the cells
% of the array where a command |\multicolumn{|$n$|}{...}{...}| with $n>1$ is
@@ -6024,8 +6136,8 @@ version 2005/12/01 or later.
% |\l_@@_hpos_of_block_cap_bool| will be raised (in the second pass of the
% analyze of the keys of the command |\Block|).
% \begin{macrocode}
-\tl_new:N \l_@@_hpos_of_block_tl
-\tl_set:Nn \l_@@_hpos_of_block_tl { c }
+\str_new:N \l_@@_hpos_block_str
+\str_set:Nn \l_@@_hpos_block_str { c }
\bool_new:N \l_@@_hpos_of_block_cap_bool
% \end{macrocode}
%
@@ -6801,9 +6913,9 @@ version 2005/12/01 or later.
% \begin{macrocode}
\keys_define:nn { NiceMatrix / Env }
{
-
% \end{macrocode}
-% The key |hvlines-except-corners| is now deprecated.
+% The key |hvlines-except-corners| is now deprecated (use |hvlines| and
+% |corners| instead).
% \begin{macrocode}
hvlines-except-corners .code:n =
{
@@ -7157,6 +7269,12 @@ version 2005/12/01 or later.
% \begin{macrocode}
\keys_define:nn { NiceMatrix / NiceTabular }
{
+% \end{macrocode}
+% The dimension |width| will be used if at least a column of type |X| is used.
+% \begin{macrocode}
+ width .code:n = \dim_set:Nn \l_@@_width_dim { #1 }
+ \bool_set_true:N \l_@@_width_used_bool ,
+ width .value_required:n = true ,
notes / para .bool_set:N = \l_@@_notes_para_bool ,
notes / para .default:n = true ,
notes / bottomrule .bool_set:N = \l_@@_notes_bottomrule_bool ,
@@ -7184,12 +7302,12 @@ version 2005/12/01 or later.
\cs_new_protected:Npn \@@_Cell:
{
% \end{macrocode}
-% The token list |\g_@@_post_treatment_cell_tl| will be set during the
+% The token list |\g_@@_post_action_cell_tl| will be set during the
% composition of the box |\l_@@_cell_box| and will be used \emph{after} the
% composition in order to modify that box (that's why it's called a
-% \emph{post-treatment}).
+% \emph{post-action}).
% \begin{macrocode}
- \tl_gclear:N \g_@@_post_treatment_cell_tl
+ \tl_gclear:N \g_@@_post_action_cell_tl
% \end{macrocode}
% At the beginning of the cell, we link |\CodeAfter| to a command which do
% \emph{not} begin with |\omit| (whereas the standard version of |\CodeAfter|
@@ -7349,11 +7467,11 @@ version 2005/12/01 or later.
\@@_math_toggle_token:
\hbox_set_end:
% \end{macrocode}
-% The token list |\g_@@_post_treatment_cell_tl| is (potentially) set during the
+% The token list |\g_@@_post_action_cell_tl| is (potentially) set during the
% composition of the box |\l_@@_cell_box| and is used now \emph{after} the
% composition in order to modify that box.
% \begin{macrocode}
- \g_@@_post_treatment_cell_tl
+ \g_@@_post_action_cell_tl
\bool_if:NT \g_@@_rotate_bool \@@_rotate_cell_box:
\@@_adjust_size_box:
% \end{macrocode}
@@ -7856,7 +7974,6 @@ version 2005/12/01 or later.
\cs_set_eq:NN \Hspace \@@_Hspace:
\cs_set_eq:NN \Hdotsfor \@@_Hdotsfor:
\cs_set_eq:NN \Vdotsfor \@@_Vdotsfor:
- \cs_set_eq:NN \multicolumn \@@_multicolumn:nnn
\cs_set_eq:NN \Block \@@_Block:
\cs_set_eq:NN \rotate \@@_rotate:
\cs_set_eq:NN \OnlyMainNiceMatrix \@@_OnlyMainNiceMatrix:n
@@ -7868,6 +7985,18 @@ version 2005/12/01 or later.
\bool_if:NT \l_@@_colortbl_like_bool \@@_colortbl_like:
\bool_if:NT \l_@@_renew_dots_bool \@@_renew_dots:
% \end{macrocode}
+% We redefine |\multicolumn| and, since we want |\multicolumn| to be available
+% in the potential environments |{tabular}| nested in the environments of
+% \pkg{nicematrix}, we patch |{tabular}| to go back to the original definition.
+% The command |\AtBeginEnvironment| is the command of \pkg{l3hooks} and, if this
+% command is not available (versions of LaTeX prior to 2020-10-01),
+% \pkg{etoolbox} is loaded and the command |\AtBeginDocument| of \pkg{etoolbox}
+% is used.
+% \begin{macrocode}
+ \cs_set_eq:NN \multicolumn \@@_multicolumn:nnn
+ \AtBeginEnvironment { tabular }
+ { \cs_set_eq:NN \multicolumn \@@_old_multicolumn }
+% \end{macrocode}
%
%
% The sequence |\g_@@_multicolumn_cells_seq| will contain the list of the cells
@@ -8029,14 +8158,6 @@ version 2005/12/01 or later.
\box_clear_new:N \l_@@_the_array_box
% \end{macrocode}
%
-% \bigskip
-% If the user has loaded |nicematrix| with the option |define-L-C-R|, he will be
-% able to use |L|, |C| and |R| instead of |l|, |c| and |r| in the preambles of
-% the environments of \pkg{nicematrix} (it's a compatibility mode since |L|, |C|
-% and |R| were mandatory before version 5.0).
-% \begin{macrocode}
- \bool_if:NT \c_@@_define_L_C_R_bool \@@_define_L_C_R:
-% \end{macrocode}
%
% \bigskip
% The preamble will be constructed in |\g_@@_preamble_tl|.
@@ -8112,7 +8233,7 @@ version 2005/12/01 or later.
{
\tl_gput_right:Nn \g_@@_row_style_tl
{
- \tl_gput_right:Nn \g_@@_post_treatment_cell_tl
+ \tl_gput_right:Nn \g_@@_post_action_cell_tl
{ \dim_set:Nn \l_@@_cell_space_top_limit_dim { #1 } }
}
} ,
@@ -8121,7 +8242,7 @@ version 2005/12/01 or later.
{
\tl_gput_right:Nn \g_@@_row_style_tl
{
- \tl_gput_right:Nn \g_@@_post_treatment_cell_tl
+ \tl_gput_right:Nn \g_@@_post_action_cell_tl
{ \dim_set:Nn \l_@@_cell_space_bottom_limit_dim { #1 } }
}
} ,
@@ -8223,6 +8344,7 @@ version 2005/12/01 or later.
\cs_set_eq:NN \roundedrectanglecolor \@@_roundedrectanglecolor
\cs_set_eq:NN \rowcolor \@@_rowcolor
\cs_set_eq:NN \rowcolors \@@_rowcolors
+ \cs_set_eq:NN \rowlistcolors \@@_rowlistcolors
\cs_set_eq:NN \arraycolor \@@_arraycolor
\cs_set_eq:NN \columncolor \@@_columncolor
\cs_set_eq:NN \chessboardcolors \@@_chessboardcolors
@@ -8351,6 +8473,9 @@ version 2005/12/01 or later.
\NewDocumentEnvironment { NiceArrayWithDelims }
{ m m O { } m ! O { } t \CodeBefore }
{
+% \end{macrocode}
+%
+% \begin{macrocode}
\@@_provide_pgfsyspdfmark:
\bool_if:NT \c_@@_footnote_bool \savenotes
% \end{macrocode}
@@ -8507,18 +8632,31 @@ version 2005/12/01 or later.
% End of the construction of the array (in the box |\l_@@_the_array_box|).
%
% \bigskip
+% If the user has used the key |width| without any column |X|, we raise an error.
+% \begin{macrocode}
+ \bool_if:NT \l_@@_width_used_bool
+ {
+ \int_compare:nNnT \g_@@_total_X_weight_int = 0
+ { \@@_error:n { width~without~X~columns } }
+ }
+% \end{macrocode}
+%
+% \bigskip
% Now, if there is at least one |X|-column in the environment, we compute the
-% width that those columns will have (in the next compilation).
+% width that those columns will have (in the next compilation). In fact,
+% |l_@@_X_columns_dim| will the the width of a column of weight $1$. For a
+% |X|-column of weight~$n$, the width will be |l_@@_X_columns_dim| multiplied
+% by~$n$.
% \begin{macrocode}
- \int_compare:nNnT \g_@@_nb_of_X_int > 0
+ \int_compare:nNnT \g_@@_total_X_weight_int > 0
{
\bool_if:NTF \l_@@_X_columns_aux_bool
{ \dim_set_eq:NN \l_tmpa_dim \l_@@_X_columns_dim }
{
\dim_set:Nn \l_tmpa_dim
{
- ( \textwidth - \box_wd:N \l_@@_the_array_box )
- / \int_use:N \g_@@_nb_of_X_int
+ ( \l_@@_width_dim - \box_wd:N \l_@@_the_array_box )
+ / \int_use:N \g_@@_total_X_weight_int
}
}
\tl_gput_right:Nx \g_@@_aux_tl
@@ -8823,7 +8961,7 @@ version 2005/12/01 or later.
% \end{macrocode}
% The number of letters |X| in the preamble of the array.
% \begin{macrocode}
- \int_gzero:N \g_@@_nb_of_X_int
+ \int_gzero:N \g_@@_total_X_weight_int
% \end{macrocode}
% The sequence |\g_@@_cols_vlsim_seq| will contain the numbers of the columns
% where you will to have to draw vertical lines in the potential sub-matrices
@@ -8932,9 +9070,9 @@ version 2005/12/01 or later.
! { \@@_patch_preamble_ii:nn #1 }
@ { \@@_patch_preamble_ii:nn #1 }
| { \@@_patch_preamble_iii:n #1 }
- p { \@@_patch_preamble_iv:nnn t #1 }
- b { \@@_patch_preamble_iv:nnn b #1 }
- m { \@@_patch_preamble_iv:nnn b #1 }
+ p { \@@_patch_preamble_iv:n #1 }
+ b { \@@_patch_preamble_iv:n #1 }
+ m { \@@_patch_preamble_iv:n #1 }
\@@_w: { \@@_patch_preamble_v:nnnn { } #1 }
\@@_W: { \@@_patch_preamble_v:nnnn { \cs_set_eq:NN \hss \hfil } #1 }
\@@_true_c: { \@@_patch_preamble_vi:n #1 }
@@ -8944,10 +9082,7 @@ version 2005/12/01 or later.
) { \@@_patch_preamble_viii:nn #1 }
] { \@@_patch_preamble_viii:nn #1 }
\} { \@@_patch_preamble_viii:nn #1 }
- X { \@@_patch_preamble_xii: }
- C { \@@_error:nn { old~column~type } #1 }
- L { \@@_error:nn { old~column~type } #1 }
- R { \@@_error:nn { old~column~type } #1 }
+ X { \@@_patch_preamble_ix:n }
\q_stop { }
}
{
@@ -8984,7 +9119,7 @@ version 2005/12/01 or later.
{
\tl_gput_right:Nn \g_@@_preamble_tl
{
- > { \@@_Cell: \tl_set:Nn \l_@@_cell_type_tl { #1 } }
+ > { \@@_Cell: \str_set:Nn \l_@@_hpos_cell_str { #1 } }
#1
< \@@_end_Cell:
}
@@ -9055,16 +9190,143 @@ version 2005/12/01 or later.
\bool_new:N \l_@@_bar_at_end_of_pream_bool
% \end{macrocode}
%
+% \bigskip
+% The specifier |p| (and also the specifiers |m| and |b|) have an optional
+% argument between square brackets for a list of \emph{key}-\emph{value} pairs.
+% Here are the corresponding keys. This set of keys will also be used by the |X|
+% columns.
+% \begin{macrocode}
+\keys_define:nn { WithArrows / p-column }
+ {
+ r .code:n = \str_set:Nn \l_@@_hpos_col_str { r } ,
+ r .value_forbidden:n = true ,
+ c .code:n = \str_set:Nn \l_@@_hpos_col_str { c } ,
+ c .value_forbidden:n = true ,
+ l .code:n = \str_set:Nn \l_@@_hpos_col_str { l } ,
+ l .value_forbidden:n = true ,
+ p .code:n = \str_set:Nn \l_@@_vpos_col_str { p } ,
+ p .value_forbidden:n = true ,
+ t .meta:n = p ,
+ m .code:n = \str_set:Nn \l_@@_vpos_col_str { m } ,
+ m .value_forbidden:n = true ,
+ b .code:n = \str_set:Nn \l_@@_vpos_col_str { b } ,
+ b .value_forbidden:n = true
+ }
+% \end{macrocode}
+%
+%
+% \medskip
+% For |p|, |b| and |m|. The argument |#1| is that value : |p|, |b| or |m|.
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_patch_preamble_iv:n #1
+ {
+ \str_set:Nn \l_@@_vpos_col_str { #1 }
+% \end{macrocode}
+% Now, you look for a potential character |[| after the letter of the specifier
+% (for the options).
+% \begin{macrocode}
+ \@@_patch_preamble_iv_i:n
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_patch_preamble_iv_i:n #1
+ {
+ \str_if_eq:nnTF { #1 } { [ }
+ { \@@_patch_preamble_iv_ii:w [ }
+ { \@@_patch_preamble_iv_ii:w [ ] { #1 } }
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_patch_preamble_iv_ii:w [ #1 ]
+ { \@@_patch_preamble_iv_iii:nn { #1 } }
+% \end{macrocode}
+%
% \medskip
-% For |p| and |b|
+% |#1| is the optional argument of the specifier (a list of
+% \emph{key}-\emph{value} pairs).
+%
+% |#2| is the mandatory argument of the specifier: the width of the column.
% \begin{macrocode}
-\cs_new_protected:Npn \@@_patch_preamble_iv:nnn #1 #2 #3
+\cs_new_protected:Npn \@@_patch_preamble_iv_iii:nn #1 #2
{
+% \end{macrocode}
+% The possible values of |\l_@@_hpos_col_str| are |j| (for \emph{justified} which is
+% the initial value), |l|, |c| and |r| (when the user has used the corresponding
+% key in the optional argument of the specifier).
+% \begin{macrocode}
+ \str_set:Nn \l_@@_hpos_col_str { j }
+ \keys_set:nn { WithArrows / p-column } { #1 }
+ \@@_patch_preamble_iv_iv:n { #2 }
+ }
+% \end{macrocode}
+%
+% \medskip
+% The argument is the width of the column.
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_patch_preamble_iv_iv:n #1
+ {
+ \use:x
+ {
+ \@@_patch_preamble_iv_v:nnnn
+ { \str_if_eq:VnTF \l_@@_vpos_col_str { p } { t } { b } }
+ { \dim_eval:n { #1 } }
+ {
+% \end{macrocode}
+% The parameter |\l_@@_hpos_col_str| (as |\l_@@_vpos_col_str|) exists only
+% during the contruction of the preamble. During the composition of the array
+% itself, you will have, in each cell, the parameter |\l_@@_hpos_cell_str| which
+% will provide
+% \begin{macrocode}
+ \str_if_eq:VnTF \l_@@_hpos_col_str j
+ { \str_set:Nn \exp_not:N \l_@@_hpos_cell_str { c } }
+ { \str_set:Nn \exp_not:N \l_@@_hpos_cell_str \l_@@_hpos_col_str }
+ \str_case:Vn \l_@@_hpos_col_str
+ {
+ c { \exp_not:N \centering }
+ l { \exp_not:N \raggedright }
+ r { \exp_not:N \raggedleft }
+ }
+ }
+ { \str_if_eq:VnT \l_@@_vpos_col_str { m } \@@_center_cell_box: }
+ }
+% \end{macrocode}
+%
+% We increment the counter of columns, and then we test for the presence of a |<|.
+% \begin{macrocode}
+ \int_gincr:N \c@jCol
+ \@@_patch_preamble_x:n
+ }
+% \end{macrocode}
+%
+% \medskip
+% |#1| is the optional argument of |{minipage}|: |t| of |b|. Indeed, for the
+% columns of type |m|, we use the value |b| here because there is a special
+% post-action in order to center vertically the box (see |#4|).
+%
+% |#2| is the width of the |{minipage}|, that is to say also the width of the
+% column.
+%
+% |#3| is the coding for the horizontal position of the content of the cell
+% (|\centering|, |\raggedright|, |\raggedleft| or nothing).
+%
+% |#4| is an extra-code which contains |\l_@@_center_cell_box| (when the column
+% is a |m| column) or nothing (in the other cases).
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_patch_preamble_iv_v:nnnn #1 #2 #3 #4
+ {
\tl_gput_right:Nn \g_@@_preamble_tl
{
> {
+% \end{macrocode}
+% The parameter |\l_@@_col_width_dim|, which is the width of the current column,
+% will be available in each cell of the column. It will be used by the
+% mono-column blocks.
+% \begin{macrocode}
+ \dim_set:Nn \l_@@_col_width_dim { #2 }
\@@_Cell:
- \begin { minipage } [ #1 ] { \dim_eval:n { #3 } }
+ \begin { minipage } [ #1 ] { #2 }
% \end{macrocode}
% The following lines have been taken from |array.sty|.
% \begin{macrocode}
@@ -9073,7 +9335,17 @@ version 2005/12/01 or later.
\vrule height \box_ht:N \@arstrutbox width \c_zero_dim
\everypar { }
}
- \g_@@_row_style_tl % added the 2021-07-17
+% \end{macrocode}
+% Now, the potential code for the horizontal position of the content of the cell
+% (|\centering|, |\raggedright|, |\raggedleft| or nothing).
+% \begin{macrocode}
+ #3
+% \end{macrocode}
+% The following code is to allow something like |\centering| in |\RowStyle|.
+% However, there is extra vertical space if |\color{...}| is used in
+% |\RowStyle| (we should try to add a key |color| to the command |\RowStyle|.
+% \begin{macrocode}
+ \g_@@_row_style_tl
\arraybackslash
}
c
@@ -9084,18 +9356,13 @@ version 2005/12/01 or later.
\@finalstrut \@arstrutbox
\end { minipage }
% \end{macrocode}
-% If the letter in the preamble is |m|, you require a post-treatment for the box
-% |\l_@@_cell_box|.
+% If the letter in the preamble is |m|, |#3| will be equal to
+% |\@@_center_cell_box:| (see just below).
% \begin{macrocode}
- \str_if_eq:nnT { #2 } m \@@_center_cell_box:
+ #4
\@@_end_Cell:
}
}
-% \end{macrocode}
-% We increment the counter of columns, and then we test for the presence of a |<|.
-% \begin{macrocode}
- \int_gincr:N \c@jCol
- \@@_patch_preamble_x:n
}
% \end{macrocode}
%
@@ -9104,16 +9371,16 @@ version 2005/12/01 or later.
% vertically the box. In fact, despite its name, the command does not always
% center the cell. Indeed, if there is only one row in the cell, it should not
% be centered vertically. It's not possible to know the number of rows of the
-% cell. However, you consider (as in \pkg{array}) that if the height of the cell
+% cell. However, we consider (as in \pkg{array}) that if the height of the cell
% is no more that the height of |\@arstrutbox|, there is only one row.
% \begin{macrocode}
\cs_new_protected:Npn \@@_center_cell_box:
{
% \end{macrocode}
-% By putting instructions in |\g_@@_post_treatment_cell_tl|, we require a
-% post-treatment of the box |\l_@@_cell_box|.
+% By putting instructions in |\g_@@_post_action_cell_tl|, we require a
+% post-action of the box |\l_@@_cell_box|.
% \begin{macrocode}
- \tl_gput_right:Nn \g_@@_post_treatment_cell_tl
+ \tl_gput_right:Nn \g_@@_post_action_cell_tl
{
\int_compare:nNnT
{ \box_ht:N \l_@@_cell_box }
@@ -9143,9 +9410,15 @@ version 2005/12/01 or later.
\tl_gput_right:Nn \g_@@_preamble_tl
{
> {
+% \end{macrocode}
+% The parameter |\l_@@_col_width_dim|, which is the width of the current column,
+% will be available in each cell of the column. It will be used by the
+% mono-column blocks.
+% \begin{macrocode}
+ \dim_set:Nn \l_@@_col_width_dim { #4 }
\hbox_set:Nw \l_@@_cell_box
\@@_Cell:
- \tl_set:Nn \l_@@_cell_type_tl { #3 }
+ \str_set:Nn \l_@@_hpos_cell_str { #3 }
}
c
< {
@@ -9290,6 +9563,105 @@ version 2005/12/01 or later.
}
% \end{macrocode}
%
+% \bigskip
+% For the case of a letter |X|. This specifier may take in an optional argument
+% (between square brackets). That's why we test whether there is a |[| after the
+% letter |X|.
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_patch_preamble_ix:n #1
+ {
+ \str_if_eq:nnTF { #1 } { [ }
+ { \@@_patch_preamble_ix_i:w [ }
+ { \@@_patch_preamble_ix_i:w [ ] #1 }
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_patch_preamble_ix_i:w [ #1 ]
+ { \@@_patch_preamble_ix_ii:n { #1 } }
+% \end{macrocode}
+% |#1| is the optional argument of the |X| specifier (a list of
+% \emph{key}-\emph{value} pairs).
+%
+% \medskip
+% The following set of keys is for the specifier |X| in the preamble of the
+% array. Such specifier may have as key all the keys of
+% |{ WithArrows / p-column }| but also a key as 1, 2, 3, etc. The following set
+% of keys will be used to retrieve that value (in the counter |\l_@@_weight_int|).
+% \begin{macrocode}
+\keys_define:nn { WithArrows / X-column }
+ { unknown .code:n = \int_set:Nn \l_@@_weight_int { \l_keys_key_str } }
+% \end{macrocode}
+%
+%
+% \medskip
+% In the following command, |#1| is the list of the options of the specifier |X|.
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_patch_preamble_ix_ii:n #1
+ {
+% \end{macrocode}
+% The possible values of |\l_@@_hpos_col_str| are |j| (for \emph{justified} which is
+% the initial value), |l|, |c| and |r| (when the user has used the corresponding
+% key in the optional argument of the specifier |X|).
+% \begin{macrocode}
+ \str_set:Nn \l_@@_hpos_col_str { j }
+% \end{macrocode}
+% The possible values of |\l_@@_vpos_col_str| are |p| (the initial value), |m| and |b|
+% (when the user has used the corresponding key in the optional argument of the
+% specifier |X|).
+% \begin{macrocode}
+ \tl_set:Nn \l_@@_vpos_col_str { p }
+% \end{macrocode}
+%
+% The integer |\l_@@_weight_int| will be the weight of the |X| column (the
+% initial value is $1$). The user may specify a different value (such as $2$,
+% $3$, etc.) by putting that value in the optional argument of the specifier.
+% The weights of the |X| columns are used in the computation of the actual width
+% of those columns.
+% \begin{macrocode}
+ \int_zero_new:N \l_@@_weight_int
+ \int_set:Nn \l_@@_weight_int { 1 }
+ \keys_set_known:nnN { WithArrows / p-column } { #1 } \l_tmpa_tl
+ \keys_set:nV { WithArrows / X-column } \l_tmpa_tl
+ \int_gadd:Nn \g_@@_total_X_weight_int \l_@@_weight_int
+% \end{macrocode}
+%
+% We test whether we know the width of the |X|-columns by reading the |aux| file.
+% (after the first compilation, the width of the |X|-columns is computed and
+% written on the |aux| file).
+% \begin{macrocode}
+ \bool_if:NTF \l_@@_X_columns_aux_bool
+ { \@@_patch_preamble_iv_iv:n { \l_@@_weight_int \l_@@_X_columns_dim } }
+ {
+ \tl_gput_right:Nn \g_@@_preamble_tl
+ {
+ > {
+ \@@_Cell:
+ \bool_set_true:N \l_@@_X_column_bool
+% \end{macrocode}
+% The following code will nullify the box of the cell.
+% \begin{macrocode}
+ \tl_gput_right:Nn \g_@@_post_action_cell_tl
+ { \hbox_set:Nn \l_@@_cell_box { } }
+% \end{macrocode}
+% We put a |{minipage}| to give to the user the ability to put a command such as
+% |\centering| in the |\RowStyle|.
+% \begin{macrocode}
+ \begin { minipage } { 5 cm } \arraybackslash
+ }
+ c
+ < {
+ \end { minipage }
+ \@@_end_Cell:
+ }
+ }
+ \int_gincr:N \c@jCol
+ \@@_patch_preamble_x:n
+ }
+ }
+% \end{macrocode}
+%
+% \bigskip
% \begin{macrocode}
\cs_new_protected:Npn \@@_patch_preamble_xi:n #1
{
@@ -9305,6 +9677,7 @@ version 2005/12/01 or later.
}
% \end{macrocode}
%
+% \bigskip
% After a specifier of column, we have to test whether there is one or several
% |<{..}| because, after those potential |<{...}|, we have to insert
% |!{\skip_horizontal:N ...}| when the key |vlines| is used.
@@ -9312,7 +9685,7 @@ version 2005/12/01 or later.
\cs_new_protected:Npn \@@_patch_preamble_x:n #1
{
\str_if_eq:nnTF { #1 } { < }
- \@@_patch_preamble_ix:n
+ \@@_patch_preamble_xii:n
{
\tl_if_eq:NnTF \l_@@_vlines_clist { all }
{
@@ -9333,48 +9706,13 @@ version 2005/12/01 or later.
% \end{macrocode}
%
% \begin{macrocode}
-\cs_new_protected:Npn \@@_patch_preamble_ix:n #1
+\cs_new_protected:Npn \@@_patch_preamble_xii:n #1
{
\tl_gput_right:Nn \g_@@_preamble_tl { < { #1 } }
\@@_patch_preamble_x:n
}
% \end{macrocode}
%
-% \bigskip
-% For the case of a letter |X|
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_patch_preamble_xii:
- {
- \int_gincr:N \g_@@_nb_of_X_int
-% \end{macrocode}
-% We test whether you know the width of the |X|-columns by reading the value in
-% the |aux| file (of course, this is not possible at the first compilation).
-% \begin{macrocode}
- \bool_if:NTF \l_@@_X_columns_aux_bool
- { \exp_args:NNNV \@@_patch_preamble_iv:nnn t p \l_@@_X_columns_dim }
- {
- \tl_gput_right:Nn \g_@@_preamble_tl
- {
- > {
- \@@_Cell:
- \tl_set:Nn \l_@@_cell_type_tl { c }
-% \end{macrocode}
-% The following code will nullify the box of the cell.
-% \begin{macrocode}
- \tl_gput_right:Nn \g_@@_post_treatment_cell_tl
- { \hbox_set:Nn \l_@@_cell_box { } }
-% \end{macrocode}
-% The content of the cell is composed in |\l_tmpa_box| which will be discarded.
-% \begin{macrocode}
- }
- c
- < { \@@_end_Cell: }
- }
- \int_gincr:N \c@jCol
- \@@_patch_preamble_x:n
- }
- }
-% \end{macrocode}
%
% \bigskip
% \subsection*{The redefinition of \textbackslash multicolumn}
@@ -9481,9 +9819,6 @@ version 2005/12/01 or later.
\@@_w: { \@@_patch_m_preamble_v:nnnn { } #1 }
\@@_W: { \@@_patch_m_preamble_v:nnnn { \cs_set_eq:NN \hss \hfil } #1 }
\@@_true_c: { \@@_patch_m_preamble_vi:n #1 }
- C { \@@_error:nn { old~column~type } #1 }
- L { \@@_error:nn { old~column~type } #1 }
- R { \@@_error:nn { old~column~type } #1 }
\q_stop { }
}
{ \@@_fatal:nn { unknown~column~type } { #1 } }
@@ -9497,7 +9832,7 @@ version 2005/12/01 or later.
{
\tl_gput_right:Nn \g_@@_preamble_tl
{
- > { \@@_Cell: \tl_set:Nn \l_@@_cell_type_tl { #1 } }
+ > { \@@_Cell: \str_set:Nn \l_@@_hpos_cell_str { #1 } }
#1
< \@@_end_Cell:
}
@@ -9568,7 +9903,7 @@ version 2005/12/01 or later.
> {
\hbox_set:Nw \l_@@_cell_box
\@@_Cell:
- \tl_set:Nn \l_@@_cell_type_tl { #3 }
+ \str_set:Nn \l_@@_hpos_cell_str { #3 }
}
c
< {
@@ -10588,11 +10923,18 @@ version 2005/12/01 or later.
% \end{macrocode}
%
% \bigskip
-% \subsection*{The environments \{NiceTabular\} and \{NiceTabular*\}}
+% \subsection*{\{NiceTabular\}, \{NiceTabularX\} and \{NiceTabular*\}}
%
% \begin{macrocode}
\NewDocumentEnvironment { NiceTabular } { O { } m ! O { } }
{
+% \end{macrocode}
+% The dimension |\l_@@_width_dim| will be used if at least one column of type
+% |X| is used.
+%
+% \begin{macrocode}
+ \dim_zero_new:N \l_@@_width_dim
+ \dim_set_eq:NN \l_@@_width_dim \linewidth
\str_gset:Nn \g_@@_name_env_str { NiceTabular }
\keys_set:nn { NiceMatrix / NiceTabular } { #1 , #3 }
\bool_set_true:N \l_@@_NiceTabular_bool
@@ -10601,6 +10943,20 @@ version 2005/12/01 or later.
{ \endNiceArray }
% \end{macrocode}
%
+% \bigskip
+% \begin{macrocode}
+\NewDocumentEnvironment { NiceTabularX } { m O { } m ! O { } }
+ {
+ \str_gset:Nn \g_@@_name_env_str { NiceTabularX }
+ \dim_zero_new:N \l_@@_width_dim
+ \dim_set:Nn \l_@@_width_dim { #1 }
+ \keys_set:nn { NiceMatrix / NiceTabular } { #2 , #4 }
+ \bool_set_true:N \l_@@_NiceTabular_bool
+ \NiceArray { #3 }
+ }
+ { \endNiceArray }
+% \end{macrocode}
+%
% \bigskip
% \begin{macrocode}
\NewDocumentEnvironment { NiceTabular* } { m O { } m ! O { } }
@@ -12414,6 +12770,10 @@ version 2005/12/01 or later.
}
% \end{macrocode}
%
+% \bigskip
+% In the environments of |nicematrix|, the command |\multicolumn| is redefined.
+% We will patch the environment |{tabular}| to go back to the previous value of
+% |\multicolumn|.
% \begin{macrocode}
\cs_set_eq:NN \@@_old_multicolumn \multicolumn
% \end{macrocode}
@@ -12776,28 +13136,26 @@ version 2005/12/01 or later.
% We want to avoid the thin white lines that are shown in some \textsc{pdf}
% viewers (eg: with the engine MuPDF used by SumatraPDF). That's why we try to
% draw rectangles of the same color in the same instruction |\pgfusepath { fill }|
-% (and they will be in the same instruction |fill|---coded |f|--- in the
+% (and they will be in the same instruction |fill|---coded |f|---in the
% resulting \textsc{pdf}).
%
-% The commands |\@@_rowcolor|, |\@@_columncolor| and |\@@_rectanglecolor|
-% (which are linked to |\rowcolor|, |\columncolor| and |\rectanglecolor| before
-% the execution of the |code-before|) don't directly draw the corresponding
-% rectangles. Instead, they store their instructions color by color:
+% The commands |\@@_rowcolor|, |\@@_columncolor|, |\@@_rectanglecolor| and
+% |\@@_rowlistcolors| don't directly draw the corresponding rectangles. Instead,
+% they store their instructions color by color:
% \begin{itemize}
% \item A sequence |\g_@@_colors_seq| will be built containing all the colors
% used by at least one of these instructions. Each \emph{color} may be prefixed
-% by it color model (eg: |[gray]{0.5}|).
+% by its color model (eg: |[gray]{0.5}|).
% \item For the color whose index in |\g_@@_colors_seq| is equal to~$i$, a list of
% instructions which use that color will be constructed in the token list
% |\g_@@_color_|$i$|_tl|. In that token list, the instructions will be written
-% using |\@@_rowcolor:n|, |\@@_columncolor:n| and |\@@_rectanglecolor:nn|
-% (corresponding of |\@@_rowcolor|, |\@@_columncolor| and |\@@_rectanglecolor|).
+% using |\@@_cartesian_color:nn| and |\@@_rectanglecolor:nn|.
% \end{itemize}
%
%
-% bigskip
+% \bigskip
% |#1| is the color and |#2| is an instruction using that color. Despite its
-% name, the command |\@@_add_to_color_seq| doesn't only add a color to
+% name, the command |\@@_add_to_colors_seq:nn| doesn't only add a color to
% |\g_@@_colors_seq|: it also updates the corresponding token list
% |\g_@@_color_|$i$|_tl|. We add in a global way because the final user may use
% the instructions such as |\cellcolor| in a loop of \pkg{pgffor} in the
@@ -12832,6 +13190,7 @@ version 2005/12/01 or later.
%
% \begin{macrocode}
\cs_generate_variant:Nn \@@_add_to_colors_seq:nn { x n }
+\cs_generate_variant:Nn \@@_add_to_colors_seq:nn { x x }
% \end{macrocode}
%
% \bigskip
@@ -12862,6 +13221,14 @@ version 2005/12/01 or later.
}
% \end{macrocode}
%
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_cartesian_color:nn #1 #2
+ {
+ \tl_set:Nn \l_@@_rows_tl { #1 }
+ \tl_set:Nn \l_@@_cols_tl { #2 }
+ \@@_cartesian_path:
+ }
+% \end{macrocode}
%
% \bigskip
% Here is an example : |\@@_rowcolor {red!15} {1,3,5-7,10-}|
@@ -12872,25 +13239,11 @@ version 2005/12/01 or later.
{
\@@_add_to_colors_seq:xn
{ \tl_if_blank:nF { #1 } { [ #1 ] } { #2 } }
- { \@@_rowcolor:n { #3 } }
+ { \@@_cartesian_color:nn { #3 } { - } }
}
}
% \end{macrocode}
%
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_rowcolor:n #1
- {
- \tl_set:Nn \l_@@_rows_tl { #1 }
- \tl_set:Nn \l_@@_cols_tl { - }
-% \end{macrocode}
-% The command |\@@_cartesian_path:| takes in two implicit arguments:
-% |\l_@@_cols_tl| and |\l_@@_rows_tl|.
-% \begin{macrocode}
- \@@_cartesian_path:
- }
-% \end{macrocode}
-%
-%
% \bigskip
% Here an example : |\@@_columncolor:nn {red!15} {1,3,5-7,10-}|
% \begin{macrocode}
@@ -12900,23 +13253,10 @@ version 2005/12/01 or later.
{
\@@_add_to_colors_seq:xn
{ \tl_if_blank:nF { #1 } { [ #1 ] } { #2 } }
- { \@@_columncolor:n { #3 } }
+ { \@@_cartesian_color:nn { - } { #3 } }
}
}
% \end{macrocode}
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_columncolor:n #1
- {
- \tl_set:Nn \l_@@_rows_tl { - }
- \tl_set:Nn \l_@@_cols_tl { #1 }
-% \end{macrocode}
-% The command |\@@_cartesian_path:| takes in two implicit arguments:
-% |\l_@@_cols_tl| and |\l_@@_rows_tl|.
-% \begin{macrocode}
- \@@_cartesian_path:
- }
-% \end{macrocode}
-%
%
% \bigskip
% Here is an example : |\@@_rectanglecolor{red!15}{2-3}{5-6}|
@@ -13038,24 +13378,26 @@ version 2005/12/01 or later.
%
% |#1| (optional) is the color space ;
% |#2| is a list of intervals of rows ;
-% |#3| is the first color ;
-% |#4| is the second color ;
-% |#5| is for the optional list of pairs key-value.
+% |#3| is the list of colors ;
+% |#4| is for the optional list of pairs key-value.
% \begin{macrocode}
-\NewDocumentCommand \@@_rowcolors { O { } m m m O { } }
+\NewDocumentCommand \@@_rowlistcolors { O { } m m O { } }
{
% \end{macrocode}
-% The group is for the options.
+% The group is for the options. |\l_@@_colors_seq| will be the list of colors.
% \begin{macrocode}
\group_begin:
+ \seq_clear_new:N \l_@@_colors_seq
+ \seq_set_split:Nnn \l_@@_colors_seq { , } { #3 }
\tl_clear_new:N \l_@@_cols_tl
\tl_set:Nn \l_@@_cols_tl { - }
- \keys_set:nn { NiceMatrix / rowcolors } { #5 }
+ \keys_set:nn { NiceMatrix / rowcolors } { #4 }
% \end{macrocode}
-% The boolean |\l_tmpa_bool| will indicate whereas we are in a row of the first
-% color or of the second color.
+% The counter |\l_@@_color_int| will be the rank of the current color in the list of
+% colors (modulo the length of the list).
% \begin{macrocode}
- \bool_set_true:N \l_tmpa_bool
+ \int_zero_new:N \l_@@_color_int
+ \int_set:Nn \l_@@_color_int 1
\bool_if:NT \l_@@_respect_blocks_bool
{
% \end{macrocode}
@@ -13069,6 +13411,9 @@ version 2005/12/01 or later.
}
\pgfpicture
\pgf@relevantforpicturesizefalse
+% \end{macrocode}
+% |#2| is the list of intervals of rows.
+% \begin{macrocode}
\clist_map_inline:nn { #2 }
{
\tl_set:Nn \l_tmpa_tl { ##1 }
@@ -13076,12 +13421,14 @@ version 2005/12/01 or later.
{ \@@_cut_on_hyphen:w ##1 \q_stop }
{ \tl_set:Nx \l_tmpb_tl { \int_use:N \c@iRow } }
% \end{macrocode}
-% The counter |\l_tmpa_int| will be the index of the loop.
+% Now, |l_tmpa_tl| and |l_tmpb_tl| are the first row and the last row of the
+% interval of rows that we have to treat. The counter |\l_tmpa_int| will be the
+% index of the loop over the rows.
% \begin{macrocode}
\int_set:Nn \l_tmpa_int \l_tmpa_tl
\bool_if:NTF \l_@@_rowcolors_restart_bool
- { \bool_set_true:N \l_tmpa_bool }
- { \bool_set:Nn \l_tmpa_bool { \int_if_odd_p:n { \l_tmpa_tl } } }
+ { \int_set:Nn \l_@@_color_int 1 }
+ { \int_set:Nn \l_@@_color_int \l_tmpa_tl }
\int_zero_new:N \l_tmpc_int
\int_set:Nn \l_tmpc_int \l_tmpb_tl
\int_do_until:nNnn \l_tmpa_int > \l_tmpc_int
@@ -13105,39 +13452,27 @@ version 2005/12/01 or later.
}
\tl_set:Nx \l_@@_rows_tl
{ \int_use:N \l_tmpa_int - \int_use:N \l_tmpb_int }
- \bool_if:NTF \l_tmpa_bool
- {
- \tl_if_blank:nF { #3 }
- {
- \tl_if_empty:nTF { #1 }
- \color
- { \color [ #1 ] }
- { #3 }
% \end{macrocode}
-% The command |\@@_cartesian_path:| takes in two implicit arguments:
-% |\l_@@_cols_tl| and |\l_@@_rows_tl|.
+% |\l_tmpc_tl| will be the color that we will use.
% \begin{macrocode}
- \@@_cartesian_path:
- \pgfusepath { fill }
- }
- \bool_set_false:N \l_tmpa_bool
- }
+ \tl_clear_new:N \l_@@_color_tl
+ \tl_set:Nx \l_@@_color_tl
{
- \tl_if_blank:nF { #4 }
- {
- \tl_if_empty:nTF { #1 }
- \color
- { \color [ #1 ] }
- { #4 }
-% \end{macrocode}
-% The command |\@@_cartesian_path:| takes in two implicit arguments:
-% |\l_@@_cols_tl| and |\l_@@_row_tl|.
-% \begin{macrocode}
- \@@_cartesian_path:
- \pgfusepath { fill }
+ \@@_color_index:n
+ {
+ \int_mod:nn
+ { \l_@@_color_int - 1 }
+ { \seq_count:N \l_@@_colors_seq }
+ + 1
}
- \bool_set_true:N \l_tmpa_bool
}
+ \tl_if_empty:NF \l_@@_color_tl
+ {
+ \@@_add_to_colors_seq:xx
+ { \tl_if_blank:nF { #1 } { [ #1 ] } { \l_@@_color_tl } }
+ { \@@_cartesian_color:nn { \l_@@_rows_tl } { \l_@@_cols_tl } }
+ }
+ \int_incr:N \l_@@_color_int
\int_set:Nn \l_tmpa_int { \l_tmpb_int + 1 }
}
}
@@ -13146,6 +13481,27 @@ version 2005/12/01 or later.
}
% \end{macrocode}
%
+% \medskip
+% The command |\@@_color_index:n| peeks in |\l_@@_colors_seq| the color at the
+% index |#1|. However, if that color is the symbol |=|, the previous one is
+% poken. This macro is recursive.
+% \begin{macrocode}
+\cs_new:Npn \@@_color_index:n #1
+ {
+ \str_if_eq:eeTF { \seq_item:Nn \l_@@_colors_seq { #1 } } { = }
+ { \@@_color_index:n { #1 - 1 } }
+ { \seq_item:Nn \l_@@_colors_seq { #1 } }
+ }
+% \end{macrocode}
+%
+% \bigskip
+% The command |\rowcolors| (available in the |\CodeBefore|) is a specialisation
+% of the most general command |\rowlistcolors|.
+% \begin{macrocode}
+\NewDocumentCommand \@@_rowcolors { O { } m m m O { } }
+ { \@@_rowlistcolors [ #1 ] { #2 } { { #3 } , { #4 } } [ #5 ] }
+% \end{macrocode}
+%
% \bigskip
% \begin{macrocode}
\cs_new_protected:Npn \@@_rowcolors_i:nnnn #1 #2 #3 #4
@@ -13757,9 +14113,12 @@ version 2005/12/01 or later.
\dim_set_eq:NN \l_tmpb_dim \pgf@y
\@@_qpoint:n { col - \@@_succ:n { #4 } }
\dim_set_eq:NN \l_tmpc_dim \pgf@x
- \bool_lazy_and:nnT
- { \int_compare_p:nNn { #2 } > 1 }
- { ! \tl_if_blank_p:V \CT@drsc@ }
+ \bool_lazy_all:nT
+ {
+ { \int_compare_p:nNn { #2 } > 1 }
+ { \cs_if_exist_p:N \CT@drsc@ } % condition added in version 6.0
+ { ! \tl_if_blank_p:V \CT@drsc@ }
+ }
{
\group_begin:
\CT@drsc@
@@ -14385,7 +14744,7 @@ version 2005/12/01 or later.
% \end{macrocode}
%
% \medskip
-% At the end of the environment |{NiceMatrixBlock}|, we write in the main |.aux|
+% At the end of the environment |{NiceMatrixBlock}|, we write in the main |aux|
% file instructions for the column width of all the environments of the block
% (that's why we have stored the number of the first environment of the block in
% the counter |\l_@@_first_env_block_int|).
@@ -14774,21 +15133,21 @@ version 2005/12/01 or later.
% \begin{macrocode}
\keys_define:nn { NiceMatrix / Block / FirstPass }
{
- l .code:n = \tl_set:Nn \l_@@_hpos_of_block_tl l ,
+ l .code:n = \str_set:Nn \l_@@_hpos_block_str l ,
l .value_forbidden:n = true ,
- r .code:n = \tl_set:Nn \l_@@_hpos_of_block_tl r ,
+ r .code:n = \str_set:Nn \l_@@_hpos_block_str r ,
r .value_forbidden:n = true ,
- c .code:n = \tl_set:Nn \l_@@_hpos_of_block_tl c ,
+ c .code:n = \str_set:Nn \l_@@_hpos_block_str c ,
c .value_forbidden:n = true ,
- L .code:n = \tl_set:Nn \l_@@_hpos_of_block_tl l ,
+ L .code:n = \str_set:Nn \l_@@_hpos_block_str l ,
L .value_forbidden:n = true ,
- R .code:n = \tl_set:Nn \l_@@_hpos_of_block_tl r ,
+ R .code:n = \str_set:Nn \l_@@_hpos_block_str r ,
R .value_forbidden:n = true ,
- C .code:n = \tl_set:Nn \l_@@_hpos_of_block_tl c ,
+ C .code:n = \str_set:Nn \l_@@_hpos_block_str c ,
C .value_forbidden:n = true ,
- t .code:n = \tl_set:Nn \l_@@_vpos_of_block_tl t ,
+ t .code:n = \str_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 .code:n = \str_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 ,
@@ -14799,9 +15158,7 @@ version 2005/12/01 or later.
% The following command |\@@_Block:| will be linked to |\Block| in the
% environments of \pkg{nicematrix}. We define it with
% |\NewExpandableDocumentCommand| because it has an optional argument between
-% |<| and |>| (for TeX instructions put before the math mode of the label and
-% before the beginning of the small array of the block). It's mandatory to use
-% an expandable command.
+% |<| and |>|. It's mandatory to use an expandable command.
%
% \begin{macrocode}
\NewExpandableDocumentCommand \@@_Block: { O { } m D < > { } m }
@@ -14863,13 +15220,13 @@ version 2005/12/01 or later.
% \begin{macrocode}
\int_compare:nNnTF \l_tmpb_int = 1
{
- \tl_if_empty:NTF \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 }
+ \str_if_empty:NTF \l_@@_hpos_cell_str
+ { \str_set:Nn \l_@@_hpos_block_str c }
+ { \str_set_eq:NN \l_@@_hpos_block_str \l_@@_hpos_cell_str }
}
- { \tl_set:Nn \l_@@_hpos_of_block_tl c }
+ { \str_set:Nn \l_@@_hpos_block_str c }
% \end{macrocode}
-% The value of |\l_@@_hpos_of_block_tl| may be modified by the keys of the
+% The value of |\l_@@_hpos_block_str| may be modified by the keys of the
% command |\Block| that we will analyze now.
%
% \medskip
@@ -14905,6 +15262,16 @@ version 2005/12/01 or later.
\int_compare_p:nNn { \l_tmpb_int } = 1
)
&& ! \tl_if_empty_p:n { #5 }
+% \end{macrocode}
+% For the blocks mono-column, we will compose right now in a box in order to
+% compute its width and take that width into account for the width of the
+% column. However, if the column is a |X| column, we should not do that since
+% the width is determined by another way. This should be the same for the |p|,
+% |m| and |b| columns and we should modify that point. However, for the |X|
+% column, it's imperative. Otherwise, the process for the determination of the
+% widths of the columns will be wrong.
+% \begin{macrocode}
+ && ! \l_@@_X_column_bool
}
{ \exp_args:Nxx \@@_Block_iv:nnnnn }
{ \exp_args:Nxx \@@_Block_v:nnnnn }
@@ -14952,8 +15319,8 @@ version 2005/12/01 or later.
{ \int_compare:nNnT { #2 } = 1 \set@color }
{ \color { \l_@@_color_tl } }
% \end{macrocode}
-% If the block is mono-row, we use |\g_@@_row_style_tl| even it has yet been used
-% in the beginning of the cell where the command |\Block| has been issued
+% If the block is mono-row, we use |\g_@@_row_style_tl| even if it has yet been
+% used in the beginning of the cell where the command |\Block| has been issued
% 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}
@@ -14970,23 +15337,43 @@ 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_@@_hpos_of_block_tl c }
+ \bool_if:NT \g_@@_rotate_bool { \str_set:Nn \l_@@_hpos_block_str c }
\bool_if:NTF \l_@@_NiceTabular_bool
{
- \use:x
- {
- \exp_not:N \begin { tabular } [ \l_@@_vpos_of_block_tl ]
- { @ { } \l_@@_hpos_of_block_tl @ { } }
- }
- #5
- \end { tabular }
+ \bool_lazy_and:nnTF
+ { \int_compare_p:nNn { #2 } = 1 }
+ { \dim_compare_p:n { \l_@@_col_width_dim >= \c_zero_dim } }
+% \end{macrocode}
+% When the block is mono-column in a column with a fixed width (eg |p{3cm}|).
+% \begin{macrocode}
+ {
+ \begin { minipage } [ l_@@_vpos_of_block_tl ]
+ { \l_@@_col_width_dim }
+ \str_case:Vn \l_@@_hpos_block_str
+ {
+ c \centering
+ r \raggedleft
+ l \raggedright
+ }
+ #5
+ \end { minipage }
+ }
+ {
+ \use:x
+ {
+ \exp_not:N \begin { tabular } [ \l_@@_vpos_of_block_tl ]
+ { @ { } \l_@@_hpos_block_str @ { } }
+ }
+ #5
+ \end { tabular }
+ }
}
{
\c_math_toggle_token
\use:x
{
\exp_not:N \begin { array } [ \l_@@_vpos_of_block_tl ]
- { @ { } \l_@@_hpos_of_block_tl @ { } }
+ { @ { } \l_@@_hpos_block_str @ { } }
}
#5
\end { array }
@@ -15048,11 +15435,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_@@_hpos_of_block_tl|. However, maybe there were no key of the horizontal
+% |\l_@@_hpos_block_str|. However, maybe there were no key of the horizontal
% alignement and that's why we put a key corresponding to the value of
-% |\l_@@_hpos_of_block_tl|, which is fixed by the type of current column.
+% |\l_@@_hpos_block_str|, which is fixed by the type of current column.
% \begin{macrocode}
- { \exp_not:n { #3 } , \l_@@_hpos_of_block_tl }
+ { \exp_not:n { #3 } , \l_@@_hpos_block_str }
{
\box_use_drop:c
{ g_@@_ block _ box _ \int_use:N \g_@@_block_box_int _ box }
@@ -15091,11 +15478,11 @@ 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_@@_hpos_of_block_tl c }
+ { \str_set:Nn \l_@@_hpos_block_str c }
\use:x
{
\exp_not:N \begin { tabular } [ \l_@@_vpos_of_block_tl ]
- { @ { } \l_@@_hpos_of_block_tl @ { } }
+ { @ { } \l_@@_hpos_block_str @ { } }
}
#5
\end { tabular }
@@ -15107,12 +15494,12 @@ 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_@@_hpos_of_block_tl c }
+ { \str_set:Nn \l_@@_hpos_block_str c }
\c_math_toggle_token
\use:x
{
\exp_not:N \begin { array } [ \l_@@_vpos_of_block_tl ]
- { @ { } \l_@@_hpos_of_block_tl @ { } }
+ { @ { } \l_@@_hpos_block_str @ { } }
}
#5
\end { array }
@@ -15153,24 +15540,24 @@ version 2005/12/01 or later.
hvlines .default:n = true ,
line-width .dim_set:N = \l_@@_line_width_dim ,
line-width .value_required:n = true ,
- l .code:n = \tl_set:Nn \l_@@_hpos_of_block_tl l ,
+ l .code:n = \str_set:Nn \l_@@_hpos_block_str l ,
l .value_forbidden:n = true ,
- r .code:n = \tl_set:Nn \l_@@_hpos_of_block_tl r ,
+ r .code:n = \str_set:Nn \l_@@_hpos_block_str r ,
r .value_forbidden:n = true ,
- c .code:n = \tl_set:Nn \l_@@_hpos_of_block_tl c ,
+ c .code:n = \str_set:Nn \l_@@_hpos_block_str c ,
c .value_forbidden:n = true ,
- L .code:n = \tl_set:Nn \l_@@_hpos_of_block_tl l
+ L .code:n = \str_set:Nn \l_@@_hpos_block_str l
\bool_set_true:N \l_@@_hpos_of_block_cap_bool ,
L .value_forbidden:n = true ,
- R .code:n = \tl_set:Nn \l_@@_hpos_of_block_tl r
+ R .code:n = \str_set:Nn \l_@@_hpos_block_str r
\bool_set_true:N \l_@@_hpos_of_block_cap_bool ,
R .value_forbidden:n = true ,
- C .code:n = \tl_set:Nn \l_@@_hpos_of_block_tl c
+ C .code:n = \str_set:Nn \l_@@_hpos_block_str c
\bool_set_true:N \l_@@_hpos_of_block_cap_bool ,
C .value_forbidden:n = true ,
- t .code:n = \tl_set:Nn \l_@@_vpos_of_block_tl t ,
+ t .code:n = \str_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 .code:n = \str_set:Nn \l_@@_vpos_of_block_tl b ,
b .value_forbidden:n = true ,
unknown .code:n = \@@_error:n { Unknown~key~for~Block }
}
@@ -15546,7 +15933,7 @@ version 2005/12/01 or later.
\bool_if:NF \l_@@_hpos_of_block_cap_bool { - short }
}
{
- \str_case:Vn \l_@@_hpos_of_block_tl
+ \str_case:Vn \l_@@_hpos_block_str
{
c { center }
l { west }
@@ -15561,7 +15948,7 @@ version 2005/12/01 or later.
\pgfnode
{ rectangle }
{
- \str_case:Vn \l_@@_hpos_of_block_tl
+ \str_case:Vn \l_@@_hpos_block_str
{
c { base }
l { base~west }
@@ -15582,11 +15969,11 @@ 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_@@_hpos_of_block_tl r }
+ { \str_set:Nn \l_@@_hpos_block_str r }
\bool_if:nT \g_@@_last_col_found_bool
{
\int_compare:nNnT { #2 } = \g_@@_col_total_int
- { \tl_set:Nn \l_@@_hpos_of_block_tl l }
+ { \str_set:Nn \l_@@_hpos_block_str l }
}
\pgftransformshift
{
@@ -15596,7 +15983,7 @@ version 2005/12/01 or later.
\bool_if:NF \l_@@_hpos_of_block_cap_bool { - short }
}
{
- \str_case:Vn \l_@@_hpos_of_block_tl
+ \str_case:Vn \l_@@_hpos_block_str
{
c { center }
l { west }
@@ -15608,7 +15995,7 @@ version 2005/12/01 or later.
\pgfnode
{ rectangle }
{
- \str_case:Vn \l_@@_hpos_of_block_tl
+ \str_case:Vn \l_@@_hpos_block_str
{
c { center }
l { west }
@@ -15997,6 +16384,7 @@ version 2005/12/01 or later.
\group_end:
}
% \end{macrocode}
+%
%
% \bigskip
% \subsection*{The redefinition of the command \textbackslash dotfill }
@@ -16030,7 +16418,8 @@ version 2005/12/01 or later.
% \subsection*{The command \textbackslash diagbox}
%
% The command |\diagbox| will be linked to |\diagbox:nn| in the environments of
-% \pkg{nicematrix}.
+% \pkg{nicematrix}. However, there are also redefinitions of |\diagbox| in other
+% circonstancies.
%
% \begin{macrocode}
\cs_new_protected:Npn \@@_diagbox:nn #1 #2
@@ -16886,7 +17275,6 @@ version 2005/12/01 or later.
}
{
The~available~keys~are~(in~alphabetic~order):~
- define-L-C-R,~
footnote,~
footnotehyper,~
renew-dots,~and
@@ -16906,20 +17294,8 @@ version 2005/12/01 or later.
% \end{macrocode}
%
% \begin{macrocode}
-\@@_msg_new:nn { define-L-C-R }
- {
- You~have~used~the~key~'define-L-C-R'.~Please~note~that~this~key~
- will~probably~be~deleted~in~a~future~version~of~'nicematrix'.\\
- However,~you~can~go~on.
- }
-% \end{macrocode}
-%
-% \begin{macrocode}
\keys_define:nn { NiceMatrix / Package }
{
- define-L-C-R .code:n =
- \@@_error:n { define-L-C-R }
- \bool_set_true:N \c_@@_define_L_C_R_bool ,
renew-dots .bool_set:N = \l_@@_renew_dots_bool ,
renew-dots .value_forbidden:n = true ,
renew-matrix .code:n = \@@_renew_matrix: ,
@@ -17236,15 +17612,6 @@ version 2005/12/01 or later.
}
% \end{macrocode}
%
-% \begin{macrocode}
-\@@_msg_new:nn { old~column~type }
- {
- The~column~type~'#1'~is~no~longer~defined~in~'nicematrix'.~
- Since~version~5.0,~you~have~to~use~'l',~'c'~and~'r'~instead~of~'L',~
- 'C'~and~'R'.~You~can~also~use~the~key~'define-L-C-R'.\\
- This~error~is~fatal.
- }
-% \end{macrocode}
%
% \begin{macrocode}
\@@_msg_new:nn { bad~value~for~baseline }
@@ -17288,6 +17655,14 @@ version 2005/12/01 or later.
% \end{macrocode}
%
% \begin{macrocode}
+\@@_msg_new:nn { width~without~X~columns }
+ {
+ You~have~used~the~key~'width'~but~you~have~put~no~'X'~column. \\
+ If~you~go~on,~that~key~will~be~ignored.
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
\@@_msg_new:nn { empty~environment }
{ Your~\@@_full_name_env:\ is~empty.~This~error~is~fatal. }
% \end{macrocode}
@@ -18301,7 +18676,7 @@ version 2005/12/01 or later.
% \subsection*{Changes between versions 5.16 and 5.17}
%
% The key |define-L-C-R| (only available at load-time) now raises a (non fatal)
-% error (that key will probably be deleted in a future version of \pkg{nicematrix}).
+% error.
%
% Keys |L|, |C| and |R| for the command |\Block|.
%
@@ -18318,6 +18693,18 @@ version 2005/12/01 or later.
%
% New key |tikz| for the command |\Block|.
%
+%
+% \subsection*{Changes between versions 5.19 and 6.0}
+%
+% Columns |X| and environment |{NiceTabularX}|.
+%
+% Command |\rowlistcolors| available in the |\CodeBefore|.
+%
+% In columns with fixed width, the blocks are composed as paragraphs (wrapping
+% of the lines).
+%
+% The key |define-L-C-R| has been deleted.
+%
% \PrintIndex
%
% \tableofcontents
diff --git a/Master/texmf-dist/tex/latex/nicematrix/nicematrix.sty b/Master/texmf-dist/tex/latex/nicematrix/nicematrix.sty
index c9122db838d..b0fa2412209 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.19}
-\def\myfiledate{2021/07/23}
+\def\myfileversion{6.0}
+\def\myfiledate{2021/08/10}
\RequirePackage{pgfcore}
\usepgfmodule{shapes}
\RequirePackage{l3keys2e}
@@ -123,9 +123,7 @@
\AtBeginDocument
{
\@ifpackageloaded { colortbl }
- {
- \bool_set_true:N \c__nicematrix_colortbl_loaded_bool
- }
+ { \bool_set_true:N \c__nicematrix_colortbl_loaded_bool }
{
\cs_set_protected:Npn \CT@arc@ { }
\cs_set:Npn \arrayrulecolor #1 # { \CT@arc { #1 } }
@@ -152,6 +150,7 @@
}
}
}
+\cs_if_exist:NF \AtBeginEnvironment { \RequirePackage { etoolbox } }
\cs_set:Npn \__nicematrix_standard_cline #1 { \__nicematrix_standard_cline:w #1 \q_stop }
\cs_set:Npn \__nicematrix_standard_cline:w #1-#2 \q_stop
{
@@ -271,13 +270,6 @@
}
}
}
-\bool_new:N \c__nicematrix_define_L_C_R_bool
-\cs_new_protected:Npn \__nicematrix_define_L_C_R:
- {
- \newcolumntype L l
- \newcolumntype C c
- \newcolumntype R r
- }
\int_new:N \g__nicematrix_env_int
\cs_new:Npn \__nicematrix_env: { nm - \int_use:N \g__nicematrix_env_int }
\NewExpandableDocumentCommand \NiceMatrixLastEnv { }
@@ -286,10 +278,12 @@
{ \pgfpointanchor { \__nicematrix_env: - #1 } { center } }
\int_new:N \g__nicematrix_NiceMatrixBlock_int
\dim_new:N \l__nicematrix_columns_width_dim
+\dim_new:N \l__nicematrix_col_width_dim
+\dim_set:Nn \l__nicematrix_col_width_dim { -1 cm }
\int_new:N \g__nicematrix_row_total_int
\int_new:N \g__nicematrix_col_total_int
-\tl_new:N \l__nicematrix_cell_type_tl
-\tl_set:Nn \l__nicematrix_cell_type_tl { c }
+\str_new:N \l__nicematrix_hpos_cell_str
+\str_set:Nn \l__nicematrix_hpos_cell_str { c }
\dim_new:N \g__nicematrix_blocks_wd_dim
\dim_new:N \g__nicematrix_blocks_ht_dim
\dim_new:N \g__nicematrix_blocks_dp_dim
@@ -300,6 +294,7 @@
\dim_new:N \l__nicematrix_tabular_width_dim
\bool_new:N \l__nicematrix_Matrix_bool
\bool_new:N \g__nicematrix_rotate_bool
+\bool_new:N \l__nicematrix_X_column_bool
\tl_new:N \g__nicematrix_aux_tl
\cs_new_protected:Npn \__nicematrix_test_if_math_mode:
{
@@ -325,7 +320,7 @@
\int_new:N \l__nicematrix_old_iRow_int
\int_new:N \l__nicematrix_old_jCol_int
\tl_new:N \l__nicematrix_rules_color_tl
-\int_new:N \g__nicematrix_nb_of_X_int
+\int_new:N \g__nicematrix_total_X_weight_int
\bool_new:N \l__nicematrix_X_columns_aux_bool
\dim_new:N \l__nicematrix_X_columns_dim
\bool_new:N \g__nicematrix_after_col_zero_bool
@@ -349,6 +344,7 @@
\seq_new:N \g__nicematrix_pos_of_stroken_blocks_seq
\seq_new:N \l__nicematrix_corners_cells_seq
\seq_new:N \g__nicematrix_submatrix_names_seq
+\bool_new:N \l__nicematrix_width_used_bool
\seq_new:N \g__nicematrix_multicolumn_cells_seq
\seq_new:N \g__nicematrix_multicolumn_sizes_seq
\int_new:N \l__nicematrix_row_min_int
@@ -364,8 +360,8 @@
\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_hpos_of_block_tl
-\tl_set:Nn \l__nicematrix_hpos_of_block_tl { c }
+\str_new:N \l__nicematrix_hpos_block_str
+\str_set:Nn \l__nicematrix_hpos_block_str { c }
\bool_new:N \l__nicematrix_hpos_of_block_cap_bool
\tl_new:N \l__nicematrix_vpos_of_block_tl
\tl_set:Nn \l__nicematrix_vpos_of_block_tl { c }
@@ -652,7 +648,6 @@
}
\keys_define:nn { NiceMatrix / Env }
{
-
hvlines-except-corners .code:n =
{
\clist_set:Nn \l__nicematrix_corners_clist { #1 }
@@ -888,6 +883,9 @@
}
\keys_define:nn { NiceMatrix / NiceTabular }
{
+ 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 ,
notes / para .bool_set:N = \l__nicematrix_notes_para_bool ,
notes / para .default:n = true ,
notes / bottomrule .bool_set:N = \l__nicematrix_notes_bottomrule_bool ,
@@ -903,7 +901,7 @@
}
\cs_new_protected:Npn \__nicematrix_Cell:
{
- \tl_gclear:N \g__nicematrix_post_treatment_cell_tl
+ \tl_gclear:N \g__nicematrix_post_action_cell_tl
\cs_set_eq:NN \CodeAfter \__nicematrix_CodeAfter_i:n
\int_gincr:N \c@jCol
\int_compare:nNnT \c@jCol = 1
@@ -1007,7 +1005,7 @@
{
\__nicematrix_math_toggle_token:
\hbox_set_end:
- \g__nicematrix_post_treatment_cell_tl
+ \g__nicematrix_post_action_cell_tl
\bool_if:NT \g__nicematrix_rotate_bool \__nicematrix_rotate_cell_box:
\__nicematrix_adjust_size_box:
\box_set_ht:Nn \l__nicematrix_cell_box
@@ -1258,7 +1256,6 @@
\cs_set_eq:NN \Hspace \__nicematrix_Hspace:
\cs_set_eq:NN \Hdotsfor \__nicematrix_Hdotsfor:
\cs_set_eq:NN \Vdotsfor \__nicematrix_Vdotsfor:
- \cs_set_eq:NN \multicolumn \__nicematrix_multicolumn:nnn
\cs_set_eq:NN \Block \__nicematrix_Block:
\cs_set_eq:NN \rotate \__nicematrix_rotate:
\cs_set_eq:NN \OnlyMainNiceMatrix \__nicematrix_OnlyMainNiceMatrix:n
@@ -1269,6 +1266,9 @@
\cs_set_eq:NN \RowStyle \__nicematrix_RowStyle:n
\bool_if:NT \l__nicematrix_colortbl_like_bool \__nicematrix_colortbl_like:
\bool_if:NT \l__nicematrix_renew_dots_bool \__nicematrix_renew_dots:
+ \cs_set_eq:NN \multicolumn \__nicematrix_multicolumn:nnn
+ \AtBeginEnvironment { tabular }
+ { \cs_set_eq:NN \multicolumn \__nicematrix_old_multicolumn }
\seq_gclear:N \g__nicematrix_multicolumn_cells_seq
\seq_gclear:N \g__nicematrix_multicolumn_sizes_seq
\int_gset:Nn \c@iRow { \l__nicematrix_first_row_int - 1 }
@@ -1319,7 +1319,6 @@
\seq_gclear_new:N \g__nicematrix_multicolumn_sizes_seq
\__nicematrix_pre_array_ii:
\box_clear_new:N \l__nicematrix_the_array_box
- \bool_if:NT \c__nicematrix_define_L_C_R_bool \__nicematrix_define_L_C_R:
\__nicematrix_construct_preamble:
\dim_zero_new:N \l__nicematrix_left_delim_dim
\dim_zero_new:N \l__nicematrix_right_delim_dim
@@ -1354,7 +1353,7 @@
{
\tl_gput_right:Nn \g__nicematrix_row_style_tl
{
- \tl_gput_right:Nn \g__nicematrix_post_treatment_cell_tl
+ \tl_gput_right:Nn \g__nicematrix_post_action_cell_tl
{ \dim_set:Nn \l__nicematrix_cell_space_top_limit_dim { #1 } }
}
} ,
@@ -1363,7 +1362,7 @@
{
\tl_gput_right:Nn \g__nicematrix_row_style_tl
{
- \tl_gput_right:Nn \g__nicematrix_post_treatment_cell_tl
+ \tl_gput_right:Nn \g__nicematrix_post_action_cell_tl
{ \dim_set:Nn \l__nicematrix_cell_space_bottom_limit_dim { #1 } }
}
} ,
@@ -1420,6 +1419,7 @@
\cs_set_eq:NN \roundedrectanglecolor \__nicematrix_roundedrectanglecolor
\cs_set_eq:NN \rowcolor \__nicematrix_rowcolor
\cs_set_eq:NN \rowcolors \__nicematrix_rowcolors
+ \cs_set_eq:NN \rowlistcolors \__nicematrix_rowlistcolors
\cs_set_eq:NN \arraycolor \__nicematrix_arraycolor
\cs_set_eq:NN \columncolor \__nicematrix_columncolor
\cs_set_eq:NN \chessboardcolors \__nicematrix_chessboardcolors
@@ -1553,15 +1553,20 @@
\skip_horizontal:N \l__nicematrix_right_margin_dim
\skip_horizontal:N \l__nicematrix_extra_right_margin_dim
\hbox_set_end:
- \int_compare:nNnT \g__nicematrix_nb_of_X_int > 0
+ \bool_if:NT \l__nicematrix_width_used_bool
+ {
+ \int_compare:nNnT \g__nicematrix_total_X_weight_int = 0
+ { \__nicematrix_error:n { width~without~X~columns } }
+ }
+ \int_compare:nNnT \g__nicematrix_total_X_weight_int > 0
{
\bool_if:NTF \l__nicematrix_X_columns_aux_bool
{ \dim_set_eq:NN \l_tmpa_dim \l__nicematrix_X_columns_dim }
{
\dim_set:Nn \l_tmpa_dim
{
- ( \textwidth - \box_wd:N \l__nicematrix_the_array_box )
- / \int_use:N \g__nicematrix_nb_of_X_int
+ ( \l__nicematrix_width_dim - \box_wd:N \l__nicematrix_the_array_box )
+ / \int_use:N \g__nicematrix_total_X_weight_int
}
}
\tl_gput_right:Nx \g__nicematrix_aux_tl
@@ -1701,7 +1706,7 @@
{ ! { \skip_horizontal:N \arrayrulewidth } }
}
}
- \int_gzero:N \g__nicematrix_nb_of_X_int
+ \int_gzero:N \g__nicematrix_total_X_weight_int
\seq_clear:N \g__nicematrix_cols_vlism_seq
\int_zero:N \l_tmpa_int
\exp_after:wN \__nicematrix_patch_preamble:n \the \@temptokena \q_stop
@@ -1761,9 +1766,9 @@
! { \__nicematrix_patch_preamble_ii:nn #1 }
@ { \__nicematrix_patch_preamble_ii:nn #1 }
| { \__nicematrix_patch_preamble_iii:n #1 }
- p { \__nicematrix_patch_preamble_iv:nnn t #1 }
- b { \__nicematrix_patch_preamble_iv:nnn b #1 }
- m { \__nicematrix_patch_preamble_iv:nnn b #1 }
+ p { \__nicematrix_patch_preamble_iv:n #1 }
+ b { \__nicematrix_patch_preamble_iv:n #1 }
+ m { \__nicematrix_patch_preamble_iv:n #1 }
\__nicematrix_w: { \__nicematrix_patch_preamble_v:nnnn { } #1 }
\__nicematrix_W: { \__nicematrix_patch_preamble_v:nnnn { \cs_set_eq:NN \hss \hfil } #1 }
\__nicematrix_true_c: { \__nicematrix_patch_preamble_vi:n #1 }
@@ -1773,10 +1778,7 @@
) { \__nicematrix_patch_preamble_viii:nn #1 }
] { \__nicematrix_patch_preamble_viii:nn #1 }
\} { \__nicematrix_patch_preamble_viii:nn #1 }
- X { \__nicematrix_patch_preamble_xii: }
- C { \__nicematrix_error:nn { old~column~type } #1 }
- L { \__nicematrix_error:nn { old~column~type } #1 }
- R { \__nicematrix_error:nn { old~column~type } #1 }
+ X { \__nicematrix_patch_preamble_ix:n }
\q_stop { }
}
{
@@ -1808,7 +1810,7 @@
{
\tl_gput_right:Nn \g__nicematrix_preamble_tl
{
- > { \__nicematrix_Cell: \tl_set:Nn \l__nicematrix_cell_type_tl { #1 } }
+ > { \__nicematrix_Cell: \str_set:Nn \l__nicematrix_hpos_cell_str { #1 } }
#1
< \__nicematrix_end_Cell:
}
@@ -1853,35 +1855,93 @@
}
}
\bool_new:N \l__nicematrix_bar_at_end_of_pream_bool
-\cs_new_protected:Npn \__nicematrix_patch_preamble_iv:nnn #1 #2 #3
+\keys_define:nn { WithArrows / p-column }
+ {
+ r .code:n = \str_set:Nn \l__nicematrix_hpos_col_str { r } ,
+ r .value_forbidden:n = true ,
+ c .code:n = \str_set:Nn \l__nicematrix_hpos_col_str { c } ,
+ c .value_forbidden:n = true ,
+ l .code:n = \str_set:Nn \l__nicematrix_hpos_col_str { l } ,
+ l .value_forbidden:n = true ,
+ p .code:n = \str_set:Nn \l__nicematrix_vpos_col_str { p } ,
+ p .value_forbidden:n = true ,
+ t .meta:n = p ,
+ m .code:n = \str_set:Nn \l__nicematrix_vpos_col_str { m } ,
+ m .value_forbidden:n = true ,
+ b .code:n = \str_set:Nn \l__nicematrix_vpos_col_str { b } ,
+ b .value_forbidden:n = true
+ }
+\cs_new_protected:Npn \__nicematrix_patch_preamble_iv:n #1
+ {
+ \str_set:Nn \l__nicematrix_vpos_col_str { #1 }
+ \__nicematrix_patch_preamble_iv_i:n
+ }
+\cs_new_protected:Npn \__nicematrix_patch_preamble_iv_i:n #1
+ {
+ \str_if_eq:nnTF { #1 } { [ }
+ { \__nicematrix_patch_preamble_iv_ii:w [ }
+ { \__nicematrix_patch_preamble_iv_ii:w [ ] { #1 } }
+ }
+\cs_new_protected:Npn \__nicematrix_patch_preamble_iv_ii:w [ #1 ]
+ { \__nicematrix_patch_preamble_iv_iii:nn { #1 } }
+\cs_new_protected:Npn \__nicematrix_patch_preamble_iv_iii:nn #1 #2
+ {
+ \str_set:Nn \l__nicematrix_hpos_col_str { j }
+ \keys_set:nn { WithArrows / p-column } { #1 }
+ \__nicematrix_patch_preamble_iv_iv:n { #2 }
+ }
+\cs_new_protected:Npn \__nicematrix_patch_preamble_iv_iv:n #1
+ {
+ \use:x
+ {
+ \__nicematrix_patch_preamble_iv_v:nnnn
+ { \str_if_eq:VnTF \l__nicematrix_vpos_col_str { p } { t } { b } }
+ { \dim_eval:n { #1 } }
+ {
+ \str_if_eq:VnTF \l__nicematrix_hpos_col_str j
+ { \str_set:Nn \exp_not:N \l__nicematrix_hpos_cell_str { c } }
+ { \str_set:Nn \exp_not:N \l__nicematrix_hpos_cell_str \l__nicematrix_hpos_col_str }
+ \str_case:Vn \l__nicematrix_hpos_col_str
+ {
+ c { \exp_not:N \centering }
+ l { \exp_not:N \raggedright }
+ r { \exp_not:N \raggedleft }
+ }
+ }
+ { \str_if_eq:VnT \l__nicematrix_vpos_col_str { m } \__nicematrix_center_cell_box: }
+ }
+ \int_gincr:N \c@jCol
+ \__nicematrix_patch_preamble_x:n
+ }
+\cs_new_protected:Npn \__nicematrix_patch_preamble_iv_v:nnnn #1 #2 #3 #4
{
\tl_gput_right:Nn \g__nicematrix_preamble_tl
{
> {
+ \dim_set:Nn \l__nicematrix_col_width_dim { #2 }
\__nicematrix_Cell:
- \begin { minipage } [ #1 ] { \dim_eval:n { #3 } }
+ \begin { minipage } [ #1 ] { #2 }
\everypar
{
\vrule height \box_ht:N \@arstrutbox width \c_zero_dim
\everypar { }
}
- \g__nicematrix_row_style_tl % added the 2021-07-17
+ #3
+ \g__nicematrix_row_style_tl
\arraybackslash
}
c
< {
\@finalstrut \@arstrutbox
\end { minipage }
- \str_if_eq:nnT { #2 } m \__nicematrix_center_cell_box:
+ #4
\__nicematrix_end_Cell:
}
}
- \int_gincr:N \c@jCol
- \__nicematrix_patch_preamble_x:n
}
\cs_new_protected:Npn \__nicematrix_center_cell_box:
{
- \tl_gput_right:Nn \g__nicematrix_post_treatment_cell_tl
+ \tl_gput_right:Nn \g__nicematrix_post_action_cell_tl
{
\int_compare:nNnT
{ \box_ht:N \l__nicematrix_cell_box }
@@ -1905,9 +1965,10 @@
\tl_gput_right:Nn \g__nicematrix_preamble_tl
{
> {
+ \dim_set:Nn \l__nicematrix_col_width_dim { #4 }
\hbox_set:Nw \l__nicematrix_cell_box
\__nicematrix_Cell:
- \tl_set:Nn \l__nicematrix_cell_type_tl { #3 }
+ \str_set:Nn \l__nicematrix_hpos_cell_str { #3 }
}
c
< {
@@ -2008,6 +2069,47 @@
\__nicematrix_patch_preamble:n #3
}
}
+\cs_new_protected:Npn \__nicematrix_patch_preamble_ix:n #1
+ {
+ \str_if_eq:nnTF { #1 } { [ }
+ { \__nicematrix_patch_preamble_ix_i:w [ }
+ { \__nicematrix_patch_preamble_ix_i:w [ ] #1 }
+ }
+\cs_new_protected:Npn \__nicematrix_patch_preamble_ix_i:w [ #1 ]
+ { \__nicematrix_patch_preamble_ix_ii:n { #1 } }
+\keys_define:nn { WithArrows / X-column }
+ { unknown .code:n = \int_set:Nn \l__nicematrix_weight_int { \l_keys_key_str } }
+\cs_new_protected:Npn \__nicematrix_patch_preamble_ix_ii:n #1
+ {
+ \str_set:Nn \l__nicematrix_hpos_col_str { j }
+ \tl_set:Nn \l__nicematrix_vpos_col_str { p }
+ \int_zero_new:N \l__nicematrix_weight_int
+ \int_set:Nn \l__nicematrix_weight_int { 1 }
+ \keys_set_known:nnN { WithArrows / p-column } { #1 } \l_tmpa_tl
+ \keys_set:nV { WithArrows / X-column } \l_tmpa_tl
+ \int_gadd:Nn \g__nicematrix_total_X_weight_int \l__nicematrix_weight_int
+ \bool_if:NTF \l__nicematrix_X_columns_aux_bool
+ { \__nicematrix_patch_preamble_iv_iv:n { \l__nicematrix_weight_int \l__nicematrix_X_columns_dim } }
+ {
+ \tl_gput_right:Nn \g__nicematrix_preamble_tl
+ {
+ > {
+ \__nicematrix_Cell:
+ \bool_set_true:N \l__nicematrix_X_column_bool
+ \tl_gput_right:Nn \g__nicematrix_post_action_cell_tl
+ { \hbox_set:Nn \l__nicematrix_cell_box { } }
+ \begin { minipage } { 5 cm } \arraybackslash
+ }
+ c
+ < {
+ \end { minipage }
+ \__nicematrix_end_Cell:
+ }
+ }
+ \int_gincr:N \c@jCol
+ \__nicematrix_patch_preamble_x:n
+ }
+ }
\cs_new_protected:Npn \__nicematrix_patch_preamble_xi:n #1
{
\tl_gput_right:Nn \g__nicematrix_preamble_tl
@@ -2019,7 +2121,7 @@
\cs_new_protected:Npn \__nicematrix_patch_preamble_x:n #1
{
\str_if_eq:nnTF { #1 } { < }
- \__nicematrix_patch_preamble_ix:n
+ \__nicematrix_patch_preamble_xii:n
{
\tl_if_eq:NnTF \l__nicematrix_vlines_clist { all }
{
@@ -2037,32 +2139,11 @@
\__nicematrix_patch_preamble:n { #1 }
}
}
-\cs_new_protected:Npn \__nicematrix_patch_preamble_ix:n #1
+\cs_new_protected:Npn \__nicematrix_patch_preamble_xii:n #1
{
\tl_gput_right:Nn \g__nicematrix_preamble_tl { < { #1 } }
\__nicematrix_patch_preamble_x:n
}
-\cs_new_protected:Npn \__nicematrix_patch_preamble_xii:
- {
- \int_gincr:N \g__nicematrix_nb_of_X_int
- \bool_if:NTF \l__nicematrix_X_columns_aux_bool
- { \exp_args:NNNV \__nicematrix_patch_preamble_iv:nnn t p \l__nicematrix_X_columns_dim }
- {
- \tl_gput_right:Nn \g__nicematrix_preamble_tl
- {
- > {
- \__nicematrix_Cell:
- \tl_set:Nn \l__nicematrix_cell_type_tl { c }
- \tl_gput_right:Nn \g__nicematrix_post_treatment_cell_tl
- { \hbox_set:Nn \l__nicematrix_cell_box { } }
- }
- c
- < { \__nicematrix_end_Cell: }
- }
- \int_gincr:N \c@jCol
- \__nicematrix_patch_preamble_x:n
- }
- }
\cs_new:Npn \__nicematrix_multicolumn:nnn #1 #2 #3
{
\multispan { #1 }
@@ -2115,9 +2196,6 @@
\__nicematrix_w: { \__nicematrix_patch_m_preamble_v:nnnn { } #1 }
\__nicematrix_W: { \__nicematrix_patch_m_preamble_v:nnnn { \cs_set_eq:NN \hss \hfil } #1 }
\__nicematrix_true_c: { \__nicematrix_patch_m_preamble_vi:n #1 }
- C { \__nicematrix_error:nn { old~column~type } #1 }
- L { \__nicematrix_error:nn { old~column~type } #1 }
- R { \__nicematrix_error:nn { old~column~type } #1 }
\q_stop { }
}
{ \__nicematrix_fatal:nn { unknown~column~type } { #1 } }
@@ -2126,7 +2204,7 @@
{
\tl_gput_right:Nn \g__nicematrix_preamble_tl
{
- > { \__nicematrix_Cell: \tl_set:Nn \l__nicematrix_cell_type_tl { #1 } }
+ > { \__nicematrix_Cell: \str_set:Nn \l__nicematrix_hpos_cell_str { #1 } }
#1
< \__nicematrix_end_Cell:
}
@@ -2169,7 +2247,7 @@
> {
\hbox_set:Nw \l__nicematrix_cell_box
\__nicematrix_Cell:
- \tl_set:Nn \l__nicematrix_cell_type_tl { #3 }
+ \str_set:Nn \l__nicematrix_hpos_cell_str { #3 }
}
c
< {
@@ -2799,12 +2877,24 @@
{ \bool_gset_true:N \g__nicematrix_not_empty_cell_bool }
\NewDocumentEnvironment { NiceTabular } { O { } m ! O { } }
{
+ \dim_zero_new:N \l__nicematrix_width_dim
+ \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 }
\bool_set_true:N \l__nicematrix_NiceTabular_bool
\NiceArray { #2 }
}
{ \endNiceArray }
+\NewDocumentEnvironment { NiceTabularX } { m O { } m ! O { } }
+ {
+ \str_gset:Nn \g__nicematrix_name_env_str { NiceTabularX }
+ \dim_zero_new:N \l__nicematrix_width_dim
+ \dim_set:Nn \l__nicematrix_width_dim { #1 }
+ \keys_set:nn { NiceMatrix / NiceTabular } { #2 , #4 }
+ \bool_set_true:N \l__nicematrix_NiceTabular_bool
+ \NiceArray { #3 }
+ }
+ { \endNiceArray }
\NewDocumentEnvironment { NiceTabular* } { m O { } m ! O { } }
{
\str_gset:Nn \g__nicematrix_name_env_str { NiceTabular* }
@@ -4152,6 +4242,7 @@
{ \tl_gput_right:cx { g__nicematrix_color _ \int_use:N \l_tmpa_int _tl } { #2 } }
}
\cs_generate_variant:Nn \__nicematrix_add_to_colors_seq:nn { x n }
+\cs_generate_variant:Nn \__nicematrix_add_to_colors_seq:nn { x x }
\cs_new_protected:Npn \__nicematrix_actually_color:
{
\pgfpicture
@@ -4170,36 +4261,30 @@
\tl_set:Nn \l_tmpa_tl { #1 }
\tl_set:Nn \l_tmpb_tl { #2 }
}
+\cs_new_protected:Npn \__nicematrix_cartesian_color:nn #1 #2
+ {
+ \tl_set:Nn \l__nicematrix_rows_tl { #1 }
+ \tl_set:Nn \l__nicematrix_cols_tl { #2 }
+ \__nicematrix_cartesian_path:
+ }
\NewDocumentCommand \__nicematrix_rowcolor { O { } m m }
{
\tl_if_blank:nF { #2 }
{
\__nicematrix_add_to_colors_seq:xn
{ \tl_if_blank:nF { #1 } { [ #1 ] } { #2 } }
- { \__nicematrix_rowcolor:n { #3 } }
+ { \__nicematrix_cartesian_color:nn { #3 } { - } }
}
}
-\cs_new_protected:Npn \__nicematrix_rowcolor:n #1
- {
- \tl_set:Nn \l__nicematrix_rows_tl { #1 }
- \tl_set:Nn \l__nicematrix_cols_tl { - }
- \__nicematrix_cartesian_path:
- }
\NewDocumentCommand \__nicematrix_columncolor { O { } m m }
{
\tl_if_blank:nF { #2 }
{
\__nicematrix_add_to_colors_seq:xn
{ \tl_if_blank:nF { #1 } { [ #1 ] } { #2 } }
- { \__nicematrix_columncolor:n { #3 } }
+ { \__nicematrix_cartesian_color:nn { - } { #3 } }
}
}
-\cs_new_protected:Npn \__nicematrix_columncolor:n #1
- {
- \tl_set:Nn \l__nicematrix_rows_tl { - }
- \tl_set:Nn \l__nicematrix_cols_tl { #1 }
- \__nicematrix_cartesian_path:
- }
\NewDocumentCommand \__nicematrix_rectanglecolor { O { } m m m }
{
\tl_if_blank:nF { #2 }
@@ -4266,13 +4351,16 @@
restart .default:n = true ,
unknown .code:n = \__nicematrix_error:n { Unknown~key~for~rowcolors }
}
-\NewDocumentCommand \__nicematrix_rowcolors { O { } m m m O { } }
+\NewDocumentCommand \__nicematrix_rowlistcolors { O { } m m O { } }
{
\group_begin:
+ \seq_clear_new:N \l__nicematrix_colors_seq
+ \seq_set_split:Nnn \l__nicematrix_colors_seq { , } { #3 }
\tl_clear_new:N \l__nicematrix_cols_tl
\tl_set:Nn \l__nicematrix_cols_tl { - }
- \keys_set:nn { NiceMatrix / rowcolors } { #5 }
- \bool_set_true:N \l_tmpa_bool
+ \keys_set:nn { NiceMatrix / rowcolors } { #4 }
+ \int_zero_new:N \l__nicematrix_color_int
+ \int_set:Nn \l__nicematrix_color_int 1
\bool_if:NT \l__nicematrix_respect_blocks_bool
{
\seq_set_eq:NN \l_tmpb_seq \g__nicematrix_pos_of_blocks_seq
@@ -4289,8 +4377,8 @@
{ \tl_set:Nx \l_tmpb_tl { \int_use:N \c@iRow } }
\int_set:Nn \l_tmpa_int \l_tmpa_tl
\bool_if:NTF \l__nicematrix_rowcolors_restart_bool
- { \bool_set_true:N \l_tmpa_bool }
- { \bool_set:Nn \l_tmpa_bool { \int_if_odd_p:n { \l_tmpa_tl } } }
+ { \int_set:Nn \l__nicematrix_color_int 1 }
+ { \int_set:Nn \l__nicematrix_color_int \l_tmpa_tl }
\int_zero_new:N \l_tmpc_int
\int_set:Nn \l_tmpc_int \l_tmpb_tl
\int_do_until:nNnn \l_tmpa_int > \l_tmpc_int
@@ -4304,37 +4392,38 @@
}
\tl_set:Nx \l__nicematrix_rows_tl
{ \int_use:N \l_tmpa_int - \int_use:N \l_tmpb_int }
- \bool_if:NTF \l_tmpa_bool
+ \tl_clear_new:N \l__nicematrix_color_tl
+ \tl_set:Nx \l__nicematrix_color_tl
{
- \tl_if_blank:nF { #3 }
+ \__nicematrix_color_index:n
{
- \tl_if_empty:nTF { #1 }
- \color
- { \color [ #1 ] }
- { #3 }
- \__nicematrix_cartesian_path:
- \pgfusepath { fill }
+ \int_mod:nn
+ { \l__nicematrix_color_int - 1 }
+ { \seq_count:N \l__nicematrix_colors_seq }
+ + 1
}
- \bool_set_false:N \l_tmpa_bool
}
+ \tl_if_empty:NF \l__nicematrix_color_tl
{
- \tl_if_blank:nF { #4 }
- {
- \tl_if_empty:nTF { #1 }
- \color
- { \color [ #1 ] }
- { #4 }
- \__nicematrix_cartesian_path:
- \pgfusepath { fill }
- }
- \bool_set_true:N \l_tmpa_bool
+ \__nicematrix_add_to_colors_seq:xx
+ { \tl_if_blank:nF { #1 } { [ #1 ] } { \l__nicematrix_color_tl } }
+ { \__nicematrix_cartesian_color:nn { \l__nicematrix_rows_tl } { \l__nicematrix_cols_tl } }
}
+ \int_incr:N \l__nicematrix_color_int
\int_set:Nn \l_tmpa_int { \l_tmpb_int + 1 }
}
}
\endpgfpicture
\group_end:
}
+\cs_new:Npn \__nicematrix_color_index:n #1
+ {
+ \str_if_eq:eeTF { \seq_item:Nn \l__nicematrix_colors_seq { #1 } } { = }
+ { \__nicematrix_color_index:n { #1 - 1 } }
+ { \seq_item:Nn \l__nicematrix_colors_seq { #1 } }
+ }
+\NewDocumentCommand \__nicematrix_rowcolors { O { } m m m O { } }
+ { \__nicematrix_rowlistcolors [ #1 ] { #2 } { { #3 } , { #4 } } [ #5 ] }
\cs_new_protected:Npn \__nicematrix_rowcolors_i:nnnn #1 #2 #3 #4
{
\int_compare:nNnT { #3 } > \l_tmpb_int
@@ -4716,9 +4805,12 @@
\dim_set_eq:NN \l_tmpb_dim \pgf@y
\__nicematrix_qpoint:n { col - \__nicematrix_succ:n { #4 } }
\dim_set_eq:NN \l_tmpc_dim \pgf@x
- \bool_lazy_and:nnT
- { \int_compare_p:nNn { #2 } > 1 }
- { ! \tl_if_blank_p:V \CT@drsc@ }
+ \bool_lazy_all:nT
+ {
+ { \int_compare_p:nNn { #2 } > 1 }
+ { \cs_if_exist_p:N \CT@drsc@ } % condition added in version 6.0
+ { ! \tl_if_blank_p:V \CT@drsc@ }
+ }
{
\group_begin:
\CT@drsc@
@@ -5251,21 +5343,21 @@
}
\keys_define:nn { NiceMatrix / Block / FirstPass }
{
- l .code:n = \tl_set:Nn \l__nicematrix_hpos_of_block_tl l ,
+ l .code:n = \str_set:Nn \l__nicematrix_hpos_block_str l ,
l .value_forbidden:n = true ,
- r .code:n = \tl_set:Nn \l__nicematrix_hpos_of_block_tl r ,
+ r .code:n = \str_set:Nn \l__nicematrix_hpos_block_str r ,
r .value_forbidden:n = true ,
- c .code:n = \tl_set:Nn \l__nicematrix_hpos_of_block_tl c ,
+ c .code:n = \str_set:Nn \l__nicematrix_hpos_block_str c ,
c .value_forbidden:n = true ,
- L .code:n = \tl_set:Nn \l__nicematrix_hpos_of_block_tl l ,
+ L .code:n = \str_set:Nn \l__nicematrix_hpos_block_str l ,
L .value_forbidden:n = true ,
- R .code:n = \tl_set:Nn \l__nicematrix_hpos_of_block_tl r ,
+ R .code:n = \str_set:Nn \l__nicematrix_hpos_block_str r ,
R .value_forbidden:n = true ,
- C .code:n = \tl_set:Nn \l__nicematrix_hpos_of_block_tl c ,
+ C .code:n = \str_set:Nn \l__nicematrix_hpos_block_str c ,
C .value_forbidden:n = true ,
- t .code:n = \tl_set:Nn \l__nicematrix_vpos_of_block_tl t ,
+ t .code:n = \str_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 .code:n = \str_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 ,
@@ -5295,11 +5387,11 @@
{ \int_set:Nn \l_tmpb_int { #2 } }
\int_compare:nNnTF \l_tmpb_int = 1
{
- \tl_if_empty:NTF \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 }
+ \str_if_empty:NTF \l__nicematrix_hpos_cell_str
+ { \str_set:Nn \l__nicematrix_hpos_block_str c }
+ { \str_set_eq:NN \l__nicematrix_hpos_block_str \l__nicematrix_hpos_cell_str }
}
- { \tl_set:Nn \l__nicematrix_hpos_of_block_tl c }
+ { \str_set:Nn \l__nicematrix_hpos_block_str c }
\keys_set_known:nn { NiceMatrix / Block / FirstPass } { #3 }
\tl_set:Nx \l_tmpa_tl
{
@@ -5316,6 +5408,7 @@
\int_compare_p:nNn { \l_tmpb_int } = 1
)
&& ! \tl_if_empty_p:n { #5 }
+ && ! \l__nicematrix_X_column_bool
}
{ \exp_args:Nxx \__nicematrix_Block_iv:nnnnn }
{ \exp_args:Nxx \__nicematrix_Block_v:nnnnn }
@@ -5349,23 +5442,40 @@
\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_hpos_of_block_tl c }
+ \bool_if:NT \g__nicematrix_rotate_bool { \str_set:Nn \l__nicematrix_hpos_block_str c }
\bool_if:NTF \l__nicematrix_NiceTabular_bool
{
- \use:x
+ \bool_lazy_and:nnTF
+ { \int_compare_p:nNn { #2 } = 1 }
+ { \dim_compare_p:n { \l__nicematrix_col_width_dim >= \c_zero_dim } }
{
- \exp_not:N \begin { tabular } [ \l__nicematrix_vpos_of_block_tl ]
- { @ { } \l__nicematrix_hpos_of_block_tl @ { } }
+ \begin { minipage } [ l__nicematrix_vpos_of_block_tl ]
+ { \l__nicematrix_col_width_dim }
+ \str_case:Vn \l__nicematrix_hpos_block_str
+ {
+ c \centering
+ r \raggedleft
+ l \raggedright
+ }
+ #5
+ \end { minipage }
+ }
+ {
+ \use:x
+ {
+ \exp_not:N \begin { tabular } [ \l__nicematrix_vpos_of_block_tl ]
+ { @ { } \l__nicematrix_hpos_block_str @ { } }
+ }
+ #5
+ \end { tabular }
}
- #5
- \end { tabular }
}
{
\c_math_toggle_token
\use:x
{
\exp_not:N \begin { array } [ \l__nicematrix_vpos_of_block_tl ]
- { @ { } \l__nicematrix_hpos_of_block_tl @ { } }
+ { @ { } \l__nicematrix_hpos_block_str @ { } }
}
#5
\end { array }
@@ -5416,7 +5526,7 @@
\seq_gput_right:Nx \g__nicematrix_blocks_seq
{
\l_tmpa_tl
- { \exp_not:n { #3 } , \l__nicematrix_hpos_of_block_tl }
+ { \exp_not:n { #3 } , \l__nicematrix_hpos_block_str }
{
\box_use_drop:c
{ g__nicematrix_ block _ box _ \int_use:N \g__nicematrix_block_box_int _ box }
@@ -5439,11 +5549,11 @@
\dim_set_eq:NN \extrarowheight \c_zero_dim
#4
\bool_if:NT \g__nicematrix_rotate_bool
- { \tl_set:Nn \l__nicematrix_hpos_of_block_tl c }
+ { \str_set:Nn \l__nicematrix_hpos_block_str c }
\use:x
{
\exp_not:N \begin { tabular } [ \l__nicematrix_vpos_of_block_tl ]
- { @ { } \l__nicematrix_hpos_of_block_tl @ { } }
+ { @ { } \l__nicematrix_hpos_block_str @ { } }
}
#5
\end { tabular }
@@ -5455,12 +5565,12 @@
\dim_set_eq:NN \extrarowheight \c_zero_dim
#4
\bool_if:NT \g__nicematrix_rotate_bool
- { \tl_set:Nn \l__nicematrix_hpos_of_block_tl c }
+ { \str_set:Nn \l__nicematrix_hpos_block_str c }
\c_math_toggle_token
\use:x
{
\exp_not:N \begin { array } [ \l__nicematrix_vpos_of_block_tl ]
- { @ { } \l__nicematrix_hpos_of_block_tl @ { } }
+ { @ { } \l__nicematrix_hpos_block_str @ { } }
}
#5
\end { array }
@@ -5492,24 +5602,24 @@
hvlines .default: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_hpos_of_block_tl l ,
+ l .code:n = \str_set:Nn \l__nicematrix_hpos_block_str l ,
l .value_forbidden:n = true ,
- r .code:n = \tl_set:Nn \l__nicematrix_hpos_of_block_tl r ,
+ r .code:n = \str_set:Nn \l__nicematrix_hpos_block_str r ,
r .value_forbidden:n = true ,
- c .code:n = \tl_set:Nn \l__nicematrix_hpos_of_block_tl c ,
+ c .code:n = \str_set:Nn \l__nicematrix_hpos_block_str c ,
c .value_forbidden:n = true ,
- L .code:n = \tl_set:Nn \l__nicematrix_hpos_of_block_tl l
+ L .code:n = \str_set:Nn \l__nicematrix_hpos_block_str l
\bool_set_true:N \l__nicematrix_hpos_of_block_cap_bool ,
L .value_forbidden:n = true ,
- R .code:n = \tl_set:Nn \l__nicematrix_hpos_of_block_tl r
+ R .code:n = \str_set:Nn \l__nicematrix_hpos_block_str r
\bool_set_true:N \l__nicematrix_hpos_of_block_cap_bool ,
R .value_forbidden:n = true ,
- C .code:n = \tl_set:Nn \l__nicematrix_hpos_of_block_tl c
+ C .code:n = \str_set:Nn \l__nicematrix_hpos_block_str c
\bool_set_true:N \l__nicematrix_hpos_of_block_cap_bool ,
C .value_forbidden:n = true ,
- t .code:n = \tl_set:Nn \l__nicematrix_vpos_of_block_tl t ,
+ t .code:n = \str_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 .code:n = \str_set:Nn \l__nicematrix_vpos_of_block_tl b ,
b .value_forbidden:n = true ,
unknown .code:n = \__nicematrix_error:n { Unknown~key~for~Block }
}
@@ -5713,7 +5823,7 @@
\bool_if:NF \l__nicematrix_hpos_of_block_cap_bool { - short }
}
{
- \str_case:Vn \l__nicematrix_hpos_of_block_tl
+ \str_case:Vn \l__nicematrix_hpos_block_str
{
c { center }
l { west }
@@ -5725,7 +5835,7 @@
\pgfnode
{ rectangle }
{
- \str_case:Vn \l__nicematrix_hpos_of_block_tl
+ \str_case:Vn \l__nicematrix_hpos_block_str
{
c { base }
l { base~west }
@@ -5736,11 +5846,11 @@
}
{
\int_compare:nNnT { #2 } = 0
- { \tl_set:Nn \l__nicematrix_hpos_of_block_tl r }
+ { \str_set:Nn \l__nicematrix_hpos_block_str r }
\bool_if:nT \g__nicematrix_last_col_found_bool
{
\int_compare:nNnT { #2 } = \g__nicematrix_col_total_int
- { \tl_set:Nn \l__nicematrix_hpos_of_block_tl l }
+ { \str_set:Nn \l__nicematrix_hpos_block_str l }
}
\pgftransformshift
{
@@ -5750,7 +5860,7 @@
\bool_if:NF \l__nicematrix_hpos_of_block_cap_bool { - short }
}
{
- \str_case:Vn \l__nicematrix_hpos_of_block_tl
+ \str_case:Vn \l__nicematrix_hpos_block_str
{
c { center }
l { west }
@@ -5762,7 +5872,7 @@
\pgfnode
{ rectangle }
{
- \str_case:Vn \l__nicematrix_hpos_of_block_tl
+ \str_case:Vn \l__nicematrix_hpos_block_str
{
c { center }
l { west }
@@ -6566,7 +6676,6 @@
}
{
The~available~keys~are~(in~alphabetic~order):~
- define-L-C-R,~
footnote,~
footnotehyper,~
renew-dots,~and
@@ -6578,17 +6687,8 @@
is~not~clear).~You~should~use~the~conjonction~of~'renew-dots'~
and~'renew-matrix'.~However,~you~can~go~on.
}
-\__nicematrix_msg_new:nn { define-L-C-R }
- {
- You~have~used~the~key~'define-L-C-R'.~Please~note~that~this~key~
- will~probably~be~deleted~in~a~future~version~of~'nicematrix'.\\
- However,~you~can~go~on.
- }
\keys_define:nn { NiceMatrix / Package }
{
- define-L-C-R .code:n =
- \__nicematrix_error:n { define-L-C-R }
- \bool_set_true:N \c__nicematrix_define_L_C_R_bool ,
renew-dots .bool_set:N = \l__nicematrix_renew_dots_bool ,
renew-dots .value_forbidden:n = true ,
renew-matrix .code:n = \__nicematrix_renew_matrix: ,
@@ -6786,13 +6886,6 @@
The~key~'standard-cline'~is~available~only~in~the~preamble.\\
If~you~go~on~this~command~will~be~ignored.
}
-\__nicematrix_msg_new:nn { old~column~type }
- {
- The~column~type~'#1'~is~no~longer~defined~in~'nicematrix'.~
- Since~version~5.0,~you~have~to~use~'l',~'c'~and~'r'~instead~of~'L',~
- 'C'~and~'R'.~You~can~also~use~the~key~'define-L-C-R'.\\
- This~error~is~fatal.
- }
\__nicematrix_msg_new:nn { bad~value~for~baseline }
{
The~value~given~to~'baseline'~(\int_use:N \l_tmpa_int)~is~not~
@@ -6822,6 +6915,11 @@
{ ~Maybe~you~should~try~without~the~key~'slim'. } \\
If~you~go~on,~this~\token_to_str:N \SubMatrix\ will~be~ignored.
}
+\__nicematrix_msg_new:nn { width~without~X~columns }
+ {
+ You~have~used~the~key~'width'~but~you~have~put~no~'X'~column. \\
+ If~you~go~on,~that~key~will~be~ignored.
+ }
\__nicematrix_msg_new:nn { empty~environment }
{ Your~\__nicematrix_full_name_env:\ is~empty.~This~error~is~fatal. }
\__nicematrix_msg_new:nn { Delimiter~with~small }