diff options
Diffstat (limited to 'Master')
-rw-r--r-- | Master/texmf-dist/doc/latex/nicematrix/nicematrix-french.pdf | bin | 463891 -> 466543 bytes | |||
-rw-r--r-- | Master/texmf-dist/doc/latex/nicematrix/nicematrix-french.tex | 84 | ||||
-rw-r--r-- | Master/texmf-dist/doc/latex/nicematrix/nicematrix.pdf | bin | 1339461 -> 1355018 bytes | |||
-rw-r--r-- | Master/texmf-dist/source/latex/nicematrix/nicematrix.dtx | 416 | ||||
-rw-r--r-- | Master/texmf-dist/tex/latex/nicematrix/nicematrix.sty | 169 |
5 files changed, 538 insertions, 131 deletions
diff --git a/Master/texmf-dist/doc/latex/nicematrix/nicematrix-french.pdf b/Master/texmf-dist/doc/latex/nicematrix/nicematrix-french.pdf Binary files differindex 8f455bfe5d9..6965309fe96 100644 --- a/Master/texmf-dist/doc/latex/nicematrix/nicematrix-french.pdf +++ b/Master/texmf-dist/doc/latex/nicematrix/nicematrix-french.pdf diff --git a/Master/texmf-dist/doc/latex/nicematrix/nicematrix-french.tex b/Master/texmf-dist/doc/latex/nicematrix/nicematrix-french.tex index 4db0a583f18..d941d2f9f8a 100644 --- a/Master/texmf-dist/doc/latex/nicematrix/nicematrix-french.tex +++ b/Master/texmf-dist/doc/latex/nicematrix/nicematrix-french.tex @@ -29,8 +29,6 @@ \titlespacing*{\section}{0pt}{6.5ex plus 1ex minus .2ex}{4.3ex plus .2ex} \titlespacing*{\subsection}{0pt}{4.5ex plus 1ex minus .2ex}{2ex plus .2ex} -\usepackage{multicol} -\setlength{\columnseprule}{0.4pt} \def\LetterAt{@} \def\interitem{\vspace{7mm plus 2 mm minus 3mm}} @@ -524,7 +522,7 @@ couleur ; couleur (la valeur par défaut de cette clé est la couleur courante des filets du tableau) ; \item la clé |color| prend en argument une couleur et l'applique au contenu et -trace également le cadre avec cette couleur. +trace également le cadre avec cette couleur ; \item la clé |line-width| fixe la largeur des filets servant pour le cadre (n'a d'intérêt que si |draw| ou |hvlines| est utilisée) ; \item la clé |rounded-corners| impose des coins arrondis (pour le cadre dessiné @@ -536,7 +534,15 @@ cette clé prend comme valeur une liste d'éléments parmi les suivants : |left| |right|, |top| et |bottom| ; \item les clés |t| et |b| réglent la ligne de base qui sera donnée au bloc quand celui-ci est constitué de plusieurs lignes (séparées par la commande |\\|) ; -\item la clé |hvlines| trace tous les filets horizontaux et verticaux dans le bloc. +\item la clé |hvlines| trace tous les filets horizontaux et verticaux dans le +bloc ; +\item \colorbox{yellow!50}{\textbf{Nouveau 5.19}}\enskip quand la clé |tikz| est +utilisée, le chemin Tikz correspondant au rectangle délimitant le bloc est +exécuté avec Tikz\footnote{Tikz doit être chargé préalablement (par défaut, + \pkg{nicematrix} ne charge que \textsc{pgf}), faute de quoi, une erreur sera + levée.} en utilisant comme options la valeur de cette clé |tikz| (qui doit +donc être une liste de clés Tikz applicables à un chemin de Tikz). Pour des +exemple d'utilisation de cette clé |tikz|, voir p.~\pageref{tikz-key-examples}. \end{itemize} @@ -932,7 +938,7 @@ p.~\pageref{OnlyMainNiceMatrix}. Les outils proposés par \pkg{nicematrix} pour tracer des filets sont les suivants : \begin{itemize} -\item les clés |hlines|, |vlines| et |hvlines| ; +\item les clés |hlines|, |vlines|, |hvlines| et |hvlines-except-borders|; \item le spécificateur «\verb+|+» dans le préambule (pour les environnements à préambule) ; \item la commande |\Hline|. @@ -986,7 +992,7 @@ $\begin{pNiceMatrix}[vlines,rules/width=0.2pt] -\subsubsection{La clé hvlines} +\subsubsection{Les clés hvlines et hvlines-except-borders} \label{hvlines} La clé |hvlines|, qui ne prend pas de valeur, est la conjonction des clés @@ -1739,7 +1745,7 @@ Dupont & Chantal & 15 janvier 1998 \\ \colorbox{yellow!50}{\bfseries Nouveau 5.18}\enskip La commande |\RowStyle| prend en argument des instructions de mise en forme qui seront appliquées à -chacune des cellules restantes sur la rangée en cours. +chacune des cases restantes sur la rangée en cours. \medskip Elle prend aussi en premier argument optionnel, entre crochets, une liste de @@ -2902,8 +2908,8 @@ fin de tableau selon un type de liste défini par l'extension \pkg{enumitem}. \begin{scope} \fvset{commandchars=\~\#\!} \begin{Verbatim} -\begin{NiceTabular}{@{}llr@{}}[first-row,code-for-first-row = \bfseries] -\toprule +\begin{NiceTabular}{@{}llr@{}} +\toprule \RowStyle{\bfseries} Nom & Prénom & Date de naissance \\ \midrule Achard~emphase#\tabularnote{La famille Achard est une très ancienne famille du Poitou.}! @@ -2918,8 +2924,8 @@ Dupont & Chantal & 15 janvier 1998 \\ \end{scope} \begin{center} -\begin{NiceTabular}{@{}llr@{}}[first-row,code-for-first-row = \bfseries] -\toprule +\begin{NiceTabular}{@{}llr@{}} +\toprule \RowStyle{\bfseries} Nom & Prénom & Date de naissance \\ \midrule Achard\tabularnote{La famille Achard est une très ancienne famille du Poitou.} @@ -3844,11 +3850,11 @@ noix & noisette & brugnon Les nœuds que l'on vient de décrire ne sont pas accessibles par défaut dans le |\CodeBefore| (décrit p.~\pageref{code-before}). \par\nobreak -\colorbox{yellow!50}{\textbf{Nouveau 5.16}}\enskip On peut rendre ces nœuds -accessibles dans le |\CodeBefore| en utilisant la clé |create-cell-nodes| du -mot-clé |\CodeBefore| (dans ce cas-là, les nœuds sont créés une première fois -avant la construction du tableau en utilisant des informations écrites dans le -fichier |aux| puis recréés lors de la composition du tableau proprement dit). +On peut rendre ces nœuds accessibles dans le |\CodeBefore| en utilisant la clé +|create-cell-nodes| du mot-clé |\CodeBefore| (dans ce cas-là, les nœuds sont +créés une première fois avant la construction du tableau en utilisant des +informations écrites dans le fichier |aux| puis recréés lors de la composition +du tableau proprement dit). \subsection{Les nœuds indiquant la position des filets} @@ -4294,6 +4300,44 @@ L'extension \pkg{nicematrix} n'est pas compatible avec la classe \cls{ieeeaccess \section{Exemples} +\subsection{Utilisation de la clé «tikz» de la commande \textbackslash Block} + +\label{tikz-key-examples} + + +\begin{Verbatim} +\ttfamily \small +\begin{NiceTabular}{m{4.5cm}m{4.5cm}m{4.5cm}}[hvlines] + \Block[~emphase#tikz={pattern=grid,pattern color=lightgray}@]{} + {pattern = grid,\\ pattern color = lightgray} +& \Block[~emphase#tikz={pattern = north west lines,pattern color=blue}@]{} + {pattern = north west lines,\\ pattern color = blue} +& \Block[~emphase#tikz={outer color = red!50, inner color=white }@]{2-1} + {outer color = red!50,\\ inner color = white} \\ + \Block[~emphase#tikz={pattern = sixpointed stars, pattern color = blue!15}@]{} + {pattern = sixpointed stars,\\ pattern color = blue!15} +& \Block[~emphase#tikz={left color = blue!50}@]{} + {left color = blue!50} \\ +\end{NiceTabular} +\end{Verbatim} + +\begin{center} +\ttfamily \small +\begin{NiceTabular}{m{4.5cm}m{4.5cm}m{4.5cm}}[hvlines] + \Block[tikz={pattern=grid,pattern color=lightgray}]{} + {pattern = grid,\\ pattern color = lightgray} +& \Block[tikz={pattern = north west lines,pattern color=blue}]{} + {pattern = north west lines,\\ pattern color = blue} +& \Block[tikz={outer color = red!50, inner color=white }]{2-1} + {outer color = red!50,\\ inner color = white} \\ + \Block[tikz={pattern = sixpointed stars, pattern color = blue!15}]{} + {pattern = sixpointed stars,\\ pattern color = blue!15} +& \Block[tikz={left color = blue!50}]{} + {left color = blue!50} \\ +\end{NiceTabular} +\end{center} + + \subsection{Notes dans les tableaux} \label{ex:notes} @@ -4362,8 +4406,8 @@ nombre total de notes dans le tableau). On utilise alors la clé |widest*| de \ExplSyntaxOff \fvset{commandchars=\~\#\!} \begin{Verbatim} -\begin{NiceTabular}{@{}llr@{}}[first-row,code-for-first-row = \bfseries] -\toprule +\begin{NiceTabular}{@{}llr@{}} +\toprule \RowStyle{\bfseries} Nom & Prénom & Date de naissance \\ \midrule Achard~emphase#\tabularnote{La famille Achard est une très ancienne famille du Poitou.}! @@ -4377,8 +4421,8 @@ Dupont & Chantal & 15 janvier 1998 \\ \end{Verbatim} \begin{center} -\begin{NiceTabular}{@{}llr@{}}[first-row,code-for-first-row = \bfseries] -\toprule +\begin{NiceTabular}{@{}llr@{}} +\toprule \RowStyle{\bfseries} Nom & Prénom & Date de naissance \\ \midrule Achard\tabularnote{La famille Achard est une très ancienne famille du Poitou.} diff --git a/Master/texmf-dist/doc/latex/nicematrix/nicematrix.pdf b/Master/texmf-dist/doc/latex/nicematrix/nicematrix.pdf Binary files differindex 18b8189cdfe..db334606dab 100644 --- a/Master/texmf-dist/doc/latex/nicematrix/nicematrix.pdf +++ b/Master/texmf-dist/doc/latex/nicematrix/nicematrix.pdf diff --git a/Master/texmf-dist/source/latex/nicematrix/nicematrix.dtx b/Master/texmf-dist/source/latex/nicematrix/nicematrix.dtx index fdaa5ac42a6..095a7763900 100644 --- a/Master/texmf-dist/source/latex/nicematrix/nicematrix.dtx +++ b/Master/texmf-dist/source/latex/nicematrix/nicematrix.dtx @@ -15,8 +15,8 @@ % % \fi % \iffalse -\def\myfileversion{5.18} -\def\myfiledate{2021/07/15} +\def\myfileversion{5.19} +\def\myfiledate{2021/07/23} % % %<*batchfile> @@ -65,8 +65,6 @@ version 2005/12/01 or later. \usepackage{titlesec} \titlespacing*{\section}{0pt}{6.5ex plus 1ex minus .2ex}{4.3ex plus .2ex} \titlespacing*{\subsection}{0pt}{4.5ex plus 1ex minus .2ex}{2ex plus .2ex} -\usepackage{multicol} -\setlength{\columnseprule}{0.4pt} \usepackage{footnotehyper} \usepackage{varwidth} \def\LetterAt{@} @@ -160,7 +158,7 @@ version 2005/12/01 or later. % The package \pkg{nicematrix} is entirely contained in the file % |nicematrix.sty|. This file may be put in the current directory or in a % |texmf| tree. However, the best is to install \pkg{nicematrix} with a TeX -% distribution as MiKTeX, TeXlive or MacTeX. +% distribution such as MiKTeX, TeXlive or MacTeX. % % \bigskip % \emph{Remark}: If you use LaTeX via Internet with, for example, Overleaf, you @@ -583,7 +581,15 @@ version 2005/12/01 or later. % by |left|, |right|, |top| and |bottom|; % \item the keys |t| and |b| fix the base line that will be given to the block % when it has a multi-line content (the lines are separated by |\\|); -% \item the keys |hvlines| draws all the vertical and horizontal rules in the block. +% \item the keys |hvlines| draws all the vertical and horizontal rules in the +% block; +% \item \colorbox{yellow!50}{\textbf{New 5.19}}\enskip when the key |tikz| is +% used, the Tikz path corresponding of the rectangle which delimits the block is +% executed with Tikz\footnote{Tikz should be loaded (by default, +% \pkg{nicematrix} only loads \textsc{pgf}) and, if it's not, an error will be +% raised.} by using as options the value of that key |tikz| (which must be a +% list of keys allowed for a Tikz path). For examples, cf. +% p.~\pageref{tikz-key-examples}. % \end{itemize} % % \interitem @@ -955,7 +961,7 @@ version 2005/12/01 or later. % % Here are the tools provided by \pkg{nicematrix} for the rules. % \begin{itemize} -% \item the keys |hlines|, |vlines| and |hvlines|; +% \item the keys |hlines|, |vlines|, |hvlines| and |hvlines-except-borders|; % \item the specifier ``\verb+|+'' in the preamble (for the environments with % preamble); % \item the command |\Hline|. @@ -967,7 +973,7 @@ version 2005/12/01 or later. % \begin{itemize} % \item These blocks are: % \begin{itemize} -% \item the blocks created by the command |\Block|\footnote{And also the command \verb|\multicolumn| also +% \item the blocks created by the command |\Block|\footnote{And also the command \verb|\multicolumn| but % it's recommended to use instead |\Block| in the environments of % \pkg{nicematrix}.} presented % p.~\pageref{Block}; @@ -1007,7 +1013,7 @@ version 2005/12/01 or later. % % % -% \subsubsection{The key hvlines} +% \subsubsection{The keys hvlines and hvlines-except-borders} % \label{hvlines} % % The key |hvlines| (no value) is the conjonction of the keys |hlines| and |vlines|. @@ -1035,7 +1041,7 @@ version 2005/12/01 or later. % % \bigskip % \colorbox{yellow!50}{\bfseries New 5.17}\enskip The key -% |hvlines-except-corners| is similar to the key |hvlines| but does not draw the +% |hvlines-except-borders| is similar to the key |hvlines| but does not draw the % rules on the horizontal and vertical borders of the array. % % \subsubsection{The (empty) corners} @@ -1438,7 +1444,7 @@ version 2005/12/01 or later. % \begin{BVerbatim}[boxwidth=9cm,baseline=c] % $\begin{NiceArray}{lll}[hvlines] % \CodeBefore -% ~emphase#code-before = \rowcolor{red!15}{1,3-5,8-}@ +% ~emphase#\rowcolor{red!15}{1,3-5,8-}@ % \Body % a_1 & b_1 & c_1 \\ % a_2 & b_2 & c_2 \\ @@ -2670,7 +2676,7 @@ version 2005/12/01 or later. % \bigskip % \colorbox{yellow!50}{\bfseries New 5.18}\enskip In fact, the command % |\SubMatrix| also takes in two optional arguments specified by the -% traditionnal symbols |^| and |_| for material in superscript and subscript. +% traditional symbols |^| and |_| for material in superscript and subscript. % % \medskip % \begin{scope} @@ -2697,7 +2703,7 @@ version 2005/12/01 or later. % \bigskip % The options of the command |\SubMatrix| are as follows: % \begin{itemize} -% \item |left-xshift| and |right-shift| shift horizontally the delimiters (there +% \item |left-xshift| and |right-xshift| shift horizontally the delimiters (there % exists also the key |xshift| which fixes both parameters); % \item |extra-height| adds a quantity to the total height of the delimiters % (height |\ht| + depth |\dp|); @@ -2869,8 +2875,8 @@ version 2005/12/01 or later. % \begin{scope} % \fvset{commandchars=\~\#\!} % \begin{Verbatim} -% \begin{NiceTabular}{@{}llr@{}}[first-row,code-for-first-row = \bfseries] -% \toprule +% \begin{NiceTabular}{@{}llr@{}} +% \toprule \RowStyle{\bfseries} % Last name & First name & Birth day \\ % \midrule % Achard\tabularnote{~emphase#Achard is an old family of the Poitou.!} @@ -2885,8 +2891,8 @@ version 2005/12/01 or later. % \end{scope} % % \begin{center} -% \begin{NiceTabular}{@{}llr@{}}[first-row,code-for-first-row = \bfseries] -% \toprule +% \begin{NiceTabular}{@{}llr@{}} +% \toprule \RowStyle{\bfseries} % Last name & First name & Birth day \\ % \midrule % Achard\tabularnote{Achard is an old family of the Poitou.} @@ -3796,11 +3802,11 @@ version 2005/12/01 or later. % The nodes we have described are not available by default in the |\CodeBefore| % (described p.~\pageref{code-before}).\par\nobreak % -% \colorbox{yellow!50}{\textbf{New 5.16}}\enskip It's possible to have these -% nodes available in the |\CodeBefore| by using the key |create-cell-nodes| of -% the keyword |\CodeBefore| (in that case, the nodes are created first before -% the construction of the array by using informations written on the |aux| file -% and created a second time during the contruction of the array itself). +% It's possible to have these nodes available in the |\CodeBefore| by using the +% key |create-cell-nodes| of the keyword |\CodeBefore| (in that case, the nodes +% are created first before the construction of the array by using informations +% written on the |aux| file and created a second time during the contruction of +% the array itself). % % \subsection{The nodes which indicate the position of the rules} % @@ -4232,6 +4238,43 @@ version 2005/12/01 or later. % % \section{Examples} % +% \subsection{Utilisation of the key ``tikz'' of the command \textbackslash Block} +%\label{tikz-key-examples} +% +% +% \begin{Verbatim} +% \ttfamily \small +% \begin{NiceTabular}{m{4.5cm}m{4.5cm}m{4.5cm}}[hvlines] +% \Block[~emphase#tikz={pattern=grid,pattern color=lightgray}@]{} +% {pattern = grid,\\ pattern color = lightgray} +% & \Block[~emphase#tikz={pattern = north west lines,pattern color=blue}@]{} +% {pattern = north west lines,\\ pattern color = blue} +% & \Block[~emphase#tikz={outer color = red!50, inner color=white }@]{2-1} +% {outer color = red!50,\\ inner color = white} \\ +% \Block[~emphase#tikz={pattern = sixpointed stars, pattern color = blue!15}@]{} +% {pattern = sixpointed stars,\\ pattern color = blue!15} +% & \Block[~emphase#tikz={left color = blue!50}@]{} +% {left color = blue!50} \\ +% \end{NiceTabular} +% \end{Verbatim} +% +% \begin{center} +% \ttfamily \small +% \begin{NiceTabular}{m{4.5cm}m{4.5cm}m{4.5cm}}[hvlines] +% \Block[tikz={pattern=grid,pattern color=lightgray}]{} +% {pattern = grid,\\ pattern color = lightgray} +% & \Block[tikz={pattern = north west lines,pattern color=blue}]{} +% {pattern = north west lines,\\ pattern color = blue} +% & \Block[tikz={outer color = red!50, inner color=white }]{2-1} +% {outer color = red!50,\\ inner color = white} \\ +% \Block[tikz={pattern = sixpointed stars, pattern color = blue!15}]{} +% {pattern = sixpointed stars,\\ pattern color = blue!15} +% & \Block[tikz={left color = blue!50}]{} +% {left color = blue!50} \\ +% \end{NiceTabular} +% \end{center} +% +% % \subsection{Notes in the tabulars} % % \label{ex:notes} @@ -4302,8 +4345,8 @@ version 2005/12/01 or later. % } % \ExplSyntaxOff % \begin{Verbatim} -% \begin{NiceTabular}{~@{}llr~@{}}[first-row,code-for-first-row = \bfseries] -% \toprule +% \begin{NiceTabular}{~@{}llr~@{}} +% \toprule \RowStyle{\bfseries} % Last name & First name & Birth day \\ % \midrule % Achard\tabularnote{~emphase#Achard is an old family of the Poitou.@} @@ -4317,8 +4360,8 @@ version 2005/12/01 or later. % \end{Verbatim} % % \begin{center} -% \begin{NiceTabular}{@{}llr@{}}[first-row,code-for-first-row = \bfseries] -% \toprule +% \begin{NiceTabular}{@{}llr@{}} +% \toprule \RowStyle{\bfseries} % Last name & First name & Birth day \\ % \midrule % Achard\tabularnote{Achard is an old family of the Poitou.} @@ -5002,7 +5045,8 @@ version 2005/12/01 or later. % \end{macrocode} % % -% We give the traditional declaration of a package written with |expl3|: +% We give the traditional declaration of a package written with the L3 +% programming layer. % \begin{macrocode} \RequirePackage{l3keys2e} \ProvidesExplPackage @@ -5250,10 +5294,6 @@ version 2005/12/01 or later. } % \end{macrocode} % -% We need that line for the case where you use \verb+||+ with \pkg{colortbl} loaded. -% \begin{macrocode} -\cs_set_protected:Npn \CT@drsc@ { } -% \end{macrocode} % % \bigskip % We have to redefine |\cline| for several reasons. The command |\@@_cline| will @@ -5478,7 +5518,8 @@ version 2005/12/01 or later. % For compatibility with versions prior to 5.0, we provide a load-time option % |define_L_C_R|. With this option, it's possible to use the letters |L|, |C| % and |R| instead of |l|, |c| and |r| in the preamble of the environments of -% \pkg{nicematrix} as it was mandatory before version~5.0. +% \pkg{nicematrix} as it was mandatory before version~5.0. This key will +% probably be deleted in a future version. % \begin{macrocode} \bool_new:N \c_@@_define_L_C_R_bool % \end{macrocode} @@ -5639,6 +5680,7 @@ version 2005/12/01 or later. \tl_new:N \g_@@_aux_tl % \end{macrocode} % +% % \bigskip % \begin{macrocode} \cs_new_protected:Npn \@@_test_if_math_mode: @@ -5743,6 +5785,21 @@ version 2005/12/01 or later. \tl_new:N \l_@@_rules_color_tl % \end{macrocode} % +% \bigskip +% The number of letters |X| in the preamble of the array. +% \begin{macrocode} +\int_new:N \g_@@_nb_of_X_int +% \end{macrocode} +% +% If there is at least one |X|-column in the preamble of the array, the +% following flag will be raised via the |aux| file. The length +% |l_@@_x_columns_dim| will be the width of the |X|-columns. That value is +% computed after the contruction of the array during the first compilation in +% order to be used in the following run. +% \begin{macrocode} +\bool_new:N \l_@@_X_columns_aux_bool +\dim_new:N \l_@@_X_columns_dim +% \end{macrocode} % % \bigskip % This boolean will be used only to detect in an expandable way whether we are @@ -5805,9 +5862,9 @@ version 2005/12/01 or later. % \end{macrocode} % % \bigskip -% \pkg{expl3} provides scratch dimensions |\l_tmpa_dim| and |\l_tmpb_dim|. We -% creates two more in the same spirit (if they don't exist yet: that's why we -% use |\dim_zero_new:N|). +% The L3 programming layer provides scratch dimensions |\l_tmpa_dim| and +% |\l_tmpb_dim|. We creates two more in the same spirit (if they don't exist +% yet: that's why we use |\dim_zero_new:N|). % \begin{macrocode} \dim_zero_new:N \l_tmpc_dim \dim_zero_new:N \l_tmpd_dim @@ -5933,11 +5990,12 @@ version 2005/12/01 or later. % \end{macrocode} % % \medskip -% The following parameters correspond to the keys |fill|, |draw|, |borders| and -% |rounded-corners| of the command |\Block|. +% The following parameters correspond to the keys |fill|, |draw|, |tikz|, |borders|, +% and |rounded-corners| of the command |\Block|. % \begin{macrocode} \tl_new:N \l_@@_fill_tl \tl_new:N \l_@@_draw_tl +\seq_new:N \l_@@_tikz_seq \clist_new:N \l_@@_borders_clist \dim_new:N \l_@@_rounded_corners_dim % \end{macrocode} @@ -5946,8 +6004,7 @@ version 2005/12/01 or later. % |corners| is used). % % \medskip -% The following token list correspond to the key |color| of the command -% |\Block|. +% The following token list correspond to the key |color| of the command |\Block|. % \begin{macrocode} \tl_new:N \l_@@_color_tl % \end{macrocode} @@ -7126,7 +7183,13 @@ version 2005/12/01 or later. % \begin{macrocode} \cs_new_protected:Npn \@@_Cell: { - \tl_gclear:N \g_@@_exit_cell_tl +% \end{macrocode} +% The token list |\g_@@_post_treatment_cell_tl| will be set during the +% composition of the box |\l_@@_cell_box| and will be used \emph{after} the +% composition in order to modify that box (that's why it's called a +% \emph{post-treatment}). +% \begin{macrocode} + \tl_gclear:N \g_@@_post_treatment_cell_tl % \end{macrocode} % At the beginning of the cell, we link |\CodeAfter| to a command which do % \emph{not} begin with |\omit| (whereas the standard version of |\CodeAfter| @@ -7285,7 +7348,12 @@ version 2005/12/01 or later. { \@@_math_toggle_token: \hbox_set_end: - \g_@@_exit_cell_tl +% \end{macrocode} +% The token list |\g_@@_post_treatment_cell_tl| is (potentially) set during the +% composition of the box |\l_@@_cell_box| and is used now \emph{after} the +% composition in order to modify that box. +% \begin{macrocode} + \g_@@_post_treatment_cell_tl \bool_if:NT \g_@@_rotate_bool \@@_rotate_cell_box: \@@_adjust_size_box: % \end{macrocode} @@ -8044,7 +8112,7 @@ version 2005/12/01 or later. { \tl_gput_right:Nn \g_@@_row_style_tl { - \tl_gput_right:Nn \g_@@_exit_cell_tl + \tl_gput_right:Nn \g_@@_post_treatment_cell_tl { \dim_set:Nn \l_@@_cell_space_top_limit_dim { #1 } } } } , @@ -8053,7 +8121,7 @@ version 2005/12/01 or later. { \tl_gput_right:Nn \g_@@_row_style_tl { - \tl_gput_right:Nn \g_@@_exit_cell_tl + \tl_gput_right:Nn \g_@@_post_treatment_cell_tl { \dim_set:Nn \l_@@_cell_space_bottom_limit_dim { #1 } } } } , @@ -8439,6 +8507,29 @@ version 2005/12/01 or later. % End of the construction of the array (in the box |\l_@@_the_array_box|). % % \bigskip +% Now, if there is at least one |X|-column in the environment, we compute the +% width that those columns will have (in the next compilation). +% \begin{macrocode} + \int_compare:nNnT \g_@@_nb_of_X_int > 0 + { + \bool_if:NTF \l_@@_X_columns_aux_bool + { \dim_set_eq:NN \l_tmpa_dim \l_@@_X_columns_dim } + { + \dim_set:Nn \l_tmpa_dim + { + ( \textwidth - \box_wd:N \l_@@_the_array_box ) + / \int_use:N \g_@@_nb_of_X_int + } + } + \tl_gput_right:Nx \g_@@_aux_tl + { + \bool_set_true:N \l_@@_X_columns_aux_bool + \dim_set:Nn \l_@@_X_columns_dim { \dim_use:N \l_tmpa_dim } + } + } +% \end{macrocode} +% +% \bigskip % It the user has used the key |last-row| with a value, we control that the % given value is correct (since we have just constructed the array, we know the % real number of rows of the array). @@ -8626,10 +8717,11 @@ version 2005/12/01 or later. % current environment. % \begin{macrocode} \iow_now:Nn \@mainaux { \ExplSyntaxOn } + \iow_now:Nn \@mainaux { \char_set_catcode_space:n { 32 } } \iow_now:Nx \@mainaux { \tl_gset:cn { c_@@_ \int_use:N \g_@@_env_int _ tl } - \iow_newline: { \iow_newline: \exp_not:V \g_@@_aux_tl } + { \exp_not:V \g_@@_aux_tl } } \iow_now:Nn \@mainaux { \ExplSyntaxOff } % \end{macrocode} @@ -8660,7 +8752,7 @@ version 2005/12/01 or later. % 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}. +% programmation which is not in the style of the L3 programming layer. % % % \bigskip @@ -8686,7 +8778,7 @@ version 2005/12/01 or later. % \end{macrocode} % % First, we have to store our preamble in the token register |\@temptokena| -% (those ``token registers'' are \emph{not} supported by \pkg{expl3}). +% (those ``token registers'' are \emph{not} supported by the L3 programming layer). % \begin{macrocode} \exp_args:NV \@temptokena \g_@@_preamble_tl % \end{macrocode} @@ -8729,6 +8821,10 @@ version 2005/12/01 or later. } } % \end{macrocode} +% The number of letters |X| in the preamble of the array. +% \begin{macrocode} + \int_gzero:N \g_@@_nb_of_X_int +% \end{macrocode} % The sequence |\g_@@_cols_vlsim_seq| will contain the numbers of the columns % where you will to have to draw vertical lines in the potential sub-matrices % (hence the name |vlism|). @@ -8784,7 +8880,7 @@ version 2005/12/01 or later. % \end{macrocode} % % \bigskip -% We complete the preamble with the potential ``exterior columns''. +% We complete the preamble with the potential ``exterior columns'' (on both sides). % \begin{macrocode} \int_compare:nNnTF \l_@@_first_col_int = 0 { \tl_gput_left:NV \g_@@_preamble_tl \c_@@_preamble_first_col_tl } @@ -8811,7 +8907,7 @@ version 2005/12/01 or later. { \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 +% We add a last column to raise a good error message when the user puts 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} @@ -8837,8 +8933,8 @@ version 2005/12/01 or later. @ { \@@_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 } + m { \@@_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 } @@ -8848,6 +8944,7 @@ version 2005/12/01 or later. ) { \@@_patch_preamble_viii:nn #1 } ] { \@@_patch_preamble_viii:nn #1 } \} { \@@_patch_preamble_viii:nn #1 } + X { \@@_patch_preamble_xii: } C { \@@_error:nn { old~column~type } #1 } L { \@@_error:nn { old~column~type } #1 } R { \@@_error:nn { old~column~type } #1 } @@ -8959,7 +9056,7 @@ version 2005/12/01 or later. % \end{macrocode} % % \medskip -% For |p|, |m| and |b| +% For |p| and |b| % \begin{macrocode} \cs_new_protected:Npn \@@_patch_preamble_iv:nnn #1 #2 #3 { @@ -8968,14 +9065,29 @@ version 2005/12/01 or later. > { \@@_Cell: \begin { minipage } [ #1 ] { \dim_eval:n { #3 } } - \mode_leave_vertical: +% \end{macrocode} +% The following lines have been taken from |array.sty|. +% \begin{macrocode} + \everypar + { + \vrule height \box_ht:N \@arstrutbox width \c_zero_dim + \everypar { } + } + \g_@@_row_style_tl % added the 2021-07-17 \arraybackslash - \vrule height \box_ht:N \@arstrutbox depth 0 pt width 0 pt } c < { - \vrule height 0 pt depth \box_dp:N \@arstrutbox width 0 pt +% \end{macrocode} +% The following line has been taken from |array.sty|. +% \begin{macrocode} + \@finalstrut \@arstrutbox \end { minipage } +% \end{macrocode} +% If the letter in the preamble is |m|, you require a post-treatment for the box +% |\l_@@_cell_box|. +% \begin{macrocode} + \str_if_eq:nnT { #2 } m \@@_center_cell_box: \@@_end_Cell: } } @@ -8987,6 +9099,42 @@ version 2005/12/01 or later. } % \end{macrocode} % +% \bigskip +% The following command will be used in |m|-columns in order to center +% vertically the box. In fact, despite its name, the command does not always +% center the cell. Indeed, if there is only one row in the cell, it should not +% be centered vertically. It's not possible to know the number of rows of the +% cell. However, you consider (as in \pkg{array}) that if the height of the cell +% is no more that the height of |\@arstrutbox|, there is only one row. +% \begin{macrocode} +\cs_new_protected:Npn \@@_center_cell_box: + { +% \end{macrocode} +% By putting instructions in |\g_@@_post_treatment_cell_tl|, we require a +% post-treatment of the box |\l_@@_cell_box|. +% \begin{macrocode} + \tl_gput_right:Nn \g_@@_post_treatment_cell_tl + { + \int_compare:nNnT + { \box_ht:N \l_@@_cell_box } + > + { \box_ht:N \@arstrutbox } + { + \hbox_set:Nn \l_@@_cell_box + { + \box_move_down:nn + { + ( \box_ht:N \l_@@_cell_box - \box_ht:N \@arstrutbox + + \baselineskip ) / 2 + } + { \box_use:N \l_@@_cell_box } + } + } + } + } +% \end{macrocode} +% +% % \medskip % For |w| and |W| % \begin{macrocode} @@ -9192,7 +9340,42 @@ version 2005/12/01 or later. } % \end{macrocode} % -% +% \bigskip +% For the case of a letter |X| +% \begin{macrocode} +\cs_new_protected:Npn \@@_patch_preamble_xii: + { + \int_gincr:N \g_@@_nb_of_X_int +% \end{macrocode} +% We test whether you know the width of the |X|-columns by reading the value in +% the |aux| file (of course, this is not possible at the first compilation). +% \begin{macrocode} + \bool_if:NTF \l_@@_X_columns_aux_bool + { \exp_args:NNNV \@@_patch_preamble_iv:nnn t p \l_@@_X_columns_dim } + { + \tl_gput_right:Nn \g_@@_preamble_tl + { + > { + \@@_Cell: + \tl_set:Nn \l_@@_cell_type_tl { c } +% \end{macrocode} +% The following code will nullify the box of the cell. +% \begin{macrocode} + \tl_gput_right:Nn \g_@@_post_treatment_cell_tl + { \hbox_set:Nn \l_@@_cell_box { } } +% \end{macrocode} +% The content of the cell is composed in |\l_tmpa_box| which will be discarded. +% \begin{macrocode} + } + c + < { \@@_end_Cell: } + } + \int_gincr:N \c@jCol + \@@_patch_preamble_x:n + } + } +% \end{macrocode} +% % \bigskip % \subsection*{The redefinition of \textbackslash multicolumn} % @@ -9555,7 +9738,13 @@ version 2005/12/01 or later. % notes (that means that a |\vtop{\hsize=...}| is not enough). % \begin{macrocode} \begin { minipage } [ t ] { \box_wd:N \l_@@_the_array_box } - \box_use_drop:N \l_@@_the_array_box +% \end{macrocode} +% The |\hbox| avoids that the |pgfpicture| inside |\@@_draw_blocks| adds a extra +% vertical space before the notes. +% \begin{macrocode} + \hbox:n + { + \box_use_drop:N \l_@@_the_array_box % \end{macrocode} % We have to draw the blocks right now because there may be tabular notes in % some blocks (which are not mono-column: the blocks which are mono-column @@ -9563,8 +9752,9 @@ version 2005/12/01 or later. % extra nodes before creating the blocks since there are |medium| nodes to create % for the blocks. % \begin{macrocode} - \@@_create_extra_nodes: - \seq_if_empty:NF \g_@@_blocks_seq \@@_draw_blocks: + \@@_create_extra_nodes: + \seq_if_empty:NF \g_@@_blocks_seq \@@_draw_blocks: + } \bool_lazy_or:nnT { \int_compare_p:nNn \c@tabularnote > 0 } { ! \tl_if_empty_p:V \l_@@_tabularnote_tl } @@ -9729,6 +9919,10 @@ version 2005/12/01 or later. \vcenter { \vbox_to_ht:nn +% \end{macrocode} +% Here, you should use |\box_ht_plus_dp:N| when TeXLive 2021 will be available +% on Overleaf. +% \begin{macrocode} { \box_ht:N \l_tmpa_box + \box_dp:N \l_tmpa_box } { } } @@ -9742,6 +9936,10 @@ version 2005/12/01 or later. \c_math_toggle_token \left . \vbox_to_ht:nn +% \end{macrocode} +% Here, you should use |\box_ht_plus_dp:N| when TeXLive 2021 will be available +% on Overleaf. +% \begin{macrocode} { \box_ht:N \l_tmpa_box + \box_dp:N \l_tmpa_box } { } \right #2 @@ -10022,8 +10220,8 @@ version 2005/12/01 or later. % \begin{macrocode} \int_gset:Nn \g_tmpa_int 1 \bool_if:NTF \g_@@_last_col_found_bool - { \prg_replicate:nn { \g_@@_col_total_int - 3 } } - { \prg_replicate:nn { \g_@@_col_total_int - 2 } } + { \prg_replicate:nn { \int_max:nn { \g_@@_col_total_int - 3 } 0 } } + { \prg_replicate:nn { \int_max:nn { \g_@@_col_total_int - 2 } 0 } } { & \omit @@ -10465,8 +10663,7 @@ version 2005/12/01 or later. \int_use:N \l_@@_first_col_int , \int_use:N \c@jCol , \int_use:N \g_@@_col_total_int - } - \iow_newline: + } } % \end{macrocode} % We write also the potential content of |\g_@@_pos_of_blocks_seq| (it will be @@ -10478,7 +10675,6 @@ version 2005/12/01 or later. { \seq_gset_from_clist:Nn \exp_not:N \g_@@_pos_of_blocks_seq { \seq_use:Nnnn \g_@@_pos_of_blocks_seq , , , } - \iow_newline: } } \seq_if_empty:NF \g_@@_multicolumn_cells_seq @@ -10487,10 +10683,8 @@ version 2005/12/01 or later. { \seq_gset_from_clist:Nn \exp_not:N \g_@@_multicolumn_cells_seq { \seq_use:Nnnn \g_@@_multicolumn_cells_seq , , , } - \iow_newline: \seq_gset_from_clist:Nn \exp_not:N \g_@@_multicolumn_sizes_seq { \seq_use:Nnnn \g_@@_multicolumn_sizes_seq , , , } - \iow_newline: } } % \end{macrocode} @@ -10674,12 +10868,12 @@ version 2005/12/01 or later. { \tl_gset:Nn \exp_not:N \g_@@_code_before_tl { \exp_not:V \g_nicematrix_code_before_tl } - \iow_newline: } \bool_set_true:N \l_@@_code_before_bool } % \end{macrocode} -% +% +% % \begin{macrocode} % \bool_if:NT \l_@@_code_before_bool \@@_write_aux_for_cell_nodes: % \end{macrocode} @@ -11787,7 +11981,7 @@ version 2005/12/01 or later. % % % \bigskip -% \subsection*{The actual instructions for drawing the dotted line with Tikz} +% \subsection*{The actual instructions for drawing the dotted lines with Tikz} % % The command |\@@_draw_line:| should be used in a |{pgfpicture}|. It has six % implicit arguments: @@ -11916,7 +12110,7 @@ version 2005/12/01 or later. \group_begin: % \end{macrocode} % The dimension |\l_@@_l_dim| is the length $\ell$ of the line to draw. We use -% the floating point reals of \pkg{expl3} to compute this length. +% the floating point reals of the L3 programming layer to compute this length. % \begin{macrocode} \dim_zero_new:N \l_@@_l_dim \dim_set:Nn \l_@@_l_dim @@ -13373,9 +13567,12 @@ version 2005/12/01 or later. \dim_set_eq:NN \l_tmpb_dim \pgf@x \@@_qpoint:n { row - \@@_succ:n { #4 } } \dim_set_eq:NN \l_tmpc_dim \pgf@y - \bool_lazy_and:nnT - { \int_compare_p:nNn { #2 } > 1 } - { ! \tl_if_blank_p:V \CT@drsc@ } + \bool_lazy_all:nT + { + { \int_compare_p:nNn { #2 } > 1 } + { \cs_if_exist_p:N \CT@drsc@ } % condition added in version 5.18a + { ! \tl_if_blank_p:V \CT@drsc@ } + } { \group_begin: \CT@drsc@ @@ -13768,7 +13965,6 @@ version 2005/12/01 or later. { \seq_set_from_clist:Nn \exp_not:N \l_@@_corners_cells_seq { \seq_use:Nnnn \l_@@_corners_cells_seq , , , } - \iow_newline: } } } @@ -14701,9 +14897,15 @@ version 2005/12/01 or later. % why we have two macros: |\@@_Block_iv:nnnnn| and |\@@_Block_v:nnnnn| (the five % arguments of those macros are provided by curryfication). % \begin{macrocode} - \bool_lazy_or:nnTF - { \int_compare_p:nNn { \l_tmpa_int } = 1 } - { \int_compare_p:nNn { \l_tmpb_int } = 1 } + \bool_if:nTF + { + ( + \int_compare_p:nNn { \l_tmpa_int } = 1 + || + \int_compare_p:nNn { \l_tmpb_int } = 1 + ) + && ! \tl_if_empty_p:n { #5 } + } { \exp_args:Nxx \@@_Block_iv:nnnnn } { \exp_args:Nxx \@@_Block_v:nnnnn } { \l_tmpa_int } { \l_tmpb_int } { #3 } { #4 } { #5 } @@ -14742,9 +14944,9 @@ version 2005/12/01 or later. % \end{macrocode} % For a mono-column block, if the user has specified a color for the column in % the preamble of the array, we want to fix that color in the box we construct. -% We do that with |\set@color| and not |\color_ensure_current:| because that -% command seems to be bugged: it doesn't work in XeLaTeX when \pkg{fontspec} is -% loaded. +% We do that with |\set@color| and not |\color_ensure_current:| (in order to use +% |\color_ensure_current:| safely, you should load \pkg{l3backend} before the +% |\documentclass| with |\RequirePackage{expl3}|). % \begin{macrocode} \tl_if_empty:NTF \l_@@_color_tl { \int_compare:nNnT { #2 } = 1 \set@color } @@ -14932,6 +15134,11 @@ version 2005/12/01 or later. % \begin{macrocode} \keys_define:nn { NiceMatrix / Block / SecondPass } { + tikz .code:n = + \bool_if:NTF \c_@@_tikz_loaded_bool + { \seq_put_right:Nn \l_@@_tikz_seq { { #1 } } } + { \@@_error:n { tikz~key~without~tikz } } , + tikz .value_required:n = true , fill .tl_set:N = \l_@@_fill_tl , fill .value_required:n = true , draw .tl_set:N = \l_@@_draw_tl , @@ -15031,7 +15238,7 @@ version 2005/12/01 or later. % % \begin{macrocode} \cs_new_protected:Npn \@@_Block_v:nnnnnn #1 #2 #3 #4 #5 #6 - { + { % \end{macrocode} % The sequence of the positions of the blocks will be used when drawing the rules % (in fact, there is also the |\multicolumn| and the |\diagbox| in that sequence). @@ -15107,6 +15314,21 @@ version 2005/12/01 or later. } } % \end{macrocode} +% +% \begin{macrocode} + \seq_if_empty:NF \l_@@_tikz_seq + { + \tl_gput_right:Nx \g_nicematrix_code_before_tl + { + \@@_block_tikz:nnnnn + { #1 } + { #2 } + { \int_use:N \l_@@_last_row_int } + { \int_use:N \l_@@_last_col_int } + { \seq_use:Nn \l_@@_tikz_seq { , } } + } + } +% \end{macrocode} % % \medskip % \begin{macrocode} @@ -15630,6 +15852,25 @@ version 2005/12/01 or later. line-width .dim_set:N = \l_@@_line_width_dim } % \end{macrocode} +% +% \bigskip +% The following command will be used if the key |tikz| has been used for the +% command |\Block|. The arguments |#1| and |#2| are the coordinates of the first +% cell and |#3| and |#4| the coordinates of the last cell of the block. |#5| is +% a comma-separated list of the Tikz keys used with the path. +% \begin{macrocode} +\cs_new_protected:Npn \@@_block_tikz:nnnnn #1 #2 #3 #4 #5 + { + \begin { tikzpicture } + \clist_map_inline:nn { #5 } + { + \path [ ##1 ] + ( #1 -| #2 ) rectangle ( \@@_succ:n { #3 } -| \@@_succ:n { #4 } ) ; + } + \end { tikzpicture } + } +% \end{macrocode} +% % % \subsection*{How to draw the dotted lines transparently} % \begin{macrocode} @@ -16821,7 +17062,7 @@ version 2005/12/01 or later. } % \end{macrocode} % -% +% % \begin{macrocode} \@@_msg_new:nn { too~much~cols~for~matrix~with~last~col } { @@ -17121,6 +17362,15 @@ version 2005/12/01 or later. If~you~go~on,~this~specification~of~border~will~be~ignored. } % \end{macrocode} +% +% \begin{macrocode} +\@@_msg_new:nn { tikz~key~without~tikz } + { + You~can't~use~the~key~'tikz'~for~the~command~'\token_to_str:N + \Block'~because~you~have~not~loaded~Tikz.~ + If~you~go~on,~this~key~will~be~ignored. + } +% \end{macrocode} % % \begin{macrocode} \@@_msg_new:nn { last-col~non~empty~for~NiceArray } @@ -17257,7 +17507,7 @@ version 2005/12/01 or later. } { The~available~keys~are~(in~alphabetic~order):~b,~borders,~c,~draw,~fill,~ - hvlines,~l,~line-width,~rounded-corners,~r~and~t. + hvlines,~l,~line-width,~rounded-corners,~r,~t~and~tikz. } % \end{macrocode} % @@ -18064,6 +18314,10 @@ version 2005/12/01 or later. % % New command |\RowStyle| % +% \subsection*{Changes between versions 5.18 and 5.19} +% +% New key |tikz| for the command |\Block|. +% % \PrintIndex % % \tableofcontents diff --git a/Master/texmf-dist/tex/latex/nicematrix/nicematrix.sty b/Master/texmf-dist/tex/latex/nicematrix/nicematrix.sty index bbd810f13e4..c9122db838d 100644 --- a/Master/texmf-dist/tex/latex/nicematrix/nicematrix.sty +++ b/Master/texmf-dist/tex/latex/nicematrix/nicematrix.sty @@ -18,8 +18,8 @@ %% and version 1.3 or later is part of all distributions of %% LaTeX version 2005/12/01 or later. %% -\def\myfileversion{5.18} -\def\myfiledate{2021/07/15} +\def\myfileversion{5.19} +\def\myfiledate{2021/07/23} \RequirePackage{pgfcore} \usepgfmodule{shapes} \RequirePackage{l3keys2e} @@ -152,7 +152,6 @@ } } } -\cs_set_protected:Npn \CT@drsc@ { } \cs_set:Npn \__nicematrix_standard_cline #1 { \__nicematrix_standard_cline:w #1 \q_stop } \cs_set:Npn \__nicematrix_standard_cline:w #1-#2 \q_stop { @@ -326,6 +325,9 @@ \int_new:N \l__nicematrix_old_iRow_int \int_new:N \l__nicematrix_old_jCol_int \tl_new:N \l__nicematrix_rules_color_tl +\int_new:N \g__nicematrix_nb_of_X_int +\bool_new:N \l__nicematrix_X_columns_aux_bool +\dim_new:N \l__nicematrix_X_columns_dim \bool_new:N \g__nicematrix_after_col_zero_bool \bool_new:N \g__nicematrix_row_of_col_done_bool \bool_new:N \g__nicematrix_not_empty_cell_bool @@ -357,6 +359,7 @@ \int_new:N \g__nicematrix_static_num_of_col_int \tl_new:N \l__nicematrix_fill_tl \tl_new:N \l__nicematrix_draw_tl +\seq_new:N \l__nicematrix_tikz_seq \clist_new:N \l__nicematrix_borders_clist \dim_new:N \l__nicematrix_rounded_corners_dim \tl_new:N \l__nicematrix_color_tl @@ -900,7 +903,7 @@ } \cs_new_protected:Npn \__nicematrix_Cell: { - \tl_gclear:N \g__nicematrix_exit_cell_tl + \tl_gclear:N \g__nicematrix_post_treatment_cell_tl \cs_set_eq:NN \CodeAfter \__nicematrix_CodeAfter_i:n \int_gincr:N \c@jCol \int_compare:nNnT \c@jCol = 1 @@ -1004,7 +1007,7 @@ { \__nicematrix_math_toggle_token: \hbox_set_end: - \g__nicematrix_exit_cell_tl + \g__nicematrix_post_treatment_cell_tl \bool_if:NT \g__nicematrix_rotate_bool \__nicematrix_rotate_cell_box: \__nicematrix_adjust_size_box: \box_set_ht:Nn \l__nicematrix_cell_box @@ -1351,7 +1354,7 @@ { \tl_gput_right:Nn \g__nicematrix_row_style_tl { - \tl_gput_right:Nn \g__nicematrix_exit_cell_tl + \tl_gput_right:Nn \g__nicematrix_post_treatment_cell_tl { \dim_set:Nn \l__nicematrix_cell_space_top_limit_dim { #1 } } } } , @@ -1360,7 +1363,7 @@ { \tl_gput_right:Nn \g__nicematrix_row_style_tl { - \tl_gput_right:Nn \g__nicematrix_exit_cell_tl + \tl_gput_right:Nn \g__nicematrix_post_treatment_cell_tl { \dim_set:Nn \l__nicematrix_cell_space_bottom_limit_dim { #1 } } } } , @@ -1550,6 +1553,23 @@ \skip_horizontal:N \l__nicematrix_right_margin_dim \skip_horizontal:N \l__nicematrix_extra_right_margin_dim \hbox_set_end: + \int_compare:nNnT \g__nicematrix_nb_of_X_int > 0 + { + \bool_if:NTF \l__nicematrix_X_columns_aux_bool + { \dim_set_eq:NN \l_tmpa_dim \l__nicematrix_X_columns_dim } + { + \dim_set:Nn \l_tmpa_dim + { + ( \textwidth - \box_wd:N \l__nicematrix_the_array_box ) + / \int_use:N \g__nicematrix_nb_of_X_int + } + } + \tl_gput_right:Nx \g__nicematrix_aux_tl + { + \bool_set_true:N \l__nicematrix_X_columns_aux_bool + \dim_set:Nn \l__nicematrix_X_columns_dim { \dim_use:N \l_tmpa_dim } + } + } \int_compare:nNnT \l__nicematrix_last_row_int > { -2 } { \bool_if:NF \l__nicematrix_last_row_without_value_bool @@ -1647,10 +1667,11 @@ \__nicematrix_after_array: \egroup \iow_now:Nn \@mainaux { \ExplSyntaxOn } + \iow_now:Nn \@mainaux { \char_set_catcode_space:n { 32 } } \iow_now:Nx \@mainaux { \tl_gset:cn { c__nicematrix_ \int_use:N \g__nicematrix_env_int _ tl } - \iow_newline: { \iow_newline: \exp_not:V \g__nicematrix_aux_tl } + { \exp_not:V \g__nicematrix_aux_tl } } \iow_now:Nn \@mainaux { \ExplSyntaxOff } \bool_if:NT \c__nicematrix_footnote_bool \endsavenotes @@ -1680,6 +1701,7 @@ { ! { \skip_horizontal:N \arrayrulewidth } } } } + \int_gzero:N \g__nicematrix_nb_of_X_int \seq_clear:N \g__nicematrix_cols_vlism_seq \int_zero:N \l_tmpa_int \exp_after:wN \__nicematrix_patch_preamble:n \the \@temptokena \q_stop @@ -1740,8 +1762,8 @@ @ { \__nicematrix_patch_preamble_ii:nn #1 } | { \__nicematrix_patch_preamble_iii:n #1 } p { \__nicematrix_patch_preamble_iv:nnn t #1 } - m { \__nicematrix_patch_preamble_iv:nnn c #1 } b { \__nicematrix_patch_preamble_iv:nnn b #1 } + m { \__nicematrix_patch_preamble_iv:nnn b #1 } \__nicematrix_w: { \__nicematrix_patch_preamble_v:nnnn { } #1 } \__nicematrix_W: { \__nicematrix_patch_preamble_v:nnnn { \cs_set_eq:NN \hss \hfil } #1 } \__nicematrix_true_c: { \__nicematrix_patch_preamble_vi:n #1 } @@ -1751,6 +1773,7 @@ ) { \__nicematrix_patch_preamble_viii:nn #1 } ] { \__nicematrix_patch_preamble_viii:nn #1 } \} { \__nicematrix_patch_preamble_viii:nn #1 } + X { \__nicematrix_patch_preamble_xii: } C { \__nicematrix_error:nn { old~column~type } #1 } L { \__nicematrix_error:nn { old~column~type } #1 } R { \__nicematrix_error:nn { old~column~type } #1 } @@ -1837,20 +1860,46 @@ > { \__nicematrix_Cell: \begin { minipage } [ #1 ] { \dim_eval:n { #3 } } - \mode_leave_vertical: + \everypar + { + \vrule height \box_ht:N \@arstrutbox width \c_zero_dim + \everypar { } + } + \g__nicematrix_row_style_tl % added the 2021-07-17 \arraybackslash - \vrule height \box_ht:N \@arstrutbox depth 0 pt width 0 pt } c < { - \vrule height 0 pt depth \box_dp:N \@arstrutbox width 0 pt + \@finalstrut \@arstrutbox \end { minipage } + \str_if_eq:nnT { #2 } m \__nicematrix_center_cell_box: \__nicematrix_end_Cell: } } \int_gincr:N \c@jCol \__nicematrix_patch_preamble_x:n } +\cs_new_protected:Npn \__nicematrix_center_cell_box: + { + \tl_gput_right:Nn \g__nicematrix_post_treatment_cell_tl + { + \int_compare:nNnT + { \box_ht:N \l__nicematrix_cell_box } + > + { \box_ht:N \@arstrutbox } + { + \hbox_set:Nn \l__nicematrix_cell_box + { + \box_move_down:nn + { + ( \box_ht:N \l__nicematrix_cell_box - \box_ht:N \@arstrutbox + + \baselineskip ) / 2 + } + { \box_use:N \l__nicematrix_cell_box } + } + } + } + } \cs_new_protected:Npn \__nicematrix_patch_preamble_v:nnnn #1 #2 #3 #4 { \tl_gput_right:Nn \g__nicematrix_preamble_tl @@ -1993,6 +2042,27 @@ \tl_gput_right:Nn \g__nicematrix_preamble_tl { < { #1 } } \__nicematrix_patch_preamble_x:n } +\cs_new_protected:Npn \__nicematrix_patch_preamble_xii: + { + \int_gincr:N \g__nicematrix_nb_of_X_int + \bool_if:NTF \l__nicematrix_X_columns_aux_bool + { \exp_args:NNNV \__nicematrix_patch_preamble_iv:nnn t p \l__nicematrix_X_columns_dim } + { + \tl_gput_right:Nn \g__nicematrix_preamble_tl + { + > { + \__nicematrix_Cell: + \tl_set:Nn \l__nicematrix_cell_type_tl { c } + \tl_gput_right:Nn \g__nicematrix_post_treatment_cell_tl + { \hbox_set:Nn \l__nicematrix_cell_box { } } + } + c + < { \__nicematrix_end_Cell: } + } + \int_gincr:N \c@jCol + \__nicematrix_patch_preamble_x:n + } + } \cs_new:Npn \__nicematrix_multicolumn:nnn #1 #2 #3 { \multispan { #1 } @@ -2201,9 +2271,12 @@ { \box_wd:N \l__nicematrix_the_array_box - \arraycolsep } } \begin { minipage } [ t ] { \box_wd:N \l__nicematrix_the_array_box } - \box_use_drop:N \l__nicematrix_the_array_box - \__nicematrix_create_extra_nodes: - \seq_if_empty:NF \g__nicematrix_blocks_seq \__nicematrix_draw_blocks: + \hbox:n + { + \box_use_drop:N \l__nicematrix_the_array_box + \__nicematrix_create_extra_nodes: + \seq_if_empty:NF \g__nicematrix_blocks_seq \__nicematrix_draw_blocks: + } \bool_lazy_or:nnT { \int_compare_p:nNn \c@tabularnote > 0 } { ! \tl_if_empty_p:V \l__nicematrix_tabularnote_tl } @@ -2484,8 +2557,8 @@ } \int_gset:Nn \g_tmpa_int 1 \bool_if:NTF \g__nicematrix_last_col_found_bool - { \prg_replicate:nn { \g__nicematrix_col_total_int - 3 } } - { \prg_replicate:nn { \g__nicematrix_col_total_int - 2 } } + { \prg_replicate:nn { \int_max:nn { \g__nicematrix_col_total_int - 3 } 0 } } + { \prg_replicate:nn { \int_max:nn { \g__nicematrix_col_total_int - 2 } 0 } } { & \omit @@ -2761,7 +2834,6 @@ \int_use:N \c@jCol , \int_use:N \g__nicematrix_col_total_int } - \iow_newline: } \seq_if_empty:NF \g__nicematrix_pos_of_blocks_seq { @@ -2769,7 +2841,6 @@ { \seq_gset_from_clist:Nn \exp_not:N \g__nicematrix_pos_of_blocks_seq { \seq_use:Nnnn \g__nicematrix_pos_of_blocks_seq , , , } - \iow_newline: } } \seq_if_empty:NF \g__nicematrix_multicolumn_cells_seq @@ -2778,10 +2849,8 @@ { \seq_gset_from_clist:Nn \exp_not:N \g__nicematrix_multicolumn_cells_seq { \seq_use:Nnnn \g__nicematrix_multicolumn_cells_seq , , , } - \iow_newline: \seq_gset_from_clist:Nn \exp_not:N \g__nicematrix_multicolumn_sizes_seq { \seq_use:Nnnn \g__nicematrix_multicolumn_sizes_seq , , , } - \iow_newline: } } \__nicematrix_create_diag_nodes: @@ -2853,7 +2922,6 @@ { \tl_gset:Nn \exp_not:N \g__nicematrix_code_before_tl { \exp_not:V \g_nicematrix_code_before_tl } - \iow_newline: } \bool_set_true:N \l__nicematrix_code_before_bool } @@ -4513,9 +4581,12 @@ \dim_set_eq:NN \l_tmpb_dim \pgf@x \__nicematrix_qpoint:n { row - \__nicematrix_succ:n { #4 } } \dim_set_eq:NN \l_tmpc_dim \pgf@y - \bool_lazy_and:nnT - { \int_compare_p:nNn { #2 } > 1 } - { ! \tl_if_blank_p:V \CT@drsc@ } + \bool_lazy_all:nT + { + { \int_compare_p:nNn { #2 } > 1 } + { \cs_if_exist_p:N \CT@drsc@ } % condition added in version 5.18a + { ! \tl_if_blank_p:V \CT@drsc@ } + } { \group_begin: \CT@drsc@ @@ -4780,7 +4851,6 @@ { \seq_set_from_clist:Nn \exp_not:N \l__nicematrix_corners_cells_seq { \seq_use:Nnnn \l__nicematrix_corners_cells_seq , , , } - \iow_newline: } } } @@ -5238,9 +5308,15 @@ { \int_eval:n { \c@iRow + \l_tmpa_int - 1 } } { \int_eval:n { \c@jCol + \l_tmpb_int - 1 } } } - \bool_lazy_or:nnTF - { \int_compare_p:nNn { \l_tmpa_int } = 1 } - { \int_compare_p:nNn { \l_tmpb_int } = 1 } + \bool_if:nTF + { + ( + \int_compare_p:nNn { \l_tmpa_int } = 1 + || + \int_compare_p:nNn { \l_tmpb_int } = 1 + ) + && ! \tl_if_empty_p:n { #5 } + } { \exp_args:Nxx \__nicematrix_Block_iv:nnnnn } { \exp_args:Nxx \__nicematrix_Block_v:nnnnn } { \l_tmpa_int } { \l_tmpb_int } { #3 } { #4 } { #5 } @@ -5397,6 +5473,11 @@ } \keys_define:nn { NiceMatrix / Block / SecondPass } { + tikz .code:n = + \bool_if:NTF \c__nicematrix_tikz_loaded_bool + { \seq_put_right:Nn \l__nicematrix_tikz_seq { { #1 } } } + { \__nicematrix_error:n { tikz~key~without~tikz } } , + tikz .value_required:n = true , fill .tl_set:N = \l__nicematrix_fill_tl , fill .value_required:n = true , draw .tl_set:N = \l__nicematrix_draw_tl , @@ -5517,6 +5598,18 @@ { \dim_use:N \l__nicematrix_rounded_corners_dim } } } + \seq_if_empty:NF \l__nicematrix_tikz_seq + { + \tl_gput_right:Nx \g_nicematrix_code_before_tl + { + \__nicematrix_block_tikz:nnnnn + { #1 } + { #2 } + { \int_use:N \l__nicematrix_last_row_int } + { \int_use:N \l__nicematrix_last_col_int } + { \seq_use:Nn \l__nicematrix_tikz_seq { , } } + } + } \cs_set_protected_nopar:Npn \diagbox ##1 ##2 { \tl_gput_right:Nx \g__nicematrix_internal_code_after_tl @@ -5850,6 +5943,16 @@ rounded-corners .default:n = 4 pt , line-width .dim_set:N = \l__nicematrix_line_width_dim } +\cs_new_protected:Npn \__nicematrix_block_tikz:nnnnn #1 #2 #3 #4 #5 + { + \begin { tikzpicture } + \clist_map_inline:nn { #5 } + { + \path [ ##1 ] + ( #1 -| #2 ) rectangle ( \__nicematrix_succ:n { #3 } -| \__nicematrix_succ:n { #4 } ) ; + } + \end { tikzpicture } + } \cs_set_protected:Npn \__nicematrix_renew_matrix: { \RenewDocumentEnvironment { pmatrix } { } @@ -6770,6 +6873,12 @@ values~are:~left,~right,~top~and~bottom.\\ If~you~go~on,~this~specification~of~border~will~be~ignored. } +\__nicematrix_msg_new:nn { tikz~key~without~tikz } + { + You~can't~use~the~key~'tikz'~for~the~command~'\token_to_str:N + \Block'~because~you~have~not~loaded~Tikz.~ + If~you~go~on,~this~key~will~be~ignored. + } \__nicematrix_msg_new:nn { last-col~non~empty~for~NiceArray } { In~the~\__nicematrix_full_name_env:,~you~must~use~the~key~ @@ -6860,7 +6969,7 @@ } { The~available~keys~are~(in~alphabetic~order):~b,~borders,~c,~draw,~fill,~ - hvlines,~l,~line-width,~rounded-corners,~r~and~t. + hvlines,~l,~line-width,~rounded-corners,~r,~t~and~tikz. } \__nicematrix_msg_new:nnn { Unknown~key~for~CodeAfter } { |