summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/nicematrix
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2020-08-01 03:02:43 +0000
committerNorbert Preining <norbert@preining.info>2020-08-01 03:02:43 +0000
commit614c1765c3e9a6f5665cbf4f4fb60e768054c2d4 (patch)
tree57090b05f864f2b7a96c04eae6f19a74261aed62 /macros/latex/contrib/nicematrix
parentaadc6fbc73f1ca0b93f8c406c46cdb2600bce890 (diff)
CTAN sync 202008010302
Diffstat (limited to 'macros/latex/contrib/nicematrix')
-rw-r--r--macros/latex/contrib/nicematrix/nicematrix-french.pdfbin388513 -> 408728 bytes
-rw-r--r--macros/latex/contrib/nicematrix/nicematrix-french.tex1476
-rw-r--r--macros/latex/contrib/nicematrix/nicematrix.dtx1910
-rw-r--r--macros/latex/contrib/nicematrix/nicematrix.pdfbin953043 -> 990520 bytes
4 files changed, 2162 insertions, 1224 deletions
diff --git a/macros/latex/contrib/nicematrix/nicematrix-french.pdf b/macros/latex/contrib/nicematrix/nicematrix-french.pdf
index 6c8b213f5b..18e3ce9336 100644
--- a/macros/latex/contrib/nicematrix/nicematrix-french.pdf
+++ b/macros/latex/contrib/nicematrix/nicematrix-french.pdf
Binary files differ
diff --git a/macros/latex/contrib/nicematrix/nicematrix-french.tex b/macros/latex/contrib/nicematrix/nicematrix-french.tex
index 55491dddbd..bd13654d0d 100644
--- a/macros/latex/contrib/nicematrix/nicematrix-french.tex
+++ b/macros/latex/contrib/nicematrix/nicematrix-french.tex
@@ -146,7 +146,7 @@ commande est le groupe TeX courant : elles sont semi-globales).
\bigskip
{\bfseries \color{red} Important
-Dans cette version 5.0 de \pkg{nicematrix}, on doit utiliser les lettres |l|, |c| et
+Depuis la version 5.0 de \pkg{nicematrix}, on doit utiliser les lettres |l|, |c| et
|r| dans les préambules des environnements et non plus les lettres |L|, |C| et
|R|.
@@ -168,36 +168,35 @@ L'extension \pkg{nicematrix} définit les nouveaux environnements suivants :
\begin{ttfamily}
\setlength{\tabcolsep}{3mm}
\begin{tabular}{llll}
-\{NiceTabular\} & \{NiceArray\} & \{NiceMatrix\} \\
- & \{pNiceArray\} & \{pNiceMatrix\} \\
- & \{bNiceArray\} & \{bNiceMatrix\} \\
- & \{BNiceArray\} & \{BNiceMatrix\} \\
- & \{vNiceArray\} & \{vNiceMatrix\} \\
- & \{VNiceArray\} & \{VNiceMatrix\}
+\{NiceTabular\} & \{NiceArray\} & \{NiceMatrix\} \\
+\{NiceTabular*\} & \{pNiceArray\} & \{pNiceMatrix\} \\
+ & \{bNiceArray\} & \{bNiceMatrix\} \\
+ & \{BNiceArray\} & \{BNiceMatrix\} \\
+ & \{vNiceArray\} & \{vNiceMatrix\} \\
+ & \{VNiceArray\} & \{VNiceMatrix\}
\end{tabular}
\end{ttfamily}
\medskip
-Les environnements |{NiceArray}| et |{NiceTabular}| sont similaires aux environnements |{array}| et |{tabular}| de
+Les environnements |{NiceArray}|, |{NiceTabular}| et |{NiceTabular*}| sont
+similaires aux environnements |{array}|, |{tabular}| et |{tabular*}| de
l'extension \pkg{array} (qui est chargée par \pkg{nicematrix}).
\medskip
-Néanmoins, dans |{NiceArray}| (et ses variantes), les colonnes de type |w| (ex. : |wc{1cm}|) sont composées en mode
-mathématique alors que dans |{array}| de \pkg{array}, elles sont composées en
-mode texte.
+Les environnements |{pNiceArray}|, |{bNiceArray}|, etc. n'ont pas d'équivalents
+dans \pkg{array}.
\medskip
-Les environnements |{pNiceArray}|, |{bNiceArray}|, etc. n'ont pas d'équivalents dans \pkg{array}.
+Les environnements |{NiceMatrix}|, |{pNiceMatrix}|, etc. sont similaires aux
+environnements correspondants de l'\pkg{amsmath} (qui est chargée par
+\pkg{nicematrix}) : |{matrix}|, |{pmatrix}|, etc.
\medskip
-Les environnements |{NiceMatrix}|, |{pNiceMatrix}|, etc. sont similaires aux environnements correspondants de
-l'\pkg{amsmath} (qui est chargée par \pkg{nicematrix}) : |{matrix}|, |{pmatrix}|, etc.
-
-\medskip
-Tous les environnements de l'extension \pkg{nicematrix} acceptent, entre crochets, une liste optionnelle de paires
-de la forme \textsl{clé=valeur}. {\bfseries Il doit n'y avoir aucun espace devant le crochet ouvrant (|[|) de cette
-liste d'options.}
+Tous les environnements de l'extension \pkg{nicematrix} acceptent, entre
+crochets, une liste optionnelle de paires de la forme \textsl{clé=valeur}.
+{\bfseries Il doit n'y avoir aucun espace devant le crochet ouvrant (|[|) de
+ cette liste d'options.}
\bigskip
\textbf{Important}
@@ -215,8 +214,9 @@ doit être chargé avec l'option |define-L-C-R|.
\section{L'espace vertical entre les rangées}
-Il est bien connu que certaines rangées des tableaux créés par défault avec LaTeX sont trop proches l'une de
-l'autre. On en donne ci-dessous un exemple classique.
+Il est bien connu que certaines rangées des tableaux créés par défault avec
+LaTeX sont trop proches l'une de l'autre. On en donne ci-dessous un exemple
+classique.
\medskip
\begin{BVerbatim}[baseline=c,boxwidth=9cm]
@@ -231,13 +231,17 @@ $\begin{pmatrix}
\end{pmatrix}$
\bigskip
-En s'inspirant de l'extension \pkg{cellspace} qui traite de ce problème, l'extension \pkg{nicematrix} propose deux
-clés |cell-space-top-limit| et |cell-space-bottom-limit| qui sont similaires aux deux paramètres
-|\cellspacetoplimit| et |\cellspacebottomlimit| proposés par \pkg{cellspace}. La valeur initiale de ces paramètres
-est $0$~pt pour que les environnements de \pkg{nicematrix} aient par défaut le même comportement que ceux de
-\pkg{array} et de l'\pkg{amsmath} mais une valeur de $1$~pt serait un bon choix. On conseille de régler leurs
-valeurs avec la commande |\NiceMatrixOptions|.\footnote{On remarquera que ces paramètres s'appliquent aussi aux
- colonnes de type |S| de \pkg{siunitx} alors que \pkg{cellspace} n'est pas utilisable avec ces colonnes.}
+En s'inspirant de l'extension \pkg{cellspace} qui traite de ce problème,
+l'extension \pkg{nicematrix} propose deux clés |cell-space-top-limit| et
+|cell-space-bottom-limit| qui sont similaires aux deux paramètres
+|\cellspacetoplimit| et |\cellspacebottomlimit| proposés par \pkg{cellspace}. La
+valeur initiale de ces paramètres est $0$~pt pour que les environnements de
+\pkg{nicematrix} aient par défaut le même comportement que ceux de \pkg{array}
+et de l'\pkg{amsmath} mais une valeur de $1$~pt serait un bon choix. On
+conseille de régler leurs valeurs avec la commande
+|\NiceMatrixOptions|.\footnote{On remarquera que ces paramètres s'appliquent
+ aussi aux colonnes de type |S| de \pkg{siunitx} alors que \pkg{cellspace}
+ n'est pas utilisable avec ces colonnes.}
\medskip
\begin{Verbatim}
@@ -265,9 +269,10 @@ $\begin{pNiceMatrix}
\bigskip
\section{La clé baseline}
-L'extension \pkg{nicematrix} propose une option |baseline| pour la position verticale des tableaux. Cette
-option |baseline| prend comme valeur un entier qui indique le numéro de rangée dont la ligne de base servira de
-ligne de base pour le tableau.
+L'extension \pkg{nicematrix} propose une option |baseline| pour la position
+verticale des tableaux. Cette option |baseline| prend comme valeur un entier qui
+indique le numéro de rangée dont la ligne de base servira de ligne de base pour
+le tableau.
\medskip
\begin{BVerbatim}[baseline=c,boxwidth=9cm]
@@ -284,17 +289,18 @@ $A = \begin{pNiceMatrix}[baseline=2]
\end{pNiceMatrix}$
-\interitem
-L'option |baseline| peut aussi prendre les trois valeurs spéciales |t|, |c| et |b|. Ces trois lettres peuvent aussi
-être utilisées de manière absolue comme pour l'option des environnements |{tabular}| et |{array}| de \pkg{array}.
-La valeur initiale de |baseline| est~|c|.
+\interitem L'option |baseline| peut aussi prendre les trois valeurs spéciales
+|t|, |c| et |b|. Ces trois lettres peuvent aussi être utilisées de manière
+absolue comme pour l'option des environnements |{tabular}| et |{array}| de
+\pkg{array}. La valeur initiale de |baseline| est~|c|.
\bigskip
-Dans l'exemple suivant, on utilise l'option |t| (synonyme de |baseline=t|) immédiatement après un |\item| de liste.
-On remarquera que la présence d'un |\hline| initial n'empêche pas l'alignement sur la ligne de base de la première
-rangée (avec |{tabular}| ou |{array}| de \pkg{array}, il faut utiliser |\firsthline|\footnote{On peut aussi utiliser |\firsthline|
- dans les environnements de \pkg{nicematrix}.}).
+Dans l'exemple suivant, on utilise l'option |t| (synonyme de |baseline=t|)
+immédiatement après un |\item| de liste. On remarquera que la présence d'un
+|\hline| initial n'empêche pas l'alignement sur la ligne de base de la première
+rangée (avec |{tabular}| ou |{array}| de \pkg{array}, il faut utiliser
+|\firsthline|.
\smallskip
\begin{BVerbatim}[baseline=c,boxwidth=9cm]
@@ -365,15 +371,17 @@ u_n & 1 & 2 & 4 & 8 & 16 & 32 \\
\section{Les blocs}
\label{Block}
-Dans les environnements de \pkg{nicematrix}, on peut utiliser la commande |\Block| pour placer un élément au centre
-d'un rectangle de cases fusionnées. La commande |\Block| ne crée pas d'espace par elle-même.
+Dans les environnements de \pkg{nicematrix}, on peut utiliser la commande
+|\Block| pour placer un élément au centre d'un rectangle de cases fusionnées. La
+commande |\Block| ne crée pas d'espace par elle-même.
-La commande |\Block| doit être utilisée dans la case supérieure gauche du bloc avec deux arguments. Le premier
-argument est la taille de ce bloc avec la syntaxe $i$-$j$ où $i$ est le nombre de rangées et $j$ le nombre de
-colonnes du bloc. Le deuxième argument, est, sans surprise, le contenu du bloc.
+La commande |\Block| doit être utilisée dans la case supérieure gauche du bloc
+avec deux arguments. Le premier argument est la taille de ce bloc avec la
+syntaxe $i$-$j$ où $i$ est le nombre de rangées et $j$ le nombre de colonnes du
+bloc. Le deuxième argument, est, sans surprise, le contenu du bloc.
-Dans |{NiceTabular}|, le contenu est composé en mode texte. Dans les autres environnements, il est composé en mode
-mathématique.
+Dans |{NiceTabular}|, le contenu est composé en mode texte. Dans les autres
+environnements, il est composé en mode mathématique.
\medskip
\begin{BVerbatim}
@@ -397,10 +405,10 @@ arum & iris & jacinthe & muguet
\end{center}
-\interitem
-On remarquera que le centrage horizontal du contenu des blocs est correct même si un espacement des colonnes a été
-demandé par une instruction comme |!{\qquad}| dans le préambule (ce n'est pas le cas avec |\multicolumn|). Dans
-l'exemple suivant, l'en-tête «Premier groupe» est correctement centré.
+\interitem On remarquera que le centrage horizontal du contenu des blocs est
+correct même si un espacement des colonnes a été demandé par une instruction
+comme |!{\qquad}| dans le préambule (ce n'est pas le cas avec |\multicolumn|).
+Dans l'exemple suivant, l'en-tête «Premier groupe» est correctement centré.
\medskip
\begin{center}
@@ -458,10 +466,11 @@ $\begin{bNiceArray}{ccc|c}[margin]
\end{bNiceArray}$
\bigskip
-On peut souhaiter agrandir la taille du «$A$» placé dans le bloc de l'exemple précédent. Comme il est composé en
-mode mathématique, on ne peut pas directement utiliser une commande comme |\large|, |\Large| ou |\LARGE|. C'est
-pourquoi une option à mettre entre chevrons est proposée par |\Block| pour spécifier du code LaTeX qui sera inséré
-\emph{avant} le début du mode mathématique.
+On peut souhaiter agrandir la taille du «$A$» placé dans le bloc de l'exemple
+précédent. Comme il est composé en mode mathématique, on ne peut pas directement
+utiliser une commande comme |\large|, |\Large| ou |\LARGE|. C'est pourquoi une
+option à mettre entre chevrons est proposée par |\Block| pour spécifier du code
+LaTeX qui sera inséré \emph{avant} le début du mode mathématique.
\medskip
\begin{BVerbatim}[baseline=c,boxwidth=10.6cm]
@@ -484,60 +493,93 @@ $\begin{bNiceArray}{ccc|c}[margin]
\section{Les filets horizontaux et verticaux}
-Les techniques habituelles pour tracer des filets peuvent être utilisées dans les environnements de
-\pkg{nicematrix}, à l'exception de |\vline|.
+Les techniques habituelles pour tracer des filets peuvent être utilisées dans
+les environnements de \pkg{nicematrix}, à l'exception de |\vline|. Il y a
+néanmoins quelques petites différences de comportement avec les environnements
+classiques.
-\subsection{L'épaisseur et la couleur des filets}
-Les environnements de \pkg{nicematrix} proposent une clé |rules/width| pour fixer la largeur (en fait l'épaisseur)
-des filets dans l'environnement. En fait, cette clé ne fait que fixer la valeur de |\arrayrulewidth|.
+\bigskip
+\subsection{Quelques différences avec les environnements classiques}
-\smallskip
-On sait que \pkg{colortbl} propose la commande |\arrayrulecolor| pour spécifier la couleur de ces filets.
+\subsubsection{Les filets verticaux}
-\smallskip
-Avec \pkg{nicematrix}, il est possible de spécifier une couleur même si \pkg{colortbl} n'est pas chargé. Par souci
-de compatibilité, la commande est nommée également |\arrayrulecolor|. Les environnements de \pkg{nicematrix}
-proposent également une clé |rules/color| qui permet de fixer cette couleur pour l'environnement en question.
+Dans les environnements de \pkg{nicematrix}, les filets verticaux spécifiés par
+\verb+|+ dans le préambule des environnements ne sont jamais coupés, même en cas
+de ligne incomplète ou de double filet horizontal spécifié par |\hline\hline|
+(il n'y a pas besoin d'utiliser \pkg{hhline}).\footnote{Il s'agit là du comportement depuis la version 5.1 de
+ \pkg{nicematrix}. Dans les versions précédentes, le comportement était
+ le comportement par défaut de \pkg{array}.}
-\medskip
-\begin{scope}
-\hfuzz=10cm
-\begin{BVerbatim}[baseline=c,boxwidth=9.5cm]
-\begin{NiceTabular}{|ccc|}[~emphase#rules/color=[gray]{0.9},rules/width=1pt@]
-\hline
-rose & tulipe & lys \\
-arum & iris & violette \\
-muguet & dahlia & souci \\
-\hline
+\bigskip
+\begin{BVerbatim}[baseline=c,boxwidth=10cm]
+\begin{NiceTabular}{|c|c|} \hline
+Premier & Deuxième \\ ~emphase#\hline\hline@
+Paul \\ \hline
+Marie & Pauline \\ \hline
\end{NiceTabular}
\end{BVerbatim}
-\begin{NiceTabular}{|ccc|}[rules/color=[gray]{0.9},rules/width=1pt]
-\hline
-rose & tulipe & lys \\
-arum & iris & violette \\
-muguet & dahlia & souci \\
-\hline
+%
+\begin{NiceTabular}{|c|c|}[c] \hline
+Premier & Deuxième \\ \hline\hline
+Paul \\ \hline
+Marie & Pauline \\ \hline
\end{NiceTabular}
-\end{scope}
-\medskip
-Si on veut définir de nouveaux spécificateurs de colonnes pour des filets (par exemple plus épais ou bien d'une
-couleur spécifique), on aura peut-être intérêt à utiliser la commande |\OnlyMainNiceMatrix| décrite p.~\pageref{OnlyMainNiceMatrix}.
+\bigskip
+Si vous utilisez \pkg{booktabs} (qui fournit |\toprule|, |\midrule|,
+|\bottomrule|, etc.) et que vous tenez absolument à mettre des filets verticaux
+(ce qui est contraire à l'esprit à \pkg{booktabs}), vous constaterez que les
+filets tracés par \pkg{nicematrix} sont compatibles avec \pkg{booktabs}.
+\medskip
+\begin{BVerbatim}[baseline=c,boxwidth=10.5cm]
+$\begin{NiceArray}{~emphase#|cccc|@} \toprule
+a & b & c & d \\ \midrule
+1 & 2 & 3 & 4 \\
+1 & 2 & 3 & 4 \\ \bottomrule
+\end{NiceArray}$
+\end{BVerbatim}
+%
+$\begin{NiceArray}{|cccc|}
+\toprule
+a & b & c & d \\
+\midrule
+1 & 2 & 3 & 4 \\
+1 & 2 & 3 & 4 \\
+\bottomrule
+\end{NiceArray}$
\bigskip
-\subsection{Une remarque concernant \textbackslash cline}
+Il reste néanmoins possible de définir un spécificateur, nommé par exemple
+\verb|I|, pour tracer des filets verticaux avec le comportement standard de
+\pkg{array} :
+%
+\begin{Verbatim}
+\newcolumntype{I}{!{\vrule}}
+\end{Verbatim}
+
+En fait, en l'occurrence, il serait peut-être plus habile d'insérer
+|\OnlyMainNiceMatrix| (cf. p.~\pageref{OnlyMainNiceMatrix}) :
+\begin{Verbatim}
+\newcolumntype{I}{!{\OnlyMainNiceMatrix{\vrule}}}
+\end{Verbatim}
+
+
+
+\subsubsection{La commande \textbackslash cline}
\label{remark-cline}
-Les traits verticaux et horizontaux que l'on insère avec |\hline| et le spécificateur de colonne «\verb+|+» de
-\pkg{array} rendent le tableau plus large ou plus long d'une quantité égale à la largeur du trait.
+Les traits verticaux et horizontaux que l'on insère avec |\hline| et le
+spécificateur de colonne «\verb+|+» de \pkg{array} rendent le tableau plus large
+ou plus long d'une quantité égale à la largeur du trait (avec \pkg{array} et
+aussi avec \pkg{nicematrix}).
\smallskip
-Pour des raisons historiques, il n'en est pas de même pour la commande |\cline|, comme on peut le voir avec
-l'exemple suivant.
+Pour des raisons historiques, il n'en est pas de même pour la commande |\cline|,
+comme on peut le voir avec l'exemple suivant.
\medskip
\begin{BVerbatim}[baseline=c,boxwidth=10cm]
@@ -560,8 +602,9 @@ A&B&C&D \\
\end{scope}
\medskip
-Dans les environnements de \pkg{nicematrix}, cette situation est corrigée (il est néanmoins possible de revenir au
-comportement par défaut de |\cline| avec la clé |standard-cline|).
+Dans les environnements de \pkg{nicematrix}, cette situation est corrigée (il
+est néanmoins possible de revenir au comportement par défaut de |\cline| avec la
+clé |standard-cline|).
\medskip
\begin{BVerbatim}[baseline=c,boxwidth=10cm]
@@ -584,12 +627,63 @@ A&B&C&D \\
\end{scope}
+
+\subsection{L'épaisseur et la couleur des filets}
+
+Les environnements de \pkg{nicematrix} proposent une clé |rules/width| pour
+fixer la largeur (en fait l'épaisseur) des filets dans l'environnement. En fait,
+cette clé ne fait que fixer la valeur de |\arrayrulewidth|.
+
+\smallskip
+On sait que \pkg{colortbl} propose la commande |\arrayrulecolor| pour spécifier
+la couleur de ces filets.
+
+\smallskip
+Avec \pkg{nicematrix}, il est possible de spécifier une couleur même si
+\pkg{colortbl} n'est pas chargé. Par souci de compatibilité, la commande est
+nommée également |\arrayrulecolor|. Les environnements de \pkg{nicematrix}
+proposent également une clé |rules/color| qui permet de fixer cette couleur pour
+l'environnement en question.
+
+\medskip
+\begin{scope}
+\hfuzz=10cm
+\begin{BVerbatim}[baseline=c,boxwidth=9.5cm]
+\begin{NiceTabular}{|ccc|}[~emphase#rules/color=[gray]{0.9},rules/width=1pt@]
+\hline
+rose & tulipe & lys \\
+arum & iris & violette \\
+muguet & dahlia & souci \\
+\hline
+\end{NiceTabular}
+\end{BVerbatim}
+\begin{NiceTabular}{|ccc|}[rules/color=[gray]{0.9},rules/width=1pt]
+\hline
+rose & tulipe & lys \\
+arum & iris & violette \\
+muguet & dahlia & souci \\
+\hline
+\end{NiceTabular}
+\end{scope}
+
+\medskip
+Si on veut définir de nouveaux spécificateurs de colonnes pour des filets (par
+exemple plus épais ou bien d'une couleur spécifique), on aura peut-être intérêt
+à utiliser la commande |\OnlyMainNiceMatrix| décrite
+p.~\pageref{OnlyMainNiceMatrix}.
+
+
+
+
+
\bigskip
\subsection{Les clés hlines et vlines}
-La clé |hlines| demande un tracé de tous les filets horizontaux et la clé |vlines| demande un tracé de tous les
-filets verticaux. En fait, dans les environnements avec délimiteurs (comme |{pNiceMatrix}| ou |{bNiceArray}|), les
-filets extérieurs ne sont pas tracés (ce qui est le comportement certainement attendu).
+La clé |hlines| demande un tracé de tous les filets horizontaux et la clé
+|vlines| demande un tracé de tous les filets verticaux. En fait, dans les
+environnements avec délimiteurs (comme |{pNiceMatrix}| ou |{bNiceArray}|), les
+filets extérieurs ne sont pas tracés (ce qui est le comportement certainement
+attendu).
\medskip
@@ -607,61 +701,15 @@ $\begin{pNiceMatrix}[vlines,rules/width=0.2pt]
\end{pNiceMatrix}$
-\bigskip
-Il y a néanmoins une différence entre l'utilisation de l'option |vlines| et du spécificateur «\verb+|+» dans le
-préambule de l'environnement : les filets tracés par |vlines| traversent les double-filets horizontaux tracés par
-|\hline\hline| (il n'y a pas besoin d'utiliser \pkg{hhline}).
-
-\medskip
-\begin{BVerbatim}[baseline=c,boxwidth=11.5cm]
-$\begin{NiceMatrix}[~emphase#vlines@] \hline
-a & b & c & d \\ \hline \hline
-1 & 2 & 3 & 4 \\
-1 & 2 & 3 & 4 \\ \hline
-\end{NiceMatrix}$
-\end{BVerbatim}
-%
-$\begin{NiceMatrix}[vlines]
-\hline
-a & b & c & d \\
-\hline \hline
-1 & 2 & 3 & 4 \\
-1 & 2 & 3 & 4 \\
-\hline
-\end{NiceMatrix}$
-
-
-\bigskip
-Si vous utilisez \pkg{booktabs} (qui fournit |\toprule|, |\midrule|, |\bottomrule|, etc.) et que vous tenez
-absolument à mettre des filets verticaux (ce qui est contraire à l'esprit à \pkg{booktabs}), sachez que la clé
-|vlines| est compatible avec \pkg{booktabs}.
-
-\medskip
-\begin{BVerbatim}[baseline=c,boxwidth=11.5cm]
-$\begin{NiceMatrix}[~emphase#vlines@] \toprule
-a & b & c & d \\ \midrule
-1 & 2 & 3 & 4 \\
-1 & 2 & 3 & 4 \\ \bottomrule
-\end{NiceMatrix}$
-\end{BVerbatim}
-%
-$\begin{NiceMatrix}[vlines]
-\toprule
-a & b & c & d \\
-\midrule
-1 & 2 & 3 & 4 \\
-1 & 2 & 3 & 4 \\
-\bottomrule
-\end{NiceMatrix}$
-
\subsection{La clé hvlines}
\label{hvlines}
-La clé |hvlines| demande le tracé de tous les filets horizontaux et verticaux \emph{sauf dans les
- blocs}.\footnote{En fait, quand la clé |hvlines| (ou la clé |hvlines-except-corners| décrite juste après) est
- utilisée, les filets ne sont pas non plus tracés dans les blocs virtuels délimités par des cases reliées par des
- lignes pointillées (cf. p. \pageref{dotted-and-hvlines}).}
+La clé |hvlines| demande le tracé de tous les filets horizontaux et verticaux
+\emph{sauf dans les blocs}.\footnote{En fait, quand la clé |hvlines| (ou la clé
+ |hvlines-except-corners| décrite juste après) est utilisée, les filets ne sont
+ pas non plus tracés dans les blocs virtuels délimités par des cases reliées
+ par des lignes pointillées (cf. p. \pageref{dotted-and-hvlines}).}
\medskip
\begin{Verbatim}
@@ -685,8 +733,8 @@ arum & iris & jacinthe & muguet
\subsection{La clé hvlines-except-corners}
-La clé |hvlines-except-corners| demande le tracé de tous les filets horizontaux et verticaux \emph{sauf dans les
- blocs} et sauf dans les coins vides.
+La clé |hvlines-except-corners| demande le tracé de tous les filets horizontaux
+et verticaux \emph{sauf dans les blocs} et sauf dans les coins vides.
\medskip
\begin{Verbatim}
@@ -717,8 +765,8 @@ A & A & A & A & A & A \\
\end{NiceTabular}
\end{center}
-Comme on le voit, un «coin vide» est constitué de la réunion de tous les rectangles vides partant de la case située
-exactement dans le coin.
+Comme on le voit, un «coin vide» est constitué de la réunion de tous les
+rectangles vides partant de la case située exactement dans le coin.
\bigskip
\begin{BVerbatim}[boxwidth=11cm,baseline=c]
@@ -746,8 +794,9 @@ exactement dans le coin.
\subsection{La commande \textbackslash diagbox}
-La commande |\diagbox| (inspirée par l'extension \pkg{diagbox}) permet, quand elle est utilisée dans une case, de
-couper cette case selon une diagonale descendante.\footnote{L'auteur de ce document considère que ce type de
+La commande |\diagbox| (inspirée par l'extension \pkg{diagbox}) permet, quand
+elle est utilisée dans une case, de couper cette case selon une diagonale
+descendante.\footnote{L'auteur de ce document considère que ce type de
construction est un piètre choix graphique.}
\medskip
@@ -776,9 +825,10 @@ Cette commande |\diagbox| peut aussi être utilisée dans un |\Block|.
\subsection{Filets en pointillés}
-Dans les environnements de \pkg{nicematrix}, il est possible d'utiliser la commande |\hdottedline| (fournie
-par \pkg{nicematrix}) qui est l'équivalent pour les pointillés des commandes |\hline| et |\hdashline|
-(cette dernière étant une commande de \pkg{arydshln}).
+Dans les environnements de \pkg{nicematrix}, il est possible d'utiliser la
+commande |\hdottedline| (fournie par \pkg{nicematrix}) qui est l'équivalent pour
+les pointillés des commandes |\hline| et |\hdashline| (cette dernière étant une
+commande de \pkg{arydshln}).
\medskip
\begin{BVerbatim}[baseline=c,boxwidth=9.5cm]
@@ -798,8 +848,9 @@ $\begin{pNiceMatrix}
\bigskip
-Dans les environnements avec un préambule explicite (comme |{NiceTabular}|, |{NiceArray}|, etc.), il est possible
-de dessiner un trait vertical en pointillés avec le spécificateur «|:|».
+Dans les environnements avec un préambule explicite (comme |{NiceTabular}|,
+|{NiceArray}|, etc.), il est possible de dessiner un trait vertical en
+pointillés avec le spécificateur «|:|».
\medskip
\begin{BVerbatim}[baseline=c,boxwidth=9.5cm]
@@ -816,47 +867,77 @@ $\begin{pNiceArray}{cccc:c}
\end{pNiceArray}$
\bigskip
-Il est possible de changer dans \pkg{nicematrix} la lettre utilisée pour indiquer dans le préambule un trait
-vertical en pointillés avec l'option |letter-for-dotted-lines| disponible dans |\NiceMatrixOptions|.
+Il est possible de changer dans \pkg{nicematrix} la lettre utilisée pour
+indiquer dans le préambule un trait vertical en pointillés avec l'option
+|letter-for-dotted-lines| disponible dans |\NiceMatrixOptions|.
\bigskip
-\emph{Remarque} : Quand l'extension \pkg{array} (sur laquelle s'appuie \pkg{nicematrix}) est chargée, les traits
-verticaux et horizontaux que l'on insère rendent le tableau plus large ou plus long d'une quantité égale à la
-largeur du trait\footnote{En fait, cela est vrai pour |\hline| et «\verb+|+» mais pas pour |\cline|.}. Avec
-\pkg{nicematrix}, les lignes en pointillés tracées par |\hdottedline| et «|:|» ont le même effet.
+\emph{Remarque} : Quand l'extension \pkg{array} (sur laquelle s'appuie
+\pkg{nicematrix}) est chargée, les traits verticaux et horizontaux que l'on
+insère rendent le tableau plus large ou plus long d'une quantité égale à la
+largeur du trait\footnote{En fait, cela est vrai pour |\hline| et «\verb+|+»
+ mais pas pour |\cline| : cf. p.~\pageref{remark-cline}}. Avec
+\pkg{nicematrix}, les lignes en pointillés tracées par |\hdottedline| et «|:|»
+ont le même effet.
\section{Les couleurs des rangées et des colonnes}
-L'extension \pkg{colortbl} permet de colorier des cases, des rangées ou des colonnes d'un tableau. Néanmoins,
-l'affichage du \textsc{pdf} résultant n'est pas toujours parfait, en particulier quand on utilise également des
-filets. Dans certains lecteurs de \textsc{pdf}, des filets verticaux semblent disparaître. De fines lignes blanches
-peuvent également apparaître.
+\subsection{Utilisation de colortbl}
+
+Rappelons que l'extension \pkg{colortbl} peut être chargée directement par
+|\usepackage{colortbl}| ou en chargeant l'extension \pkg{xcolor} avec l'option
+|table| : |\usepackage[table]{xcolor}|.
\medskip
-L'extension \pkg{nicematrix} propose des outils similaires qui ne présentent pas ces inconvénients. Elle propose
-une clé |code-before|\footnote{Il existe aussi une clé |code-after| : cf. p.~\pageref{code-after}.} pour du code
-qui sera exécuté \emph{avant} le tracé du tableau. Dans ce |code-before|, de nouvelles commandes sont disponibles :
-|\cellcolor|, |\rectanglecolor|, |\rowcolor|, |\columncolor|, |\rowcolors| et |\chessboardcolors|.
-\label{code-before}
+Comme l'extension \pkg{nicematrix} est fondée sur \pkg{array}, il est possible
+d'utiliser \pkg{colortbl} avec \pkg{nicematrix}.
\medskip
-Ces outils sont indépendants de \pkg{colortbl}.\footnote{On peut donc colorier les filets, les cellules, les
- rangées, les colonnes, etc. sans charger \pkg{colortbl}. Le présent document ne charge pas \pkg{colortbl}.}
+Il y a néanmoins deux inconvénients :
+\begin{itemize}
+\item L'extension \pkg{colortbl} patche \pkg{array}, ce qui entraîne des
+incompatibilités (par exemple avec la commande |\hdotsfor|).
+
+\item L'extension \pkg{colortbl} construit le tableau ligne par ligne, en
+alternant rectangles colorés, filets et contenu des cases. Le \textsc{pdf}
+résultant déroute certains lecteurs de \textsc{pdf} et on a des artefacts
+d'affichage : des filets verticaux semblent disparaître ; au contraire, de fines
+lignes blanches peuvent apparaître. L'extension \pkg{nicematrix} proposent des
+outils qui évitent ces inconvénients.
+\end{itemize}
+
+\subsection{Les outils de nicematrix dans le code-before}
+
+L'extension \pkg{nicematrix} proposent des outils (indépendants de
+\pkg{colortbl}) pour tracer d'abord les rectangles colorés, puis le contenu des
+cases et les filets. Cette manière de faire est plus dans l'esprit du «modèle du
+peintre» des formats PostScript et \textsc{pdf} et convient donc mieux aux
+lecteurs de \textsc{pdf}. L'inconvénient est qu'elle nécessite plusieurs
+compilations successives.
+
+\medskip
+L'extension \pkg{nicematrix} fournit une clé |code-before| pour du code qui sera
+exécuté avant le tracé du tableau. De nouvelles commandes y sont disponibles :
+|\cellcolor|, |\rectanglecolor|, |\rowcolor|, |\columncolor|, |\rowcolors| et
+|\chessboardcolors|.
+\label{code-before}
\medskip
-Toutes ces commandes acceptent un argument optionnel (entre crochets et en première position) qui est le modèle
-colorimétrique pour la spécification des couleurs.
+Toutes ces commandes acceptent un argument optionnel (entre crochets et en
+première position) qui est le modèle colorimétrique pour la spécification des
+couleurs.
\medskip
\begin{itemize}
-\item La commande |\cellcolor| tient son nom de la commande |\cellcolor| de \pkg{colortbl}.
+\item La commande |\cellcolor| tient son nom de la commande |\cellcolor| de
+\pkg{colortbl}.
-Elle prend en arguments obligatoires une couleur et une liste de cases sous le format $i$-$j$ où $i$ est le
-numéro de ligne et $j$ le numéro de colonne.
+Elle prend en arguments obligatoires une couleur et une liste de cases sous le
+format $i$-$j$ où $i$ est le numéro de ligne et $j$ le numéro de colonne.
\medskip
\begin{scope}
@@ -878,8 +959,9 @@ h & i & j \\ \hline
\end{scope}
\bigskip
-\item La commande |\rectanglecolor| prend trois arguments obligatoires. Le premier est la couleur, les deux
-suivants fournissent la case en haut à gauche et la case en bas à droite du rectangle.
+\item La commande |\rectanglecolor| prend trois arguments obligatoires. Le
+premier est la couleur, les deux suivants fournissent la case en haut à gauche
+et la case en bas à droite du rectangle.
\medskip
\begin{scope}
@@ -903,9 +985,11 @@ h & i & j \\ \hline
\bigskip
-\item La commande |\rowcolor| doit son nom à la commande |\rowcolor| de \pkg{colortbl}. Son premier argument
-obligatoire est la couleur et le deuxième est une liste de numéros de rangées ou bien d'intervalles de rangées sous
-la forme $a$-$b$ (un intervalle de la forme $a$- représente toutes les rangées à partir de la rangée~$a$).
+\item La commande |\rowcolor| doit son nom à la commande |\rowcolor| de
+\pkg{colortbl}. Son premier argument obligatoire est la couleur et le deuxième
+est une liste de numéros de rangées ou bien d'intervalles de rangées sous la
+forme $a$-$b$ (un intervalle de la forme $a$- représente toutes les rangées à
+partir de la rangée~$a$).
\medskip
@@ -943,14 +1027,16 @@ a_{10} & b_{10} & c_{10} \\
\bigskip
-\item La commande |\columncolor| doit son nom à la commande |\columncolor| de \pkg{colortbl}. Sa syntaxe est
-similaire à celle de |\rowcolor|.
+\item La commande |\columncolor| doit son nom à la commande |\columncolor| de
+\pkg{colortbl}. Sa syntaxe est similaire à celle de |\rowcolor|.
\bigskip
-\item La commande |\rowcolors| (avec un \emph{s}) doit son nom à la commande |\rowcolors| de
-\pkg{xcolor}\footnote{La commande |\rowcolors| de \pkg{xcolor} est disponible quand \pkg{xcolor} est chargé avec
- l'option |table|.}. Le \emph{s} rappelle qu'il y a deux couleurs. Elle colorie alternativement les rangées avec
-les deux couleurs à partir de la rangée dont le numéro est donné en premier argument (obligatoire).
+\item La commande |\rowcolors| (avec un \emph{s}) doit son nom à la commande
+|\rowcolors| de \pkg{xcolor}\footnote{La commande |\rowcolors| de \pkg{xcolor}
+ est disponible quand \pkg{xcolor} est chargé avec l'option |table|.}. Le
+\emph{s} rappelle qu'il y a deux couleurs. Elle colorie alternativement les
+rangées avec les deux couleurs à partir de la rangée dont le numéro est donné en
+premier argument (obligatoire).
\medskip
\begin{scope}
@@ -978,8 +1064,8 @@ Estelle & 15
\bigskip
-\item La commande |\chessboardcolors| prend en arguments obligatoires deux couleurs et colorie les cases en
-quinconces avec les deux couleurs.
+\item La commande |\chessboardcolors| prend en arguments obligatoires deux
+couleurs et colorie les cases en quinconces avec les deux couleurs.
\medskip
\begin{scope}
@@ -1000,12 +1086,13 @@ $\begin{pNiceMatrix}%
\end{scope}
\medskip
-On a utilisé la clé |r| qui impose que toutes les colonnes soient alignées à droite (cf. p.~\pageref{key-R}).
+On a utilisé la clé |r| qui impose que toutes les colonnes soient alignées à
+droite (cf. p.~\pageref{key-R}).
\end{itemize}
\bigskip
-On remarquera que ces commandes sont compatibles avec les commandes de \pkg{booktabs} (|\toprule|, |\midrule|,
-|\bottomrule|, etc).
+On remarquera que ces commandes sont compatibles avec les commandes de
+\pkg{booktabs} (|\toprule|, |\midrule|, |\bottomrule|, etc).
\medskip
\begin{scope}
@@ -1050,14 +1137,61 @@ spécial & 12 & 12 & 0.5 & 70 \\
On a utilisé le type de colonne |S| de \pkg{siunitx}.
+\subsection{Outils de coloriage avec la syntaxe de colortbl}
+
+On peut accéder aux outils de coloriage précédents avec une syntaxe proche de
+celle proposée par \pkg{colortbl}. On doit pour cela utiliser la clé
+|colortbl-like| dans l'environnement concerné.\footnote{Pour le moment, cette
+ clé n'est pas disponible disponible dans |\NiceMatrixOptions|.}
+
+On a alors accès aux trois commandes suivantes :
+\begin{itemize}
+\item |\cellcolor| qui colorie la case courante ;
+\item |\rowcolor| à utiliser dans une case et qui colorie le reste de la rangée
+;
+\item |\columncolor| à utiliser dans le préambule de la même manière que la
+commande éponyme de \pkg{colortbl}\footnote{Contrairement à la commande
+|\columncolor| de \pkg{colortbl}, celle-ci peut apparaître à l'intérieur d'une
+autre commande, elle-même utilisée dans le préambule.}.
+\end{itemize}
+
+\medskip
+\begin{Verbatim}
+\begin{NiceTabular}[colortbl-like]{>{~emphase#\columncolor{blue!15}}@ccc}
+\toprule
+~emphase#\rowcolor{red!15}@
+Nom & Prénom & Année de naissance \\
+\midrule
+Achard & Jacques & 5 juin 1962 \\
+Lefebvre & Mathilde & 23 mai 1988 \\
+Vanesse & Stéphanie & 30 octobre 1994 \\
+Dupont & Chantal & 15 janvier 1998 \\
+\bottomrule
+\end{NiceTabular}
+\end{Verbatim}
+
+
+\begin{center}
+\begin{NiceTabular}[colortbl-like]{>{\columncolor{blue!15}}ccc}
+\toprule
+\rowcolor{red!15}
+Nom & Prénom & Année de naissance \\
+\midrule
+Achard & Jacques & 5 juin 1962 \\
+Lefebvre & Mathilde & 23 mai 1988 \\
+Vanesse & Stéphanie & 30 octobre 1994 \\
+Dupont & Chantal & 15 janvier 1998 \\
+\bottomrule
+\end{NiceTabular}
+\end{center}
+
+
\section{La largeur des colonnes}
\label{width}
-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}. Dans
-|{NiceTabular}|, les cases des colonnes de ce type sont composées en mode texte mais, dans |{NiceArray}|,
-|{pNiceArray}|, etc., elles sont composées en mode mathématique (alors que dans |{array}| de \pkg{array}, elles
-sont composées en mode texte).
+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}.
\medskip
\begin{BVerbatim}[baseline=c,boxwidth=9cm]
@@ -1075,8 +1209,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|.
+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|.
\medskip
\begin{BVerbatim}[baseline=c,boxwidth=10cm]
@@ -1093,15 +1228,17 @@ $\begin{pNiceMatrix}[columns-width = 1cm]
\end{pNiceMatrix}$
\medskip
-Notez que l'espace inséré entre deux colonnes (égal à 2 |\tabcolsep| dans |{NiceTabular}| et à 2 |\arraycolsep|
-dans les autres environnements) n'est pas supprimé (il est évidemment possible de le supprimer en mettant
-|\tabcolsep| ou |\arraycolsep| à~$0$ avant).
+Notez que l'espace inséré entre deux colonnes (égal à 2 |\tabcolsep| dans
+|{NiceTabular}| et à 2 |\arraycolsep| dans les autres environnements) n'est pas
+supprimé (il est évidemment possible de le supprimer en mettant |\tabcolsep| ou
+|\arraycolsep| à~$0$ avant).
\bigskip
-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|, un message demandant une
- deuxième compilation apparaîtra).}\par\nobreak
+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|,
+ un message demandant une deuxième compilation apparaîtra).}\par\nobreak
\medskip
\begin{BVerbatim}[baseline=c,boxwidth=10cm]
@@ -1118,8 +1255,9 @@ $\begin{pNiceMatrix}[columns-width = auto]
\end{pNiceMatrix}$
\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 commande |\NiceMatrixOptions|.\par\nobreak
+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
+commande |\NiceMatrixOptions|.\par\nobreak
\medskip
\begin{BVerbatim}[baseline=c,boxwidth=8.5cm]
@@ -1147,12 +1285,15 @@ c & d
\bigskip
-Mais il est aussi possible de fixer une zone dans laquelle toutes les matrices auront leurs colonnes de la même
-largeur, égale à la largeur de la case la plus large de toutes les matrices de la zone. Cette construction utilise
-l'environnement |{NiceMatrixBlock}| avec l'option |auto-columns-width|\footnote{Pour le moment, c'est le seul
- usage de l'environnement |{NiceMatrixBlock}| mais il pourrait y en avoir davantage dans le futur.}.
-L'environnement |{NiceMatrixBlock}| n'a pas de rapport direct avec la commande |\Block| présentée précédemment dans
-ce document (cf.~p.~\pageref{Block}).
+Mais il est aussi possible de fixer une zone dans laquelle toutes les matrices
+auront leurs colonnes de la même largeur, égale à la largeur de la case la plus
+large de toutes les matrices de la zone. Cette construction utilise
+l'environnement |{NiceMatrixBlock}| avec l'option
+|auto-columns-width|\footnote{Pour le moment, c'est le seul usage de
+ l'environnement |{NiceMatrixBlock}| mais il pourrait y en avoir davantage dans
+ le futur.}. L'environnement |{NiceMatrixBlock}| n'a pas de rapport direct avec
+la commande |\Block| présentée précédemment dans ce document
+(cf.~p.~\pageref{Block}).
\medskip
\begin{BVerbatim}[baseline=c,boxwidth=8.5cm]
@@ -1185,12 +1326,13 @@ $\begin{array}{c}
\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|.
+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|.
\label{exterior}
-Si elle est présente, la «première rangée» (extérieure) est numérotée par $0$ (et non $1$). Il en est de même pour
-la «première colonne».
+Si elle est présente, la «première rangée» (extérieure) est numérotée par $0$
+(et non $1$). Il en est de même pour la «première colonne».
\begin{Verbatim}
$\begin{pNiceMatrix}[~emphase#first-row,last-row,first-col,last-col@,nullify-dots]
@@ -1220,29 +1362,34 @@ Les lignes pointillées ont été tracées avec les outils présentés p.~\pager
Il y a plusieurs remarques à formuler.
%
\begin{itemize}[beginpenalty=10000]
-\item Si on utilise un environnement avec préambule explicite (c'est-à-dire |{NiceArray}| ou l'une de ses
-variantes), on ne doit pas mettre dans ce préambule de spécification de colonne pour les éventuelles première et
-dernière colonne : ce sera automatiquement (et nécessairement) une colonne |R| pour la première colonne et une
-colonne |L| pour la dernière.
+\item Si on utilise un environnement avec préambule explicite (c'est-à-dire
+|{NiceArray}| ou l'une de ses variantes), on ne doit pas mettre dans ce
+préambule de spécification de colonne pour les éventuelles première et dernière
+colonne : ce sera automatiquement (et nécessairement) une colonne |R| pour la
+première colonne et une colonne |L| pour la dernière.
\item On peut se demander comment \pkg{nicematrix} détermine le nombre de rangées et de colonnes nécessaires à la
composition de la «dernière rangée» et de la «dernière colonne».
\begin{itemize}
-\item Dans le cas d'un environnement avec préambule, comme |{NiceTabular}| ou |{pNiceArray}|, le nombre de colonnes
-se déduit évidemment du préambule.
-
-\item Dans le cas où l'option |light-syntax| (cf. p. \pageref{light-syntax}) est utilisée, \pkg{nicematrix} profite
-du fait que cette option nécessite de toutes manières le chargement complet du contenu de l'environnement (d'où
-l'impossibilité de mettre du verbatim dans ce cas-là) avant composition du 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 pouvoir l'utiliser à la compilation suivante.
-
-\textsl{Néanmoins, il est possible de donner le numéro de la dernière rangée et le numéro de la dernière colonne en
-arguments des options |last-row| et |last-col|, ce qui permettra d'accélérer le processus complet de
-compilation.} C'est ce que nous ferons dans la suite.
+\item Dans le cas d'un environnement avec préambule, comme |{NiceTabular}| ou
+|{pNiceArray}|, le nombre de colonnes se déduit évidemment du préambule.
+
+\item Dans le cas où l'option |light-syntax| (cf. p. \pageref{light-syntax}) est
+utilisée, \pkg{nicematrix} profite du fait que cette option nécessite de toutes
+manières le chargement complet du contenu de l'environnement (d'où
+l'impossibilité de mettre du verbatim dans ce cas-là) avant composition du
+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
+pouvoir l'utiliser à la compilation suivante.
+
+\textsl{Néanmoins, il est possible de donner le numéro de la dernière rangée et
+ le numéro de la dernière colonne en arguments des options |last-row| et
+ |last-col|, ce qui permettra d'accélérer le processus complet de compilation.}
+C'est ce que nous ferons dans la suite.
\end{itemize}
\end{itemize}
@@ -1250,9 +1397,10 @@ compilation.} C'est ce que nous ferons dans la suite.
\bigskip
-On peut contrôler l'apparence de ces rangées et colonnes avec les options |code-for-first-row|,
-|code-for-last-row|, |code-for-first-col| et |code-for-last-col|. Ces options sont des listes de tokens qui seront
-insérées au début de chaque case de la rangée ou de la colonne considérée.
+On peut contrôler l'apparence de ces rangées et colonnes avec les options
+|code-for-first-row|, |code-for-last-row|, |code-for-first-col| et
+|code-for-last-col|. Ces options sont des listes de tokens qui seront insérées
+au début de chaque case de la rangée ou de la colonne considérée.
\begin{Verbatim}
\NiceMatrixOptions{~emphase#code-for-first-row@ = \color{red},
@@ -1292,17 +1440,21 @@ L_4 & a_{41} & a_{42} & a_{43} & a_{44} & L_4 \\
\emph{Remarques}
\begin{itemize}[beginpenalty=10000]
-\item Comme on peut le voir dans l'exemple précédent, les filets horizontaux et verticaux ne s'étendent pas dans
-les rangées et colonnes extérieures.
-
-Néanmoins, si on veut définir de nouveaux spécificateurs de colonnes pour des filets (par exemple plus épais), on
-aura sans doute intérêt à utiliser la commande |\OnlyMainNiceMatrix| décrite p.~\pageref{OnlyMainNiceMatrix}.
-\item Une spécification de couleur présente dans |code-for-first-row| s'applique à une ligne pointillée tracée
-dans cette «première rangée» (sauf si une valeur a été donnée à |xdots/color|). Idem pour les autres.
-\item Sans surprise, une éventuelle option |columns-width| (décrite p.~\pageref{width}) ne s'applique pas à la
-«première colonne» ni à la «dernière colonne».
-\item Pour des raisons techniques, il n'est pas possible d'utiliser l'option de la commande |\\| après la
-«première rangée» ou avant la «dernière rangée» (le placement des délimiteurs serait erroné).
+\item Comme on peut le voir dans l'exemple précédent, les filets horizontaux et
+verticaux ne s'étendent pas dans les rangées et colonnes extérieures.
+
+Néanmoins, si on veut définir de nouveaux spécificateurs de colonnes pour des
+filets (par exemple plus épais), on aura sans doute intérêt à utiliser la
+commande |\OnlyMainNiceMatrix| décrite p.~\pageref{OnlyMainNiceMatrix}.
+\item Une spécification de couleur présente dans |code-for-first-row| s'applique
+à une ligne pointillée tracée dans cette «première rangée» (sauf si une valeur a
+été donnée à |xdots/color|). Idem pour les autres.
+\item Sans surprise, une éventuelle option |columns-width| (décrite
+p.~\pageref{width}) ne s'applique pas à la «première colonne» ni à la «dernière
+colonne».
+\item Pour des raisons techniques, il n'est pas possible d'utiliser l'option de
+la commande |\\| après la «première rangée» ou avant la «dernière rangée» (le
+placement des délimiteurs serait erroné).
\end{itemize}
@@ -1312,24 +1464,27 @@ dans cette «première rangée» (sauf si une valeur a été donnée à |xdots/c
\label{Cdots}
-À l'intérieur des environnements de l'extension \pkg{nicematrix}, de nouvelles commandes sont définies : |\Ldots|,
-|\Cdots|, |\Vdots|, |\Ddots|, et |\Iddots|. Ces commandes sont conçues pour être utilisées à la place de |\dots|,
-|\cdots|, |\vdots|, |\ddots| et |\iddots|.\footnote{La commande |\iddots|, définie dans \pkg{nicematrix}, est une
- variante de |\ddots| avec les points allant vers le haut. Si \pkg{mathdots} est chargée, la
- version de \pkg{mathdots} est utilisée. Elle correspond à la commande |\adots| de \pkg{unicode-math}.}
-\newcounter{fniddots}
-\setcounter{fniddots}{\thefootnote}
+À l'intérieur des environnements de l'extension \pkg{nicematrix}, de nouvelles
+commandes sont définies : |\Ldots|, |\Cdots|, |\Vdots|, |\Ddots|, et |\Iddots|.
+Ces commandes sont conçues pour être utilisées à la place de |\dots|, |\cdots|,
+|\vdots|, |\ddots| et |\iddots|.\footnote{La commande |\iddots|, définie dans
+ \pkg{nicematrix}, est une variante de |\ddots| avec les points allant vers le
+ haut. Si \pkg{mathdots} est chargée, la version de \pkg{mathdots} est
+ utilisée. Elle correspond à la commande |\adots| de \pkg{unicode-math}.}
+\newcounter{fniddots} \setcounter{fniddots}{\thefootnote}
\smallskip
-Chacune de ces commandes doit être utilisée seule dans la case du tableau et elle trace une ligne en pointillés
-entre les premières cases non vides\footnote{La définition précise de ce qui est considéré comme une «case vide»
- est donnée plus loin (cf. p.~\pageref{empty-cells}).} situées de part et d'autre de la case courante. Bien
-entendu, pour |\Ldots| et |\Cdots|, c'est une ligne horizontale ; pour |\Vdots|, c'est une ligne verticale et pour
-|\Ddots| et |\Iddots|, ce sont des lignes diagonales. On peut changer la couleur d'une ligne avec
-l'option~|color|.\footnote{Il est aussi possible de changer la couleur de toutes ces lignes pointillées avec
- l'option |xdots/color| (\textsl{xdots} pour rappeler que cela s'applique à |\Cdots|, |\Ldots|, |Vdots|, etc.) :
- cf. p.~\pageref{customization}).
-}\par\nobreak
+Chacune de ces commandes doit être utilisée seule dans la case du tableau et
+elle trace une ligne en pointillés entre les premières cases non
+vides\footnote{La définition précise de ce qui est considéré comme une «case
+ vide» est donnée plus loin (cf. p.~\pageref{empty-cells}).} situées de part et
+d'autre de la case courante. Bien entendu, pour |\Ldots| et |\Cdots|, c'est une
+ligne horizontale ; pour |\Vdots|, c'est une ligne verticale et pour |\Ddots| et
+|\Iddots|, ce sont des lignes diagonales. On peut changer la couleur d'une ligne
+avec l'option~|color|.\footnote{Il est aussi possible de changer la couleur de
+ toutes ces lignes pointillées avec l'option |xdots/color| (\textsl{xdots} pour
+ rappeler que cela s'applique à |\Cdots|, |\Ldots|, |Vdots|, etc.) : cf.
+ p.~\pageref{customization}). }\par\nobreak
\bigskip
\begin{BVerbatim}[baseline=c,boxwidth=10cm]
@@ -1352,8 +1507,8 @@ a_1 & a_2 & & & a_n
-\interitem
-Pour représenter la matrice nulle, on peut choisir d'utiliser le codage suivant :\par\nobreak
+\interitem Pour représenter la matrice nulle, on peut choisir d'utiliser le
+codage suivant :\par\nobreak
\bigskip
\begin{BVerbatim}[baseline=c,boxwidth=10cm]
@@ -1370,9 +1525,10 @@ $\begin{bNiceMatrix}
\end{bNiceMatrix}$
\bigskip
-On peut néanmoins souhaiter une matrice plus grande. Habituellement, dans un tel cas, les utilisateurs de LaTeX
-ajoutent une nouvelle ligne et une nouvelle colonne. Il est possible d'utiliser la même méthode avec
-\pkg{nicematrix} :\par\nobreak
+On peut néanmoins souhaiter une matrice plus grande. Habituellement, dans un tel
+cas, les utilisateurs de LaTeX ajoutent une nouvelle ligne et une nouvelle
+colonne. Il est possible d'utiliser la même méthode avec \pkg{nicematrix}
+:\par\nobreak
\bigskip
\begin{BVerbatim}[baseline=c,boxwidth=10cm]
@@ -1391,13 +1547,12 @@ $\begin{bNiceMatrix}
\end{bNiceMatrix}$
\bigskip
-Dans la première colonne de cet exemple, il y a deux instructions |\Vdots| mais une seule ligne en pointillés sera
-tracée (il n'y a pas d'objets qui se superposent dans le fichier \textsc{pdf} résultant\footnote{Et il n'est pas
- possible de tracer une ligne |\Ldots| et une ligne |\Cdots| entre les mêmes cases.}).
+Dans la première colonne de cet exemple, il y a deux instructions |\Vdots| mais,
+bien entendu, une seule ligne en pointillés sera.
\bigskip
-En fait, dans cet exemple, il aurait été possible de tracer la même matrice plus rapidement avec le codage suivant
-:\par\nobreak
+En fait, dans cet exemple, il aurait été possible de tracer la même matrice plus
+rapidement avec le codage suivant :\par\nobreak
\bigskip
\begin{BVerbatim}[baseline=c,boxwidth=10cm]
@@ -1416,15 +1571,19 @@ $\begin{bNiceMatrix}
\end{bNiceMatrix}$
\bigskip
-Il y a aussi d'autres moyens de changer la taille d'une matrice. On pourrait vouloir utiliser l'argument optionnel
-de la commande~|\\| pour l'espacement vertical et la commande~|\hspace*| dans une case pour l'espacement
-horizontal.\footnote{Dans \pkg{nicematrix}, il faut utiliser |\hspace*| et non |\hspace| car \pkg{nicematrix}
- utilise \pkg{array}. Remarquons aussi que l'on peut également régler la largeur des colonnes en utilisant l'environnement |{NiceArray}| (ou
- une de ses variantes) avec une colonne de type~|w| ou |W|: cf. p.~\pageref{width}}
-
-Toutefois, une commande~|\hspace*| pourrait interférer dans la construction des lignes en pointillés. C'est
-pourquoi l'extension \pkg{nicematrix} fournit une commande~|\Hspace| qui est une variante de |\hspace| transparente
-pour la construction des lignes en pointillés de \pkg{nicematrix}.\par\nobreak
+Il y a aussi d'autres moyens de changer la taille d'une matrice. On pourrait
+vouloir utiliser l'argument optionnel de la commande~|\\| pour l'espacement
+vertical et la commande~|\hspace*| dans une case pour l'espacement
+horizontal.\footnote{Dans \pkg{nicematrix}, il faut utiliser |\hspace*| et non
+ |\hspace| car \pkg{nicematrix} utilise \pkg{array}. Remarquons aussi que l'on
+ peut également régler la largeur des colonnes en utilisant l'environnement
+ |{NiceArray}| (ou une de ses variantes) avec une colonne de type~|w| ou |W|:
+ cf. p.~\pageref{width}}
+
+Toutefois, une commande~|\hspace*| pourrait interférer dans la construction des
+lignes en pointillés. C'est pourquoi l'extension \pkg{nicematrix} fournit une
+commande~|\Hspace| qui est une variante de |\hspace| transparente pour la
+construction des lignes en pointillés de \pkg{nicematrix}.\par\nobreak
\bigskip
\begin{BVerbatim}[baseline=c,boxwidth=10cm]
@@ -1442,8 +1601,8 @@ $\begin{bNiceMatrix}
\subsection{L'option nullify-dots}
-Considérons la matrice suivante qui a été composée classiquement avec l'environnement |{pmatrix}| de
-\pkg{amsmath}.\par\nobreak
+Considérons la matrice suivante qui a été composée classiquement avec
+l'environnement |{pmatrix}| de \pkg{amsmath}.\par\nobreak
\medskip
\begin{BVerbatim}[baseline=c,boxwidth=10cm]
@@ -1459,8 +1618,8 @@ x & & & & & x
\bigskip
-Si nous ajoutons des instructions |\ldots| dans la seconde rangée, la géométrie de la matrice est
-modifiée.\par\nobreak
+Si nous ajoutons des instructions |\ldots| dans la seconde rangée, la géométrie
+de la matrice est modifiée.\par\nobreak
\medskip
\begin{BVerbatim}[baseline=c,boxwidth=10cm]
@@ -1475,8 +1634,9 @@ x & \ldots & \ldots & \ldots & \ldots & x
\end{pmatrix}$
\bigskip
-Par défaut, avec \pkg{nicematrix}, si nous remplaçons |{pmatrix}| par |{pNiceMatrix}| et |\ldots| par |\Ldots|, la
-géométrie de la matrice n'est pas changée.\par\nobreak
+Par défaut, avec \pkg{nicematrix}, si nous remplaçons |{pmatrix}| par
+|{pNiceMatrix}| et |\ldots| par |\Ldots|, la géométrie de la matrice n'est pas
+changée.\par\nobreak
\medskip
\begin{BVerbatim}[baseline=c,boxwidth=10cm]
@@ -1491,8 +1651,9 @@ x & \Ldots & \Ldots & \Ldots & \Ldots & x
\end{pNiceMatrix}$
\bigskip
-On pourrait toutefois préférer la géométrie de la première matrice $A$ et vouloir avoir la même géométrie avec une
-ligne en pointillés continue dans la seconde rangée. C'est possible en utilisant l'option |nullify-dots| (et une
+On pourrait toutefois préférer la géométrie de la première matrice $A$ et
+vouloir avoir la même géométrie avec une ligne en pointillés continue dans la
+seconde rangée. C'est possible en utilisant l'option |nullify-dots| (et une
seule instruction |\Ldots| suffit).\par\nobreak
\medskip
@@ -1508,19 +1669,21 @@ x & \Ldots & & & & x
\end{pNiceMatrix}$
\medskip
-L'option |nullify-dots| «smashe» les instructions |\Ldots| (et ses variantes) horizontalement mais aussi
-verticalement.
+L'option |nullify-dots| «smashe» les instructions |\Ldots| (et ses variantes)
+horizontalement mais aussi verticalement.
-\subsection{La commande \textbackslash Hdotsfor}
+\subsection{Les commandes \textbackslash Hdotsfor et \textbackslash Vdotsfor}
-Certaines personnes utilisent habituellement la commande |\hdotsfor| de l'extension \pkg{amsmath} pour tracer des
-lignes en pointillés horizontales dans une matrice. Dans les environnements de \pkg{nicematrix}, il convient
-d'utiliser |\Hdotsfor| à la place pour avoir les lignes en pointillés similaires à toutes celles tracées par
-l'extension \pkg{nicematrix}.
+Certaines personnes utilisent habituellement la commande |\hdotsfor| de
+l'extension \pkg{amsmath} pour tracer des lignes en pointillés horizontales dans
+une matrice. Dans les environnements de \pkg{nicematrix}, il convient d'utiliser
+|\Hdotsfor| à la place pour avoir les lignes en pointillés similaires à toutes
+celles tracées par l'extension \pkg{nicematrix}.
-Comme avec les autres commandes de \pkg{nicematrix} (comme |\Cdots|, |\Ldots|, |\Vdots|, etc.), la ligne en
-pointillés tracée par |\Hdotsfor| s'étend jusqu'au contenu des cases de part et d'autre.
+Comme avec les autres commandes de \pkg{nicematrix} (comme |\Cdots|, |\Ldots|,
+|\Vdots|, etc.), la ligne en pointillés tracée par |\Hdotsfor| s'étend jusqu'au
+contenu des cases de part et d'autre.
\medskip
\begin{BVerbatim}[baseline=c,boxwidth=7cm]
@@ -1539,8 +1702,8 @@ $\begin{pNiceMatrix}
\end{pNiceMatrix}$
\bigskip
-Néanmoins, si ces cases sont vides, la ligne en pointillés s'étend seulement dans les cases spécifiées par
-l'argument de |\Hdotsfor| (par conception).
+Néanmoins, si ces cases sont vides, la ligne en pointillés s'étend seulement
+dans les cases spécifiées par l'argument de |\Hdotsfor| (par conception).
\medskip
\begin{BVerbatim}[baseline=c,boxwidth=7cm]
@@ -1559,38 +1722,81 @@ $\begin{pNiceMatrix}
\end{pNiceMatrix}$
\medskip
-Remarque : Contrairement à la commande |\hdotsfor| de \pkg{amsmath}, la commande |\Hdotsfor| est utilisable lorsque
-l'extension \pkg{colortbl} est chargée (mais vous risquez d'avoir des problèmes si vous utilisez |\rowcolor| sur la
-même rangée que |\Hdotsfor|).
+Remarque : Contrairement à la commande |\hdotsfor| de \pkg{amsmath}, la commande
+|\Hdotsfor| est utilisable lorsque l'extension \pkg{colortbl} est chargée (mais
+vous risquez d'avoir des problèmes si vous utilisez |\rowcolor| sur la même
+rangée que |\Hdotsfor|).
+
+\bigskip
+L'extension \pkg{nicematrix} propose aussi une commande |\Vdotsfor| similaire à
+|\Hdotsfor| mais traçant des lignes verticales.
+
+\bigskip
+L'exemple suivant utilise à la fois |\Hdotsfor| et |\Vdotsfor|:
+
+\begin{Verbatim}[formatcom=\small\color{gray}]
+\begin{bNiceMatrix}
+C[a_1,a_1] & \Cdots & C[a_1,a_n]
+ & \hspace*{20mm} & C[a_1,a_1^{(p)}] & \Cdots & C[a_1,a_n^{(p)}] \\
+\Vdots & \Ddots & \Vdots
+ & ~emphase#\Hdotsfor{1}@ & \Vdots & \Ddots & \Vdots \\
+C[a_n,a_1] & \Cdots & C[a_n,a_n]
+ & & C[a_n,a_1^{(p)}] & \Cdots & C[a_n,a_n^{(p)}] \\
+\rule{0pt}{15mm} & ~emphase#\Vdotsfor{1}@ & & \Ddots & & ~emphase#\Vdotsfor{1}@ \\
+C[a_1^{(p)},a_1] & \Cdots & C[a_1^{(p)},a_n]
+ & & C[a_1^{(p)},a_1^{(p)}] & \Cdots & C[a_1^{(p)},a_n^{(p)}] \\
+\Vdots & \Ddots & \Vdots
+ & ~emphase#\Hdotsfor{1}@ & \Vdots & \Ddots & \Vdots \\
+C[a_n^{(p)},a_1] & \Cdots & C[a_n^{(p)},a_n]
+ & & C[a_n^{(p)},a_1^{(p)}] & \Cdots & C[a_n^{(p)},a_n^{(p)}]
+\end{bNiceMatrix}
+\end{Verbatim}
+
+
+\[\begin{bNiceMatrix}
+C[a_1,a_1] & \Cdots & C[a_1,a_n] & \hspace*{20mm} & C[a_1,a_1^{(p)}] & \Cdots & C[a_1,a_n^{(p)}] \\
+\Vdots & \Ddots & \Vdots & \Hdotsfor{1} & \Vdots & \Ddots & \Vdots \\
+C[a_n,a_1] & \Cdots & C[a_n,a_n] & & C[a_n,a_1^{(p)}] & \Cdots & C[a_n,a_n^{(p)}] \\
+\rule{0pt}{15mm} & \Vdotsfor{1} & & \Ddots & & \Vdotsfor{1} \\
+C[a_1^{(p)},a_1] & \Cdots & C[a_1^{(p)},a_n] & & C[a_1^{(p)},a_1^{(p)}] & \Cdots & C[a_1^{(p)},a_n^{(p)}] \\
+\Vdots & \Ddots & \Vdots & \Hdotsfor{1} & \Vdots & \Ddots & \Vdots \\
+C[a_n^{(p)},a_1] & \Cdots & C[a_n^{(p)},a_n] & & C[a_n^{(p)},a_1^{(p)}] & \Cdots & C[a_n^{(p)},a_n^{(p)}]
+\end{bNiceMatrix}\]
+
+
\subsection{Comment créer les lignes en pointillés de manière transparente}
-L'extension \pkg{nicematrix} fournit une option appelée |transparent| qui permet d'utiliser du code existant de
-manière transparente dans les environnements de l'\pkg{amsmath} : |{matrix}|, |{pmatrix}|, etc. En fait, cette
-option est un alias pour la conjonction de deux options : |renew-dots| et |renew-matrix|.\footnote{Comme toutes les
- autres options, les options |renew-dots|, |renew-matrix| et |transparent| peuvent être fixées avec la commande
- |\NiceMatrixOptions|, mais elles peuvent aussi être passées en option du |\usepackage| (ce sont les trois
- seules).}
+L'extension \pkg{nicematrix} fournit une option appelée |transparent| qui permet
+d'utiliser du code existant de manière transparente dans les environnements de
+l'\pkg{amsmath} : |{matrix}|, |{pmatrix}|, etc. En fait, cette option est un
+alias pour la conjonction de deux options : |renew-dots| et
+|renew-matrix|.\footnote{Comme toutes les autres options, les options
+ |renew-dots|, |renew-matrix| et |transparent| peuvent être fixées avec la
+ commande |\NiceMatrixOptions|, mais elles peuvent aussi être passées en option
+ du |\usepackage| (ce sont les trois seules).}
\smallskip
\begin{itemize}
\item L'option |renew-dots|\par\nobreak
-Avec cette option, les commandes |\ldots|, |\cdots|, |\vdots|, |\ddots|, |\iddots|\footnotemark[\thefniddots] et
-|\hdotsfor| sont redéfinies dans les environnements de \pkg{nicematrix} et agissent alors comme |\Ldots|, |\Cdots|,
-|\Vdots|, |\Ddots|, |\Iddots| et |\Hdotsfor| ; la commande |\dots| (points de suspension «automatiques» de
-|amsmath|) est aussi redéfinie et se comporte comme |\Ldots|.
+Avec cette option, les commandes |\ldots|, |\cdots|, |\vdots|, |\ddots|,
+|\iddots|\footnotemark[\thefniddots] et |\hdotsfor| sont redéfinies dans les
+environnements de \pkg{nicematrix} et agissent alors comme |\Ldots|, |\Cdots|,
+|\Vdots|, |\Ddots|, |\Iddots| et |\Hdotsfor| ; la commande |\dots| (points de
+suspension «automatiques» de |amsmath|) est aussi redéfinie et se comporte comme
+|\Ldots|.
\item L'option |renew-matrix|\par\nobreak
-Avec cette option, l'environnement |{matrix}| est redéfini et se comporte comme |{NiceMatrix}| et il en est de même
-pour les cinq variantes.
+Avec cette option, l'environnement |{matrix}| est redéfini et se comporte comme
+|{NiceMatrix}| et il en est de même pour les cinq variantes.
\end{itemize}
\bigskip
-Par conséquent, avec l'option |transparent|, un code classique donne directement le résultat fourni par
-\pkg{nicematrix}.\par\nobreak
+Par conséquent, avec l'option |transparent|, un code classique donne directement
+le résultat fourni par \pkg{nicematrix}.\par\nobreak
\bigskip
\begin{scope}
@@ -1615,10 +1821,12 @@ $\begin{pmatrix}
\subsection{Les labels des lignes en pointillés}
-Les commandes |\Ldots|, |\Cdots|, |\Vdots|, |\Ddots|, |\Iddots| et |\Hdotsfor| (ainsi que la commande |\line| dans
-le |code-after| décrite p.~\pageref{line-in-code-after}) peuvent en fait prendre deux arguments optionnels
-spécifiés par les caractères |_| et |^| pour des labels situés au-dessous et au-dessus de la ligne. Les arguments
-sont composés en mode mathématique avec |\scriptstyle|.
+Les commandes |\Ldots|, |\Cdots|, |\Vdots|, |\Ddots|, |\Iddots| et |\Hdotsfor|
+(ainsi que la commande |\line| dans le |code-after| décrite
+p.~\pageref{line-in-code-after}) peuvent en fait prendre deux arguments
+optionnels spécifiés par les caractères |_| et |^| pour des labels situés
+au-dessous et au-dessus de la ligne. Les arguments sont composés en mode
+mathématique avec |\scriptstyle|.
\begin{BVerbatim}[baseline=c,boxwidth=10cm]
$\begin{bNiceMatrix}
@@ -1637,9 +1845,10 @@ $\begin{bNiceMatrix}
\label{customization}
-Les lignes pointillées tracées par |\Ldots|, |\Cdots|, |\Vdots|, |\Ddots|, |\Iddots| et |\Hdotsfor| (ainsi que par la
-commande |\line| dans le |code-after| décrite p.~\pageref{line-in-code-after}) peuvent être
-paramétrées par trois options (que l'on met entre crochets après la commande) :
+Les lignes pointillées tracées par |\Ldots|, |\Cdots|, |\Vdots|, |\Ddots|,
+|\Iddots| et |\Hdotsfor| (ainsi que par la commande |\line| dans le |code-after|
+décrite p.~\pageref{line-in-code-after}) peuvent être paramétrées par trois
+options (que l'on met entre crochets après la commande) :
%
\begin{itemize}
\item |color| ;
@@ -1647,8 +1856,9 @@ paramétrées par trois options (que l'on met entre crochets après la commande)
\item |line-style|.
\end{itemize}
-Ces options peuvent aussi être fixées avec |\NiceMatrixOptions| ou bien au niveau d'un environnement mais elles
-doivent alors être préfixées par |xdots|, ce qui fait que leurs noms deviennent :
+Ces options peuvent aussi être fixées avec |\NiceMatrixOptions| ou bien au
+niveau d'un environnement mais elles doivent alors être préfixées par |xdots|,
+ce qui fait que leurs noms deviennent :
%
\begin{itemize}
\item |xdots/color| ;
@@ -1662,8 +1872,9 @@ Pour la clarté, dans la suite, on utilisera ces noms-là.
\textbf{L'option xdots/color}\par\nobreak
\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.
+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.
p.~\pageref{exterior}.
@@ -1671,21 +1882,24 @@ p.~\pageref{exterior}.
\textbf{L'option xdots/shorten}\par\nobreak
\smallskip
-L'option |xdots/shorten| indique la marge qui est laissée aux deux extrémités de la ligne. Le nom s'inspire des options
-«|shorten >|» et «|shorten <|» de Tikz, mais il faut remarquer que \pkg{nicematrix} ne propose que |xdots/shorten|.
-La valeur initiale de ce paramètre est de $0.3$~em (il est conseillé d'utiliser une unité de mesure dépendante de
-la fonte courante).
+L'option |xdots/shorten| indique la marge qui est laissée aux deux extrémités de
+la ligne. Le nom s'inspire des options «|shorten >|» et «|shorten <|» de Tikz,
+mais il faut remarquer que \pkg{nicematrix} ne propose que |xdots/shorten|. La
+valeur initiale de ce paramètre est de $0.3$~em (il est conseillé d'utiliser une
+unité de mesure dépendante de la fonte courante).
\bigskip
\textbf{L'option xdots/line-style}\par\nobreak
\smallskip
-Il faut savoir que, par défaut, les lignes de Tikz tracées avec le paramètre |dotted| sont composées de points
-carrés et non pas ronds.\footnote{La raison de départ est que le format \textsc{pdf} comporte un système de description
- de lignes en tiretés, qui, puisqu'il est incorporé dans le \textsc{pdf}, est affiché très rapidement par les
- lecteurs de \textsc{pdf}. Il est facile à partir de ce type de ligne de créer des lignes de points carrés alors
- qu'une ligne de points ronds doit être construite explicitement point par point.}
+Il faut savoir que, par défaut, les lignes de Tikz tracées avec le paramètre
+|dotted| sont composées de points carrés et non pas ronds.\footnote{La raison de
+ départ est que le format \textsc{pdf} comporte un système de description de
+ lignes en tiretés, qui, puisqu'il est incorporé dans le \textsc{pdf}, est
+ affiché très rapidement par les lecteurs de \textsc{pdf}. Il est facile à
+ partir de ce type de ligne de créer des lignes de points carrés alors qu'une
+ ligne de points ronds doit être construite explicitement point par point.}
\begin{BVerbatim}[baseline=c,boxwidth=9cm]
\tikz \draw [dotted] (0,0) -- (5,0) ;
@@ -1693,15 +1907,18 @@ carrés et non pas ronds.\footnote{La raison de départ est que le format \texts
\tikz \draw [dotted] (0,0) -- (5,0) ;
\bigskip
-Voulant proposer des lignes avec des points ronds dans le style de celui de |\ldots| (au moins celui des fontes
-\emph{Computer Modern}), l'extension \pkg{nicematrix} contient en interne son propre système de ligne en pointillés
-(qui, au passage, n'utilise que \pkg{pgf} et non \pkg{tikz}). Ce style est appelé le style |standard|. Cette valeur
-est la valeur initiale du paramètre |xdots/line-style|.
+Voulant proposer des lignes avec des points ronds dans le style de celui de
+|\ldots| (au moins celui des fontes \emph{Computer Modern}), l'extension
+\pkg{nicematrix} contient en interne son propre système de ligne en pointillés
+(qui, au passage, n'utilise que \pkg{pgf} et non \pkg{tikz}). Ce style est
+appelé le style |standard|. Cette valeur est la valeur initiale du paramètre
+|xdots/line-style|.
\bigskip
-Néanmoins (quand Tikz est chargé), on peut utiliser pour |xdots/line-style| n'importe quel style proposé par Tikz,
-c'est-à-dire n'importe quelle suite d'options Tikz applicables à un chemin (à l'exception de «|color|»,
-«|shorten >|» et «|shorten <|»).
+Néanmoins (quand Tikz est chargé), on peut utiliser pour |xdots/line-style|
+n'importe quel style proposé par Tikz, c'est-à-dire n'importe quelle suite
+d'options Tikz applicables à un chemin (à l'exception de «|color|»,
+«|shorten >|» et «|shorten <|»).
\medskip
Voici par exemple une matrice tridiagonale avec le style |loosely dotted| :\par\nobreak
@@ -1733,9 +1950,10 @@ b & a & b & \Ddots & & \Vdots \\
\label{dotted-and-hvlines}
-On a dit (cf. p. \pageref{hvlines}) que la clé |hvlines| trace tous les filets horizontaux et verticaux, exceptés
-dans les blocs. En fait, avec cette clé, les filets ne sont pas non plus tracés dans les blocs virtuels délimités
-par des cases reliées par des lignes pointillées.
+On a dit (cf. p. \pageref{hvlines}) que la clé |hvlines| trace tous les filets
+horizontaux et verticaux, exceptés dans les blocs. En fait, avec cette clé, les
+filets ne sont pas non plus tracés dans les blocs virtuels délimités par des
+cases reliées par des lignes pointillées.
\medskip
\begin{BVerbatim}[baseline=c,boxwidth=10.6cm]
@@ -1758,13 +1976,15 @@ $\begin{bNiceMatrix}[margin,hvlines]
\label{code-after}
-L'option |code-after| peut être utilisée pour indiquer du code qui sera exécuté après la construction de la
-matrice.\footnote{Il existe aussi une clé |code-before| décrite p.~\pageref{code-before}.}
+L'option |code-after| peut être utilisée pour indiquer du code qui sera exécuté
+après la construction de la matrice.\footnote{Il existe aussi une clé
+ |code-before| décrite p.~\pageref{code-before}.}
-Une commande spéciale, nommée |\line| est disponible pour tracer directement des lignes en pointillés entre les
-cases. Elle prend deux arguments correspondant aux deux cases à relier, chacun de la forme $i$-$j$ où $i$ est le
-numéro de ligne et $j$ est le numéro de colonne. Elle peut par exemple être utilisée pour tracer une ligne entre
-deux cases adjacentes comme dans l'exemple suivant.
+Une commande spéciale, nommée |\line| est disponible pour tracer directement des
+lignes en pointillés entre les cases. Elle prend deux arguments correspondant
+aux deux cases à relier, chacun de la forme $i$-$j$ où $i$ est le numéro de
+ligne et $j$ est le numéro de colonne. Elle peut par exemple être utilisée pour
+tracer une ligne entre deux cases adjacentes comme dans l'exemple suivant.
\label{line-in-code-after}
\medskip
@@ -1788,11 +2008,11 @@ I & 0 & \Cdots &0 \\
\end{scope}
\medskip
-Pour améliorer la lisibilité du code, une syntaxe alternative est proposée : on peut spécifier les instructions du
-|code-after| à la fin de l'environnement, après le mot-clé
-|\CodeAfter|\footnote{Dans certaines circonstances, on doit mettre
-|\omit \CodeAfter|, |\omit| étant un mot-clé de TeX qui annule le motif de la cellule
-courante.}. Pour un exemple, voir page
+Pour améliorer la lisibilité du code, une syntaxe alternative est proposée : on
+peut spécifier les instructions du |code-after| à la fin de l'environnement,
+après le mot-clé |\CodeAfter|\footnote{Dans certaines circonstances, on doit
+ mettre |\omit \CodeAfter|, |\omit| étant un mot-clé de TeX qui annule le motif
+ de la cellule courante.}. Pour un exemple, voir page
\pageref{exemple-CodeAfter}.
\section{Les notes dans les tableaux}
@@ -1907,7 +2127,8 @@ titre inséré par |\caption| dans un environnement |{table}| de LaTeX.
\item Si plusieurs commandes |\tabularnote{...}| se suivent \emph{sans aucun espace
entre elles}, les appels de notes correspondants sont composés ensemble,
-séparés par une virgule.
+séparés par une virgule (comme avec l'option |multiple| de \pkg{footmisc} pour
+les notes de pied de page).
\item Si une commande |\tabularnote{...}| se trouve exactement à la fin d'une cellule
(sans aucun espace après), l'appel de note est composé en débordement vers la
@@ -1960,8 +2181,8 @@ Wallis & John & 87 \\
\subsection{Personnalisation des notes de tableau}
-Les notes de tableau peuvent être personnalisées grâce à un ensemble de clés disponibles dans
-|\NiceMatrixOptions|. Ces clés ont un nom préfixé par |notes| :
+Les notes de tableau peuvent être personnalisées grâce à un ensemble de clés
+disponibles dans |\NiceMatrixOptions|. Ces clés ont un nom préfixé par |notes| :
\begin{itemize}
\item |notes/para|
\item |notes/bottomrule|
@@ -2120,8 +2341,8 @@ Si vous souhaitez utiliser l'environnement |{NiceTabular}| dans un environnement
\makeatother
\end{Verbatim}
-La commande |\AtBeginEnvironment| est une commande de l'extension \pkg{etoolbox} qui doit donc
-avoir été chargée au préalable.
+La commande |\AtBeginEnvironment| est une commande de l'extension \pkg{etoolbox}
+qui doit donc avoir été chargée au préalable.
\section{Autres fonctionnalités}
@@ -2151,7 +2372,8 @@ $\begin{pNiceArray}{ScW{c}{1cm}c}[nullify-dots,first-row]
\end{pNiceArray}$
\medskip
-En revanche, les colonnes |d| de l'extension \pkg{dcolumn} ne sont pas prises en charge par \pkg{nicematrix}.
+En revanche, les colonnes |d| de l'extension \pkg{dcolumn} ne sont pas prises en
+charge par \pkg{nicematrix}.
@@ -2159,8 +2381,9 @@ En revanche, les colonnes |d| de l'extension \pkg{dcolumn} ne sont pas prises en
\label{key-R}
-Les environnements sans préambule (|{NiceMatrix}|, |{pNiceMatrix}|, |{bNiceMatrix}|, etc.) proposent les options
-|l| et |r| (possédant |L| et |R| comme alias) qui imposent des colonnes alignées à gauche ou à droite.
+Les environnements sans préambule (|{NiceMatrix}|, |{pNiceMatrix}|,
+|{bNiceMatrix}|, etc.) proposent les options |l| et |r| qui imposent des
+colonnes alignées à gauche ou à droite.
\medskip
\begin{BVerbatim}[baseline=c,boxwidth=10cm]
@@ -2175,9 +2398,10 @@ $\begin{bNiceMatrix}[r]
\end{bNiceMatrix}$
\medskip
-Il existe aussi l'option |S| qui impose que toutes les colonnes soient des colonnes |S| de \pkg{siunitx} (si cette
-extension est chargée).\footnote{Cela reprend une partie des fonctionnalités proposées par les environnements |{pmatrix*}|,
- |{bmatrix*}|, etc. de \pkg{mathtools}.}
+Il existe aussi l'option |S| qui impose que toutes les colonnes soient des
+colonnes |S| de \pkg{siunitx} (si cette extension est chargée).\footnote{Cela
+ reprend une partie des fonctionnalités proposées par les environnements
+ |{pmatrix*}|, |{bmatrix*}|, etc. de \pkg{mathtools}.}
\subsection{La commande \textbackslash rotate}
@@ -2213,8 +2437,8 @@ e_1 & e_2 & e_3 \\
\end{varwidth}
\bigskip
-Si la commande |\rotate| est utilisée dans la «dernière rangée» (extérieure à la matrice), les éléments qui
-subissent cette rotation sont alignés vers le haut.
+Si la commande |\rotate| est utilisée dans la «dernière rangée» (extérieure à la
+matrice), les éléments qui subissent cette rotation sont alignés vers le haut.
\bigskip
\begin{BVerbatim}[baseline=c,boxwidth=12cm]
@@ -2245,9 +2469,10 @@ $A = \begin{pNiceMatrix}[last-row,last-col=4]
\label{small}
-Avec l'option |small|, les environnements de l'extension \pkg{nicematrix} sont composés d'une manière proche de ce
-que propose l'environnement |{smallmatrix}| de l'\pkg{amsmath} (et les environnements |{psmallmatrix}|,
-|{bsmallmatrix}|, etc. de \pkg{mathtools}).
+Avec l'option |small|, les environnements de l'extension \pkg{nicematrix} sont
+composés d'une manière proche de ce que propose l'environnement |{smallmatrix}|
+de l'\pkg{amsmath} (et les environnements |{psmallmatrix}|, |{bsmallmatrix}|,
+etc. de \pkg{mathtools}).
\bigskip
\begin{Verbatim}
@@ -2270,10 +2495,11 @@ $\begin{bNiceArray}{cccc|c}[~emphase#small@,
\bigskip
-On remarquera néanmoins que l'environnement |{NiceMatrix}| avec l'option |small| ne prétend pas être composé
-exactement comme l'environnement |{smallmatrix}|. C'est que les environnements de \pkg{nicematrix} sont tous fondés
-sur |{array}| (de \pkg{array}) alors que ce n'est pas le cas de |{smallmatrix}| (fondé directement sur un |\halign|
-de TeX).
+On remarquera néanmoins que l'environnement |{NiceMatrix}| avec l'option |small|
+ne prétend pas être composé exactement comme l'environnement |{smallmatrix}|.
+C'est que les environnements de \pkg{nicematrix} sont tous fondés sur |{array}|
+(de \pkg{array}) alors que ce n'est pas le cas de |{smallmatrix}| (fondé
+directement sur un |\halign| de TeX).
\medskip
En fait, l'option |small| correspond aux réglages suivants :
@@ -2286,15 +2512,17 @@ En fait, l'option |small| correspond aux réglages suivants :
\subsection{Les compteurs iRow et jCol}
-Dans les cases du tableau, il est possible d'utiliser les compteurs LaTeX |iRow| et |jCol| qui représentent le
-numéro de la rangée courante et le numéro de la colonne courante\footnote{On rappelle que le numéro de la «première
- rangée» (si elle existe) est $0$ et que le numéro de la «première colonne» (si elle 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 les cases du tableau, il est possible d'utiliser les compteurs LaTeX |iRow|
+et |jCol| qui représentent le numéro de la rangée courante et le numéro de la
+colonne courante\footnote{On rappelle que le numéro de la «première rangée» (si
+ elle existe) est $0$ et que le numéro de la «première colonne» (si elle
+ 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 |code-after| (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).
+Dans le |code-before| (cf. p. \pageref{code-before}) et dans le |code-after|
+(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).
\medskip
\begin{BVerbatim}[baseline=c,boxwidth=10.6cm]
@@ -2320,20 +2548,22 @@ $\begin{pNiceMatrix}[first-row,
\end{pNiceMatrix}$
\medskip
-Si des compteurs LaTeX nommés |iRow| ou |jCol| sont créés dans le document par d'autres extensions que
-\pkg{nicematrix} (ou tout simplement par l'utilisateur final), ces compteurs sont masqués dans les environnements
-de \pkg{nicematrix}.
+Si des compteurs LaTeX nommés |iRow| ou |jCol| sont créés dans le document par
+d'autres extensions que \pkg{nicematrix} (ou tout simplement par l'utilisateur
+final), ces compteurs sont masqués dans les environnements de \pkg{nicematrix}.
\bigskip
-L'extension \pkg{nicematrix} propose aussi des commandes pour composer automatiquement des matrices à partir d'un
-motif général. Ces commandes sont nommées |\AutoNiceMatrix|, |\pAutoNiceMatrix|, |\bAutoNiceMatrix|,
+L'extension \pkg{nicematrix} propose aussi des commandes pour composer
+automatiquement des matrices à partir d'un motif général. Ces commandes sont
+nommées |\AutoNiceMatrix|, |\pAutoNiceMatrix|, |\bAutoNiceMatrix|,
|\vAutoNiceMatrix|, |\VAutoNiceMatrix| et |\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).
+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).
\medskip
\begin{Verbatim}
@@ -2349,11 +2579,13 @@ $C = ~emphase#\pAutoNiceMatrix@{3-3}{C_{\arabic{iRow},\arabic{jCol}}}$
\label{light-syntax}
-L'option |light-syntax| (inspirée de l'extension \pkg{spalign}) permet d'alléger la saisie des matrices, ainsi que
-leur lisibilité dans le source TeX. Lorsque cette option est activée, on doit utiliser le point-virgule comme
-marqueur de fin de rangée et séparer les colonnes par des espaces ou des tabulations. On remarquera toutefois que,
-comme souvent dans le monde TeX, les espaces après les séquences de contrôle ne sont pas comptées et que les
-éléments entre accolades sont considérés comme un tout.
+L'option |light-syntax| (inspirée de l'extension \pkg{spalign}) permet d'alléger
+la saisie des matrices, ainsi que leur lisibilité dans le source TeX. Lorsque
+cette option est activée, on doit utiliser le point-virgule comme marqueur de
+fin de rangée et séparer les colonnes par des espaces ou des tabulations. On
+remarquera toutefois que, comme souvent dans le monde TeX, les espaces après les
+séquences de contrôle ne sont pas comptées et que les éléments entre accolades
+sont considérés comme un tout.
\medskip
@@ -2374,22 +2606,27 @@ b \cos a+\cos b { 2 \cos b }
\end{bNiceMatrix}$
\medskip
-On peut changer le caractère utilisé pour indiquer les fins de rangées avec l'option |end-of-row|. Comme dit
-précédemment, la valeur initiale de ce paramètre est un point-virgule.
+On peut changer le caractère utilisé pour indiquer les fins de rangées avec
+l'option |end-of-row|. Comme dit précédemment, la valeur initiale de ce
+paramètre est un point-virgule.
\medskip
-Lorsque l'option |light-syntax| est utilisée, il n'est pas possible de mettre d'éléments en verbatim (avec par
-exemple la commande |\verb|) dans les cases du tableau.\footnote{La raison en est que lorsque l'option
- |light-syntax| est utilisée, le contenu complet de l'environnement est chargé comme un argument de commande TeX.
- L'environnement ne se comporte plus comme un «vrai» environnement de LaTeX qui se contente d'insérer des
- commandes avant et après.}
+Lorsque l'option |light-syntax| est utilisée, il n'est pas possible de mettre
+d'éléments en verbatim (avec par exemple la commande
+|\verb|) dans les cases du tableau.\footnote{La raison en est que lorsque l'option |light-syntax|
+ est utilisée, le contenu complet de l'environnement est chargé comme un
+ argument de commande TeX. L'environnement ne se comporte plus comme un «vrai»
+ environnement de LaTeX qui se contente d'insérer des commandes avant et
+ après.}
\subsection{L'environnement \{NiceArrayWithDelims\}}
-En fait, l'environnement |{pNiceArray}| et ses variantes sont fondés sur un environnement plus général, appelé
-|{NiceArrayWithDelims}|. Les deux premiers arguments obligatoires de cet environnement sont les délimiteurs gauche
-et droit qui seront utilisés dans la construction de la matrice. Il est possible d'utiliser |{NiceArrayWithDelims}|
-si on a besoin de délimiteurs atypiques ou asymétriques.
+En fait, l'environnement |{pNiceArray}| et ses variantes sont fondés sur un
+environnement plus général, appelé |{NiceArrayWithDelims}|. Les deux premiers
+arguments obligatoires de cet environnement sont les délimiteurs gauche et droit
+qui seront utilisés dans la construction de la matrice. Il est possible
+d'utiliser |{NiceArrayWithDelims}| si on a besoin de délimiteurs atypiques ou
+asymétriques.
\medskip
\begin{BVerbatim}[baseline=c,boxwidth=11cm]
@@ -2417,28 +2654,33 @@ $\begin{NiceArrayWithDelims}
\subsection{Les nœuds correspondant aux contenus des cases}
-L'extension \pkg{nicematrix} crée un nœud PGF-Tikz pour chaque case (non vide) du tableau considéré. Ces nœuds sont
-utilisés, entre autres, pour tracer les lignes en pointillés entre les cases du tableau.
+L'extension \pkg{nicematrix} crée un nœud PGF-Tikz pour chaque case (non vide)
+du tableau considéré. Ces nœuds sont utilisés, entre autres, pour tracer les
+lignes en pointillés entre les cases du tableau.
\smallskip
-Tous les nœuds du document doivent avoir des noms deux à deux distincts et le nom de ces nœuds doit donc faire
-intervenir le numéro de l'environnement courant. Les environnements créés par \pkg{nicematrix} sont en effet
-numérotés par un compteur global interne.
+Tous les nœuds du document doivent avoir des noms deux à deux distincts et le
+nom de ces nœuds doit donc faire intervenir le numéro de l'environnement
+courant. Les environnements créés par \pkg{nicematrix} sont en effet numérotés
+par un compteur global interne.
\smallskip
-Si l'environnement concerné a le numéro $n$, alors le nœud de la rangée~$i$ et de la colonne~$j$ a pour nom
-|nm-|$n$|-|$i$|-|$j$.
+Si l'environnement concerné a le numéro $n$, alors le nœud de la rangée~$i$ et
+de la colonne~$j$ a pour nom |nm-|$n$|-|$i$|-|$j$.
\smallskip
-La commande |\NiceMatrixLastEnv| donne le numéro du dernier de ces environnements (pour LaTeX, il s'agit d'une
-commande — complètement développable — et non d'un compteur).
+La commande |\NiceMatrixLastEnv| donne le numéro du dernier de ces
+environnements (pour LaTeX, il s'agit d'une commande — complètement développable
+— et non d'un compteur).
\smallskip
-Il est néanmoins recommandé de passer plutôt par la clé |name|. Celle-ci permet de donner un nom à l'environnement.
-Une fois l'environnement nommé, les nœuds sont accessibles à travers les noms «\textsl{nom}-$i$-$j$» où
-\textsl{nom} est le nom donné au tableau et $i$ et $j$ les numéros de rangée et de colonne de la case considérée.
-On peut les utiliser avec \textsc{pgf} mais l'utilisateur final préférera sans doute utiliser Tikz (qui est une
-sur-couche de \textsc{pgf}). Il faut néanmoins se souvenir que \pkg{nicematrix} ne charge pas Tikz par défault.
+Il est néanmoins recommandé de passer plutôt par la clé |name|. Celle-ci permet
+de donner un nom à l'environnement. Une fois l'environnement nommé, les nœuds
+sont accessibles à travers les noms «\textsl{nom}-$i$-$j$» où \textsl{nom} est
+le nom donné au tableau et $i$ et $j$ les numéros de rangée et de colonne de la
+case considérée. On peut les utiliser avec \textsc{pgf} mais l'utilisateur final
+préférera sans doute utiliser Tikz (qui est une sur-couche de \textsc{pgf}). Il
+faut néanmoins se souvenir que \pkg{nicematrix} ne charge pas Tikz par défault.
\bigskip
\begin{BVerbatim}[baseline=c,boxwidth=11cm]
@@ -2463,8 +2705,9 @@ Ne pas oublier les options |remember picture| et |overlay|.
\bigskip
-Dans le |code-after|, et si Tikz est chargé, les choses sont plus simples. On peut (et on doit) désigner les nœuds
-sous la forme $i$-$j$ : il n'y a pas besoin de préciser l'environnement qui est évidemment l'environnement courant.
+Dans le |code-after|, et si Tikz est chargé, les choses sont plus simples. On
+peut (et on doit) désigner les nœuds sous la forme $i$-$j$ : il n'y a pas besoin
+de préciser l'environnement qui est évidemment l'environnement courant.
\medskip
@@ -2489,8 +2732,7 @@ $\begin{pNiceMatrix}
\bigskip
Dans l'exemple suivant, nous avons surligné tous les nœuds de la matrice (on
-explique plus loin la technique utilisée :
-cf. p. \pageref{highlight}).
+explique plus loin la technique utilisée : cf. p. \pageref{highlight}).
\[\begin{pNiceMatrix}
a & a + b & a + b + c \\
@@ -2521,19 +2763,22 @@ a & a & a
\subsection{Les «nœuds moyens» et les «nœuds larges»}
-En fait, l'extension \pkg{nicematrix} peut créer deux séries de nœuds supplémentaires (\emph{extra nodes} en
-anglais) : les «nœuds moyens» (\emph{medium nodes} en anglais) et les «nœuds larges» (\emph{large nodes} en
-anglais). Les premiers sont créés avec l'option |create-medium-nodes| et les seconds avec l'option
-|create-large-nodes|.\footnote{Il existe aussi l'option |create-extra-nodes| qui est un alias pour la conjonction
-de |create-medium-nodes| et |create-large-nodes|.}
+En fait, l'extension \pkg{nicematrix} peut créer deux séries de nœuds
+supplémentaires (\emph{extra nodes} en anglais) : les «nœuds moyens»
+(\emph{medium nodes} en anglais) et les «nœuds larges» (\emph{large nodes} en
+anglais). Les premiers sont créés avec l'option |create-medium-nodes| et les
+seconds avec l'option |create-large-nodes|.\footnote{Il existe aussi l'option
+ |create-extra-nodes| qui est un alias pour la conjonction de
+ |create-medium-nodes| et |create-large-nodes|.}
\medskip
Ces nœuds ne sont pas utilisés par défault par \pkg{nicematrix}.
\medskip
-Les noms des «nœuds moyens» s'obtiennent en ajoutant le suffixe «|-medium|» au nom des nœuds normaux. Dans
-l'exemple suivant, on a surligné tous les «nœuds moyens». Nous considérons que cet exemple se suffit à lui-même
-comme définition de ces nœuds.
+Les noms des «nœuds moyens» s'obtiennent en ajoutant le suffixe «|-medium|» au
+nom des nœuds normaux. Dans l'exemple suivant, on a surligné tous les «nœuds
+moyens». Nous considérons que cet exemple se suffit à lui-même comme définition
+de ces nœuds.
\[\begin{pNiceMatrix}[
create-medium-nodes,
code-after = {\begin{tikzpicture}
@@ -2558,10 +2803,12 @@ a & a & a
\medskip
-Les noms des «nœuds larges» s'obtiennent en ajoutant le suffixe «|-large|» au nom des nœuds normaux. Dans l'exemple
-suivant, on a surligné tous les «nœuds larges». Nous considérons que cet exemple se suffit à lui-même comme
-définition de ces nœuds.\footnote{Il n'y a pas de «nœuds larges» créés dans les rangées et colonnes extérieures
- (pour ces rangées et colonnes, voir p.~\pageref{exterior}).}
+Les noms des «nœuds larges» s'obtiennent en ajoutant le suffixe «|-large|» au
+nom des nœuds normaux. Dans l'exemple suivant, on a surligné tous les «nœuds
+larges». Nous considérons que cet exemple se suffit à lui-même comme définition
+de ces nœuds.\footnote{Il n'y a pas de «nœuds larges» créés dans les rangées et
+ colonnes extérieures (pour ces rangées et colonnes, voir
+ p.~\pageref{exterior}).}
\[\begin{pNiceMatrix}[
create-large-nodes,
@@ -2586,14 +2833,16 @@ a & a & a
\medskip
-Les «nœuds larges» de la première colonne et de la dernière colonne peuvent apparaître trop petits pour certains
-usages. C'est pourquoi il est possible d'utiliser les options |left-margin| et |right-margin| pour ajouter de
-l'espace des deux côtés du tableau et aussi de l'espace dans les «nœuds larges» de la première colonne et de la
-dernière colonne. Dans l'exemple suivant, nous avons utilisé les options |left-margin| et
-|right-margin|.\footnote{Les options |left-margin| et |right-margin| prennent des dimensions comme valeurs mais, si
- aucune valeur n'est donnée, c'est la valeur par défaut qui est utilisée et elle est égale à |\arraycolsep| (valeur
- initial : 5~pt). Il existe aussi une option |margin| pour fixer à la fois
- |left-margin| et |right-margin|.}
+Les «nœuds larges» de la première colonne et de la dernière colonne peuvent
+apparaître trop petits pour certains usages. C'est pourquoi il est possible
+d'utiliser les options |left-margin| et |right-margin| pour ajouter de l'espace
+des deux côtés du tableau et aussi de l'espace dans les «nœuds larges» de la
+première colonne et de la dernière colonne. Dans l'exemple suivant, nous avons
+utilisé les options |left-margin| et |right-margin|.\footnote{Les options
+ |left-margin| et |right-margin| prennent des dimensions comme valeurs mais, si
+ aucune valeur n'est donnée, c'est la valeur par défaut qui est utilisée et
+ elle est égale à |\arraycolsep| (valeur initial : 5~pt). Il existe aussi une
+ option |margin| pour fixer à la fois |left-margin| et |right-margin|.}
\[\begin{pNiceMatrix}[
create-large-nodes,left-margin,right-margin,
code-after = {\begin{tikzpicture}
@@ -2616,9 +2865,10 @@ a & a & a
\end{pNiceMatrix}\]
\medskip
-Il est aussi possible d'ajouter de l'espace sur les côtés du tableau avec les options |extra-left-margin| et
-|extra-right-margin|. Ces marges ne sont pas incorporées dans les «nœuds larges». Dans l'exemple suivant, nous
-avons utilisé |extra-left-margin| et |extra-right-margin| avec la valeur $3$~pt.
+Il est aussi possible d'ajouter de l'espace sur les côtés du tableau avec les
+options |extra-left-margin| et |extra-right-margin|. Ces marges ne sont pas
+incorporées dans les «nœuds larges». Dans l'exemple suivant, nous avons utilisé
+|extra-left-margin| et |extra-right-margin| avec la valeur $3$~pt.
\[\begin{pNiceMatrix}[
create-large-nodes,left-margin,right-margin,extra-right-margin=3pt,extra-left-margin=3pt,
code-after = {\begin{tikzpicture}
@@ -2642,8 +2892,8 @@ a & a & a
\bigskip
-\textbf{Attention} : Ces nœuds sont reconstruits à partir des contenus des cases et ne correspondent donc pas
-nécessairement aux cases délimitées par des filets.
+\textbf{Attention} : Ces nœuds sont reconstruits à partir des contenus des cases
+et ne correspondent donc pas nécessairement aux cases délimitées par des filets.
\bigskip
\begin{minipage}[c]{7.5cm}
@@ -2686,7 +2936,8 @@ noix & noisette & brugnon
\vspace{1cm}
\begin{minipage}[c]{7cm}
-Voici maintenant tous les «nœuds larges» de ce tableau (sans utilisation de |margin| ni de |extra-margin|).
+Voici maintenant tous les «nœuds larges» de ce tableau (sans utilisation de
+|margin| ni de |extra-margin|).
\end{minipage}
\hspace{1.5cm}
\begin{scope}
@@ -2715,17 +2966,12 @@ noix & noisette & brugnon
-
-
-
-
-
-
\subsection{Les nœuds «row» et «col»}
-L'extension \pkg{nicematrix} crée un nœud PGF-Tikz indiquant la position potentielle de chaque filet horizontal
-(avec les noms |row-|$i$) et de chaque filet vertical (avec les noms |col-|$j$), comme décrit sur la figure
-ci-dessous. Ces nœuds sont accessibles dans le |code-before| et dans le |code-after|.
+L'extension \pkg{nicematrix} crée un nœud PGF-Tikz indiquant la position
+potentielle de chaque filet horizontal (avec les noms |row-|$i$) et de chaque
+filet vertical (avec les noms |col-|$j$), comme décrit sur la figure ci-dessous.
+Ces nœuds sont accessibles dans le |code-before| et dans le |code-after|.
\begin{center}
\begin{NiceTabular}{ccc}[hvlines,rules/width=1pt,rules/color=gray]
rose & tulipe & lys \\
@@ -2750,8 +2996,9 @@ muguet & dahlia & souci
\bigskip
-Si on utilise Tikz (on rappelle que \pkg{nicematrix} ne charge pas Tikz par défaut), on peut donc accéder (dans le
-|code-before| et le |code-after|) à l'intersection du filet horizontal~$i$ et du filet vertical~$j$ avec la syntaxe
+Si on utilise Tikz (on rappelle que \pkg{nicematrix} ne charge pas Tikz par
+défaut), on peut donc accéder (dans le |code-before| et le |code-after|) à
+l'intersection du filet horizontal~$i$ et du filet vertical~$j$ avec la syntaxe
|(row-|$i$\verb+-|col-+$j$|)|.
@@ -2797,18 +3044,116 @@ Si on utilise Tikz (on rappelle que \pkg{nicematrix} ne charge pas Tikz par déf
\end{NiceMatrix}\]
+\section{Outils pour les développeurs}
+
+Comme son nom l'indique, la liste de tokens |\g_nicematrix_code_after_tl| est
+publique (conformément aux conventions de LaTeX3, toute variable dont le nom
+débute par |\g_nicematrix| ou |\l_nicematrix| est publique alors que toute variable
+dont le nom débute par |\g__nicematrix| ou par |\l__nicematrix| est privée).
+
+\medskip
+Cette variable contient le code qui constitue le «|code-after|». Le développeur
+peut donc l'utiliser pour y ajouter du code à partir d'une cellule du tableau
+(l'affectation devra être globale, ce qui permettra de sortir de la cellule, qui
+est un groupe au sens de TeX).
+
+\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_crossbox:nnn
+ {
+ \begin { tikzpicture }
+ \draw [ #3 ]
+ ( row-#1 -| col-\int_eval:n { #2 + 1 } )
+ -- ( row-\int_eval:n { #1 + 1 } -| col-#2 )
+ ( row-#1 -| col-\int_eval:n #2 )
+ -- ( row-\int_eval:n { #1 + 1 } -| col-\int_eval:n { #2 + 1 } ) ;
+ \end { tikzpicture }
+ }
+
+
+\NewDocumentCommand \crossbox { ! O { } }
+ {
+ \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_crossbox:nnn
+ {
+ \begin { tikzpicture }
+ \draw [ #3 ]
+ ( row-#1 -| col-\int_eval:n { #2 + 1 } )
+ -- ( row-\int_eval:n { #1 + 1 } -| col-#2 )
+ ( row-#1 -| col-\int_eval:n #2 )
+ -- ( row-\int_eval:n { #1 + 1 } -| col-\int_eval:n { #2 + 1 } ) ;
+ \end { tikzpicture }
+ }
+
+
+\NewDocumentCommand \crossbox { ! O { } }
+ {
+ \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 :
+
+\medskip
+\begin{BVerbatim}[baseline=c,boxwidth=9cm]
+\begin{NiceTabular}{ccc}[hvlines]
+merlan & requin & cabillaud \\
+baleine & ~emphase#\crossbox[red]@ & morue \\
+mante & raie & poule
+\end{NiceTabular}
+\end{BVerbatim}
+\begin{NiceTabular}{ccc}[hvlines]
+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 l'extension \pkg{underscore}. Si ce n'est
-pas le cas, une erreur est levée.
+Première remarque : l'extension \pkg{nicematrix} doit être chargée après
+l'extension \pkg{underscore}. Si ce n'est pas le cas, une erreur est levée.
\subsection{Pour définir de nouveaux types de colonnes}
\label{OnlyMainNiceMatrix}
-L'extension \pkg{nicematrix} fournit la commande |\OnlyMainNiceMatrix| qui est destinée à être utilisée dans des
-définitions de nouveaux types de colonnes. Son argument n'est exécuté que si on se place dans la partie principale
-du tableau, c'est-à-dire que l'on n'est pas dans l'une des éventuelles rangées extérieures.
+L'extension \pkg{nicematrix} fournit la commande |\OnlyMainNiceMatrix| qui est
+destinée à être utilisée dans des définitions de nouveaux types de colonnes. Son
+argument n'est exécuté que si on se place dans la partie principale du tableau,
+c'est-à-dire que l'on n'est pas dans l'une des éventuelles rangées extérieures.
Par exemple, si on souhaite définir un type de colonne |?| pour tracer un trait fort (noir) d'épaisseur 1~pt, on
pourra écrire\footnote{La commande |\vrule| est une commande de TeX (et non de LaTeX).} :
@@ -2816,7 +3161,9 @@ pourra écrire\footnote{La commande |\vrule| est une commande de TeX (et non de
\newcolumntype{?}{!{\OnlyMainNiceMatrix{\vrule width 1 pt}}}
\end{Verbatim}
-Le trait fort correspondant ne s'étendra pas dans les rangées extérieures :
+Le trait fort correspondant ne s'étendra pas dans les rangées
+extérieures.\footnote{Un tel filet utilisant les techniques classiques de
+ \pkg{array}, il ne traversera pas les doubles filets horizontaux de |\hline\hline|.}
\medskip
\begin{scope}
@@ -2839,8 +3186,9 @@ C_1 & C_2 & C_3 & C_4
\end{scope}
\medskip
-Le spécificateur |?| ainsi créé est aussi utilisable dans les environnements |{tabular}| et |{array}| (de
-\pkg{array}) et, dans ce cas, |\OnlyMainNiceMatrix| est sans effet.
+Le spécificateur |?| ainsi créé est aussi utilisable dans les environnements
+|{tabular}| et |{array}| (de \pkg{array}) et, dans ce cas, |\OnlyMainNiceMatrix|
+est sans effet.
@@ -2849,11 +3197,13 @@ Le spécificateur |?| ainsi créé est aussi utilisable dans les environnements
\subsection{Lignes diagonales}
-Par défaut, toutes les lignes diagonales\footnote{On parle des lignes créées par |\Ddots| et non des lignes créées
- par une commande |\line| dans le |code-after|.} d'un même tableau sont «parallélisées». Cela signifie que la
-première diagonale est tracée et que, ensuite, les autres lignes sont tracées parallèlement à la première (par
-rotation autour de l'extrémité la plus à gauche de la ligne). C'est pourquoi la position des instructions |\Ddots|
-dans un tableau peut avoir un effet marqué sur le résultat final.
+Par défaut, toutes les lignes diagonales\footnote{On parle des lignes créées par
+ |\Ddots| et non des lignes créées par une commande |\line| dans le
+ |code-after|.} d'un même tableau sont «parallélisées». Cela signifie que la
+première diagonale est tracée et que, ensuite, les autres lignes sont tracées
+parallèlement à la première (par rotation autour de l'extrémité la plus à gauche
+de la ligne). C'est pourquoi la position des instructions |\Ddots| dans un
+tableau peut avoir un effet marqué sur le résultat final.
\medskip
Dans les exemples suivants, la première instruction |\Ddots| est marquée en couleur :
@@ -2898,7 +3248,8 @@ a+b & \Cdots & a+b & 1
\end{pNiceMatrix}$
\bigskip
-Il est possible de désactiver la parallélisation avec l'option |parallelize-diags| mise à |false|: \par\nobreak
+Il est possible de désactiver la parallélisation avec l'option
+|parallelize-diags| mise à |false|: \par\nobreak
\medskip
\NiceMatrixOptions{parallelize-diags=false}%
@@ -2919,10 +3270,11 @@ a+b & \Cdots & a+b & 1
\subsection{Les cases «vides»}
\label{empty-cells}
-Une instruction comme |\Ldots|, |\Cdots|, etc. essaye de déterminer la première case vide de part et d'autre de la
-case considérée. Néanmoins, une case vide n'est pas nécessairement sans contenu dans le codage TeX (c'est-à-dire
-sans aucun token entre les deux esperluettes~|&|). En effet, une case dont le contenu est |\hspace*{1cm}| peut être
-considérée comme vide.
+Une instruction comme |\Ldots|, |\Cdots|, etc. essaye de déterminer la première
+case vide de part et d'autre de la case considérée. Néanmoins, une case vide
+n'est pas nécessairement sans contenu dans le codage TeX (c'est-à-dire sans
+aucun token entre les deux esperluettes~|&|). En effet, une case dont le contenu
+est |\hspace*{1cm}| peut être considérée comme vide.
\interitem
Pour \pkg{nicematrix}, les règles précises sont les suivantes :
@@ -2943,31 +3295,39 @@ la dernière case (deuxième rangée et deuxième colonne) est vide.
\item Chaque case avec un rendu par TeX de largeur nulle est vide.
\medskip
-\item Une case avec une commande |\Hspace| (ou |\Hspace*|) est vide. Cette commande |\Hspace| est une commande
-définie par l'extension \pkg{nicematrix} avec la même signification que |\hspace| excepté que la case où cette
-commande est utilisée est considérée comme vide. Cette commande peut être utilisée pour fixer la largeur des
-colonnes sans interférer avec le tracé des lignes en pointillés par \pkg{nicematrix}.
+\item Une case avec une commande |\Hspace| (ou |\Hspace*|) est vide. Cette
+commande |\Hspace| est une commande définie par l'extension \pkg{nicematrix}
+avec la même signification que |\hspace| excepté que la case où cette commande
+est utilisée est considérée comme vide. Cette commande peut être utilisée pour
+fixer la largeur des colonnes sans interférer avec le tracé des lignes en
+pointillés par \pkg{nicematrix}.
\end{itemize}
\subsection{L'option exterior-arraycolsep}
-L'environnement |{array}| insère un espace horizontal égal à |\arraycolsep| avant et après chaque colonne. En
-particulier, il y a un espace égal à |\arraycolsep| avant et après le tableau. Cette caractéristique de
-l'environnement |{array}| n'était probablement pas une bonne idée\footnote{Dans la documentation de |{amsmath}|, on
- peut lire : {\itshape The extra space of |\arraycolsep| that \pkg{array} adds on each side is a waste so we
- remove it [in |{matrix}|] (perhaps we should instead remove it from array in general, but that's a harder
- task).}}. L'environnement |{matrix}| et ses variantes (|{pmatrix}|,
-|{vmatrix}|, etc.) de \pkg{amsmath} préfèrent supprimer ces espaces avec des instructions explicites
-|\hskip -\arraycolsep|\footnote{Et non en insérant |@{}| de part et d'autre du préambule, ce qui fait que la
- longueur des |\hline| n'est pas modifiée et elle peut paraître trop longue, surtout avec des crochets.}.
-L'extension \pkg{nicematrix} fait de même dans \emph{tous} ses environnements y compris l'environnement
-|{NiceArray}|. Néanmoins, si l'utilisateur souhaite que l'environnement |{NiceArray}| se comporte par défaut comme
-l'environnement |{array}| de \pkg{array} (par exemple pour faciliter l'adaptation d'un document existant), il peut
-contrôler ce comportement avec l'option |exterior-arraycolsep| accessible via la commande |\NiceMatrixOptions|.
-Avec cette option, des espaces extérieurs de longueur |\arraycolsep| seront insérés dans les environnements
-|{NiceArray}| (les autres environnements de l'extension \pkg{nicematrix} ne sont pas affectés).
+L'environnement |{array}| insère un espace horizontal égal à |\arraycolsep|
+avant et après chaque colonne. En particulier, il y a un espace égal à
+|\arraycolsep| avant et après le tableau. Cette caractéristique de
+l'environnement |{array}| n'était probablement pas une bonne idée\footnote{Dans
+ la documentation de |{amsmath}|, on peut lire : {\itshape The extra space of
+ |\arraycolsep| that \pkg{array} adds on each side is a waste so we remove it
+ [in |{matrix}|] (perhaps we should instead remove it from array in general,
+ but that's a harder task).}}. L'environnement |{matrix}| et ses variantes
+(|{pmatrix}|, |{vmatrix}|, etc.) de \pkg{amsmath} préfèrent supprimer ces
+espaces avec des instructions explicites |\hskip -\arraycolsep|\footnote{Et non
+ en insérant |@{}| de part et d'autre du préambule, ce qui fait que la longueur
+ des |\hline| n'est pas modifiée et elle peut paraître trop longue, surtout
+ avec des crochets.}. L'extension \pkg{nicematrix} fait de même dans
+\emph{tous} ses environnements y compris l'environnement |{NiceArray}|.
+Néanmoins, si l'utilisateur souhaite que l'environnement |{NiceArray}| se
+comporte par défaut comme l'environnement |{array}| de \pkg{array} (par exemple
+pour faciliter l'adaptation d'un document existant), il peut contrôler ce
+comportement avec l'option |exterior-arraycolsep| accessible via la commande
+|\NiceMatrixOptions|. Avec cette option, des espaces extérieurs de longueur
+|\arraycolsep| seront insérés dans les environnements |{NiceArray}| (les autres
+environnements de l'extension \pkg{nicematrix} ne sont pas affectés).
@@ -3086,7 +3446,8 @@ Dupont & Chantal & 15 janvier 1998 \\
Une matrice de permutation.\par\nobreak
-À titre d'exemple, on a augmenté la valeur du paramètre |xdots/shorten|.\par\nobreak
+À titre d'exemple, on a augmenté la valeur du paramètre
+|xdots/shorten|.\par\nobreak
\bigskip
@@ -3237,8 +3598,9 @@ $\begin{pNiceArray}{*6c|c}[nullify-dots,last-col,code-for-last-col=\scriptstyle]
\subsection{Des lignes pointillées qui ne sont plus pointillées}
-L'option |line-style| permet de changer le style des lignes tracées par |\Ldots|, |\Cdots|, etc. On peut de ce fait
-tracer des lignes qui ne sont plus pointillées.
+L'option |line-style| permet de changer le style des lignes tracées par
+|\Ldots|, |\Cdots|, etc. On peut de ce fait tracer des lignes qui ne sont plus
+pointillées.
\begin{Verbatim}
\NiceMatrixOptions
@@ -3273,8 +3635,9 @@ $\begin{pNiceMatrix}[first-row,first-col]
\subsection{Largeur des colonnes}
\medskip
-Dans l'exemple suivant, nous utilisons |{NiceMatrixBlock}| avec l'option |auto-columns-width| parce que nous
-voulons la même largeur (automatique) pour toutes les colonnes.
+Dans l'exemple suivant, nous utilisons |{NiceMatrixBlock}| avec l'option
+|auto-columns-width| parce que nous voulons la même largeur (automatique) pour
+toutes les colonnes.
\bigskip
\begin{BVerbatim}
@@ -3283,7 +3646,7 @@ voulons la même largeur (automatique) pour toutes les colonnes.
{ last-col,code-for-last-col = \color{blue}\scriptstyle,light-syntax}
\setlength{\extrarowheight}{1mm}
$\begin{pNiceArray}{cccc:c}
- 1 1 1 1 1 ;
+ 1 1 1 1 1 { } ;
2 4 8 16 9 ;
3 9 27 81 36 ;
4 16 64 256 100
@@ -3307,7 +3670,7 @@ $\begin{pNiceArray}{cccc:c}
\setlength{\extrarowheight}{1mm}
\enskip $\begin{pNiceArray}{cccc:c}
-1 1 1 1 1 ;
+1 1 1 1 1 { } ;
2 4 8 16 9 ;
3 9 27 81 36 ;
4 16 64 256 100
@@ -3366,8 +3729,9 @@ $\begin{pNiceArray}{cccc:c}
\label{highlight}
\medskip
-Les exemples suivants nécessitent d'avoir chargé Tikz (\pkg{nicematrix} ne charge que \textsc{pgf}) ainsi que la
-bibliothèque Tikz |fit|, ce qui peut se faire avec les deux instructions suivantes dans le préambule du document :
+Les exemples suivants nécessitent d'avoir chargé Tikz (\pkg{nicematrix} ne
+charge que \textsc{pgf}) ainsi que la bibliothèque Tikz |fit|, ce qui peut se
+faire avec les deux instructions suivantes dans le préambule du document :
\begin{verbatim}
\usepackage{tikz}
@@ -3377,13 +3741,15 @@ bibliothèque Tikz |fit|, ce qui peut se faire avec les deux instructions suivan
\medskip
-Pour mettre en évidence une case, il est possible de «dessiner» l'un des nœuds (le «nœud normal», le «nœud moyen»
-ou le «nœud large»). Dans l'exemple suivant, on utilise les «nœuds larges» de la diagonale de la matrice (avec la
-clé de Tikz «|name suffix|», il est facile d'utiliser les «nœuds larges»).
+Pour mettre en évidence une case, il est possible de «dessiner» l'un des nœuds
+(le «nœud normal», le «nœud moyen» ou le «nœud large»). Dans l'exemple suivant,
+on utilise les «nœuds larges» de la diagonale de la matrice (avec la clé de Tikz
+«|name suffix|», il est facile d'utiliser les «nœuds larges»).
-Nous redessinons les nœuds avec de nouveaux nœuds en utilisant la bibliothèque \pkg{fit} de Tikz. Comme nous
-voulons recréer des nœuds identiques aux premiers, nous devons fixer |inner sep = 0pt| (si on ne fait
-pas cela, les nouveaux nœuds seront plus grands que les nœuds d'origine créés par \pkg{nicematrix}).
+Nous redessinons les nœuds avec de nouveaux nœuds en utilisant la bibliothèque
+\pkg{fit} de Tikz. Comme nous voulons recréer des nœuds identiques aux premiers,
+nous devons fixer |inner sep = 0pt| (si on ne fait pas cela, les nouveaux nœuds
+seront plus grands que les nœuds d'origine créés par \pkg{nicematrix}).
\label{exemple-CodeAfter}
@@ -3419,18 +3785,22 @@ a_{41} & a_{42} & a_{43} & a_{44}
\end{tikzpicture}
\end{pNiceArray}\]
-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|, 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 p.~\pageref{remark-cline}.}
+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|, 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
+ p.~\pageref{remark-cline}.}
-\vspace{1cm}
-Il est possible de colorier une rangée avec |\rowcolor| dans le |code-before| (ou avec |\rowcolor| de
-\pkg{colortbl} dans la première case de la rangée ). Les possibilités de réglages sont néanmoins limitées. C'est
-pourquoi nous présentons ici une autre méthode pour surligner une rangée de la matrice. Nous créons un nœud Tikz
-rectangulaire qui englobe les nœuds de la deuxième rangée en utilisant les outils de la bibliothèque Tikz
-\pkg{fit}. Ce nœud est rempli après la construction de la matrice. Pour que l'on puisse voir le texte \emph{sous}
-le nœud, nous devons utiliser la transparence avec le |blend mode| égal à |multiply|.
+\vspace{1cm} Il est possible de colorier une rangée avec |\rowcolor| dans le
+|code-before| (ou avec |\rowcolor| de \pkg{colortbl} dans la première case de la
+rangée ). Les possibilités de réglages sont néanmoins limitées. C'est pourquoi
+nous présentons ici une autre méthode pour surligner une rangée de la matrice.
+Nous créons un nœud Tikz rectangulaire qui englobe les nœuds de la deuxième
+rangée en utilisant les outils de la bibliothèque Tikz \pkg{fit}. Ce nœud est
+rempli après la construction de la matrice. Pour que l'on puisse voir le texte
+\emph{sous} le nœud, nous devons utiliser la transparence avec le |blend mode|
+égal à |multiply|.
\tikzset{highlight/.style={rectangle,
@@ -3464,9 +3834,10 @@ $\begin{bNiceMatrix}[~emphase#code-after = {\tikz \node [highlight = (2-1) (2-3)
\bigskip
-Ce code échoue avec |latex|-|dvips|-|ps2pdf| parce que Tikz pour |dvips|, pour le moment, ne prend pas en charge
-les \emph{blend modes}. Néanmoins, le code suivant, dans le préambule du document LaTeX, devrait activer les
-\emph{blend modes} pour ce mode de compilation.
+Ce code échoue avec |latex|-|dvips|-|ps2pdf| parce que Tikz pour |dvips|, pour
+le moment, ne prend pas en charge les \emph{blend modes}. Néanmoins, le code
+suivant, dans le préambule du document LaTeX, devrait activer les \emph{blend
+ modes} pour ce mode de compilation.
\begin{scope} \small
@@ -3485,11 +3856,12 @@ les \emph{blend modes}. Néanmoins, le code suivant, dans le préambule du docum
|\ExplSyntaxOff|
\end{scope}
-\vspace{1cm}
-On rappelle que dans le cas d'un ensemble de cases fusionnées (avec la commande |\Block|), un nœud Tikz est créé
-pour l'ensemble des cases avec pour nom $i$|-|$j$|-block| où $i$ et $j$ sont les numéros de ligne et de colonne de
-la case en haut à gauche (où a été utilisée la commande |\Block|). Si on a demandé la création des nœuds |medium|,
-alors un nœud de ce type est aussi créé pour ce bloc avec un nom suffixé par |-medium|.
+\vspace{1cm} On rappelle que dans le cas d'un ensemble de cases fusionnées (avec
+la commande |\Block|), un nœud Tikz est créé pour l'ensemble des cases avec pour
+nom $i$|-|$j$|-block| où $i$ et $j$ sont les numéros de ligne et de colonne de
+la case en haut à gauche (où a été utilisée la commande |\Block|). Si on a
+demandé la création des nœuds |medium|, alors un nœud de ce type est aussi créé
+pour ce bloc avec un nom suffixé par |-medium|.
@@ -3561,7 +3933,8 @@ a & a & a & L_3
\end{pNiceArray}\]
\medskip
-Le résultat peut paraître décevant. On peut l'améliorer en utilisant les «nœuds moyens» au lieu des «nœuds normaux».
+Le résultat peut paraître décevant. On peut l'améliorer en utilisant les «nœuds
+moyens» au lieu des «nœuds normaux».
\begin{Verbatim}
\begin{tikzpicture}[mes-options, ~emphase#name suffix = -medium@]
@@ -3594,7 +3967,8 @@ a & a & a & L_3
\vspace{1cm}
-Dans l'exemple suivant, on utilise les «nœuds larges» pour surligner une zone de la matrice.\par\nobreak
+Dans l'exemple suivant, on utilise les «nœuds larges» pour surligner une zone de
+la matrice.\par\nobreak
\begin{Verbatim}
\begin{pNiceArray}{>{\strut}cccc}[create-large-nodes,margin,extra-margin=2pt]
A_{11} & A_{12} & A_{13} & A_{14} \\
@@ -3634,8 +4008,9 @@ Dans l'exemple suivant, on utilise les «nœuds larges» pour surligner une zone
Dans l'exemple suivant, on souhaite illustrer le produit mathématique de deux matrices.
\medskip
-L'utilisation de |{NiceMatrixBlock}| avec l'option |auto-columns-width| va permettre que toutes les colonnes aient
-la même largeur ce qui permettra un alignement des deux matrices superposées.
+L'utilisation de |{NiceMatrixBlock}| avec l'option |auto-columns-width| va
+permettre que toutes les colonnes aient la même largeur ce qui permettra un
+alignement des deux matrices superposées.
\begin{Verbatim}
\begin{NiceMatrixBlock}[auto-columns-width]
\end{Verbatim}
@@ -3737,8 +4112,9 @@ L_i & a_{i1} & \Cdots & a_{ik} & \Cdots & a_{in} \\
\section*{Autre documentation}
-Le document |nicematrix.pdf| (fourni avec l'extension \pkg{nicematrix}) contient une traduction anglaise de la
-documentation ici présente, ainsi que le code source commenté et un historique des versions.
+Le document |nicematrix.pdf| (fourni avec l'extension \pkg{nicematrix}) contient
+une traduction anglaise de la documentation ici présente, ainsi que le code
+source commenté et un historique des versions.
\end{document}
diff --git a/macros/latex/contrib/nicematrix/nicematrix.dtx b/macros/latex/contrib/nicematrix/nicematrix.dtx
index 4f023e6f6d..c2856d51a2 100644
--- a/macros/latex/contrib/nicematrix/nicematrix.dtx
+++ b/macros/latex/contrib/nicematrix/nicematrix.dtx
@@ -15,8 +15,8 @@
%
% \fi
% \iffalse
-\def\myfileversion{5.0}
-\def\myfiledate{2020/07/15}
+\def\myfileversion{5.1}
+\def\myfiledate{2020/07/31}
%
%
%<*batchfile>
@@ -191,7 +191,7 @@ version 2005/12/01 or later.
% \bigskip
% {\bfseries \color{red} Important
%
-% In this version 5.0 of \pkg{nicematrix}, one must use the letters |l|, |c| and
+% Since the version 5.0 of \pkg{nicematrix}, one must use the letters |l|, |c| and
% |r| in the preambles of the environments and no longer the letters |L|, |C| and
% |R|.
%
@@ -212,12 +212,12 @@ version 2005/12/01 or later.
% \begin{ttfamily}
% \setlength{\tabcolsep}{3mm}
% \begin{tabular}{llll}
-% \{NiceTabular\} & \{NiceArray\} & \{NiceMatrix\} \\
-% & \{pNiceArray\} & \{pNiceMatrix\} \\
-% & \{bNiceArray\} & \{bNiceMatrix\} \\
-% & \{BNiceArray\} & \{BNiceMatrix\} \\
-% & \{vNiceArray\} & \{vNiceMatrix\} \\
-% & \{VNiceArray\} & \{VNiceMatrix\}
+% \{NiceTabular\} & \{NiceArray\} & \{NiceMatrix\} \\
+% \{NiceTabular*\} & \{pNiceArray\} & \{pNiceMatrix\} \\
+% & \{bNiceArray\} & \{bNiceMatrix\} \\
+% & \{BNiceArray\} & \{BNiceMatrix\} \\
+% & \{vNiceArray\} & \{vNiceMatrix\} \\
+% & \{VNiceArray\} & \{VNiceMatrix\}
% \end{tabular}
% \end{ttfamily}
%
@@ -225,13 +225,9 @@ version 2005/12/01 or later.
%
%
% \medskip
-% The environments |{NiceArray}| and |{NiceTabular}| are similar to the
-% environments |{array}| and |{tabular}| of the package \pkg{array} (which is
-% loaded by \pkg{nicematrix}).
-%
-% However, in |{NiceArray}| (and its variants), the columns of type |w| (e.g.:
-% |wc{1cm}|) are composed in math mode whereas, in |{array}| of \pkg{array},
-% they are composed in text mode.
+% The environments |{NiceArray}|, |{NiceTabular}| and |{NiceTabular*}| are
+% similar to the environments |{array}|, |{tabular}| and |{tabular*}| of the
+% package \pkg{array} (which is loaded by \pkg{nicematrix}).
%
% \medskip
% The environments |{pNiceArray}|, |{bNiceArray}|, etc. have no equivalent in
@@ -318,7 +314,7 @@ version 2005/12/01 or later.
% \section{The vertical position of the arrays}
%
% The package \pkg{nicematrix} provides a option |baseline| for the vertical
-% position of the arrays. This option takes as value an integer which is the
+% position of the arrays. This option takes in as value an integer which is the
% number of the row on which the array will be aligned.
%
% \medskip
@@ -348,8 +344,7 @@ version 2005/12/01 or later.
% immediately after an |\item| of list. One should remark that the presence of a
% |\hline| at the beginning of the array doesn't prevent the alignment of the
% baseline with the baseline of the first row (with |{tabular}| or |{array}| of
-% \pkg{array}, one must use |\firsthline|\footnote{It's also possible to use
-% |\firsthline| in the environments of \pkg{nicematrix}.}).
+% \pkg{array}, one must use |\firsthline|.
%
% \medskip
% \begin{BVerbatim}[baseline=c,boxwidth=9cm]
@@ -545,61 +540,81 @@ version 2005/12/01 or later.
% \section{The rules}
%
% The usual techniques for the rules may be used in the environments of
-% \pkg{nicematrix} (excepted |\vline|).
+% \pkg{nicematrix} (excepted |\vline|). However, there is some small differences
+% with the classical environments.
%
+% \bigskip
+% \subsection{Some differences with the classical environments}
%
-% \subsection{The thickness and the color of the rules}
-%
-% The environments of \pkg{nicematrix} provide a key |rules/width| to set the
-% width (in fact the thickness) of the rules in the current environment. In
-% fact, this key merely sets the value of the length |\arrayrulewidth|.
-%
-% \smallskip
-% It's well known that \pkg{colortbl} provides the command |\arrayrulecolor| in
-% order to specify the color of the rules.
+% \subsubsection{The vertical rules}
%
-% \smallskip
-% With \pkg{nicematrix}, it's possible to specify the color of the rules even
-% when \pkg{colortbl} is not loaded. For sake of compatibility, the command is
-% also named |\arrayrulecolor|. The environments of \pkg{nicematrix} also
-% provide a key |rules/color| to fix the color of the rules in the current
-% environment.
-%
-% \medskip
-% \begin{scope}
-% \hfuzz=10cm
-% \begin{BVerbatim}[baseline=c,boxwidth=9.5cm]
-% \begin{NiceTabular}{|ccc|}[~emphase#rules/color=[gray]{0.9},rules/width=1pt@]
-% \hline
-% rose & tulipe & lys \\
-% arum & iris & violette \\
-% muguet & dahlia & souci \\
-% \hline
+% In the environments of \pkg{nicematrix}, the vertical rules specified by
+% \verb+|+ in the preambles of the environments are never broken, even by an
+% incomplete row or by a double horizontal rule specified by |\hline\hline|
+% (there is no need to use \pkg{hhline}). \footnote{This is the behaviour since
+% the version 5.1 of \pkg{nicematrix}. Prior to that version, the behaviour was
+% the standard behaviour of \pkg{array}.}
+%
+% \bigskip
+% \begin{BVerbatim}[baseline=c,boxwidth=10cm]
+% \begin{NiceTabular}{|c|c|} \hline
+% First & Second \\ ~emphase#\hline\hline@
+% Peter \\ \hline
+% Mary & George\\ \hline
% \end{NiceTabular}
% \end{BVerbatim}
-% \begin{NiceTabular}{|ccc|}[rules/color=[gray]{0.9},rules/width=1pt]
-% \hline
-% rose & tulipe & lys \\
-% arum & iris & violette \\
-% muguet & dahlia & souci \\
-% \hline
+% \begin{NiceTabular}{|c|c|}[c] \hline
+% First & Second \\ \hline\hline
+% Peter \\ \hline
+% Mary & George \\ \hline
% \end{NiceTabular}
-% \end{scope}
+%
+% \bigskip
+% If you use \pkg{booktabs} (which provides |\toprule|, |\midrule|,
+% |\bottomrule|, etc.) and if you really want to add vertical rules (which is
+% not in the spirit of \pkg{booktabs}), you should notice that the vertical rules
+% drawn by \pkg{nicematrix} are compatible with \pkg{booktabs}.
%
% \medskip
-% If one wishes to define new specifiers for columns in order to draw vertical
-% rules (for example with a specific color or thicker than the standard rules),
-% he should consider the command |\OnlyMainNiceMatrix| described on
-% page~\pageref{OnlyMainNiceMatrix}.
+% \begin{BVerbatim}[baseline=c,boxwidth=10.5cm]
+% $\begin{NiceArray}{~emphase#|cccc|@} \toprule
+% a & b & c & d \\ \midrule
+% 1 & 2 & 3 & 4 \\
+% 1 & 2 & 3 & 4 \\ \bottomrule
+% \end{NiceArray}$
+% \end{BVerbatim}
+% $\begin{NiceArray}{|cccc|}
+% \toprule
+% a & b & c & d \\
+% \midrule
+% 1 & 2 & 3 & 4 \\
+% 1 & 2 & 3 & 4 \\
+% \bottomrule
+% \end{NiceArray}$
+%
+% \bigskip
+% However, it's still possible to define a specifier (named, for instance, |I|)
+% to draw vertical rules with the standard behaviour of \pkg{array}.
+%
+% \begin{Verbatim}
+% \newcolumntype{I}{!{\vrule}}
+% \end{Verbatim}
+%
+% However, in this case, it is probably more clever to add a command
+% |\OnlyMainNiceMatrix| (cf. p.~\pageref{OnlyMainNiceMatrix}):
+% \begin{Verbatim}
+% \newcolumntype{I}{!{\OnlyMainNiceMatrix{\vrule}}}
+% \end{Verbatim}
%
%
% \bigskip
-% \subsection{A remark about \textbackslash cline}
+% \subsubsection{The command \textbackslash cline}
%
%\label{remark-cline}
%
% The horizontal and vertical rules drawn by |\hline| and the specifier
-% ``\verb+|+'' make the array larger or wider by a quantity equal to the width of the rule.
+% ``\verb+|+'' make the array larger or wider by a quantity equal to the width
+% of the rule (with \pkg{array} and also with \pkg{nicematrix}).
%
% \smallskip
% For historical reasons, this is not the case with the command |\cline|, as
@@ -647,6 +662,53 @@ version 2005/12/01 or later.
% \end{NiceTabular}
% \end{scope}
%
+%
+% \subsection{The thickness and the color of the rules}
+%
+% The environments of \pkg{nicematrix} provide a key |rules/width| to set the
+% width (in fact the thickness) of the rules in the current environment. In
+% fact, this key merely sets the value of the length |\arrayrulewidth|.
+%
+% \smallskip
+% It's well known that \pkg{colortbl} provides the command |\arrayrulecolor| in
+% order to specify the color of the rules.
+%
+% \smallskip
+% With \pkg{nicematrix}, it's possible to specify the color of the rules even
+% when \pkg{colortbl} is not loaded. For sake of compatibility, the command is
+% also named |\arrayrulecolor|. The environments of \pkg{nicematrix} also
+% provide a key |rules/color| to fix the color of the rules in the current
+% environment.
+%
+% \medskip
+% \begin{scope}
+% \hfuzz=10cm
+% \begin{BVerbatim}[baseline=c,boxwidth=9.5cm]
+% \begin{NiceTabular}{|ccc|}[~emphase#rules/color=[gray]{0.9},rules/width=1pt@]
+% \hline
+% rose & tulipe & lys \\
+% arum & iris & violette \\
+% muguet & dahlia & souci \\
+% \hline
+% \end{NiceTabular}
+% \end{BVerbatim}
+% \begin{NiceTabular}{|ccc|}[rules/color=[gray]{0.9},rules/width=1pt]
+% \hline
+% rose & tulipe & lys \\
+% arum & iris & violette \\
+% muguet & dahlia & souci \\
+% \hline
+% \end{NiceTabular}
+% \end{scope}
+%
+% \medskip
+% If one wishes to define new specifiers for columns in order to draw vertical
+% rules (for example with a specific color or thicker than the standard rules),
+% he should consider the command |\OnlyMainNiceMatrix| described on
+% page~\pageref{OnlyMainNiceMatrix}.
+%
+%
+%
% \subsection{The keys hlines and vlines}
%
% The key |hlines| draws all the horizontal rules and the key |vlines| draws all
@@ -668,52 +730,6 @@ version 2005/12/01 or later.
% 1 & 2 & 3 & 4 & 5 & 6
% \end{pNiceMatrix}$
%
-% \bigskip
-% However, there is a difference between the key |vlines| and the use of
-% the specifier ``"|"'' in the preamble of the environment: the rules drawn by
-% |vlines| completely cross the double-rules drawn by |\hline\hline| (you don't
-% need \pkg{hhline}).
-%
-% \medskip
-% \begin{BVerbatim}[baseline=c,boxwidth=11.5cm]
-% $\begin{NiceMatrix}[~emphase#vlines@] \hline
-% a & b & c & d \\ \hline \hline
-% 1 & 2 & 3 & 4 \\
-% 1 & 2 & 3 & 4 \\ \hline
-% \end{NiceMatrix}$
-% \end{BVerbatim}
-% $\begin{NiceMatrix}[vlines]
-% \hline
-% a & b & c & d \\
-% \hline \hline
-% 1 & 2 & 3 & 4 \\
-% 1 & 2 & 3 & 4 \\
-% \hline
-% \end{NiceMatrix}$
-%
-%
-% \bigskip
-% If you use \pkg{booktabs} (which provides |\toprule|, |midrule|, |bottomrule|,
-% etc.) and you really want to draw vertical rules (something opposed to the
-% spirit of \pkg{booktabs}), you should remark that the key |vlines| in
-% compatible with \pkg{booktabs}.
-%
-% \medskip
-% \begin{BVerbatim}[baseline=c,boxwidth=11.5cm]
-% $\begin{NiceMatrix}[~emphase#vlines@] \toprule
-% a & b & c & d \\ \midrule
-% 1 & 2 & 3 & 4 \\
-% 1 & 2 & 3 & 4 \\ \bottomrule
-% \end{NiceMatrix}$
-% \end{BVerbatim}
-% $\begin{NiceMatrix}[vlines]
-% \toprule
-% a & b & c & d \\
-% \midrule
-% 1 & 2 & 3 & 4 \\
-% 1 & 2 & 3 & 4 \\
-% \bottomrule
-% \end{NiceMatrix}$
%
%
% \subsection{The key hvlines}
@@ -888,37 +904,54 @@ version 2005/12/01 or later.
% \emph{Remark} : In the package \pkg{array} (on which the package
% \pkg{nicematrix} relies), horizontal and vertical rules make the array larger
% or wider by a quantity equal to the width of the rule\footnote{In fact, this
-% is true only for |\hline| and ``"|"'' but not for |\cline|.}. In
-% \pkg{nicematrix}, the dotted lines drawn by |\hdottedline| and ``|:|'' do
-% likewise.
+% is true only for |\hline| and ``"|"'' but not for |\cline|: cf
+% p.~\pageref{remark-cline}}. In \pkg{nicematrix}, the dotted lines drawn by
+% |\hdottedline| and ``|:|'' do likewise.
%
%
%
%\section{The color of the rows and columns}
%
-% With the classical package \pkg{colortbl}, it's possible to color the cells,
-% rows and columns of a tabular. However, the resulting \textsc{pdf} is not
-% always perfectly displayed by the \textsc{pdf} viewers, in particular in
-% conjonction with rules. With some \textsc{pdf} viewers, some vertical rules
-% seem to vanish. On the other side, some thin horizontal white lines may appear
-% in some circonstances.
+% \subsection{Utilisation of colortbl}
%
+% We recall that the package \pkg{colortbl} can be loaded directly with
+% |\usepackage{colortbl}| or by loading \pkg{xcolor} with the key |table|:
+% |\usepackage[table]{xcolor}|.
%
% \medskip
-% The package \pkg{nicematrix} provides similar tools which do not present these
-% drawbacks. It provides a key |code-before|\footnote{There is also a key
-% |code-after| : see p.~\pageref{code-after}.} for some code which will be
-% executed \emph{before} the drawing of the tabular. In this |code-before|, new
-% commands are available: |\cellcolor|, |\rectanglecolor|, |\rowcolor|,
-% |\columncolor|, |\rowcolors| and |\chessboardcolors|.
-% \label{code-before}
+% Since the package \pkg{nicematrix} is based on \pkg{array}, it's possible to
+% use \pkg{colortbl} with \pkg{nicematrix}.
%
% \medskip
-% These commands are independent of \pkg{colortbl}.\footnote{Thus, it's possible
-% to color the rules, the cells, the rows, the columns, etc. without loading
-% \pkg{colortbl}.}
+% However, there is two drawbacks:
+% \begin{itemize}
+% \item The package \pkg{colortbl} patches \pkg{array}, leading to some
+% incompatibilities (for example with the command |\hdotsfor|).
+%
+% \item The package \pkg{colortbl} constructs the array row by row, alterning
+% colored rectangles, rules and contents of the cells. The resulting
+% \textsc{pdf} is difficult to interpret by some \textsc{pdf} viewers and may
+% lead to artefacts on the screen : some rules seem to disappear and on the
+% other side, some thin white lines appear. The package \pkg{nicematrix}
+% provides some tools without those drawbacks.
+% \end{itemize}
+%
+% \subsection{The tools of nicematrix in the code-before}
+%
+% The package \pkg{nicematrix} provides some tools (independent of
+% \pkg{colortbl}) to draw the colored panels first, and, then, the content
+% of the cells and the rules. This strategy is more conform to the ``painting
+% model'' of the formats PostScript and \textsc{pdf} and is more suitable for
+% the \textsc{pdf} viewers. However, it requires several compilations.
%
% \medskip
+% The extension \pkg{nicematrix} provides a key |code-before| for some code that
+% will be executed before the drawing of the tabular. In this |code-before|, new
+% commands are available: |\cellcolor|, |\rectanglecolor|, |\rowcolor|,
+% |\columncolor|, |\rowcolors| and |\chessboardcolors|.
+% \label{code-before}
+%
+% \medskip
% All these commands accept an optional argument (between square brackets and
% in first position) which is the color model for the specification of the colors.
%
@@ -927,8 +960,8 @@ version 2005/12/01 or later.
% \item The command |\cellcolor| takes its name from the command |\cellcolor| of
% \pkg{colortbl}.
%
-% This command takes in mandatory arguments a color and a list of cells, each of
-% which with the format $i$-$j$ where $i$ is the number of row and $j$ the
+% This command takes in as mandatory arguments a color and a list of cells, each
+% of which with the format $i$-$j$ where $i$ is the number of row and $j$ the
% number of colummn of the cell.
%
%
@@ -1027,7 +1060,7 @@ version 2005/12/01 or later.
% \bigskip
% \item The command |\rowcolors| (with a \emph{s}) takes its name from the
% command |\rowcolors| of \pkg{xcolor}\footnote{The command |\rowcolors| of
-% \pkg{color} is available when \pkg{xcolor} is loaded with the
+% \pkg{xcolor} is available when \pkg{xcolor} is loaded with the
% option~|table|.}. The \emph{s} emphasizes the fact that there is \emph{two}
% colors. This command colors alternately the rows of the tabular, beginning
% with the row whose number is given in first (mandatory) argument. The two
@@ -1057,8 +1090,8 @@ version 2005/12/01 or later.
% \end{scope}
%
% \bigskip
-% \item The command |\chessboardcolors| takes in mandatory arguments two colors
-% and colors the cells of the tabular in quincunx with these colors.
+% \item The command |\chessboardcolors| takes in as mandatory arguments two colors
+% and it colors the cells of the tabular in quincunx with these colors.
%
% \medskip
% \begin{scope}
@@ -1091,7 +1124,7 @@ version 2005/12/01 or later.
% \begin{scope}
% \hfuzz=10cm
% \begin{BVerbatim}[baseline=c,boxwidth=8.5cm]
-% \begin{NiceTabular}[c]{lssss}%
+% \begin{NiceTabular}[c]{lSSSS}%
% [code-before = \rowcolor{red!15}{1-2} \rowcolors{3}{blue!15}{}]
% ~emphase#\toprule@
% \Block{2-1}{Product} \\
@@ -1108,7 +1141,7 @@ version 2005/12/01 or later.
% ~emphase#\bottomrule@
% \end{NiceTabular}
% \end{BVerbatim}
-% \begin{NiceTabular}[c]{lssss}[code-before = \rowcolor{red!15}{1-2}
+% \begin{NiceTabular}[c]{lSSSS}[code-before = \rowcolor{red!15}{1-2}
% \rowcolors{3}{blue!15}{}]
% \toprule
% \Block{2-1}{Product} &
@@ -1129,15 +1162,63 @@ version 2005/12/01 or later.
% \medskip
% We have used the type of column |S| of \pkg{siunitx}.
%
+%
+% \subsection{Color tools with the syntax of colortbl}
+%
+% It's possible to access the preceding tools with a syntax close to the syntax
+% of \pkg{colortbl}. For that, one must use the key |colortbl-like| in the
+% current environment.\footnote{As of now, this key is not available in |\NiceMatrixOptions|.}
+%
+% There are three commands available (they are inspired by \pkg{colortbl} but
+% are \emph{independent} of \pkg{colortbl}):
+% \begin{itemize}
+% \item |\cellcolor| which colorizes a cell;
+% \item |\rowcolor| which must be used in a cell and which colorizes the end of
+% the row;
+% \item |\columncolor| which must be used in the preamble of the environment
+% with the same syntax as the corresponding command of
+% \pkg{colortbl}\footnote{Unlike the command |\columncolor| of \pkg{colortbl},
+% this command |\columncolor| can appear within another command, itself used in the
+% preamble.}.
+% \end{itemize}
+%
+% \medskip
+% \begin{Verbatim}
+% \begin{NiceTabular}[colortbl-like]{>{~emphase#\columncolor{blue!15}}@ccc}
+% \toprule
+% ~emphase#\rowcolor{red!15}@
+% Last name & First name & Birth day \\
+% \midrule
+% Achard & Jacques & 5 juin 1962 \\
+% Lefebvre & Mathilde & 23 mai 1988 \\
+% Vanesse & Stephany & 30 octobre 1994 \\
+% Dupont & Chantal & 15 janvier 1998 \\
+% \bottomrule
+% \end{NiceTabular}
+% \end{Verbatim}
+%
+%
+% \begin{center}
+% \begin{NiceTabular}[colortbl-like]{>{\columncolor{blue!15}}ccc}
+% \toprule
+% \rowcolor{red!15}
+% Last name & First name & Birth day \\
+% \midrule
+% Achard & Jacques & 5 juin 1962 \\
+% Lefebvre & Mathilde & 23 mai 1988 \\
+% Vanesse & Stephany & 30 octobre 1994 \\
+% Dupont & Chantal & 15 janvier 1998 \\
+% \bottomrule
+% \end{NiceTabular}
+% \end{center}
+%
+%
% \section{The width of the columns}
% \label{width}
%
% 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}. In
-% |{NiceTabular}|, the cells of such columns are composed in text mode but, in
-% |{NiceArray}|, |{pNiceArray}|, etc., they are composed in math mode (whereas,
-% in |{array}| of \pkg{array}, they are composed in text mode).
+% the standard letters |w| and |W| of the package \pkg{array}.
%
% \medskip
% \begin{BVerbatim}[baseline=c,boxwidth=9cm]
@@ -1486,10 +1567,8 @@ version 2005/12/01 or later.
% \end{bNiceMatrix}$
%
% \bigskip
-% In the first column of this exemple, there are two instructions |\Vdots| but
-% only one dotted line is drawn (there is no overlapping graphic objects in the
-% resulting \textsc{pdf}\footnote{And it's not possible to draw a |\Ldots| and a
-% |\Cdots| line between the same cells.}).
+% In the first column of this exemple, there are two instructions |\Vdots| but,
+% of course, only one dotted line is drawn.
%
% \bigskip
% In fact, in this example, it would be possible to draw the same matrix more
@@ -1616,7 +1695,7 @@ version 2005/12/01 or later.
%
%
%
-% \subsection{The command \textbackslash Hdotsfor}
+% \subsection{The commands \textbackslash Hdotsfor and \textbackslash Vdotsfor}
%
% Some people commonly use the command |\hdotsfor| of \pkg{amsmath} in order to
% draw horizontal dotted lines in a matrix. In the environments of
@@ -1668,6 +1747,44 @@ version 2005/12/01 or later.
% |\Hdotsfor| may be used when the package \pkg{colortbl} is loaded (but you
% might have problem if you use |\rowcolor| on the same row as |\Hdotsfor|).
%
+% \bigskip
+% The package \pkg{nicematrix} also provides a command |\Vdotsfor| similar to
+% |\Hdotsfor| but for the vertical dotted lines.
+% \bigskip
+% The following example uses both |\Hdotsfor| and |\Vdotsfor|:
+%
+% \begin{Verbatim}[formatcom=\small\color{gray}]
+% \begin{bNiceMatrix}
+% C[a_1,a_1] & \Cdots & C[a_1,a_n]
+% & \hspace*{20mm} & C[a_1,a_1^{(p)}] & \Cdots & C[a_1,a_n^{(p)}] \\
+% \Vdots & \Ddots & \Vdots
+% & ~emphase#\Hdotsfor{1}@ & \Vdots & \Ddots & \Vdots \\
+% C[a_n,a_1] & \Cdots & C[a_n,a_n]
+% & & C[a_n,a_1^{(p)}] & \Cdots & C[a_n,a_n^{(p)}] \\
+% \rule{0pt}{15mm} & ~emphase#\Vdotsfor{1}@ & & \Ddots & & ~emphase#\Vdotsfor{1}@ \\
+% C[a_1^{(p)},a_1] & \Cdots & C[a_1^{(p)},a_n]
+% & & C[a_1^{(p)},a_1^{(p)}] & \Cdots & C[a_1^{(p)},a_n^{(p)}] \\
+% \Vdots & \Ddots & \Vdots
+% & ~emphase#\Hdotsfor{1}@ & \Vdots & \Ddots & \Vdots \\
+% C[a_n^{(p)},a_1] & \Cdots & C[a_n^{(p)},a_n]
+% & & C[a_n^{(p)},a_1^{(p)}] & \Cdots & C[a_n^{(p)},a_n^{(p)}]
+% \end{bNiceMatrix}
+% \end{Verbatim}
+%
+%
+% \[\begin{bNiceMatrix}
+% C[a_1,a_1] & \Cdots & C[a_1,a_n] & \hspace*{20mm} & C[a_1,a_1^{(p)}] & \Cdots & C[a_1,a_n^{(p)}] \\
+% \Vdots & \Ddots & \Vdots & \Hdotsfor{1} & \Vdots & \Ddots & \Vdots \\
+% C[a_n,a_1] & \Cdots & C[a_n,a_n] & & C[a_n,a_1^{(p)}] & \Cdots & C[a_n,a_n^{(p)}] \\
+% \rule{0pt}{15mm} & \Vdotsfor{1} & & \Ddots & & \Vdotsfor{1} \\
+% C[a_1^{(p)},a_1] & \Cdots & C[a_1^{(p)},a_n] & & C[a_1^{(p)},a_1^{(p)}] & \Cdots & C[a_1^{(p)},a_n^{(p)}] \\
+% \Vdots & \Ddots & \Vdots & \Hdotsfor{1} & \Vdots & \Ddots & \Vdots \\
+% C[a_n^{(p)},a_1] & \Cdots & C[a_n^{(p)},a_n] & & C[a_n^{(p)},a_1^{(p)}] & \Cdots & C[a_n^{(p)},a_n^{(p)}]
+% \end{bNiceMatrix}\]
+
+
+
+%
% \subsection{How to generate the continuous dotted lines transparently}
%
% The package \pkg{nicematrix} provides an option called |transparent| for using
@@ -1995,7 +2112,8 @@ version 2005/12/01 or later.
% \begin{itemize}
% \item If you have several successive commands |\tabularnote{...}| \emph{with no
% space at all between them}, the labels of the corresponding notes are composed
-% together, separated by commas.
+% together, separated by commas (this is similar to the option |multiple| of
+% \pkg{footmisc} for the footnotes).
%
% \item If a command |\tabularnote{...}| is exactly at the end of a cell (with
% no space at all after), the label of the note is composed in an overlapping
@@ -2086,7 +2204,7 @@ version 2005/12/01 or later.
% \item |notes/code-before|
% \end{itemize}
% For sake of commodity, it is also possible to set these keys in
-% |\NiceMatrixOptions| via a key |notes| which takes as value a list of
+% |\NiceMatrixOptions| via a key |notes| which takes in as value a list of
% pairs \textsl{key=value} where the name of the keys need no longer be
% prefixed by |notes|:
% \begin{center}
@@ -2191,7 +2309,7 @@ version 2005/12/01 or later.
% corresponds to the type of list used when the option |para| is in force. Of
% course, when the option |para| is used, a list of type |inline| (as called by
% \pkg{enumitem}) is used and the pairs \textsl{key=value} should correspond to
-% such a list of type |inline| .
+% such a list of type |inline|.
%
% Initial value:\quad |afterlabel = \nobreak, itemjoin = \quad|
%
@@ -2270,9 +2388,8 @@ version 2005/12/01 or later.
% \label{key-R}
%
% The environments without preamble (|{NiceMatrix}|, |{pNiceMatrix}|,
-% |{bNiceMatrix}|, etc.) provide two options |l| and |r| (equivalent at |L| and
-% |R|) which generate all the columns aligned leftwards (or
-% rightwards).
+% |{bNiceMatrix}|, etc.) provide two options |l| and |r| which generate all the
+% columns aligned leftwards (or rightwards).
%
%
% \medskip
@@ -2451,7 +2568,7 @@ version 2005/12/01 or later.
% |\AutoNiceMatrix|, |\pAutoNiceMatrix|, |\bAutoNiceMatrix|, |\vAutoNiceMatrix|,
% |\VAutoNiceMatrix| and |\BAutoNiceMatrix|.
%
-% These commands take two mandatory arguments. The first is the format of the
+% 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
@@ -2924,6 +3041,102 @@ version 2005/12/01 or later.
% 1 & 8 & 28 & 56 & 70 & 56 & 28 & 8 & 1
% \end{NiceMatrix}\]
%
+% \section{Tools for the developpers}
+%
+% As its name implies, the token list |\g_nicematrix_code_after_tl| is public
+% (according to the LaTeX3 conventions, each variable with name beginning with
+% |\g_nicematrix| ou |\l_nicematrix| is public and each variable with name
+% beginning with |\g__nicematrix| or |\l__nicematrix| is private).
+%
+%
+% \medskip
+% This variable contains the code of what we have called the ``|code-after|''.
+% The developper can use it 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
+% \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_crossbox:nnn
+% {
+% \begin { tikzpicture }
+% \draw [ #3 ]
+% ( row-#1 -| col-\int_eval:n { #2 + 1 } )
+% -- ( row-\int_eval:n { #1 + 1 } -| col-#2 )
+% ( row-#1 -| col-\int_eval:n #2 )
+% -- ( row-\int_eval:n { #1 + 1 } -| col-\int_eval:n { #2 + 1 } ) ;
+% \end { tikzpicture }
+% }
+%
+%
+% \NewDocumentCommand \crossbox { ! O { } }
+% {
+% \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_crossbox:nnn
+% {
+% \begin { tikzpicture }
+% \draw [ #3 ]
+% ( row-#1 -| col-\int_eval:n { #2 + 1 } )
+% -- ( row-\int_eval:n { #1 + 1 } -| col-#2 )
+% ( row-#1 -| col-\int_eval:n #2 )
+% -- ( row-\int_eval:n { #1 + 1 } -| col-\int_eval:n { #2 + 1 } ) ;
+% \end { tikzpicture }
+% }
+%
+%
+% \NewDocumentCommand \crossbox { ! O { } }
+% {
+% \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 utilisation:
+%
+% \medskip
+% \begin{BVerbatim}[baseline=c,boxwidth=9cm]
+% \begin{NiceTabular}{ccc}[hvlines]
+% Tokyo & Paris & London \\
+% Cap Town & ~emphase#\crossbox[red]@ & Miami \\
+% Los Angeles & Madrid & Roma
+% \end{NiceTabular}
+% \end{BVerbatim}
+% \begin{NiceTabular}{ccc}[hvlines]
+% Tokyo & Paris & London \\
+% Cap Town & \crossbox[red] & Miami \\
+% Los Angeles & Madrid & Roma
+% \end{NiceTabular}
+%
%
% \section{Technical remarks}
%
@@ -2944,7 +3157,9 @@ version 2005/12/01 or later.
% \newcolumntype{?}{!{\OnlyMainNiceMatrix{\vrule width 1 pt}}}
% \end{Verbatim}
%
-% The heavy vertical rule won't extend in the exterior rows:
+% The heavy vertical rule won't extend in the exterior rows.\footnote{Of course,
+% such rule is defined by the classical technics of \pkg{nicematrix} and, for
+% this reason, won't cross the double rules of |\hline\hline|.}
% \medskip
% \begin{scope}
% \newcolumntype{?}{!{\OnlyMainNiceMatrix{\vrule width 1 pt}}}
@@ -3128,8 +3343,8 @@ version 2005/12/01 or later.
%
% \medskip
% First, we write a command |\stars| similar the well-known commands
-% |\arabic|, |\alph|, |\Alph|, etc. which produce a number of stars equal to its argument
-% \footnote{In fact: the value of its argument.}
+% |\arabic|, |\alph|, |\Alph|, etc. which produces a number of stars equal to
+% its argument \footnote{In fact: the value of its argument.}
% \begin{Verbatim}
% \ExplSyntaxOn
% \NewDocumentCommand ~emphase#\stars@ { m }
@@ -3419,7 +3634,7 @@ version 2005/12/01 or later.
% { last-col,code-for-last-col = \color{blue}\scriptstyle,light-syntax}
% \setlength{\extrarowheight}{1mm}
% $\begin{pNiceArray}{cccc:c}
-% 1 1 1 1 1 ;
+% 1 1 1 1 1 {} ;
% 2 4 8 16 9 ;
% 3 9 27 81 36 ;
% 4 16 64 256 100
@@ -3443,7 +3658,7 @@ version 2005/12/01 or later.
% \setlength{\extrarowheight}{1mm}
%
% \enskip $\begin{pNiceArray}{cccc:c}
-% 1 1 1 1 1 ;
+% 1 1 1 1 1 {} ;
% 2 4 8 16 9 ;
% 3 9 27 81 36 ;
% 4 16 64 256 100
@@ -3975,6 +4190,7 @@ version 2005/12/01 or later.
\cs_new_protected:Npn \@@_error:nn { \msg_error:nnn { nicematrix } }
\cs_new_protected:Npn \@@_error:nnn { \msg_error:nnnn { nicematrix } }
\cs_new_protected:Npn \@@_fatal:n { \msg_fatal:nn { nicematrix } }
+\cs_new_protected:Npn \@@_fatal:nn { \msg_fatal:nnn { nicematrix } }
\cs_new_protected:Npn \@@_msg_new:nn { \msg_new:nnn { nicematrix } }
\cs_new_protected:Npn \@@_msg_new:nnn { \msg_new:nnnn { nicematrix } }
% \end{macrocode}
@@ -4360,6 +4576,32 @@ version 2005/12/01 or later.
}
% \end{macrocode}
%
+% \bigskip
+% The following regex will be used to modify the preamble of the array when the
+% key |colortbl-like| is used.
+% \begin{macrocode}
+\regex_const:Nn \c_@@_columncolor_regex { \c { columncolor } }
+% \end{macrocode}
+%
+% \bigskip
+% If the final user uses \pkg{nicematrix}, PGF/Tikz will write instruction
+% |\pgfsyspdfmark| in the |aux| file. If he changes its mind and no longer loads
+% \pkg{nicematrix}, an error may occur at the next compilation because of
+% remanent instructions |\pgfsyspdfmark| in the |aux| file. With the following
+% code, we avoid that situation.
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_provide_pgfsyspdfmark:
+ {
+ \iow_now:Nn \@mainaux
+ {
+ \ExplSyntaxOn
+ \cs_if_free:NT \pgfsyspdfmark
+ { \cs_set_eq:NN \pgfsyspdfmark \use:nnn }
+ \ExplSyntaxOff
+ }
+ \cs_gset_eq:NN \@@_provide_pgfsyspdfmark: \prg_do_nothing:
+ }
+% \end{macrocode}
%
% \subsection*{Parameters}
%
@@ -4380,7 +4622,7 @@ version 2005/12/01 or later.
\newcolumntype C c
\newcolumntype R r
}
-% \end{document}
+% \end{macrocode}
%
% \bigskip
% The following counter will count the environments |{NiceArray}|. The value of
@@ -4419,7 +4661,7 @@ version 2005/12/01 or later.
% \end{macrocode}
%
% \bigskip
-% the following counter will count the environments |{NiceMatrixBlock}|.
+% The following counter will count the environments |{NiceMatrixBlock}|.
% \begin{macrocode}
\int_new:N \g_@@_NiceMatrixBlock_int
% \end{macrocode}
@@ -4457,10 +4699,26 @@ version 2005/12/01 or later.
% \end{macrocode}
%
% \bigskip
-% If the user uses |{NiceTabular}|, we will raise the following flag.
+% If the user uses |{NiceTabular}| or |{NiceTabular*}|, we will raise the
+% following flag.
% \begin{macrocode}
\bool_new:N \l_@@_NiceTabular_bool
% \end{macrocode}
+%
+% \bigskip
+% If the user uses |{NiceTabular*}|, the width of the tabular (in the first
+% argument of the environment |{NiceTabular*}|) will be stored in the following
+% dimension.
+% \begin{macrocode}
+\dim_new:N \l_@@_tabular_width_dim
+% \end{macrocode}
+%
+% \bigskip
+% If the user uses an environment without preamble, we will raise the following
+% flag.
+% \begin{macrocode}
+\bool_new:N \l_@@_Matrix_bool
+% \end{macrocode}
%
% \bigskip
% \begin{macrocode}
@@ -4512,15 +4770,15 @@ version 2005/12/01 or later.
% The following token list corresponds to the option |code-after| (it's also
% possible to set the value of that parameter with the command |\CodeAfter|).
% \begin{macrocode}
-\tl_new:N \g_@@_code_after_tl
+\tl_new:N \g_nicematrix_code_after_tl
% \end{macrocode}
%
% \bigskip
-% The following token list has a function similar to |\g_@@_code_after_tl| but
-% it is used internally by \pkg{nicematrix}. In fact, we have to distinguish
-% between |\g_@@_code_after_tl| and |\g_@@_internal_code_after_tl| because we
-% must take care of the order in which instructions stored in that paremeters
-% are executed.
+% The following token list has a function similar to
+% |\g_nicematrix_code_after_tl| but it is used internally by \pkg{nicematrix}.
+% In fact, we have to distinguish between |\g_nicematrix_code_after_tl| and
+% |\g_@@_internal_code_after_tl| because we must take care of the order in which
+% instructions stored in that paremeters are executed.
% \begin{macrocode}
\tl_new:N \g_@@_internal_code_after_tl
% \end{macrocode}
@@ -4556,11 +4814,18 @@ version 2005/12/01 or later.
% \end{macrocode}
%
% \bigskip
-% The following flag will be raised when the key |code-before| is used in the
-% environment. Indeed, if there is a |code-before| in the environment, we will
-% manage to have the |row| nodes and the |col| nodes available \emph{before} the
-% creation of the array.
+% |\l_@@_code_before_tl| may contain two types of informations:
+% \begin{itemize}
+% \item A |code-before| written in the |aux| file by a previous run. When the
+% |aux| file is read, this |code-before| is stored in
+% |\g_@@_code_before_|\textsl{i}|_tl| (where \textsl{i} is the number of the
+% environment) and, at the beginning of the environment, it will be put in
+% |\l_@@_code_before_tl|.
+% \item The final user can explicitely add material in |\l_@@_code_before_tl| by
+% using the key |code-before|.
+% \end{itemize}
% \begin{macrocode}
+\tl_new:N \l_@@_code_before_tl
\bool_new:N \l_@@_code_before_bool
% \end{macrocode}
%
@@ -4640,7 +4905,19 @@ version 2005/12/01 or later.
% required by the key |hvlines| (these rules won't be drawn within the virtual
% blocks corresponding to the dotted lines).
%
-%
+% \medskip
+% We are able to determine the number of columns specified in the preamble (for
+% the environments with explicit preamble, of course and without the potential
+% exterior columns).
+% \begin{macrocode}
+\int_new:N \g_@@_static_num_of_col_int
+% \end{macrocode}
+%
+% \medskip
+% Used for the color of the blocks.
+% \begin{macrocode}
+\tl_new:N \l_@@_color_tl
+% \end{macrocode}
%
% \bigskip
% \textbf{Variables for the exterior rows and columns}\par\nobreak
@@ -4704,11 +4981,12 @@ version 2005/12/01 or later.
% \item \textbf{Last column}\par\nobreak
%
% For the potential ``last column'', we use an integer. A value of $-2$ means
-% that there is no last column. A value of $-1$ means that there is a last
-% column but we don't know its value because the user has used the option
-% |last-col| without value (it's possible in an environment without preamble
-% like |{pNiceMatrix}|). A value of $0$ means that the option |last-col| has
-% been used in an environment with preamble (like |{pNiceArray}|).
+% that there is no last column. A value of $-1$ means that we are in an
+% environment without preamble (e.g. |{bNiceMatrix}|) and there is a last column
+% but we don't know its value because the user has used the option |last-col|
+% without value. A value of $0$ means that the option |last-col| has been used
+% in an environment with preamble (like |{pNiceArray}|): in this case, the key
+% was necessary without argument.
% \begin{macrocode}
\int_new:N \l_@@_last_col_int
\int_set:Nn \l_@@_last_col_int { -2 }
@@ -4717,7 +4995,7 @@ version 2005/12/01 or later.
% However, we have also a boolean. Consider the following code:
% \begin{center}
% \begin{BVerbatim}
-% \begin{pNiceArray}{CC}[last-col]
+% \begin{pNiceArray}{cc}[last-col]
% 1 & 2 \\
% 3 & 4
% \end{pNiceArray}
@@ -4984,6 +5262,15 @@ version 2005/12/01 or later.
% \bigskip
% \subsection*{The options}
%
+% By default, the commands |\cellcolor| and |\rowcolor| are available for the
+% user in the cells of the tabular (the user may use the commands provided by
+% |\colortbl|). However, if the key |colortbl-like| is used, these
+% commands are available.
+% \begin{macrocode}
+\bool_new:N \l_@@_colortbl_like_bool
+% \end{macrocode}
+%
+% \bigskip
% By default, the behaviour of |\cline| is changed in the environments of
% \pkg{nicematrix}: a |\cline| spreads the array by an amount equal to
% |\arrayrulewidht|. It's possible to disable this feature with the key
@@ -5075,9 +5362,9 @@ version 2005/12/01 or later.
% \bigskip
% The flag |\l_@@_hlines_bool| corresponds to the key |hlines|, the flag
% |\l_@@_vlines_bool| to the key |vlines| and the flag |hvlines| to the key
-% |hvlines|. Since version 4.1, the key |hvlines| is no longer a mere alias for
-% the conjonction of |hlines| and |vlines|. Indeed, with |hvlines|, the vertical
-% and horizontal rules are \emph{not} drawn within the blocks (created by |\Block|).
+% |hvlines|. The key |hvlines| is not a mere alias for the conjonction of
+% |hlines| and |vlines|. Indeed, with |hvlines|, the vertical and horizontal
+% rules are \emph{not} drawn within the blocks (created by |\Block|).
% \begin{macrocode}
\bool_new:N \l_@@_hlines_bool
\bool_new:N \l_@@_vlines_bool
@@ -5295,7 +5582,7 @@ version 2005/12/01 or later.
extra-right-margin .dim_set:N = \l_@@_extra_right_margin_dim ,
extra-margin .meta:n =
{ extra-left-margin = #1 , extra-right-margin = #1 } ,
- extra-margin .value_required:n = true
+ extra-margin .value_required:n = true ,
}
% \end{macrocode}
%
@@ -5311,7 +5598,7 @@ version 2005/12/01 or later.
{
\tl_if_empty:nF { #1 }
{
- \tl_set:Nn \l_@@_code_before_tl { #1 }
+ \tl_put_right:Nn \l_@@_code_before_tl { #1 }
\bool_set_true:N \l_@@_code_before_bool
}
} ,
@@ -5345,8 +5632,12 @@ version 2005/12/01 or later.
\str_set_eq:NN \l_@@_name_str \l_tmpa_str
} ,
name .value_required:n = true ,
- code-after .tl_gset:N = \g_@@_code_after_tl ,
+ code-after .tl_gset:N = \g_nicematrix_code_after_tl ,
code-after .value_required:n = true ,
+ colortbl-like .code:n =
+ \bool_set_true:N \l_@@_colortbl_like_bool
+ \bool_set_true:N \l_@@_code_before_bool ,
+ colortbl-like .value_forbidden:n = true
}
% \end{macrocode}
%
@@ -5412,9 +5703,7 @@ version 2005/12/01 or later.
\keys_define:nn { NiceMatrix }
{
NiceMatrixOptions .inherit:n =
- {
- NiceMatrix / Global ,
- } ,
+ { NiceMatrix / Global } ,
NiceMatrixOptions / xdots .inherit:n = NiceMatrix / xdots ,
NiceMatrixOptions / rules .inherit:n = NiceMatrix / rules ,
NiceMatrixOptions / notes .inherit:n = NiceMatrix / notes ,
@@ -5556,8 +5845,6 @@ version 2005/12/01 or later.
{ \int_set:Nn \l_@@_last_col_int { #1 } } ,
l .code:n = \tl_set:Nn \l_@@_type_of_col_tl l ,
r .code:n = \tl_set:Nn \l_@@_type_of_col_tl r ,
- L .code:n = \tl_set:Nn \l_@@_type_of_col_tl l ,
- R .code:n = \tl_set:Nn \l_@@_type_of_col_tl r ,
S .code:n = \bool_if:NTF \c_@@_siunitx_loaded_bool
{ \tl_set:Nn \l_@@_type_of_col_tl S }
{ \@@_error:n { option~S~without~siunitx } } ,
@@ -5900,17 +6187,34 @@ version 2005/12/01 or later.
% redefinition of |\array| incompatible with our use of |\array|.
%
% \begin{macrocode}
+\cs_new_protected:Npn \@@_revtex_array:
+ {
+ \cs_set_eq:NN \@acoll \@arrayacol
+ \cs_set_eq:NN \@acolr \@arrayacol
+ \cs_set_eq:NN \@acol \@arrayacol
+ \cs_set:Npn \@halignto { }
+ \@array@array
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
\cs_new_protected:Npn \@@_array:
{
\bool_if:NTF \c_@@_revtex_bool
+ \@@_revtex_array:
{
- \cs_set_eq:NN \@acoll \@arrayacol
- \cs_set_eq:NN \@acolr \@arrayacol
- \cs_set_eq:NN \@acol \@arrayacol
- \cs_set:Npn \@halignto { }
- \@array@array
+ \bool_if:NTF \l_@@_NiceTabular_bool
+ { \dim_set_eq:NN \col@sep \tabcolsep }
+ { \dim_set_eq:NN \col@sep \arraycolsep }
+ \dim_compare:nNnTF \l_@@_tabular_width_dim = \c_zero_dim
+ { \cs_set:Npn \@halignto { } }
+ { \cs_set:Npx \@halignto { to \dim_use:N \l_@@_tabular_width_dim } }
+% \end{macrocode}
+% It \pkg{colortbl} is loaded, |\@tabarray| has been redefined to incorporate
+% |\CT@start|.
+% \begin{macrocode}
+ \@tabarray
}
- \array
% \end{macrocode}
% |\l_@@_baseline_str| may have the value |t|, |c| or |b|. However, if the value
% is |b|, we compose the |\array| (of \pkg{array}) with the option |t| and the
@@ -6008,12 +6312,10 @@ version 2005/12/01 or later.
% \bigskip
% The command |\@@_newcolumntype| is the command |\newcolumntype| of
% \pkg{array} without the warnings for redefinitions of columns types (we will
-% use it to redefine the columns types |w|, |W|, |p|, |m| and |b|).
+% use it to redefine the columns types |w| and |W|).
% \begin{macrocode}
\cs_set_protected:Npn \@@_newcolumntype #1
{
- % \cs_if_free:cT { NC @ find @ #1 }
- % { \NC@list \exp_after:wN { \the \NC@list \NC@do #1 } }
\cs_set:cpn { NC @ find @ #1 } ##1 #1 { \NC@ { ##1 } }
\peek_meaning:NTF [
{ \newcol@ #1 }
@@ -6023,31 +6325,29 @@ version 2005/12/01 or later.
%
%
% \bigskip
-% The following command will be used to redefine the column types |p|, |m| and
-% |b|. That means that it will be used three times. The first argument is the
-% letter of the column type (|p|, |m| or |b|). The second is the letter of
-% position for the environment |{minipage}| (|t|, |c| or |b|).
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_define_columntype:nn #1 #2
- {
-% \end{macrocode}
-% We don't want a warning for redefinition of the column type. That's why we use
-% |\@@_newcolumntype| and not |\newcolumntype|.
+% When the key |renew-dots| is used, the following code will be executed.
% \begin{macrocode}
- \@@_newcolumntype #1 [ 1 ]
- {
- > {
- \@@_Cell:
- \begin { minipage } [ #2 ] { ##1 }
- \mode_leave_vertical: \box_use:N \@arstrutbox
- }
+\cs_set_protected:Npn \@@_renew_dots:
+ {
+ \cs_set_eq:NN \ldots \@@_Ldots
+ \cs_set_eq:NN \cdots \@@_Cdots
+ \cs_set_eq:NN \vdots \@@_Vdots
+ \cs_set_eq:NN \ddots \@@_Ddots
+ \cs_set_eq:NN \iddots \@@_Iddots
+ \cs_set_eq:NN \dots \@@_Ldots
+ \cs_set_eq:NN \hdotsfor \@@_Hdotsfor:
+ }
% \end{macrocode}
-% Here, we put |c| but we would have the result with |l| or |r|.
+%
+% \bigskip
+% When the key |colortbl-like| is used, the following code will be executed.
% \begin{macrocode}
- c
- < { \box_use:N \@arstrutbox \end { minipage } \@@_end_Cell: }
+\cs_new_protected:Npn \@@_colortbl_like:
+ {
+ \cs_set_eq:NN \cellcolor \@@_cellcolor_tabular
+ \cs_set_eq:NN \rowcolor \@@_rowcolor_tabular
+ \cs_set_eq:NN \columncolor \@@_columncolor_preamble
}
- }
% \end{macrocode}
%
% \bigskip
@@ -6103,8 +6403,6 @@ version 2005/12/01 or later.
% \begin{macrocode}
\cs_set:Npn \ialign
{
- \bool_if:NT \l_@@_NiceTabular_bool
- { \dim_set_eq:NN \arraycolsep \@@_old_arraycolsep_dim }
\bool_if:NTF \c_@@_colortbl_loaded_bool
{
\CT@everycr
@@ -6159,8 +6457,6 @@ version 2005/12/01 or later.
\cs_set_eq:NN \@@_old_vdots \vdots
\cs_set_eq:NN \@@_old_ddots \ddots
\cs_set_eq:NN \@@_old_iddots \iddots
- \cs_set_eq:NN \firsthline \hline
- \cs_set_eq:NN \lasthline \hline
\bool_if:NTF \l_@@_standard_cline_bool
{ \cs_set_eq:NN \cline \@@_standard_cline }
{ \cs_set_eq:NN \cline \@@_cline }
@@ -6180,16 +6476,8 @@ version 2005/12/01 or later.
\cs_set_eq:NN \dotfill \@@_dotfill:
\cs_set_eq:NN \CodeAfter \@@_CodeAfter:n
\cs_set_eq:NN \diagbox \@@_diagbox:nn
- \bool_if:NT \l_@@_renew_dots_bool
- {
- \cs_set_eq:NN \ldots \@@_Ldots
- \cs_set_eq:NN \cdots \@@_Cdots
- \cs_set_eq:NN \vdots \@@_Vdots
- \cs_set_eq:NN \ddots \@@_Ddots
- \cs_set_eq:NN \iddots \@@_Iddots
- \cs_set_eq:NN \dots \@@_Ldots
- \cs_set_eq:NN \hdotsfor \@@_Hdotsfor:
- }
+ \bool_if:NT \l_@@_colortbl_like_bool \@@_colortbl_like:
+ \bool_if:NT \l_@@_renew_dots_bool \@@_renew_dots:
% \end{macrocode}
%
%
@@ -6231,135 +6519,11 @@ version 2005/12/01 or later.
\cs_set_eq:NN \@ifnextchar \new@ifnextchar
% \end{macrocode}
%
-%
-% \bigskip
-% We redefine the column types |p|, |m| and |b|. The command
-% |\@@_define_columntype:nn| is only used here.
-% \begin{macrocode}
- \@@_define_columntype:nn p t
- \@@_define_columntype:nn m c
- \@@_define_columntype:nn b b
-% \end{macrocode}
-%
-% \bigskip
-% We redefine the column types |w| and |W|. We use |\@@_newcolumntype| instead
-% of |\newcolumtype| because we don't want warnings for column types already
-% defined.
-% \begin{macrocode}
- \@@_newcolumntype w [ 2 ]
- {
- > {
- \hbox_set:Nw \l_@@_cell_box
- \@@_Cell:
- }
-% \end{macrocode}
-% |\@@_true_c:| will be replaced statically by |c| at the end of the construction
-% of the preamble.
-% \begin{macrocode}
- \@@_true_c:
- < {
- \@@_end_Cell:
- \hbox_set_end:
-% \end{macrocode}
-% The construction with |\@@_foldcase:| (defined below) should be replaced by
-% |\str_foldcase:n| when that command of \pkg{expl3} will be widespread. That
-% construction is only for giving the user the ability to write |wC{1cm}|
-% instead of |wc{1cm}| for homogeneity with the letters |L|, |C| and |R| used
-% elsewhere in the preamble instead of |l|, |c| and |r|.
-% \begin{macrocode}
- \tl_set:Nn \l_tmpa_tl { ##1 }
- \makebox [ ##2 ] [ \@@_foldcase: ]
- { \box_use_drop:N \l_@@_cell_box }
- }
- }
- \@@_newcolumntype W [ 2 ]
- {
- > {
- \hbox_set:Nw \l_@@_cell_box
- \@@_Cell:
- }
-% \end{macrocode}
-% |\@@_true_c:| will be replaced statically by |c| at the end of the construction
-% of the preamble.
-% \begin{macrocode}
- \@@_true_c:
- < {
- \@@_end_Cell:
- \hbox_set_end:
- \cs_set_eq:NN \hss \hfil
- \tl_set:Nn \l_tmpa_tl { ##1 }
- \makebox [ ##2 ] [ \@@_foldcase: ]
- { \box_use_drop:N \l_@@_cell_box }
- }
- }
-% \end{macrocode}
-%
-% \bigskip
-% By default, the letter used to specify a dotted line in the preamble of an
-% environment of \pkg{nicematrix} (for example in |{pNiceArray}|) is the letter
-% |:|. However, this letter is used by some packages, for example
-% \pkg{arydshln}. That's why it's possible to change the letter used by
-% \pkg{nicematrix} with the option |letter-for-dotted-lines| which changes the
-% value of |\l_@@_letter_for_dotted_lines_str|. We rescan this string (which is
-% always of length~1) in particular for the case where |pdflatex| is used with
-% \pkg{french-babel} (the colon is activated by \pkg{french-babel} at the
-% beginning of the document).
% \begin{macrocode}
- \tl_set_rescan:Nno
- \l_@@_letter_for_dotted_lines_str { } \l_@@_letter_for_dotted_lines_str
- \exp_args:NV \newcolumntype \l_@@_letter_for_dotted_lines_str
- {
- !
- {
+ \@@_renew_NC@rewrite@S:
% \end{macrocode}
%
-% \medskip
-% The following code because we want the dotted line to have exactly the same
-% position as a vertical rule drawn by ``"|"'' (considering the rule having a
-% width equal to the diameter of the dots).
-% \begin{macrocode}
- \int_compare:nNnF \c@iRow = 0
- {
- \int_compare:nNnF \c@iRow = \l_@@_last_row_int
- { \skip_horizontal:N 2\l_@@_radius_dim }
- }
-% \end{macrocode}
-%
-% \medskip
-% Consider the following code:
-% \begin{center}
-% \begin{BVerbatim}
-% \begin{NiceArray}{C:CC:C}
-% a & b
-% c & d \\
-% e & f & g & h \\
-% i & j & k & l
-% \end{NiceArray}
-% \end{BVerbatim}
-% \end{center}
-% The first ``|:|'' in the preamble will be encountered during the first row of
-% the environment |{NiceArray}| but the second one will be encountered only in
-% the third row. We have to issue a command |\vdottedline:n| in the |code-after|
-% only one time for each ``|:|'' in the preamble. That's why we keep a counter
-% |\g_@@_last_vdotted_col_int| and with this counter, we know whether a letter
-% ``|:|'' encountered during the parsing has already been taken into account in
-% the |code-after|.
-% \begin{macrocode}
- \int_compare:nNnT \c@jCol > \g_@@_last_vdotted_col_int
- {
- \int_gset_eq:NN \g_@@_last_vdotted_col_int \c@jCol
- \tl_gput_right:Nx \g_@@_internal_code_after_tl
-% \end{macrocode}
-% The command |\@@_vdottedline:n| is protected, and, therefore, won't be
-% expanded before writing on |\g_@@_internal_code_after_tl|.
% \begin{macrocode}
- { \@@_vdottedline:n { \int_use:N \c@jCol } }
- }
- }
- }
- \int_gzero_new:N \g_@@_last_vdotted_col_int
- \@@_renew_NC@rewrite@S:
- \int_gset:Nn \g_@@_last_vdotted_col_int { -1 }
\bool_gset_false:N \g_@@_last_col_found_bool
% \end{macrocode}
%
@@ -6374,24 +6538,15 @@ version 2005/12/01 or later.
\tl_gclear_new:N \g_@@_Ddots_lines_tl
\tl_gclear_new:N \g_@@_Iddots_lines_tl
\tl_gclear_new:N \g_@@_HVdotsfor_lines_tl
- }
% \end{macrocode}
%
% \medskip
-% The following command will be deleted when we will consider |\str_lowercase:n|
-% as widespread.
% \begin{macrocode}
-\cs_set:Npn \@@_foldcase:
- {
- \tl_case:NnF \l_tmpa_tl
- {
- C { c }
- L { l }
- R { r }
- }
- { \l_tmpa_tl }
+ \tl_gclear_new:N \g_@@_code_before_tl
}
% \end{macrocode}
+% This is the end of |\@@_pre_array:|.
+%
%
% \bigskip
% \subsection*{The environment \{NiceArrayWithDelims\}}
@@ -6399,7 +6554,8 @@ version 2005/12/01 or later.
% \begin{macrocode}
\NewDocumentEnvironment { NiceArrayWithDelims } { m m O { } m ! O { } }
{
- \bool_if:NT \c_@@_footnote_bool { \begin { savenotes } }
+ \@@_provide_pgfsyspdfmark:
+ \bool_if:NT \c_@@_footnote_bool \savenotes
% \end{macrocode}
% The aim of the following |\bgroup| (the corresponding |\egroup| is, of course,
% at the end of the environment) is to be able to put an exposant to a matrix in
@@ -6467,6 +6623,14 @@ version 2005/12/01 or later.
% In fact, the sequence |\g_@@_pos_of_blocks_seq| will also contain the
% positions of the cells with a |\diagbox|.
%
+% \begin{macrocode}
+ \tl_if_exist:cT { g_@@_code_before_ \int_use:N \g_@@_env_int _ tl }
+ {
+ \bool_set_true:N \l_@@_code_before_bool
+ \exp_args:NNv \tl_put_right:Nn \l_@@_code_before_tl
+ { g_@@_code_before_ \int_use:N \g_@@_env_int _ tl }
+ }
+% \end{macrocode}
%
% The set of keys is not exactly the same for |{NiceArray}| and for the variants
% of |{NiceArray}| (|{pNiceArray}|, |{bNiceArray}|, etc.) because, for
@@ -6485,7 +6649,6 @@ version 2005/12/01 or later.
% \end{macrocode}
%
%
-%
% \bigskip
% If the key |code-before| is used, we have to create the |col| nodes and the
% |row| nodes before the creation of the array. First, we have to test whether
@@ -6678,13 +6841,6 @@ version 2005/12/01 or later.
% \end{macrocode}
%
% \bigskip
-% We construct the preamble of the array in |\l_tmpa_tl|.
-% \begin{macrocode}
- \tl_set:Nn \l_tmpa_tl { #4 }
-% \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|
@@ -6692,74 +6848,14 @@ version 2005/12/01 or later.
% \begin{macrocode}
\bool_if:NT \c_@@_define_L_C_R_bool \@@_define_L_C_R:
% \end{macrocode}
-%
-% \bigskip
-% We will do an ``expansion''\footnote{This ``expansion'' expands all the
-% constructions with |*| and with the new column types defined by
-% |\newcolumntype|.} of the preamble (with the tools of \pkg{array}
-% itself) and a replacement of the specifiers |c|, |l| and |r| by the specifiers
-% |C|, |L| and |R|.
-%
-%
-% We store our preamble in the token register |\@temptokena| (those
-% ``token registers'' are not supported by \pkg{expl3}).
-% \begin{macrocode}
- \@temptokena \exp_after:wN { \l_tmpa_tl }
-% \end{macrocode}
-% Initialisation of a flag used by \pkg{array} to detect the end of the expansion.
-% \begin{macrocode}
- \@tempswatrue
-% \end{macrocode}
-% The following line actually does the expansion (it's has been copied from
-% |array.sty|).
-% \begin{macrocode}
- \@whilesw \if@tempswa \fi { \@tempswafalse \the \NC@list }
-% \end{macrocode}
-% We put back the preamble in our token list |\l_tmpa_tl|.
-% \begin{macrocode}
- \tl_gset:NV \l_tmpa_tl \@temptokena
-% \end{macrocode}
-%
-% We do the replacement of letters |c|, |l| and |r| (these column types can't be
-% redefined by |\newcolumtype| of \pkg{array} and that's why we have to do the
-% job ``by hand'' after expansion of the preamble).
-% \begin{macrocode}
- \tl_replace_all:Nnn \l_tmpa_tl c { > \@@_Cell: c < \@@_end_Cell: }
- \tl_replace_all:Nnn \l_tmpa_tl l { > \@@_Cell: l < \@@_end_Cell: }
- \tl_replace_all:Nnn \l_tmpa_tl r { > \@@_Cell: r < \@@_end_Cell: }
- \tl_replace_all:Nnn \l_tmpa_tl \@@_true_c: c
-% \end{macrocode}
%
% \bigskip
-% We complete the preamble with the potential ``exterior columns''.
+% The preamble will be constructed in |\g_@@_preamble_tl|.
% \begin{macrocode}
- \int_compare:nNnTF \l_@@_first_col_int = 0
- { \tl_put_left:NV \l_tmpa_tl \c_@@_preamble_first_col_tl }
- {
- \bool_lazy_all:nT
- {
- \l_@@_NiceArray_bool
- { \bool_not_p:n \l_@@_NiceTabular_bool }
- { \bool_not_p:n \l_@@_vlines_bool }
- { \bool_not_p:n \l_@@_exterior_arraycolsep_bool }
- }
- { \tl_put_left:Nn \l_tmpa_tl { @ { } } }
- }
- \int_compare:nNnTF \l_@@_last_col_int > { -1 }
- { \tl_put_right:NV \l_tmpa_tl \c_@@_preamble_last_col_tl }
- {
- \bool_lazy_all:nT
- {
- \l_@@_NiceArray_bool
- { \bool_not_p:n \l_@@_NiceTabular_bool }
- { \bool_not_p:n \l_@@_vlines_bool }
- { \bool_not_p:n \l_@@_exterior_arraycolsep_bool }
- }
- { \tl_put_right:Nn \l_tmpa_tl { @ { } } }
- }
- \tl_put_right:Nn \l_tmpa_tl { > { \@@_error_too_much_cols: } l }
+ \@@_construct_preamble:n { #4 }
% \end{macrocode}
-% Now, the preamble is constructed in |\l_tmpa_tl|
+%
+% Now, the preamble is constructed in |\g_@@_preamble_tl|
%
%
%
@@ -6768,38 +6864,9 @@ version 2005/12/01 or later.
% |\hbox_set_end:| corresponding to this |\hbox_set:Nw| will be in the second
% part of the environment (and the closing |\c_math_toggle_token| also).
% \begin{macrocode}
- \hbox_set:Nw \l_@@_the_array_box
-% \end{macrocode}
-% Here is a trick. We will call |\array| and, at the beginning, |\array| will set
-% |\col@sep| equal to the current value of |\arraycolsep|. In we are in an
-% environment |{NiceTabular}|, we would like that |\array| sets |\col@sep| equal
-% to the current value of |\tabcolsep|. That's why we set |\arraycolsep| equal
-% to |\tabcolsep|. However, the value of |\tabcolsep| in each cell of the array
-% should be equal to the current value of |\tabcolsep| outside |{NiceTabular}|.
-% That's why we save the current value of |\arraycolsep| and we will restore the
-% value just before the |\halign|. It's possible because we do a redefinition of
-% |\ialign| (see just below).
-% \begin{macrocode}
- \bool_if:NT \l_@@_NiceTabular_bool
- {
- \dim_set_eq:NN \@@_old_arraycolsep_dim \arraycolsep
- \dim_set_eq:NN \arraycolsep \tabcolsep
- }
-% \end{macrocode}
-% If the key |\vlines| is used, we increase |\arraycolsep| by
-% |0.5\arrayrulewidth| in order to reserve space for the width of the vertical
-% rules drawn with Tikz after the end of the array. However, the first
-% |\arraycolsep| is used once (between columns, |\arraycolsep| is used twice).
-% That's why we add a |0.5\arrayrulewidth| more.
-% \begin{macrocode}
- \bool_if:NT \l_@@_vlines_bool
- {
- \dim_add:Nn \arraycolsep { 0.5 \arrayrulewidth }
- \skip_horizontal:N 0.5\arrayrulewidth
- }
+ \hbox_set:Nw \l_@@_the_array_box
% \end{macrocode}
%
-%
% \begin{macrocode}
\skip_horizontal:N \l_@@_left_margin_dim
\skip_horizontal:N \l_@@_extra_left_margin_dim
@@ -6819,14 +6886,6 @@ version 2005/12/01 or later.
\c_math_toggle_token
\skip_horizontal:N \l_@@_right_margin_dim
\skip_horizontal:N \l_@@_extra_right_margin_dim
-% \end{macrocode}
-% If the key |\vlines| is used, we have increased |\arraycolsep| by
-% |0.5\arrayrulewidth| in order to reserve space for the width of the vertical
-% rules drawn with Tikz after the end of the array. However, the last
-% |\arraycolsep| is used once (between columns, |\arraycolsep| is used twice).
-% That's why we add a |0.5 \arrayrulewidth| more.
-% \begin{macrocode}
- \bool_if:NT \l_@@_vlines_bool { \skip_horizontal:N 0.5\arrayrulewidth }
\hbox_set_end:
% \end{macrocode}
% End of the construction of the array (in the box |\l_@@_the_array_box|).
@@ -6856,7 +6915,17 @@ version 2005/12/01 or later.
% has the number~$0$.}
% \begin{macrocode}
\int_gset_eq:NN \c@jCol \g_@@_col_total_int
- \bool_if:nT \g_@@_last_col_found_bool { \int_gdecr:N \c@jCol }
+ \bool_if:nTF \g_@@_last_col_found_bool
+ { \int_gdecr:N \c@jCol }
+ {
+ \int_compare:nNnT \l_@@_last_col_int > { -1 }
+ { \@@_error:n { last~col~not~used } }
+ }
+ \bool_if:NF \l_@@_Matrix_bool
+ {
+ \int_compare:nNnT \c@jCol < \g_@@_static_num_of_col_int
+ { \@@_error:n { columns~not~used } }
+ }
% \end{macrocode}
%
% We fix also the value of |\c@iRow| and |\g_@@_row_total_int| with the
@@ -6883,68 +6952,17 @@ version 2005/12/01 or later.
%
% The construction of the real box is different when |\l_@@_NiceArray_bool| is
% true (|{NiceArray}| or |{NiceTabular}|) and in the other environments because,
-% in |{NiceArray}| or |{NiceTabular}|, we have to take into account the value of
-% |baseline| and we have no delimiter to put. We begin with this case.
+% in |{NiceArray}| or |{NiceTabular}|, we have no delimiter to put. We begin
+% with this case.
% \begin{macrocode}
\bool_if:NTF \l_@@_NiceArray_bool
{
-% \end{macrocode}
-% Remember that, when the key |b| is used, the |{array}| (of \pkg{array}) is
-% constructed with the option |t| (and not |b|). Now, we do the translation to
-% take into account the option |b|.
-% \begin{macrocode}
- \str_if_eq:VnTF \l_@@_baseline_str { b }
+ \str_case:VnF \l_@@_baseline_str
{
- \pgfpicture
- \@@_qpoint:n { row - 1 }
- \dim_gset_eq:NN \g_tmpa_dim \pgf@y
- \@@_qpoint:n { row - \int_use:N \c@iRow - base }
- \dim_gsub:Nn \g_tmpa_dim \pgf@y
- \endpgfpicture
- \dim_gadd:Nn \g_tmpa_dim \arrayrulewidth
- \int_compare:nNnT \l_@@_first_row_int = 0
- {
- \dim_gadd:Nn \g_tmpa_dim \g_@@_ht_row_zero_dim
- \dim_gadd:Nn \g_tmpa_dim \g_@@_dp_row_zero_dim
- }
- \box_move_up:nn \g_tmpa_dim { \@@_use_array_box_with_notes: }
- }
- {
- \str_if_eq:VnTF \l_@@_baseline_str { c }
- { \@@_use_array_box_with_notes: }
- {
-% \end{macrocode}
-% We convert a value of |t| to a value of |1|.
-% \begin{macrocode}
- \str_if_eq:VnT \l_@@_baseline_str { t }
- { \str_set:Nn \l_@@_baseline_str { 1 } }
-% \end{macrocode}
-% Now, we convert the value of |\l_@@_baseline_str| (which should represent an
-% integer) to an integer stored in |\l_tmpa_int|.
-% \begin{macrocode}
- \int_set:Nn \l_tmpa_int \l_@@_baseline_str
- \bool_lazy_or:nnT
- { \int_compare_p:nNn \l_tmpa_int < \l_@@_first_row_int }
- { \int_compare_p:nNn \l_tmpa_int > \g_@@_row_total_int }
- {
- \@@_error:n { bad~value~for~baseline }
- \int_set:Nn \l_tmpa_int 1
- }
- \pgfpicture
- \@@_qpoint:n { row - 1 }
- \dim_gset_eq:NN \g_tmpa_dim \pgf@y
- \@@_qpoint:n { row - \int_use:N \l_tmpa_int - base }
- \dim_gsub:Nn \g_tmpa_dim \pgf@y
- \endpgfpicture
- \dim_gadd:Nn \g_tmpa_dim \arrayrulewidth
- \int_compare:nNnT \l_@@_first_row_int = 0
- {
- \dim_gadd:Nn \g_tmpa_dim \g_@@_ht_row_zero_dim
- \dim_gadd:Nn \g_tmpa_dim \g_@@_dp_row_zero_dim
- }
- \box_move_up:nn \g_tmpa_dim { \@@_use_array_box_with_notes: }
- }
+ b \@@_use_arraybox_with_notes_b:
+ c \@@_use_arraybox_with_notes_c:
}
+ \@@_use_arraybox_with_notes:
}
% \end{macrocode}
%
@@ -6994,7 +7012,7 @@ version 2005/12/01 or later.
\bool_if:NTF \l_@@_NiceTabular_bool
{ \skip_horizontal:N -\tabcolsep }
{ \skip_horizontal:N -\arraycolsep }
- \@@_use_array_box_with_notes:
+ \@@_use_arraybox_with_notes_c:
\bool_if:NTF \l_@@_NiceTabular_bool
{ \skip_horizontal:N -\tabcolsep }
{ \skip_horizontal:N -\arraycolsep }
@@ -7033,13 +7051,355 @@ version 2005/12/01 or later.
}
\@@_after_array:
\egroup
- \bool_if:NT \c_@@_footnote_bool { \end { savenotes } }
+ \bool_if:NT \c_@@_footnote_bool \endsavenotes
}
% \end{macrocode}
% This is the end of the environment |{NiceArrayWithDelims}|.
%
%
+% \subsection*{We construct the preamble of the array}
+%
+% The transformation of the preamble is an operation in several steps.
+%
+% \bigskip
+% The argument of |\@@_construct_preamble:n| is the preamble as given by the
+% final user to the environement |{NiceTabular}| (or a variant). The preamble
+% will be constructed in |\g_@@_preamble_tl|.
+%
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_construct_preamble:n #1
+ {
+% \end{macrocode}
+% First, we will do an ``expansion'' of the preamble with the tools of the
+% package \pkg{array} itself. This ``expansion'' will expand all the constructions
+% with |*| and with all column types (defined by the user or by various packages
+% using |\newcolumntype|).
+%
+% Since we use the tools of \pkg{array} to do this expansion, we will have a
+% programmation which is not in the style of \pkg{expl3}.
+%
+%
+% \bigskip
+% We redefine the column types |w| and |W|. We use |\@@_newcolumntype| instead
+% of |\newcolumtype| because we don't want warnings for column types already
+% defined. These redefinitions are in fact \emph{protections} of the letters |w|
+% and |W|. We don't want these columns type expanded because we will do the
+% patch ourselves after. We want to be able the standard column types |w| and
+% |W| in potential |{tabular}| of \pkg{array} in some cells of our array. That's
+% why we do those redefinitions in a TeX group.
+% \begin{macrocode}
+ \group_begin:
+% \end{macrocode}
+%
+% If we are in an environment without explicit preamble, we have nothing to do
+% (excepted the treatment on both sides of the preamble which will be done at
+% the end).
+% \begin{macrocode}
+ \bool_if:NTF \l_@@_Matrix_bool
+ { \tl_gset:Nn \g_@@_preamble_tl { #1 } }
+ {
+ \@@_newcolumntype w [ 2 ] { \@@_w: { ##1 } { ##2 } }
+ \@@_newcolumntype W [ 2 ] { \@@_W: { ##1 } { ##2 } }
+% \end{macrocode}
+%
+% First, we have to store our preamble in the token register |\@temptokena|
+% (those ``token registers'' are not supported by \pkg{expl3}).
+% \begin{macrocode}
+ \@temptokena { #1 }
+% \end{macrocode}
+% Initialisation of a flag used by \pkg{array} to detect the end of the expansion.
+% \begin{macrocode}
+ \@tempswatrue
+% \end{macrocode}
+% The following line actually does the expansion (it's has been copied from
+% |array.sty|).
+% \begin{macrocode}
+ \@whilesw \if@tempswa \fi { \@tempswafalse \the \NC@list }
+% \end{macrocode}
+%
+% \bigskip
+% Now, we have to ``patch'' that preamble by transforming some columns.
+% We will insert in the TeX flow the preamble in its actual form (that is to say
+% after the ``expansion'') following by a marker |\q_stop| and we will consume
+% these tokens constructing the (new form of the) preamble in
+% |\g_@@_preamble_tl|. This is done recursively with the command
+% |\@@_patch_preamble:n|. In the same time, we will count the columns with the
+% counter |\c@jCol|.
+% \begin{macrocode}
+ \int_gzero_new:N \c@jCol
+ \bool_if:NTF \l_@@_vlines_bool
+ {
+ \tl_gset:Nn \g_@@_preamble_tl
+ { ! { \skip_horizontal:N \arrayrulewidth } }
+ }
+ { \tl_gclear:N \g_@@_preamble_tl }
+% \end{macrocode}
+% The counter |\l_tmpa_int| will be count the number of consecutive occurrences
+% of the symbole \verb+|+.
+% \begin{macrocode}
+ \int_zero:N \l_tmpa_int
+% \end{macrocode}
+% Now, we actually patch the preamble (and it is constructed in
+% |\g_@@_preamble_tl|).
+% \begin{macrocode}
+ \exp_after:wN \@@_patch_preamble:n \the \@temptokena \q_stop
+ \int_gset_eq:NN \g_@@_static_num_of_col_int \c@jCol
+ }
+% \end{macrocode}
+%
+% \medskip
+% Now, we replace |\columncolor| by |\@@_columncolor_preamble|.
+% \begin{macrocode}
+ \bool_if:NT \l_@@_colortbl_like_bool
+ {
+ \regex_replace_all:NnN
+ \c_@@_columncolor_regex
+ { \c { @@_columncolor_preamble } }
+ \g_@@_preamble_tl
+ }
+% \end{macrocode}
+%
+% \bigskip
+% We complete the preamble with the potential ``exterior columns''.
+% \begin{macrocode}
+ \int_compare:nNnTF \l_@@_first_col_int = 0
+ { \tl_gput_left:NV \g_@@_preamble_tl \c_@@_preamble_first_col_tl }
+ {
+ \bool_lazy_all:nT
+ {
+ \l_@@_NiceArray_bool
+ { \bool_not_p:n \l_@@_NiceTabular_bool }
+ { \bool_not_p:n \l_@@_vlines_bool }
+ { \bool_not_p:n \l_@@_exterior_arraycolsep_bool }
+ }
+ { \tl_gput_left:Nn \g_@@_preamble_tl { @ { } } }
+ }
+ \int_compare:nNnTF \l_@@_last_col_int > { -1 }
+ { \tl_gput_right:NV \g_@@_preamble_tl \c_@@_preamble_last_col_tl }
+ {
+ \bool_lazy_all:nT
+ {
+ \l_@@_NiceArray_bool
+ { \bool_not_p:n \l_@@_NiceTabular_bool }
+ { \bool_not_p:n \l_@@_vlines_bool }
+ { \bool_not_p:n \l_@@_exterior_arraycolsep_bool }
+ }
+ { \tl_gput_right:Nn \g_@@_preamble_tl { @ { } } }
+ }
+% \end{macrocode}
+% We add a last column to raise a good error message when the user put more
+% columns than allowed by its preamble. However, for technical reasons, it's not
+% possible to do that in |{NiceTabular*}| (|\l_@@_tabular_width_dim|=0pt).
+% \begin{macrocode}
+ \dim_compare:nNnT \l_@@_tabular_width_dim = \c_zero_dim
+ {
+ \tl_gput_right:Nn
+ \g_@@_preamble_tl
+ { > { \@@_error_too_much_cols: } l }
+ }
+% \end{macrocode}
+%
+% \medskip
+% Now, we have to close the TeX group which was opened for the redefinition of
+% the columns of type |w| and |W|.
+% \begin{macrocode}
+ \group_end:
+ }
+% \end{macrocode}
+%
+% \bigskip
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_patch_preamble:n #1
+ {
+ \str_case:nnF { #1 }
+ {
+ c { \@@_patch_preamble_i:n #1 }
+ l { \@@_patch_preamble_i:n #1 }
+ r { \@@_patch_preamble_i:n #1 }
+ > { \@@_patch_preamble_ii:nn #1 }
+ < { \@@_patch_preamble_ii:nn #1 }
+ ! { \@@_patch_preamble_ii:nn #1 }
+ @ { \@@_patch_preamble_ii:nn #1 }
+ | { \@@_patch_preamble_iii:n #1 }
+ p { \@@_patch_preamble_iv:nnn t #1 }
+ m { \@@_patch_preamble_iv:nnn c #1 }
+ b { \@@_patch_preamble_iv:nnn b #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 }
+ \q_stop { }
+ }
+ {
+ \str_if_eq:VnTF \l_@@_letter_for_dotted_lines_str { #1 }
+ { \@@_patch_preamble_vii:n #1 }
+ { \@@_fatal:nn { unknown~column~type } { #1 } }
+ }
+ }
+% \end{macrocode}
+%
+% \medskip
+% For |c|, |l| and |r|
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_patch_preamble_i:n #1
+ {
+ \tl_gput_right:Nn \g_@@_preamble_tl { > \@@_Cell: #1 < \@@_end_Cell: }
+% \end{macrocode}
+% We increment the counter of columns.
+% \begin{macrocode}
+ \int_gincr:N \c@jCol
+ \bool_if:NT \l_@@_vlines_bool
+ {
+ \tl_gput_right:Nn \g_@@_preamble_tl
+ { ! { \skip_horizontal:N \arrayrulewidth } }
+ }
+ \@@_patch_preamble:n
+ }
+% \end{macrocode}
+%
+% \medskip
+% For |>|, |<|, |!| and |@|
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_patch_preamble_ii:nn #1 #2
+ {
+ \tl_gput_right:Nn \g_@@_preamble_tl { #1 { #2 } }
+ \@@_patch_preamble:n
+ }
+% \end{macrocode}
+%
+%
+% \medskip
+% For \verb+|+
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_patch_preamble_iii:n #1
+ {
+% \end{macrocode}
+% |\l_tmpa_int| is the number of successive occurrences of \verb+|+
+% \begin{macrocode}
+ \int_incr:N \l_tmpa_int
+ \@@_patch_preamble_iii_i:n
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_patch_preamble_iii_i:n #1
+ {
+ \str_if_eq:nnTF { #1 } |
+ { \@@_patch_preamble_iii:n | }
+ {
+ \tl_gput_right:Nx \g_@@_preamble_tl
+ {
+ \exp_not:N !
+ {
+ \skip_horizontal:n
+ {
+ \dim_eval:n
+ {
+ \arrayrulewidth * \l_tmpa_int
+ + \doublerulesep * ( \l_tmpa_int - 1)
+ }
+ }
+ }
+ }
+ \tl_gput_right:Nx \g_@@_internal_code_after_tl
+ { \@@_vline:nn { \int_use:N \c@jCol } { \int_use:N \l_tmpa_int } }
+ \int_zero:N \l_tmpa_int
+ \@@_patch_preamble:n #1
+ }
+ }
+% \end{macrocode}
+%
+%
+% \medskip
+% For |p|, |m| and |b|
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_patch_preamble_iv:nnn #1 #2 #3
+ {
+ \tl_gput_right:Nn \g_@@_preamble_tl
+ {
+ > {
+ \@@_Cell:
+ \begin { minipage } [ #1 ] { #3 }
+ \mode_leave_vertical:
+ \box_use:N \@arstrutbox
+ }
+ c
+ < { \box_use:N \@arstrutbox \end { minipage } \@@_end_Cell: }
+ }
+% \end{macrocode}
+% We increment the counter of columns.
+% \begin{macrocode}
+ \int_gincr:N \c@jCol
+ \@@_patch_preamble:n
+ }
+% \end{macrocode}
+%
+% \medskip
+% For |w| and |W|
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_patch_preamble_v:nnnn #1 #2 #3 #4
+ {
+ \tl_gput_right:Nn \g_@@_preamble_tl
+ {
+ > {
+ \hbox_set:Nw \l_@@_cell_box
+ \@@_Cell:
+ }
+ c
+ < {
+ \@@_end_Cell:
+ #1
+ \hbox_set_end:
+ \makebox [ #4 ] [ #3 ] { \box_use_drop:N \l_@@_cell_box }
+ }
+ }
+% \end{macrocode}
+% We increment the counter of columns.
+% \begin{macrocode}
+ \int_gincr:N \c@jCol
+ \@@_patch_preamble:n
+ }
+% \end{macrocode}
+%
+% \medskip
+% For |\@@_true_c:| which will appear in our redefinition of the columns of type
+% |S| (of \pkg{siunitx}).
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_patch_preamble_vi:n #1
+ {
+ \tl_gput_right:Nn \g_@@_preamble_tl { c }
+% \end{macrocode}
+% We increment the counter of columns.
+% \begin{macrocode}
+ \int_gincr:N \c@jCol
+ \bool_if:NT \l_@@_vlines_bool
+ {
+ \tl_gput_right:Nn \g_@@_preamble_tl
+ { ! { \skip_horizontal:N \arrayrulewidth } }
+ }
+ \@@_patch_preamble:n
+ }
+% \end{macrocode}
%
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_patch_preamble_vii:n #1
+ {
+% \end{macrocode}
+% Here, we have a problem in the cases of the use in the first column or the ``last
+% one''.
+% \begin{macrocode}
+ \tl_gput_right:Nn \g_@@_preamble_tl
+ { ! { \skip_horizontal:N 2\l_@@_radius_dim } }
+% \end{macrocode}
+% The command |\@@_vdottedline:n| is protected, and, therefore, won't be
+% expanded before writing on |\g_@@_internal_code_after_tl|.
+% \begin{macrocode}
+ \tl_gput_right:Nx \g_@@_internal_code_after_tl
+ { \@@_vdottedline:n { \int_use:N \c@jCol } }
+ \@@_patch_preamble:n
+ }
+% \end{macrocode}
+%
+%
% \bigskip
% The command |\@@_put_box_in_flow:| puts the box |\l_tmpa_box| (which contains
% the array) in the flow. It is used for the environments with delimiters.
@@ -7107,7 +7467,7 @@ version 2005/12/01 or later.
%
% \bigskip
% \begin{macrocode}
-\cs_new_protected:Npn \@@_use_array_box_with_notes:
+\cs_new_protected:Npn \@@_use_arraybox_with_notes_c:
{
\int_compare:nNnTF \c@tabularnote = 0
{ \box_use_drop:N \l_@@_the_array_box }
@@ -7169,6 +7529,68 @@ version 2005/12/01 or later.
}
% \end{macrocode}
%
+% \medskip
+% The case of |baseline| equal to |b|. Remember that, when the key |b| is used,
+% the |{array}| (of \pkg{array}) is constructed with the option |t| (and not
+% |b|). Now, we do the translation to take into account the option |b|.
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_use_arraybox_with_notes_b:
+ {
+ \pgfpicture
+ \@@_qpoint:n { row - 1 }
+ \dim_gset_eq:NN \g_tmpa_dim \pgf@y
+ \@@_qpoint:n { row - \int_use:N \c@iRow - base }
+ \dim_gsub:Nn \g_tmpa_dim \pgf@y
+ \endpgfpicture
+ \dim_gadd:Nn \g_tmpa_dim \arrayrulewidth
+ \int_compare:nNnT \l_@@_first_row_int = 0
+ {
+ \dim_gadd:Nn \g_tmpa_dim \g_@@_ht_row_zero_dim
+ \dim_gadd:Nn \g_tmpa_dim \g_@@_dp_row_zero_dim
+ }
+ \box_move_up:nn \g_tmpa_dim { \@@_use_arraybox_with_notes_c: }
+ }
+% \end{macrocode}
+%
+% \medskip
+% Now, the general case (hence the |g| in the name).
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_use_arraybox_with_notes:
+ {
+% \end{macrocode}
+% We convert a value of |t| to a value of |1|.
+% \begin{macrocode}
+ \str_if_eq:VnT \l_@@_baseline_str { t }
+ { \str_set:Nn \l_@@_baseline_str { 1 } }
+% \end{macrocode}
+% Now, we convert the value of |\l_@@_baseline_str| (which should represent an
+% integer) to an integer stored in |\l_tmpa_int|.
+% \begin{macrocode}
+ \int_set:Nn \l_tmpa_int \l_@@_baseline_str
+ \bool_lazy_or:nnT
+ { \int_compare_p:nNn \l_tmpa_int < \l_@@_first_row_int }
+ { \int_compare_p:nNn \l_tmpa_int > \g_@@_row_total_int }
+ {
+ \@@_error:n { bad~value~for~baseline }
+ \int_set:Nn \l_tmpa_int 1
+ }
+ \pgfpicture
+ \@@_qpoint:n { row - 1 }
+ \dim_gset_eq:NN \g_tmpa_dim \pgf@y
+ \@@_qpoint:n { row - \int_use:N \l_tmpa_int - base }
+ \dim_gsub:Nn \g_tmpa_dim \pgf@y
+ \endpgfpicture
+ \dim_gadd:Nn \g_tmpa_dim \arrayrulewidth
+ \int_compare:nNnT \l_@@_first_row_int = 0
+ {
+ \dim_gadd:Nn \g_tmpa_dim \g_@@_ht_row_zero_dim
+ \dim_gadd:Nn \g_tmpa_dim \g_@@_dp_row_zero_dim
+ }
+ \box_move_up:nn \g_tmpa_dim { \@@_use_arraybox_with_notes_c: }
+ }
+% \end{macrocode}
+%
+%
%
% \bigskip
% The command |\@@_put_box_in_flow_bis:| is used when the option
@@ -7226,9 +7648,9 @@ version 2005/12/01 or later.
% \interitem
% The construction of the array in the environment |{NiceArrayWithDelims}| is,
% in fact, done by the environment |{@@-light-syntax}| or by the environment
-% |{@@-normal-syntax}| (whether the option |light-syntax| is used or not). When
-% the key |light-syntax| is not used, the construction is a standard
-% environment (and, thus, it's possible to use verbatim in the arrray).
+% |{@@-normal-syntax}| (whether the option |light-syntax| is in force or not).
+% When the key |light-syntax| is not used, the construction is a standard
+% environment (and, thus, it's possible to use verbatim in the array).
% \begin{macrocode}
\NewDocumentEnvironment { @@-normal-syntax } { }
% \end{macrocode}
@@ -7239,13 +7661,12 @@ version 2005/12/01 or later.
% by LaTeX for incorrect nested environments).
% \begin{macrocode}
{
- \peek_meaning_ignore_spaces:NTF \end
- { \@@_analyze_end:Nn }
+ \peek_meaning_ignore_spaces:NTF \end \@@_analyze_end:Nn
% \end{macrocode}
% Here is the call to |\array| (we have a dedicated macro |\@@_array:| because
% of compatibility with the classes \cls{revtex4-1} and \cls{revtex4-2}).
% \begin{macrocode}
- { \exp_args:NV \@@_array: \l_tmpa_tl }
+ { \exp_args:NV \@@_array: \g_@@_preamble_tl }
}
{
\@@_create_col_nodes:
@@ -7255,8 +7676,8 @@ version 2005/12/01 or later.
%
%
% \bigskip
-% When the key |light-syntax| is used, we use an environment which takes its whole
-% body as an argument (with the specifier |b| of \pkg{xparse}).
+% When the key |light-syntax| is in force, we use an environment which takes its
+% whole body as an argument (with the specifier |b| of \pkg{xparse}).
% % \label{code-light-syntax}
% \begin{macrocode}
\NewDocumentEnvironment { @@-light-syntax } { b }
@@ -7275,12 +7696,13 @@ version 2005/12/01 or later.
{ \@@_fatal:n { double-backslash~in~light-syntax } }
}
% \end{macrocode}
-% Now, you extract the |code-after| or the body of the environment. Maybe, there
+% Now, you extract the |code-after| of the body of the environment. Maybe, there
% is no command |\CodeAfter| in the body. That's why you put a marker
% |\CodeAfter| after |#1|. If there is yet a |\CodeAfter| in |#1|, this second
% (or third...) |\CodeAfter| will be catched in the value of
-% |\g_@@_code_after_tl|. That doesn't matter because |\CodeAfter| will be set to
-% \textsl{no-op} before the execution of |\g_@@_code_after_tl|.
+% |\g_nicematrix_code_after_tl|. That doesn't matter because |\CodeAfter| will
+% be set to \textsl{no-op} before the execution of
+% |\g_nicematrix_code_after_tl|.
% \begin{macrocode}
\@@_light_syntax_i #1 \CodeAfter \q_stop
}
@@ -7296,7 +7718,7 @@ version 2005/12/01 or later.
% \begin{macrocode}
\cs_new_protected:Npn \@@_light_syntax_i #1\CodeAfter #2\q_stop
{
- \tl_gput_right:Nn \g_@@_code_after_tl { #2 }
+ \tl_gput_right:Nn \g_nicematrix_code_after_tl { #2 }
% \end{macrocode}
% The body of the array, which is stored in the argument |#1|, is now
% splitted into items (and \emph{not} tokens).
@@ -7316,7 +7738,7 @@ version 2005/12/01 or later.
% Here is the call to |\array| (we have a dedicated macro |\@@_array:| because
% of compatibility with the classes \cls{revtex4-1} and \cls{revtex4-2}).
% \begin{macrocode}
- \exp_args:NV \@@_array: \l_tmpa_tl
+ \exp_args:NV \@@_array: \g_@@_preamble_tl
% \end{macrocode}
% We need a global affectation because, when executing |\l_tmpa_tl|, we will
% exit the first cell of the array.
@@ -7700,80 +8122,36 @@ version 2005/12/01 or later.
% We create the variants of the environment |{NiceArrayWithDelims}|.
%
% \begin{macrocode}
-\NewDocumentEnvironment { pNiceArray } { }
- {
- \str_if_empty:NT \g_@@_name_env_str
- { \str_gset:Nn \g_@@_name_env_str { pNiceArray } }
- \@@_test_if_math_mode:
- \NiceArrayWithDelims ( )
- }
- { \endNiceArrayWithDelims }
-% \end{macrocode}
-%
-% \begin{macrocode}
-\NewDocumentEnvironment { bNiceArray } { }
- {
- \str_if_empty:NT \g_@@_name_env_str
- { \str_gset:Nn \g_@@_name_env_str { bNiceArray } }
- \@@_test_if_math_mode:
- \NiceArrayWithDelims [ ]
- }
- { \endNiceArrayWithDelims }
-% \end{macrocode}
-%
-% \begin{macrocode}
-\NewDocumentEnvironment { BNiceArray } { }
- {
- \str_if_empty:NT \g_@@_name_env_str
- { \str_gset:Nn \g_@@_name_env_str { BNiceArray } }
- \@@_test_if_math_mode:
- \NiceArrayWithDelims \{ \}
- }
- { \endNiceArrayWithDelims }
-% \end{macrocode}
-%
-% \begin{macrocode}
-\NewDocumentEnvironment { vNiceArray } { }
+\cs_new_protected:Npn \@@_def_env:nnn #1 #2 #3
{
- \str_if_empty:NT \g_@@_name_env_str
- { \str_gset:Nn \g_@@_name_env_str { vNiceArray } }
- \@@_test_if_math_mode:
- \NiceArrayWithDelims | |
+ \NewDocumentEnvironment { #1 NiceArray } { }
+ {
+ \str_if_empty:NT \g_@@_name_env_str
+ { \str_gset:Nn \g_@@_name_env_str { #1 NiceArray } }
+ \@@_test_if_math_mode:
+ \NiceArrayWithDelims #2 #3
+ }
+ { \endNiceArrayWithDelims }
}
- { \endNiceArrayWithDelims }
% \end{macrocode}
%
% \begin{macrocode}
-\NewDocumentEnvironment { VNiceArray } { }
- {
- \str_if_empty:NT \g_@@_name_env_str
- { \str_gset:Nn \g_@@_name_env_str { VNiceArray } }
- \@@_test_if_math_mode:
- \NiceArrayWithDelims \| \|
- }
- { \endNiceArrayWithDelims }
+\@@_def_env:nnn p ( )
+\@@_def_env:nnn b [ ]
+\@@_def_env:nnn B \{ \}
+\@@_def_env:nnn v | |
+\@@_def_env:nnn V \| \|
% \end{macrocode}
+%
%
% \bigskip
% \subsection*{The environment \{NiceMatrix\} and its variants}
%
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_define_env:n #1
- {
- \NewDocumentEnvironment { #1 NiceMatrix } { ! O { } }
- {
- \str_gset:Nn \g_@@_name_env_str { #1 NiceMatrix }
- \tl_set:Nn \l_@@_type_of_col_tl c
- \keys_set:nn { NiceMatrix / NiceMatrix } { ##1 }
- \exp_args:Nnx \@@_begin_of_NiceMatrix:nn { #1 } \l_@@_type_of_col_tl
- }
- { \use:c { end #1 NiceArray } }
- }
-% \end{macrocode}
%
% \begin{macrocode}
\cs_new_protected:Npn \@@_begin_of_NiceMatrix:nn #1 #2
{
+ \bool_set_true:N \l_@@_Matrix_bool
\use:c { #1 NiceArray }
{
*
@@ -7782,22 +8160,28 @@ version 2005/12/01 or later.
\c@MaxMatrixCols
{ \@@_pred:n \l_@@_last_col_int }
}
- #2
+ { > \@@_Cell: #2 < \@@_end_Cell: }
}
}
% \end{macrocode}
%
% \begin{macrocode}
-\@@_define_env:n { }
-\@@_define_env:n p
-\@@_define_env:n b
-\@@_define_env:n B
-\@@_define_env:n v
-\@@_define_env:n V
+\clist_map_inline:nn { { } , p , b , B , v , V }
+ {
+ \NewDocumentEnvironment { #1 NiceMatrix } { ! O { } }
+ {
+ \str_gset:Nn \g_@@_name_env_str { #1 NiceMatrix }
+ \tl_set:Nn \l_@@_type_of_col_tl c
+ \keys_set:nn { NiceMatrix / NiceMatrix } { ##1 }
+ \exp_args:Nnx \@@_begin_of_NiceMatrix:nn { #1 } \l_@@_type_of_col_tl
+ }
+ { \use:c { end #1 NiceArray } }
+ }
% \end{macrocode}
%
% \bigskip
-% \subsection*{The environment \{NiceTabular\}}
+% \subsection*{The environments \{NiceTabular\} and \{NiceTabular*\}}
+%
% \begin{macrocode}
\NewDocumentEnvironment { NiceTabular } { O { } m ! O { } }
{
@@ -7808,7 +8192,20 @@ version 2005/12/01 or later.
}
{ \endNiceArray }
% \end{macrocode}
-%
+%
+% \bigskip
+% \begin{macrocode}
+\NewDocumentEnvironment { NiceTabular* } { m O { } m ! O { } }
+ {
+ \str_gset:Nn \g_@@_name_env_str { NiceTabular* }
+ \dim_set:Nn \l_@@_tabular_width_dim { #1 }
+ \keys_set:nn { NiceMatrix / NiceTabular } { #2 , #4 }
+ \bool_set_true:N \l_@@_NiceTabular_bool
+ \NiceArray { #3 }
+ }
+ { \endNiceArray }
+% \end{macrocode}
+%
%
% \bigskip
% \subsection*{After the construction of the array}
@@ -7924,6 +8321,8 @@ version 2005/12/01 or later.
\iow_now:Nn \@mainaux \ExplSyntaxOff
}
% \end{macrocode}
+%
+%
%
% By default, the diagonal lines will be parallelized\footnote{It's possible to
% use the option |parallelize-diags| to disable this parallelization.}. There
@@ -8025,16 +8424,49 @@ version 2005/12/01 or later.
% \end{macrocode}
% When |light-syntax| is used, we insert systematically a |\CodeAfter| in the
% flow. Thus, it's possible to have two instructions |\CodeAfter| and the second
-% one may be present in |\g_@@_code_after_tl|. That's why we set
+% may be in |\g_nicematrix_code_after_tl|. That's why we set
% |\Code-after| to be \textsl{no-op} now.
% \begin{macrocode}
\cs_set_eq:NN \CodeAfter \prg_do_nothing:
% \end{macrocode}
% And here's the |code-after|:
% \begin{macrocode}
- \g_@@_code_after_tl
- \tl_gclear:N \g_@@_code_after_tl
+ \g_nicematrix_code_after_tl
+ \tl_gclear:N \g_nicematrix_code_after_tl
\group_end:
+% \end{macrocode}
+%
+%
+% \medskip
+% |\g_@@_code_before_tl| is for instructions in the cells of the array such as
+% |\rowcolor| and |\cellcolor| (when the key |colortbl-like| is in
+% force). These instructions will be written on the |aux| file to be added to
+% the |code-before| in the next run.
+% \begin{macrocode}
+ \tl_if_empty:NF \g_@@_code_before_tl
+ {
+% \end{macrocode}
+% The command |\rowcolor| in tabular will in fact use |\rectanglecolor| in order
+% to follow the behaviour of |\rowcolor| of \pkg{colortbl}. That's why there may
+% be a command |\rectanglecolor| in |\g_@@_code_before_tl|. In order to avoid an
+% error during the expansion, we define a protected version of |\rectanglecolor|.
+% \begin{macrocode}
+ \cs_set_protected:Npn \rectanglecolor { }
+ \cs_set_protected:Npn \columncolor { }
+ \iow_now:Nn \@mainaux \ExplSyntaxOn
+ \iow_now:Nx \@mainaux
+ {
+ \tl_gset:cn
+ { g_@@_code_before_ \int_use:N \g_@@_env_int _ tl }
+ { \g_@@_code_before_tl }
+ }
+ \iow_now:Nn \@mainaux \ExplSyntaxOff
+ \bool_set_true:N \l_@@_code_before_bool
+ }
+% \end{macrocode}
+%
+% \medskip
+% \begin{macrocode}
\str_gclear:N \g_@@_name_env_str
\@@_restore_iRow_jCol:
% \end{macrocode}
@@ -9264,7 +9696,7 @@ version 2005/12/01 or later.
\@@_old_multicolumn
{ #1 }
% \end{macrocode}
-% We will have to replace |\tl_lower_case:n| in some times
+% We will have to replace |\tl_lower_case:n| in the future
% since |\tl_lower_case:n| seems to be deprecated.
% \begin{macrocode}
{
@@ -9671,7 +10103,7 @@ version 2005/12/01 or later.
% lines must be parallelized).
%
% \bigskip
-% \subsection*{Commands available in the code-before}
+% \subsection*{Colors of cells, rows and columns}
%
% In the beginning of the |code-before|, the command |\@@_rowcolor:nn| will be
% linked to |\rowcolor| and the command |\@@_columncolor:nn| to |\columncolor|.
@@ -9893,6 +10325,48 @@ version 2005/12/01 or later.
}
}
% \end{macrocode}
+%
+% \bigskip
+% When the user uses the key |colortbl-like|, the following command will
+% be linked to |\cellcolor| in the tabular.
+% \begin{macrocode}
+\NewDocumentCommand \@@_cellcolor_tabular { O { } m }
+ {
+ \tl_gput_right:Nx \g_@@_code_before_tl
+ { \cellcolor [ #1 ] { #2 } { \int_use:N \c@iRow - \int_use:N \c@jCol } }
+ }
+% \end{macrocode}
+%
+% \bigskip
+% When the user uses the key |rowcolor-in-tabular|, the following command will
+% be linked to |\rowcolor| in the tabular.
+% \begin{macrocode}
+\NewDocumentCommand \@@_rowcolor_tabular { O { } m }
+ {
+ \tl_gput_right:Nx \g_@@_code_before_tl
+ {
+ \exp_not:N \rectanglecolor [ #1 ] { #2 }
+ { \int_use:N \c@iRow - \int_use:N \c@jCol }
+ { \int_use:N \c@iRow - \exp_not:n { \int_use:N \c@jCol } }
+ }
+ }
+% \end{macrocode}
+%
+% \bigskip
+% \begin{macrocode}
+\NewDocumentCommand \@@_columncolor_preamble { O { } m }
+ {
+ \int_compare:nNnT \c@iRow = 1
+ {
+% \end{macrocode}
+% You use |gput_left| because we want the specification of colors for the
+% columns drawn before the specifications of color for the rows (and the cells).
+% \begin{macrocode}
+ \tl_gput_left:Nx \g_@@_code_before_tl
+ { \exp_not:N \columncolor [ #1 ] { #2 } { \int_use:N \c@jCol } }
+ }
+ }
+% \end{macrocode}
%
% \bigskip
% \subsection*{The vertical rules}
@@ -9951,36 +10425,54 @@ version 2005/12/01 or later.
% |\int_compare:nNnT \c@iRow < \l_@@_last_row_int|).
%
%
-% \medskip
-% In fact, independently of |\OnlyMainNiceMatrix|, which is a convenience given
-% to the user, we have to modify the behaviour of the standard specifier ``"|"''.
%
-%
-% Remark first that the natural way to do that would be to redefine the
-% specifier ``"|"'' with |\newcolumntype|:
-% \begin{Verbatim}[commandchars=\~\#\+]
-% \newcolumntype { | } { ! { \OnlyMainNiceMatrix \vline } }
-% \end{Verbatim}
-%
-% However, this code fails if the user uses "\DefineShortVerb{\|}" of
-% \pkg{fancyvrb}. Moreover, it would not be able to deal correctly with two
-% consecutive specifiers ``"|"'' (in a preambule like "ccc||ccc").
-%
-% That's why we have done a redefinition of the macro |\@arrayrule| of
-% \pkg{array} and this redefinition will add |\@@_vline:| instead of |\vline|
-% in the preamble (that definition is in the beginning of
-% |{NiceArrayWithDelims}|).
-%
-% Here is the definition of |\@@_vline:|. This definition \emph{must} be
-% protected because you don't want that macro expanded during the construction
-% of the preamble (the tests in |\@@_OnlyMainNiceMatrix:n| must be effective in
-% each row and not once for all when the preamble is constructed). The command
-% |\CT@arc@| is a command of \pkg{colortbl} which sets the color of the rules in
-% the array. The package \pkg{nicematrix} uses it even if \pkg{colortbl} is not
-% loaded.
+%
+% \bigskip
+% The following command will be executed in the |internal-code-after|. |#1| is
+% the number the column where to draw the rule and |#2| is the number of
+% consecutive occurrences of \verb+|+.
% \begin{macrocode}
-\cs_new_protected:Npn \@@_vline:
- { \@@_OnlyMainNiceMatrix:n { { \CT@arc@ \vline } } }
+\cs_new_protected:Npn \@@_vline:nn #1 #2
+ {
+ \bool_if:NTF \c_@@_tikz_loaded_bool
+ {
+ \tikzpicture
+ \@@_vline_i:nn { #1 } { #2 }
+ \endtikzpicture
+ }
+ {
+ \pgfpicture
+ \@@_vline_i:nn { #1 } { #2 }
+ \endpgfpicture
+ }
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_vline_i:nn #1 #2
+ {
+ \CT@arc@
+ \pgfrememberpicturepositiononpagetrue
+ \pgf@relevantforpicturesizefalse
+ \pgfsetlinewidth { 1.1 \arrayrulewidth }
+ \pgfsetrectcap
+ \@@_qpoint:n { row - 1 }
+ \dim_set_eq:NN \l_tmpa_dim \pgf@y
+ \@@_qpoint:n { col - \int_eval:n { #1 + 1 } }
+ \dim_set_eq:NN \l_tmpb_dim \pgf@x
+ \pgfpathmoveto { \pgfpoint \l_tmpb_dim \l_tmpa_dim }
+ \@@_qpoint:n { row - \@@_succ:n \c@iRow }
+ \dim_set_eq:NN \l_tmpc_dim \pgf@y
+ \pgfpathlineto { \pgfpoint \l_tmpb_dim \l_tmpc_dim }
+ \prg_replicate:nn { #2 - 1 }
+ {
+ \dim_sub:Nn \l_tmpb_dim \arrayrulewidth
+ \dim_sub:Nn \l_tmpb_dim \doublerulesep
+ \pgfpathmoveto { \pgfpoint \l_tmpb_dim \l_tmpa_dim }
+ \pgfpathlineto { \pgfpoint \l_tmpb_dim \l_tmpc_dim }
+ }
+ \pgfusepathqstroke
+ }
% \end{macrocode}
%
% \bigskip
@@ -10454,7 +10946,7 @@ version 2005/12/01 or later.
\cs_new_protected:Npn \@@_hdottedline_i:
{
% \end{macrocode}
-% We write in the code-after the instruction that will potentially draw the
+% We write in the code-after the instruction that will actually draw the
% dotted line. It's not possible to draw this dotted line now because we don't
% know the length of the line (we don't even know the number of columns).
% \begin{macrocode}
@@ -11145,6 +11637,8 @@ version 2005/12/01 or later.
{
tikz .tl_set:N = \l_@@_tikz_tl ,
tikz .value_required:n = true ,
+ color .tl_set:N = \l_@@_color_tl ,
+ color .value_required:n = true ,
}
% \end{macrocode}
%
@@ -11160,13 +11654,25 @@ version 2005/12/01 or later.
\cs_new_protected:Npn \@@_Block_iii:nnnnnn #1 #2 #3 #4 #5 #6
{
% \end{macrocode}
-% The group is for the keys (even if, as of now, there is only one key, called
-% |tikz| and not documented).
+% The group is for the keys.
% \begin{macrocode}
\group_begin:
\keys_set:nn { NiceMatrix / Block } { #5 }
% \end{macrocode}
%
+% \begin{macrocode}
+ \tl_if_empty:NF \l_@@_color_tl
+ {
+ \tl_gput_right:Nx \g_@@_code_before_tl
+ {
+ \exp_not:N \rectanglecolor
+ { \l_@@_color_tl }
+ { #1 - #2 }
+ { #3 - #4 }
+ }
+ }
+% \end{macrocode}
+%
% \medskip
% \begin{macrocode}
\cs_set_protected:Npn \diagbox ##1 ##2
@@ -11174,7 +11680,8 @@ version 2005/12/01 or later.
\tl_gput_right:Nx \g_@@_internal_code_after_tl
{
\@@_actually_diagbox:nnnnnn
- { #1 } { #2 } { #3 } { #4 } { ##1 } { ##2 }
+ { #1 } { #2 } { #3 } { #4 }
+ { \exp_not:n { ##1 } } { \exp_not:n { ##2 } }
}
}
% \end{macrocode}
@@ -11258,7 +11765,7 @@ version 2005/12/01 or later.
%
% We construct the node for the block with the name |(#1-#2-block)|.
%
-% The function |\@@_pgf_rect_node:nnnnn| takes as arguments the name of the node
+% The function |\@@_pgf_rect_node:nnnnn| takes in as arguments the name of the node
% and the four coordinates of two opposite corner points of the rectangle.
% \begin{macrocode}
\begin { pgfscope }
@@ -11318,7 +11825,7 @@ version 2005/12/01 or later.
%
% \medskip
% If the creation of the ``medium nodes'' is required, we create a ``medium
-% node'' for the block. The function |\@@_pgf_rect_node:nnnnn| takes as
+% node'' for the block. The function |\@@_pgf_rect_node:nnnnn| takes in as
% arguments the name of the node and two \textsc{pgf} points.
% \begin{macrocode}
\bool_if:NT \l_@@_medium_nodes_bool
@@ -11528,8 +12035,8 @@ version 2005/12/01 or later.
{ \int_use:N \c@jCol }
{ \int_use:N \c@iRow }
{ \int_use:N \c@jCol }
- { #1 }
- { #2 }
+ { \exp_not:n { #1 } }
+ { \exp_not:n { #2 } }
}
% \end{macrocode}
% We put the cell with |\diagbox| in the sequence |\g_@@_pos_of_blocks_seq|
@@ -11611,7 +12118,7 @@ version 2005/12/01 or later.
% \begin{macrocode}
\cs_new_protected:Npn \@@_CodeAfter:n #1 \end
{
- \tl_gput_right:Nn \g_@@_code_after_tl { #1 }
+ \tl_gput_right:Nn \g_nicematrix_code_after_tl { #1 }
\@@_CodeAfter_i:n
}
% \end{macrocode}
@@ -11628,11 +12135,11 @@ version 2005/12/01 or later.
{ \end { #1 } }
% \end{macrocode}
% If this is not the |\end| we are looking for, we put those tokens in
-% |\g_@@_code_after_tl| and we go on searching for the next command |\end| with
-% a recursive call to the command |\@@_CodeAfter:n|.
+% |\g_nicematrix_code_after_tl| and we go on searching for the next command
+% |\end| with a recursive call to the command |\@@_CodeAfter:n|.
% \begin{macrocode}
{
- \tl_gput_right:Nn \g_@@_code_after_tl { \end { #1 } }
+ \tl_gput_right:Nn \g_nicematrix_code_after_tl { \end { #1 } }
\@@_CodeAfter:n
}
}
@@ -11767,15 +12274,26 @@ version 2005/12/01 or later.
% \bigskip
% \subsection*{Error messages of the package}
%
+% The following command converts all the elements of a sequence (which are token
+% lists) into strings.
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_convert_to_str_seq:N #1
+ {
+ \seq_clear:N \l_tmpa_seq
+ \seq_map_inline:Nn #1
+ {
+ \seq_put_left:Nx \l_tmpa_seq { \tl_to_str:n { ##1 } }
+ }
+ \seq_set_eq:NN #1 \l_tmpa_seq
+ }
+% \end{macrocode}
%
-% The following command creates a sequence of strings (|str|) from a |clist|. Be
-% careful: we use |\seq_set_map:NNn| and the name of that function will maybe
-% change to |\eq_set_map_x:NNn|.
+% The following command creates a sequence of strings (|str|) from a |clist|.
% \begin{macrocode}
\cs_new_protected:Npn \@@_set_seq_of_str_from_clist:Nn #1 #2
{
\seq_set_from_clist:Nn #1 { #2 }
- \seq_set_map:NNn #1 #1 { \tl_to_str:n { ##1 } }
+ \@@_convert_to_str_seq:N #1
}
% \end{macrocode}
%
@@ -11824,8 +12342,8 @@ version 2005/12/01 or later.
{
You~try~to~use~more~columns~than~allowed~by~your~
\@@_full_name_env:.\@@_message_hdotsfor:\ The~maximal~number~of~
- columns~is~\int_eval:n { \l_@@_last_col_int - 1 }~(plus~the~potential~
- exterior~ones).~This~error~is~fatal.
+ columns~is~\int_eval:n { \l_@@_last_col_int - 1 }~(plus~the~
+ exterior~columns).~This~error~is~fatal.
}
% \end{macrocode}
%
@@ -11837,7 +12355,7 @@ version 2005/12/01 or later.
\@@_full_name_env:.\@@_message_hdotsfor:\ Recall~that~the~maximal~
number~of~columns~for~a~matrix~is~fixed~by~the~LaTeX~counter~
'MaxMatrixCols'.~Its~actual~value~is~\int_use:N \c@MaxMatrixCols.~
- This~error~is~fatal.
+ This~error~is~fatal.
}
% \end{macrocode}
%
@@ -11850,12 +12368,32 @@ version 2005/12/01 or later.
{
You~try~to~use~more~columns~than~allowed~by~your~
\@@_full_name_env:.\@@_message_hdotsfor:\ The~maximal~number~of~columns~is~
- \int_eval:n { \c@jCol - 1 }~(plus~the~potential~exterior~ones).~
+ \int_use:N \g_@@_static_num_of_col_int\
+ ~(plus~the~potential~exterior~ones).~
This~error~is~fatal.
}
% \end{macrocode}
%
% \begin{macrocode}
+\@@_msg_new:nn { last~col~not~used }
+ {
+ The~key~'last-col'~is~in~force~but~you~have~not~used~that~last~column~
+ in~your~\@@_full_name_env:.~However,~you~can~go~on.
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\@@_msg_new:nn { columns~not~used }
+ {
+ The~preamble~of~your~\@@_full_name_env:\ announces~\int_use:N
+ \g_@@_static_num_of_col_int\
+ columns~but~you~use~only~\int_use:N \c@jCol.\\
+ However,~you~can~go~on.
+ }
+% \end{macrocode}
+%
+%
+% \begin{macrocode}
\@@_msg_new:nn { in~first~col }
{
You~can't~use~the~command~#1 in~the~first~column~(number~0)~of~the~array.\\
@@ -11998,6 +12536,15 @@ version 2005/12/01 or later.
% \end{macrocode}
%
% \begin{macrocode}
+\@@_msg_new:nn { unknown~column~type }
+ {
+ The~column~type~'#1'~in~your~\@@_full_name_env:\
+ is~unknown. \\
+ This~error~is~fatal.
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
\@@_msg_new:nn { angle~option~in~NiceTabular }
{
You~should~not~the~option~between~angle~brackets~(<~and~>)~for~a~command~
@@ -12100,9 +12647,9 @@ version 2005/12/01 or later.
{
The~available~options~are~(in~alphabetic~order):~
allow-duplicate-names,~
- code-for-first-col,~
cell-space-bottom-limit,~
cell-space-top-limit,~
+ code-for-first-col,~
code-for-first-row,~
code-for-last-col,~
code-for-last-row,~
@@ -12154,6 +12701,7 @@ version 2005/12/01 or later.
code-for-first-row,~
code-for-last-col,~
code-for-last-row,~
+ colortbl-like,~
columns-width,~
create-extra-nodes,~
create-medium-nodes,~
@@ -12209,6 +12757,7 @@ version 2005/12/01 or later.
code-for-first-row,~
code-for-last-col,~
code-for-last-row,~
+ colortbl-like,~
columns-width,~
create-extra-nodes,~
create-medium-nodes,~
@@ -12219,14 +12768,14 @@ version 2005/12/01 or later.
first-row,~
hlines,~
hvlines,~
- l~(=L),~
+ l,~
last-col,~
last-row,~
left-margin,~
light-syntax,~
name,~
nullify-dots,~
- r~(=R),~
+ r,~
renew-dots,~
right-margin,~
rules/color,~
@@ -12261,6 +12810,7 @@ version 2005/12/01 or later.
code-for-first-row,~
code-for-last-col,~
code-for-last-row,~
+ colortbl-like,~
columns-width,~
create-extra-nodes,~
create-medium-nodes,~
@@ -12647,6 +13197,18 @@ version 2005/12/01 or later.
%
% Command |\tabularnote|
%
+% \subsection*{Changes between versions 5.0 and 5.1}
+%
+% The vertical rules specified by \verb+|+ in the preamble are not broken by
+% |\hline\hline| (and other).
+%
+% Environment |{NiceTabular*}|
+%
+% Command |\Vdotsfor| similar to |\Hdotsfor|
+%
+% The variable |\g_nicematrix_code_after_tl| is now public.
+%
+%
% \PrintIndex
%
% \tableofcontents
diff --git a/macros/latex/contrib/nicematrix/nicematrix.pdf b/macros/latex/contrib/nicematrix/nicematrix.pdf
index 5fda73de4e..f2ebe92444 100644
--- a/macros/latex/contrib/nicematrix/nicematrix.pdf
+++ b/macros/latex/contrib/nicematrix/nicematrix.pdf
Binary files differ