From e7c2b4be636c9df8dea1790bc3eb442059d734f2 Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Sun, 17 Jul 2022 03:03:44 +0000 Subject: CTAN sync 202207170303 --- macros/latex/contrib/nicematrix/nicematrix.dtx | 838 ++++++++++++++++--------- 1 file changed, 538 insertions(+), 300 deletions(-) (limited to 'macros/latex/contrib/nicematrix/nicematrix.dtx') diff --git a/macros/latex/contrib/nicematrix/nicematrix.dtx b/macros/latex/contrib/nicematrix/nicematrix.dtx index e7db4b0a3f..70db98bb3e 100644 --- a/macros/latex/contrib/nicematrix/nicematrix.dtx +++ b/macros/latex/contrib/nicematrix/nicematrix.dtx @@ -15,8 +15,8 @@ % % \fi % \iffalse -\def\myfileversion{6.10a} -\def\myfiledate{2022/06/26} +\def\myfileversion{6.11} +\def\myfiledate{2022/07/16} % % %<*batchfile> @@ -267,13 +267,13 @@ version 2005/12/01 or later. % \medskip % \begin{BVerbatim}[baseline=c,boxwidth=9cm] % $\begin{pmatrix} -% \frac12 & -\frac12 \\ -% \frac13 & \frac14 \\ +% \frac{1}{2} & -\frac{1}{2} \\ +% \frac{1}{3} & \frac{1}{4} \\ % \end{pmatrix}$ % \end{BVerbatim} % $\begin{pmatrix} -% \frac12 & -\frac12 \\ -% \frac13 & \frac14 \\ +% \frac{1}{2} & -\frac{1}{2} \\ +% \frac{1}{3} & \frac{1}{4} \\ % \end{pmatrix}$ % % \bigskip @@ -565,7 +565,9 @@ version 2005/12/01 or later. % \item the key |color| takes in as value a color and apply that color the % content of the block but draws also the frame of the block with that color; % \item the keys |hlines|, |vlines| and |hvlines| draw all the corresponding -% rules in the block; +% rules in the block;\footnote{However, the rules are not drawn in the +% sub-blocks of the block, as always with \pkg{nicematrix}: the rules are not +% drawn in the blocks (cf. section~\ref{rules} p.~\pageref{rules}).} % \item the key |line-width| is the width of the rules (this key % is meaningful only when one of the keys |draw|, |hvlines|, |vlines| and % |hlines| is used); @@ -789,6 +791,8 @@ version 2005/12/01 or later. % % % \section{The rules} +% +% \label{rules} % % The usual techniques for the rules may be used in the environments of % \pkg{nicematrix} (excepted |\vline|). However, there is some small differences @@ -1153,9 +1157,7 @@ version 2005/12/01 or later. % \subsection{The command \textbackslash diagbox} % % The command |\diagbox| (inspired by the package \pkg{diagbox}), allows, when -% it is used in a cell, to slash that cell diagonally downwards.\footnote{The -% author of this document considers that type of construction as graphically -% poor.}. +% it is used in a cell, to slash that cell diagonally downwards. % % \medskip % \begin{BVerbatim}[baseline=c,boxwidth=10cm] @@ -1191,10 +1193,19 @@ version 2005/12/01 or later. % will be used to use that new type of rule. % % \begin{itemize} -% \item the key |command| is the name (without the backslahs) of a command that +% \item the key |command| is the name (without the backslash) of a command that % will be created by \pkg{nicematrix} and that will be available for the final % user in order to draw horizontal rules (similarly to |\hline|); % +% \item \colorbox{yellow!50}{\textbf{New 6.11}}\enskip the key |cccommand| is +% the name (without the backslash) of a command that will be created by +% \pkg{nicematrix} and that will be available for the final user to order to +% draw partial horizontal rules (similarly to |\cline|, hence the name +% |ccommand|): the argument of that command is a list of intervals of columns +% specified by the syntax~$i$ or $i$-$j$.\footnote{It's recommended to use such +% commands only once in a row because each use will create space between the +% rows corresponding to the total width of the rule.} +% % \item the key |letter| takes in as argument a letter\footnote{The following % letters are forbidden: \verb+lcrpmbVX|()[]!@<>+} that the user will use in % the preamble of an environment with preamble (such as |{NiceTabular}| in order @@ -1319,27 +1330,28 @@ version 2005/12/01 or later. % dotted rules are also used by \pkg{nicematrix} to draw continuous dotted rules % between cells of the matrix with |\Cdots|, |\Vdots|, etc. (cf. p.~\pageref{Cdots}). % -% In fact, \pkg{nicematrix} defines by default the command |\hdottedline| and the -% letter ``|:|'' for those dotted rules.\footnote{However, it's possible to -% overwrite those definitions with a |custom-line| (in order, for example, to -% switch to dashed lines).} +% In fact, \pkg{nicematrix} defines by default the commands |\hdottedline| and +% |\cdottedline |and the letter ``|:|'' for those dotted +% rules.\footnote{However, it's possible to overwrite those definitions with a +% |custom-line| (in order, for example, to switch to dashed lines).} % %\smallskip %\begin{BVerbatim} % -% \NiceMatrixOptions % ~textsl#présent dans nicematrix.sty@ +% \NiceMatrixOptions % ~textsl#present in nicematrix.sty@ % { % custom-line = % { % letter = : , % command = hdottedline , +% ccommand = cdottedline , % ~emphase#dotted@ % } % } % \end{BVerbatim} % -% Thus, it's possible to use the command |\hdottedline| to draw a horizontal -% dotted rule. +% Thus, it's possible to use the commands |\hdottedline| and |\cdottedline |to +% draw horizontal dotted rules. % % \medskip % \begin{BVerbatim}[baseline=c,boxwidth=9.5cm] @@ -1347,6 +1359,7 @@ version 2005/12/01 or later. % 1 & 2 & 3 & 4 & 5 \\ % ~emphase#\hdottedline@ % 6 & 7 & 8 & 9 & 10 \\ +% emphase#\cdottedline{1,4-5}@ % 11 & 12 & 13 & 14 & 15 % \end{pNiceMatrix} % \end{BVerbatim} @@ -1354,6 +1367,7 @@ version 2005/12/01 or later. % 1 & 2 & 3 & 4 & 5 \\ % \hdottedline % 6 & 7 & 8 & 9 & 10 \\ +% \cdottedline{1,4-5} % 11 & 12 & 13 & 14 & 15 % \end{pNiceMatrix}$ % @@ -2198,7 +2212,8 @@ version 2005/12/01 or later. % columns |X| (this point comes from a conflict in the definitions of the % specifier |X|).} % -% As with the packages \pkg{tabu} and \pkg{tabularray}, the specifier |X| takes +% As with the packages \pkg{tabu}\footnote{The extension \pkg{tabu} is now +% considered as deprecated.} and \pkg{tabularray}, the specifier |X| takes % in an optional argument (between square brackets) which is a list of keys. % \begin{itemize} % \item It's possible to give a weight for the column by providing a positive @@ -2288,7 +2303,7 @@ version 2005/12/01 or later. % \pkg{nicematrix} has, in any case, to load the whole body of the environment % (and that's why it's not possible to put verbatim material in the array with % the option |light-syntax|). The analysis of this whole body gives the number -% of rows (but not the number of columns). +% of rows and the number of columns. % % \item In the other cases, \pkg{nicematrix} compute the number of rows and % columns during the first compilation and write the result in the |aux| file @@ -2820,7 +2835,10 @@ version 2005/12/01 or later. % descriptor are displayed very efficiently by the \textsc{pdf} readers. It's % easy, starting from these dashed lines, % to create a line composed by square dots whereas a line of rounded dots needs -% a specification of each dot in the \textsc{pdf} file.} +% a specification of each dot in the \textsc{pdf} file. Nevertheless, you can +% have a look at the following page to see how to have dotted rules with rounded +% dots in Tikz:\newline \small +% \url{https://tex.stackexchange.com/questions/52848/tikz-line-with-large-dots}} % % \begin{BVerbatim}[baseline=c,boxwidth=9cm] % \tikz \draw [dotted] (0,0) -- (5,0) ; @@ -3669,13 +3687,17 @@ version 2005/12/01 or later. % supported by \pkg{nicematrix}. % % -% \subsection{Alignment option in \{NiceMatrix\}} +% \subsection{Default column type in \{NiceMatrix\}} % % \label{key-R} % -% The environments without preamble (|{NiceMatrix}|, |{pNiceMatrix}|, -% |{bNiceMatrix}|, etc.) provide two options |l| and |r| which generate all the -% columns aligned leftwards (or rightwards). +% \colorbox{yellow!50}{\textbf{New 6.11}}\enskip The environments without +% preamble (|{NiceMatrix}|, |{pNiceMatrix}|, |{bNiceMatrix}|, etc.) and the +% commande |\pAutoNiceMatrix| (and its variants) provide an option +% |columns-type| to specify the type of column which will be used (the initial +% value is, of course, |c|). +% +% The keys |l| and |r| are shortcuts for |columns-type=l| and |columns-type=r|. % % % \medskip @@ -3690,6 +3712,10 @@ version 2005/12/01 or later. % \sin x & \cos x % \end{bNiceMatrix}$ % +% \medskip +% The key |columnts-type| is available in |\NiceMatrixOptions| but with the +% prefix |matrix|, which means that its name is, within |\NiceMatrixOptions| : +% |matrix/columns-type|. % % \subsection{The command \textbackslash rotate} % @@ -3867,7 +3893,7 @@ version 2005/12/01 or later. % \[C = \pAutoNiceMatrix{3-3}{C_{\arabic{iRow},\arabic{jCol}}}\] % % -% \subsection{The option light-syntax} +% \subsection{The key light-syntax} % % \label{light-syntax} % The option |light-syntax| (inpired by the package \pkg{spalign}) allows the @@ -3907,11 +3933,11 @@ version 2005/12/01 or later. % the whole content of the environment is loaded as a TeX argument to be % analyzed. The environment doesn't behave in that case as a standard % environment of LaTeX which only put TeX commands before and after the content.} -% +% % % \subsection{Color of the delimiters} % -% For the environements with delimiters (|{pNiceArray}|, |{pNiceMatrix}|, etc.), +% For the environments with delimiters (|{pNiceArray}|, |{pNiceMatrix}|, etc.), % it's possible to change the color of the delimiters with the key % |delimiters/color|. % @@ -5617,9 +5643,9 @@ version 2005/12/01 or later. % fit=#1}}% % \[\begin{NiceArray}{*{6}{c}@{\hspace{6mm}}*{5}{c}}[nullify-dots] % \CodeBefore [create-cell-nodes] -% \SubMatrix({2-7}{6-11}) -% \SubMatrix({7-2}{11-6}) -% \SubMatrix({7-7}{11-11}) +% \SubMatrix({2-7}{6-last}) +% \SubMatrix({7-2}{last-6}) +% \SubMatrix({7-7}{last-last}) % \begin{tikzpicture} % \node [highlight = (9-2) (9-6)] { } ; % \node [highlight = (2-9) (6-9)] { } ; @@ -5654,9 +5680,9 @@ version 2005/12/01 or later. % \begin{Verbatim}[formatcom = \small\color{gray}] % \[\begin{NiceArray}{*{6}{c}~LetterAt{\hspace{6mm}}*{5}{c}}[nullify-dots] % \CodeBefore [create-cell-nodes] -% \SubMatrix({2-7}{6-11}) -% \SubMatrix({7-2}{11-6}) -% \SubMatrix({7-7}{11-11}) +% \SubMatrix({2-7}{6-last}) +% \SubMatrix({7-2}{last-6}) +% \SubMatrix({7-7}{last-last}) % \begin{tikzpicture} % \node [highlight = (9-2) (9-6)] { } ; % \node [highlight = (2-9) (6-9)] { } ; @@ -5767,9 +5793,17 @@ version 2005/12/01 or later. { \msg_new:nnn { nicematrix } { #1 } { #2 \\ #3 } } { \msg_new:nnnn { nicematrix } { #1 } { #2 } { #3 } } } - +% \end{macrocode} +% +% We try to detect whether the compilation is done on Overleaf. We use +% |\c_sys_jobname_str| because, with Overleaf, the value of |\c_sys_jobname_str| +% is always ``|output|''. +% \begin{macrocode} +\str_if_eq:VnT \c_sys_jobname_str { output } + { \bool_set_true:N \c_@@_messages_for_Overleaf_bool } % \end{macrocode} % +% \bigskip % \begin{macrocode} \cs_new_protected:Npn \@@_msg_redirect_name:nn { \msg_redirect_name:nnn { nicematrix } } @@ -5784,7 +5818,7 @@ version 2005/12/01 or later. % \end{macrocode} % % \begin{macrocode} -\cs_generate_variant:Nn \seq_gset_split:Nnn { N V n } +\cs_generate_variant:Nn \seq_set_split:Nnn { N V n } \cs_generate_variant:Nn \keys_define:nn { n x } % \end{macrocode} % @@ -5973,7 +6007,7 @@ version 2005/12/01 or later. % Idem for |\CT@drs@|. % \begin{macrocode} \cs_set:Npn \doublerulesepcolor #1 # { \CT@drs { #1 } } - \cs_set:Npn\CT@drs #1 #2 + \cs_set:Npn \CT@drs #1 #2 { \dim_compare:nNnT \baselineskip = \c_zero_dim \noalign { \cs_gset:Npn \CT@drsc@ { \color #1 { #2 } } } @@ -6086,24 +6120,51 @@ version 2005/12/01 or later. % % \bigskip % \begin{macrocode} -\cs_new_protected:Npn \@@_set_CT@arc@: - { \peek_meaning:NTF [ \@@_set_CT@arc@_i: \@@_set_CT@arc@_ii: } -\cs_new_protected:Npn \@@_set_CT@arc@_i: [ #1 ] #2 \q_stop - { \cs_set:Npn \CT@arc@ { \color [ #1 ] { #2 } } } -\cs_new_protected:Npn \@@_set_CT@arc@_ii: #1 \q_stop - { \cs_set:Npn \CT@arc@ { \color { #1 } } } +\cs_new_protected:Npn \@@_set_CT@arc@:n #1 + { + \tl_if_blank:nF { #1 } + { + \tl_if_head_eq_meaning:nNTF { #1 } [ + { \cs_set:Npn \CT@arc@ { \color #1 } } + { \cs_set:Npn \CT@arc@ { \color { #1 } } } + } + } +\cs_generate_variant:Nn \@@_set_CT@arc@:n { V } % \end{macrocode} % % \bigskip % \begin{macrocode} -\cs_new_protected:Npn \@@_set_CT@drsc@: - { \peek_meaning:NTF [ \@@_set_CT@drsc@_i: \@@_set_CT@drsc@_ii: } -\cs_new_protected:Npn \@@_set_CT@drsc@_i: [ #1 ] #2 \q_stop - { \cs_set:Npn \CT@drsc@ { \color [ #1 ] { #2 } } } -\cs_new_protected:Npn \@@_set_CT@drsc@_ii: #1 \q_stop - { \cs_set:Npn \CT@drsc@ { \color { #1 } } } +\cs_new_protected:Npn \@@_set_CT@drsc@:n #1 + { + \tl_if_head_eq_meaning:nNTF { #1 } [ + { \cs_set:Npn \CT@drsc@ { \color #1 } } + { \cs_set:Npn \CT@drsc@ { \color { #1 } } } + } +\cs_generate_variant:Nn \@@_set_CT@drsc@:n { V } % \end{macrocode} % +% \bigskip +% The following command must \emph{not} be protected since it will be used to +% write instructions in the (internal) |\CodeBefore|. +% \begin{macrocode} +\cs_new:Npn \@@_exp_color_arg:Nn #1 #2 + { + \tl_if_head_eq_meaning:nNTF { #2 } [ + { #1 #2 } + { #1 { #2 } } + } +\cs_generate_variant:Nn \@@_exp_color_arg:Nn { N V } +% \end{macrocode} +% +% The following command must be protected because of its use of the command |\color|. +% \begin{macrocode} +\cs_new_protected:Npn \@@_color:n #1 + { + \tl_if_blank:nF { #1 } + { \@@_exp_color_arg:Nn \color { #1 } } + } +\cs_generate_variant:Nn \@@_color:n { V } +% \end{macrocode} % % \bigskip % \begin{macrocode} @@ -6266,7 +6327,7 @@ version 2005/12/01 or later. % \end{macrocode} % % \bigskip -% Idem pour the mono-row blocks. +% Idem for the mono-row blocks. % \begin{macrocode} \dim_new:N \g_@@_blocks_ht_dim \dim_new:N \g_@@_blocks_dp_dim @@ -6304,9 +6365,9 @@ version 2005/12/01 or later. % % \bigskip % If the user uses |{NiceArray}| or |{NiceTabular}| the flag -% |\l_@@_NiceArray_bool| will be raised. +% |\g_@@_NiceArray_bool| will be raised. % \begin{macrocode} -\bool_new:N \l_@@_NiceArray_bool +\bool_new:N \g_@@_NiceArray_bool % \end{macrocode} % In fact, if there is delimiters in the preamble of |{NiceArray}| (eg: % |[cccc]|), this boolean will be set to false. @@ -6362,7 +6423,20 @@ version 2005/12/01 or later. \tl_new:N \g_@@_aux_tl % \end{macrocode} % -% +% \bigskip +% The following parameter corresponds to the key |columns-type| of the +% environments |{NiceMatrix}|, |{pNiceMatrix}|, etc. and also the key +% |matrix / columns-type| of |\NiceMatrixOptions|. However, it does \emph{not} +% contain the value provided by the final user. Indeed, a transformation is done +% in order to have a preamble (for the package \pkg{array}) which is +% nicematrix-aware. That transformation is done with the command +% |\@@_set_preamble:Nn|. +% \begin{macrocode} +\tl_new:N \l_@@_columns_type_tl +\hook_gput_code:nnn { begindocument } { . } + { \@@_set_preamble:Nn \l_@@_columns_type_tl { c } } +% \end{macrocode} +% % \bigskip % \begin{macrocode} \cs_new_protected:Npn \@@_test_if_math_mode: @@ -6513,6 +6587,7 @@ version 2005/12/01 or later. % \begin{macrocode} \bool_new:N \g_@@_row_of_col_done_bool % \end{macrocode} +% % % \bigskip % It's possible to use the command |\NotEmpty| to specify explicitely that a @@ -6707,7 +6782,8 @@ 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| +% and also the key |color| of the command |\RowStyle|. % \begin{macrocode} \tl_new:N \l_@@_color_tl % \end{macrocode} @@ -7034,15 +7110,10 @@ version 2005/12/01 or later. % |\g_@@_tabularnotes_seq| will be cleared at the end of the environment of % \pkg{nicematrix} (and not at the beginning). % -% Unfortunately, if the package \pkg{caption} is loaded, the command |\caption| -% evaluates its argument twice and since it is not aware (of course) of -% |\tabularnote|, the command |\tabularnote| is, in fact, not usable in -% |\caption| when \pkg{caption} is loaded.\footnote{We should try to find a -% solution to that problem.} % \begin{macrocode} \NewDocumentCommand \tabularnote { m } { - \bool_if:nTF { ! \l_@@_NiceArray_bool && \l_@@_in_env_bool } + \bool_if:nTF { ! \g_@@_NiceArray_bool && \l_@@_in_env_bool } { \@@_error:n { tabularnote~forbidden } } { % \end{macrocode} @@ -7502,7 +7573,8 @@ version 2005/12/01 or later. color .tl_set:N = \l_@@_rules_color_tl , color .value_required:n = true , width .dim_set:N = \arrayrulewidth , - width .value_required:n = true + width .value_required:n = true , + unknown .code:n = \@@_error:n { Unknown~key~for~rules } } % \end{macrocode} % @@ -7820,9 +7892,11 @@ version 2005/12/01 or later. allow-duplicate-names .value_forbidden:n = true , notes .code:n = \keys_set:nn { NiceMatrix / notes } { #1 } , notes .value_required:n = true , - sub-matrix .code:n = - \keys_set:nn { NiceMatrix / sub-matrix } { #1 } , + sub-matrix .code:n = \keys_set:nn { NiceMatrix / sub-matrix } { #1 } , sub-matrix .value_required:n = true , + matrix / columns-type .code:n = + \@@_set_preamble:Nn \l_@@_columns_type_tl { #1 }, + matrix / columns-type .value_required:n = true , unknown .code:n = \@@_error:n { Unknown~key~for~NiceMatrixOptions } } % \end{macrocode} @@ -7852,8 +7926,10 @@ version 2005/12/01 or later. \int_set:Nn \l_@@_last_col_int { -1 } } { \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 , + columns-type .code:n = \@@_set_preamble:Nn \l_@@_columns_type_tl { #1 } , + columns-type .value_required:n = true , + l .meta:n = { columns-type = l } , + r .meta:n = { columns-type = r } , small .bool_set:N = \l_@@_small_bool , small .value_forbidden:n = true , unknown .code:n = \@@_error:n { Unknown~key~for~NiceMatrix } @@ -8329,7 +8405,7 @@ version 2005/12/01 or later. % % % \begin{macrocode} -\cs_new_protected:Npn \@@_array: +\cs_new_protected:Npn \@@_array:n { \bool_if:NTF \l_@@_NiceTabular_bool { \dim_set_eq:NN \col@sep \tabcolsep } @@ -8350,6 +8426,7 @@ version 2005/12/01 or later. % \begin{macrocode} [ \str_if_eq:VnTF \l_@@_baseline_tl c c t ] } +\cs_generate_variant:Nn \@@_array:n { V } % \end{macrocode} % % \medskip @@ -8768,7 +8845,7 @@ version 2005/12/01 or later. % \end{macrocode} % % \bigskip -% If there is a exterior row, we patch a command used in |\@@_cell_begin:w| in order to +% If there is an exterior row, we patch a command used in |\@@_cell_begin:w| in order to % keep track of some dimensions needed to the construction of that ``last row''. % \begin{macrocode} \int_compare:nNnT \l_@@_last_row_int > { -2 } @@ -8834,21 +8911,14 @@ version 2005/12/01 or later. % \end{macrocode} % % -% \bigskip -% The preamble will be constructed in |\g_@@_preamble_tl|. -% \begin{macrocode} - \@@_construct_preamble: -% \end{macrocode} -% Now, the preamble is constructed in |\g_@@_preamble_tl| -% % \medskip -% We compute the width of both delimiters. We remember that, when the +% We compute the width of both delimiters. We remind that, when the % environment |{NiceArray}| is used, it's possible to specify the delimiters in % the preamble (eg |[ccc]|). % \begin{macrocode} \dim_zero_new:N \l_@@_left_delim_dim \dim_zero_new:N \l_@@_right_delim_dim - \bool_if:NTF \l_@@_NiceArray_bool + \bool_if:NTF \g_@@_NiceArray_bool { \dim_gset:Nn \l_@@_left_delim_dim { 2 \arraycolsep } \dim_gset:Nn \l_@@_right_delim_dim { 2 \arraycolsep } @@ -9306,7 +9376,7 @@ version 2005/12/01 or later. % of |{NiceArray}| (|{pNiceArray}|, |{bNiceArray}|, etc.) because, for % |{NiceArray}|, we have the options |t|, |c|, |b| and |baseline|. % \begin{macrocode} - \bool_if:NTF \l_@@_NiceArray_bool + \bool_if:NTF \g_@@_NiceArray_bool { \keys_set:nn { NiceMatrix / NiceArray } } { \keys_set:nn { NiceMatrix / pNiceArray } } { #3 , #5 } @@ -9314,8 +9384,7 @@ version 2005/12/01 or later. % % \bigskip % \begin{macrocode} - \tl_if_empty:NF \l_@@_rules_color_tl - { \exp_after:wN \@@_set_CT@arc@: \l_@@_rules_color_tl \q_stop } + \@@_set_CT@arc@:V \l_@@_rules_color_tl % \end{macrocode} % % \bigskip @@ -9331,8 +9400,9 @@ version 2005/12/01 or later. } % \end{macrocode} % +% Now, the second part of the environment |{NiceArrayWithDelims}|. % \begin{macrocode} - { + { \bool_if:NTF \l_@@_light_syntax_bool { \use:c { end @@-light-syntax } } { \use:c { end @@-normal-syntax } } @@ -9357,7 +9427,7 @@ version 2005/12/01 or later. % 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). In fact, % |l_@@_X_columns_dim| will be the width of a column of weight $1$. For a -% |X|-column of weight~$n$, the width will be |l_@@_X_columns_dim| multiplied +% |X|-column of weight~$n$, the width will be |\l_@@_X_columns_dim| multiplied % by~$n$. % \begin{macrocode} \int_compare:nNnT \g_@@_total_X_weight_int > 0 @@ -9443,13 +9513,13 @@ version 2005/12/01 or later. } % \end{macrocode} % -% The construction of the real box is different when |\l_@@_NiceArray_bool| is +% The construction of the real box is different when |\g_@@_NiceArray_bool| is % true (|{NiceArray}| or |{NiceTabular}|) and in the other environments because, % in |{NiceArray}| or |{NiceTabular}|, we have no delimiter to put (but we have % tabular notes to put). We begin with this case. % % \begin{macrocode} - \bool_if:NTF \l_@@_NiceArray_bool + \bool_if:NTF \g_@@_NiceArray_bool { \str_case:VnF \l_@@_baseline_tl { @@ -9492,15 +9562,13 @@ version 2005/12/01 or later. \hbox_set:Nn \l_tmpa_box { \c_math_toggle_token - \tl_if_empty:NF \l_@@_delimiters_color_tl - { \color { \l_@@_delimiters_color_tl } } + \@@_color:V \l_@@_delimiters_color_tl \exp_after:wN \left \g_@@_left_delim_tl \vcenter { % \end{macrocode} % We take into account the ``first row'' (we have previously computed its total -% height in |\l_tmpa_dim|). The |\hbox:n| (or |\hbox|) is necessary here. There -% was a bug in the following line (corrected the 2021/11/23). +% height in |\l_tmpa_dim|). The |\hbox:n| (or |\hbox|) is necessary here. % \begin{macrocode} \skip_vertical:n { -\l_tmpa_dim - \arrayrulewidth } \hbox @@ -9515,8 +9583,7 @@ version 2005/12/01 or later. } % \end{macrocode} % We take into account the ``last row'' (we have previously computed its total -% height in |\l_tmpb_dim|). There was a bug in the following line (corrected the -% 2021/11/23). +% height in |\l_tmpb_dim|). % \begin{macrocode} \skip_vertical:n { -\l_tmpb_dim + \arrayrulewidth } } @@ -9525,8 +9592,7 @@ version 2005/12/01 or later. % Otherwise, with XeLaTeX (and not with the other engines), the closing % delimiter is not colored. % \begin{macrocode} - \tl_if_empty:NF \l_@@_delimiters_color_tl - { \color { \l_@@_delimiters_color_tl } } + \@@_color:V \l_@@_delimiters_color_tl \exp_after:wN \right \g_@@_right_delim_tl \c_math_toggle_token } @@ -9558,12 +9624,14 @@ version 2005/12/01 or later. \bool_if:NF \l_@@_Matrix_bool { \int_compare:nNnT \c@jCol < \g_@@_static_num_of_col_int - { \@@_error:n { columns~not~used } } + { + \@@_error:n { columns~not~used } + \group_begin: + \globaldefs = 1 + \@@_msg_redirect_name:nn { columns~not~used } { none } + \group_end: + } } - \group_begin: - \globaldefs = 1 - \@@_msg_redirect_name:nn { columns~not~used } { error } - \group_end: \@@_after_array: % \end{macrocode} % The aim of the following |\egroup| (the corresponding |\bgroup| is, of course, @@ -9597,14 +9665,19 @@ version 2005/12/01 or later. % \vspace{1cm} % \subsection*{We construct the preamble of the array} % -% The transformation of the preamble is an operation in several steps. +% \bigskip +% The transformation of the preamble is an operation in several +% steps.\footnote{Be careful: the transformation of the preamble may also have +% by-side effects, for example, the boolean |\g_@@_NiceArray_bool| will be set +% to |false| if we detect in the preamble a delimiter at the beginning or at the +% end.} % % \bigskip % The preamble given by the final user is in |\g_@@_preamble_tl| and the modified % version will be stored in |\g_@@_preamble_tl| also. % % \begin{macrocode} -\cs_new_protected:Npn \@@_construct_preamble: +\cs_new_protected:Npn \@@_transform_preamble: { % \end{macrocode} % First, we will do an ``expansion'' of the preamble with the tools of the @@ -9633,31 +9706,31 @@ version 2005/12/01 or later. % the end). % \begin{macrocode} \bool_if:NF \l_@@_Matrix_bool - { - \@@_newcolumntype w [ 2 ] { \@@_w: { ##1 } { ##2 } } - \@@_newcolumntype W [ 2 ] { \@@_W: { ##1 } { ##2 } } + { + \@@_newcolumntype w [ 2 ] { \@@_w: { ##1 } { ##2 } } + \@@_newcolumntype W [ 2 ] { \@@_W: { ##1 } { ##2 } } % \end{macrocode} % % \bigskip % If the package \pkg{varwidth} has defined the column type |V|, we protect from % expansion by redefining it to |\@@_V:| (which will be catched by our system). % \begin{macrocode} - \cs_if_exist:NT \NC@find@V { \@@_newcolumntype V { \@@_V: } } + \cs_if_exist:NT \NC@find@V { \@@_newcolumntype V { \@@_V: } } % \end{macrocode} % % First, we have to store our preamble in the token register |\@temptokena| % (those ``token registers'' are \emph{not} supported by the L3 programming layer). % \begin{macrocode} - \exp_args:NV \@temptokena \g_@@_preamble_tl + \exp_args:NV \@temptokena \g_@@_preamble_tl % \end{macrocode} % Initialisation of a flag used by \pkg{array} to detect the end of the expansion. % \begin{macrocode} - \@tempswatrue + \@tempswatrue % \end{macrocode} % The following line actually does the expansion (it's has been copied from % |array.sty|). The expanded version is still in |\@temptokena|. % \begin{macrocode} - \@whilesw \if@tempswa \fi { \@tempswafalse \the \NC@list } + \@whilesw \if@tempswa \fi { \@tempswafalse \the \NC@list } % \end{macrocode} % % @@ -9670,24 +9743,24 @@ version 2005/12/01 or later. % |\@@_patch_preamble:n|. In the same time, we will count the columns with the % counter |\c@jCol|. % \begin{macrocode} - \int_gzero:N \c@jCol - \tl_gclear:N \g_@@_preamble_tl + \int_gzero:N \c@jCol + \tl_gclear:N \g_@@_preamble_tl % \end{macrocode} % |\g_tmpb_bool| will be raised if you have a \verb+|+ at the end of the preamble. % \begin{macrocode} - \bool_gset_false:N \g_tmpb_bool - \tl_if_eq:NnTF \l_@@_vlines_clist { all } - { - \tl_gset:Nn \g_@@_preamble_tl - { ! { \skip_horizontal:N \arrayrulewidth } } - } - { - \clist_if_in:NnT \l_@@_vlines_clist 1 - { - \tl_gset:Nn \g_@@_preamble_tl - { ! { \skip_horizontal:N \arrayrulewidth } } - } - } + \bool_gset_false:N \g_tmpb_bool + \tl_if_eq:NnTF \l_@@_vlines_clist { all } + { + \tl_gset:Nn \g_@@_preamble_tl + { ! { \skip_horizontal:N \arrayrulewidth } } + } + { + \clist_if_in:NnT \l_@@_vlines_clist 1 + { + \tl_gset:Nn \g_@@_preamble_tl + { ! { \skip_horizontal:N \arrayrulewidth } } + } + } % \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 @@ -9732,9 +9805,9 @@ version 2005/12/01 or later. % environment |{NiceArray}| is transformed into an environment |{xNiceMatrix}|. % \begin{macrocode} \bool_lazy_or:nnT - { ! \str_if_eq_p:Vn \g_@@_left_delim_tl { . } } - { ! \str_if_eq_p:Vn \g_@@_right_delim_tl { . } } - { \bool_set_false:N \l_@@_NiceArray_bool } + { ! \str_if_eq_p:Vn \g_@@_left_delim_tl { . } } + { ! \str_if_eq_p:Vn \g_@@_right_delim_tl { . } } + { \bool_gset_false:N \g_@@_NiceArray_bool } % \end{macrocode} % % \medskip @@ -9751,7 +9824,7 @@ version 2005/12/01 or later. { \bool_lazy_all:nT { - \l_@@_NiceArray_bool + \g_@@_NiceArray_bool { \bool_not_p:n \l_@@_NiceTabular_bool } { \tl_if_empty_p:N \l_@@_vlines_clist } { \bool_not_p:n \l_@@_exterior_arraycolsep_bool } @@ -9763,7 +9836,7 @@ version 2005/12/01 or later. { \bool_lazy_all:nT { - \l_@@_NiceArray_bool + \g_@@_NiceArray_bool { \bool_not_p:n \l_@@_NiceTabular_bool } { \tl_if_empty_p:N \l_@@_vlines_clist } { \bool_not_p:n \l_@@_exterior_arraycolsep_bool } @@ -10273,7 +10346,7 @@ version 2005/12/01 or later. { % \end{macrocode} % We test whether the version of \pkg{nicematrix} is at least 3.0. We will -% change de programmation of the test further with something like |\@ifpackagelater|. +% change the programmation of the test further with something like |\@ifpackagelater|. % % \begin{macrocode} \cs_if_exist:NTF \siunitx_cell_begin:w @@ -10552,6 +10625,18 @@ version 2005/12/01 or later. } % \end{macrocode} % +% \bigskip +% \begin{macrocode} +\cs_new_protected:Npn \@@_set_preamble:Nn #1 #2 + { + \@temptokena { #2 } + \@tempswatrue + \@whilesw \if@tempswa \fi { \@tempswafalse \the \NC@list } + \tl_gclear:N \g_@@_preamble_tl + \exp_after:wN \@@_patch_m_preamble:n \the \@temptokena \q_stop + \tl_set_eq:NN #1 \g_@@_preamble_tl + } +% \end{macrocode} % % \bigskip % \subsection*{The redefinition of \textbackslash multicolumn} @@ -10771,29 +10856,13 @@ version 2005/12/01 or later. % % % After a specifier of column, we have to test whether there is one or several -% |<{..}| because, after those potential |<{...}|, we have to insert -% |!{\skip_horizontal:N ...}| when the key |vlines| is used. +% |<{..}|. % \begin{macrocode} \cs_new_protected:Npn \@@_patch_m_preamble_x:n #1 { \str_if_eq:nnTF { #1 } { < } \@@_patch_m_preamble_ix:n - { - \tl_if_eq:NnTF \l_@@_vlines_clist { all } - { - \tl_gput_right:Nn \g_@@_preamble_tl - { ! { \skip_horizontal:N \arrayrulewidth } } - } - { - \exp_args:NNx - \clist_if_in:NnT \l_@@_vlines_clist { \int_eval:n { \c@jCol + 1 } } - { - \tl_gput_right:Nn \g_@@_preamble_tl - { ! { \skip_horizontal:N \arrayrulewidth } } - } - } - \@@_patch_m_preamble:n { #1 } - } + { \@@_patch_m_preamble:n { #1 } } } % \end{macrocode} % @@ -10896,7 +10965,7 @@ version 2005/12/01 or later. % that's why we can't put |@{}| at the end of the preamble. That's why we remove % a |\arraycolsep| now. % \begin{macrocode} - \bool_lazy_and:nnT \l_@@_Matrix_bool \l_@@_NiceArray_bool + \bool_lazy_and:nnT \l_@@_Matrix_bool \g_@@_NiceArray_bool { \box_set_wd:Nn \l_@@_the_array_box { \box_wd:N \l_@@_the_array_box - \arraycolsep } @@ -11146,11 +11215,14 @@ version 2005/12/01 or later. { \peek_meaning:NTF \end \@@_analyze_end:Nn + { + \@@_transform_preamble: % \end{macrocode} -% Here is the call to |\array| (we have a dedicated macro |\@@_array:| because +% Here is the call to |\array| (we have a dedicated macro |\@@_array:n| because % of compatibility with the classes \cls{revtex4-1} and \cls{revtex4-2}). % \begin{macrocode} - { \exp_args:NV \@@_array: \g_@@_preamble_tl } + \@@_array:V \g_@@_preamble_tl + } } } { @@ -11162,7 +11234,7 @@ version 2005/12/01 or later. % % \bigskip % 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}). +% whole body as an argument (with the specifier |b|). % % \label{code-light-syntax} % \begin{macrocode} \NewDocumentEnvironment { @@-light-syntax } { b } @@ -11189,75 +11261,127 @@ version 2005/12/01 or later. % be set to \textsl{no-op} before the execution of % |\g_nicematrix_code_after_tl|. % \begin{macrocode} - \@@_light_syntax_i #1 \CodeAfter \q_stop + \@@_light_syntax_i:w #1 \CodeAfter \q_stop +% \end{macrocode} +% The command |\array| is hidden somewhere in |\@@_light_syntax_i:w|. +% \begin{macrocode} } % \end{macrocode} -% Now, the second part of the environment. It is empty. That's not surprising -% because we have caught the whole body of the environment with the specifier -% |b| provided by \pkg{xparse}. +% Now, the second part of the environment. We must leave these lines in the +% second part (and not put them in the first part even though we caught the +% whole body of the environment with an argument of type |b|) in order to have +% the columns |S| of \pkg{siunitx} working fine. % \begin{macrocode} - { } + { + \@@_create_col_nodes: + \endarray + } % \end{macrocode} % % % \begin{macrocode} -\cs_new_protected:Npn \@@_light_syntax_i #1\CodeAfter #2\q_stop +\cs_new_protected:Npn \@@_light_syntax_i:w #1\CodeAfter #2\q_stop { \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). % \begin{macrocode} - \seq_gclear_new:N \g_@@_rows_seq + \seq_clear_new:N \l_@@_rows_seq +% \end{macrocode} +% We rescan the character of end of line in order to have the correct catcode. +% \begin{macrocode} \tl_set_rescan:Nno \l_@@_end_of_row_tl { } \l_@@_end_of_row_tl - \seq_gset_split:NVn \g_@@_rows_seq \l_@@_end_of_row_tl { #1 } + \seq_set_split:NVn \l_@@_rows_seq \l_@@_end_of_row_tl { #1 } +% \end{macrocode} +% We delete the last row if it is empty. +% \begin{macrocode} + \seq_pop_right:NN \l_@@_rows_seq \l_tmpa_tl + \tl_if_empty:NF \l_tmpa_tl + { \seq_put_right:NV \l_@@_rows_seq \l_tmpa_tl } % \end{macrocode} % If the environment uses the option |last-row| without value (i.e. without -% saying the number of the rows), we have now the opportunity to know that +% saying the number of the rows), we have now the opportunity to compute that % value. We do it, and so, if the token list |\l_@@_code_for_last_row_tl| is not % empty, we will use directly where it should be. % \begin{macrocode} \int_compare:nNnT \l_@@_last_row_int = { -1 } - { \int_set:Nn \l_@@_last_row_int { \seq_count:N \g_@@_rows_seq } } + { \int_set:Nn \l_@@_last_row_int { \seq_count:N \l_@@_rows_seq } } % \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}). +% +% +% \bigskip +% The new value of the body (that is to say after replacement of the separators +% of rows and columns by |\\| and |&|) of the environment will be stored in +% |\l_@@_new_body_tl| (that part of the implementation has been changed in the +% version 6.11 of \pkg{nicematrix} in order to allow the use of commands such as +% |\hline| or |\hdottedline| with the key |light-syntax|). % \begin{macrocode} - \exp_args:NV \@@_array: \g_@@_preamble_tl + \tl_clear_new:N \l_@@_new_body_tl + \int_zero_new:N \l_@@_nb_cols_int % \end{macrocode} -% We need a global affectation because, when executing |\l_tmpa_tl|, we will -% exit the first cell of the array. +% First, we treat the first row. % \begin{macrocode} - \seq_gpop_left:NN \g_@@_rows_seq \l_tmpa_tl - \@@_line_with_light_syntax_i:V \l_tmpa_tl - \seq_map_function:NN \g_@@_rows_seq \@@_line_with_light_syntax:n - \@@_create_col_nodes: - \endarray - } + \seq_pop_left:NN \l_@@_rows_seq \l_tmpa_tl + \@@_line_with_light_syntax:V \l_tmpa_tl % \end{macrocode} -% +% Now, the other rows (with the same treatment, excepted that we have to insert +% |\\| between the rows). % \begin{macrocode} -\cs_new_protected:Npn \@@_line_with_light_syntax:n #1 - { \tl_if_empty:nF { #1 } { \\ \@@_line_with_light_syntax_i:n { #1 } } } + \seq_map_inline:Nn \l_@@_rows_seq + { + \tl_put_right:Nn \l_@@_new_body_tl { \\ } + \@@_line_with_light_syntax:n { ##1 } + } % \end{macrocode} % % \begin{macrocode} -\cs_new_protected:Npn \@@_line_with_light_syntax_i:n #1 + \int_compare:nNnT \l_@@_last_col_int = { -1 } + { + \int_set:Nn \l_@@_last_col_int + { \l_@@_nb_cols_int - 1 + \l_@@_first_col_int } + } +% \end{macrocode} +% +% Now, we can construct the preamble: if the user has used the key |last-col|, +% we have the correct number of columns even though the user has used |last-col| +% without value. +% \begin{macrocode} + \@@_transform_preamble: +% \end{macrocode} +% +% The call to |\array| is in the following command (we have a dedicated macro +% |\@@_array:n| because of compatibility with the classes \cls{revtex4-1} and +% \cls{revtex4-2}). +% \begin{macrocode} + \@@_array:V \g_@@_preamble_tl \l_@@_new_body_tl + } +% \end{macrocode} +% +% \begin{macrocode} +\cs_new_protected:Npn \@@_line_with_light_syntax:n #1 { - \seq_gclear_new:N \g_@@_cells_seq - \seq_gset_split:Nnn \g_@@_cells_seq { ~ } { #1 } - \seq_gpop_left:NN \g_@@_cells_seq \l_tmpa_tl - \l_tmpa_tl - \seq_map_inline:Nn \g_@@_cells_seq { & ##1 } + \seq_clear_new:N \l_@@_cells_seq + \seq_set_split:Nnn \l_@@_cells_seq { ~ } { #1 } + \int_set:Nn \l_@@_nb_cols_int + { + \int_max:nn + \l_@@_nb_cols_int + { \seq_count:N \l_@@_cells_seq } + } + \seq_pop_left:NN \l_@@_cells_seq \l_tmpa_tl + \tl_put_right:NV \l_@@_new_body_tl \l_tmpa_tl + \seq_map_inline:Nn \l_@@_cells_seq + { \tl_put_right:Nn \l_@@_new_body_tl { & ##1 } } } -\cs_generate_variant:Nn \@@_line_with_light_syntax_i:n { V } +\cs_generate_variant:Nn \@@_line_with_light_syntax:n { V } % \end{macrocode} % % % \bigskip % The following command is used by the code which detects whether the % environment is empty (we raise a fatal error in this case: it's only a -% security). +% security). When this command is used, |#1| is, in fact, always |\end|. % \begin{macrocode} \cs_new_protected:Npn \@@_analyze_end:Nn #1 #2 { @@ -11444,7 +11568,7 @@ version 2005/12/01 or later. \int_gincr:N \g_tmpa_int \bool_lazy_all:nT { - \l_@@_NiceArray_bool + \g_@@_NiceArray_bool { \bool_not_p:n \l_@@_NiceTabular_bool } { \clist_if_empty_p:N \l_@@_vlines_clist } { \bool_not_p:n \l_@@_exterior_arraycolsep_bool } @@ -11462,13 +11586,13 @@ version 2005/12/01 or later. % that's why we can't put |@{}| at the end of the preamble. That's why we remove % a |\arraycolsep| now. % \begin{macrocode} - \bool_lazy_and:nnT \l_@@_Matrix_bool \l_@@_NiceArray_bool + \bool_lazy_and:nnT \l_@@_Matrix_bool \g_@@_NiceArray_bool { \skip_horizontal:N -\arraycolsep } \pgfsys@markposition { \@@_env: - col - \int_eval:n { \g_tmpa_int + 1 } } \skip_horizontal:N 0.5\arrayrulewidth - \bool_lazy_and:nnT \l_@@_Matrix_bool \l_@@_NiceArray_bool + \bool_lazy_and:nnT \l_@@_Matrix_bool \g_@@_NiceArray_bool { \skip_horizontal:N \arraycolsep } } } @@ -11476,7 +11600,7 @@ version 2005/12/01 or later. \pgfrememberpicturepositiononpagetrue \pgfcoordinate { \@@_env: - col - \int_eval:n { \g_tmpa_int + 1 } } { - \bool_lazy_and:nnTF \l_@@_Matrix_bool \l_@@_NiceArray_bool + \bool_lazy_and:nnTF \l_@@_Matrix_bool \g_@@_NiceArray_bool { \pgfpoint { - 0.5 \arrayrulewidth - \arraycolsep } @@ -11683,19 +11807,19 @@ version 2005/12/01 or later. % % \interitem % The environment |{NiceArray}| is constructed upon the environment -% |{NiceArrayWithDelims}| but, in fact, there is a flag |\l_@@_NiceArray_bool|. +% |{NiceArrayWithDelims}| but, in fact, there is a flag |\g_@@_NiceArray_bool|. % In |{NiceArrayWithDelims}|, some special code will be executed if this flag is % raised. % \begin{macrocode} \NewDocumentEnvironment { NiceArray } { } { - \bool_set_true:N \l_@@_NiceArray_bool + \bool_gset_true:N \g_@@_NiceArray_bool \str_if_empty:NT \g_@@_name_env_str { \str_gset:Nn \g_@@_name_env_str { NiceArray } } % \end{macrocode} % We put . and . for the delimiters but, in fact, that doesn't matter because % these arguments won't be used in |{NiceArrayWithDelims}| (because the flag -% |\l_@@_NiceArray_bool| is raised). +% |\g_@@_NiceArray_bool| is raised). % \begin{macrocode} \NiceArrayWithDelims . . } @@ -11711,6 +11835,7 @@ version 2005/12/01 or later. { \NewDocumentEnvironment { #1 NiceArray } { } { + \bool_gset_false:N \g_@@_NiceArray_bool \str_if_empty:NT \g_@@_name_env_str { \str_gset:Nn \g_@@_name_env_str { #1 NiceArray } } \@@_test_if_math_mode: @@ -11732,7 +11857,7 @@ version 2005/12/01 or later. % \bigskip % \subsection*{The environment \{NiceMatrix\} and its variants} % -% +% % \begin{macrocode} \cs_new_protected:Npn \@@_begin_of_NiceMatrix:nn #1 #2 { @@ -11745,27 +11870,43 @@ version 2005/12/01 or later. \c@MaxMatrixCols { \int_eval:n { \l_@@_last_col_int - 1 } } } - { > \@@_cell_begin:w #2 < \@@_cell_end: } + { #2 } } } -\cs_generate_variant:Nn \@@_begin_of_NiceMatrix:nn { n e } % \end{macrocode} % % \begin{macrocode} -\clist_map_inline:nn { { } , p , b , B , v , V } +\cs_generate_variant:Nn \@@_begin_of_NiceMatrix:nn { n V } +% \end{macrocode} +% +% \begin{macrocode} +\clist_map_inline:nn { p , b , B , v , V } { \NewDocumentEnvironment { #1 NiceMatrix } { ! O { } } { + \bool_gset_false:N \g_@@_NiceArray_bool \str_gset:Nn \g_@@_name_env_str { #1 NiceMatrix } - \tl_set:Nn \l_@@_type_of_col_tl c \keys_set:nn { NiceMatrix / NiceMatrix } { ##1 } - \@@_begin_of_NiceMatrix:ne { #1 } \l_@@_type_of_col_tl + \@@_begin_of_NiceMatrix:nV { #1 } \l_@@_columns_type_tl } { \use:c { end #1 NiceArray } } } % \end{macrocode} % % \bigskip +% We define also an environment |{NiceMatrix}| +% \begin{macrocode} +\NewDocumentEnvironment { NiceMatrix } { ! O { } } + { + \bool_gset_false:N \g_@@_NiceArray_bool + \str_gset:Nn \g_@@_name_env_str { NiceMatrix } + \keys_set:nn { NiceMatrix / NiceMatrix } { #1 } + \@@_begin_of_NiceMatrix:nV { } \l_@@_columns_type_tl + } + { \endNiceArray } +% \end{macrocode} +% +% \bigskip % The following command will be linked to |\NotEmpty| in the environments of % \pkg{nicematrix}. % \begin{macrocode} @@ -12569,7 +12710,7 @@ version 2005/12/01 or later. % \medskip % |#1| and |#2| are the numbers of row and columns of the cell where the command % of dotted line (ex.: |\Vdots|) has been issued. |#3|, |#4|, |#5| and |#6| are -% the specification (in $i$ and $j$) of the submatrix where are analysing. +% the specification (in $i$ and $j$) of the submatrix we are analyzing. % \begin{macrocode} \cs_set_protected:Npn \@@_adjust_to_submatrix:nnnnnn #1 #2 #3 #4 #5 #6 { @@ -14002,17 +14143,17 @@ version 2005/12/01 or later. cell-space-top-limit = #1 , cell-space-bottom-limit = #1 , } , - color .tl_set:N = \l_tmpa_tl , + color .tl_set:N = \l_@@_color_tl , color .value_required:n = true , bold .bool_set:N = \l_tmpa_bool , bold .default:n = true , bold .initial:n = false , nb-rows .code:n = \str_if_eq:nnTF { #1 } { * } - { \int_set_eq:NN \l_@@_key_nb_rows_int 500 } + { \int_set:Nn \l_@@_key_nb_rows_int { 500 } } { \int_set:Nn \l_@@_key_nb_rows_int { #1 } } , nb-rows .value_required:n = true , - rowcolor .tl_set:N = \l_@@_tmpc_tl , + rowcolor .tl_set:N = \l_tmpa_tl , rowcolor .value_required:n = true , rowcolor .initial:n = , unknown .code:n = \@@_error:n { Unknown~key~for~RowStyle } @@ -14023,22 +14164,25 @@ version 2005/12/01 or later. % \begin{macrocode} \NewDocumentCommand \@@_RowStyle:n { O { } m } { - \tl_clear:N \l_tmpa_tl + \group_begin: + \tl_clear:N \l_@@_color_tl \int_set:Nn \l_@@_key_nb_rows_int 1 \keys_set:nn { NiceMatrix / RowStyle } { #1 } % \end{macrocode} % If the key |rowcolor| has been used. % \begin{macrocode} - \tl_if_empty:NF \l_@@_tmpc_tl - { + \tl_if_empty:NF \l_tmpa_tl + { % \end{macrocode} % First, the end of the current row (we remind that |\RowStyle| applies to the -% \emph{end} of the current row). +% \emph{end} of the current row). % \begin{macrocode} \tl_gput_right:Nx \g_nicematrix_code_before_tl { - \@@_rectanglecolor - { \l_@@_tmpc_tl } +% \end{macrocode} +% The command |\@@_exp_color_arg:NV| is \emph{fully expandable}. +% \begin{macrocode} + \@@_exp_color_arg:NV \@@_rectanglecolor \l_tmpa_tl { \int_use:N \c@iRow - \int_use:N \c@jCol } { \int_use:N \c@iRow - * } } @@ -14049,8 +14193,7 @@ version 2005/12/01 or later. { \tl_gput_right:Nx \g_nicematrix_code_before_tl { - \@@_rowcolor - { \l_@@_tmpc_tl } + \@@_exp_color_arg:NV \@@_rowcolor \l_tmpa_tl { \int_eval:n { \c@iRow + 1 } - \int_eval:n { \c@iRow + \l_@@_key_nb_rows_int - 1 } @@ -14091,12 +14234,15 @@ version 2005/12/01 or later. } } % \end{macrocode} -% |\l_tmpa_tl| is the value of the key |color| of |\RowStyle|. +% |\l_@@_color_tl| is the value of the key |color| of |\RowStyle|. % \begin{macrocode} - \tl_if_empty:NF \l_tmpa_tl + \tl_if_empty:NF \l_@@_color_tl { \tl_gput_right:Nx \g_@@_row_style_tl - { \mode_leave_vertical: \exp_not:N \color { \l_tmpa_tl } } + { + \mode_leave_vertical: + \@@_color:n { \l_@@_color_tl } + } } % \end{macrocode} % |\l_tmpa_bool| is the value of the key |bold|. @@ -14115,6 +14261,7 @@ version 2005/12/01 or later. } } \tl_gput_right:Nn \g_@@_row_style_tl { \fi } + \group_end: \g_@@_row_style_tl \ignorespaces } @@ -14792,7 +14939,12 @@ version 2005/12/01 or later. position .value_required:n = true , start .int_set:N = \l_@@_start_int , start .initial:n = 1 , - end .int_set:N = \l_@@_end_int , + end .code:n = + \bool_lazy_or:nnTF + { \tl_if_empty_p:n { #1 } } + { \str_if_eq_p:nn { #1 } { last } } + { \int_set_eq:NN \l_@@_end_int \c@jCol } + { \int_set:Nn \l_@@_end_int { #1 } } } % \end{macrocode} % @@ -14812,9 +14964,9 @@ version 2005/12/01 or later. dotted .bool_set:N = \l_@@_dotted_bool , dotted .initial:n = false , dotted .default:n = true , - color .code:n = \@@_set_CT@arc@: #1 \q_stop , + color .code:n = \@@_set_CT@arc@:n { #1 } , color .value_required:n = true , - sep-color .code:n = \@@_set_CT@drsc@: #1 \q_stop , + sep-color .code:n = \@@_set_CT@drsc@:n { #1 } , sep-color .value_required:n = true , % \end{macrocode} % If the user uses the key |tikz|, the rule (or more precisely: the different @@ -15073,11 +15225,11 @@ version 2005/12/01 or later. { \int_step_inline:nnn { - \bool_if:nTF { \l_@@_NiceArray_bool && ! \l_@@_except_borders_bool } + \bool_if:nTF { \g_@@_NiceArray_bool && ! \l_@@_except_borders_bool } 1 2 } { - \bool_if:nTF { \l_@@_NiceArray_bool && ! \l_@@_except_borders_bool } + \bool_if:nTF { \g_@@_NiceArray_bool && ! \l_@@_except_borders_bool } { \int_eval:n { \c@jCol + 1 } } \c@jCol } @@ -15330,7 +15482,7 @@ version 2005/12/01 or later. \int_compare:nNnT \l_@@_local_start_int = 1 { \dim_sub:Nn \l_@@_x_initial_dim \l_@@_left_margin_dim - \bool_if:NT \l_@@_NiceArray_bool + \bool_if:NT \g_@@_NiceArray_bool { \dim_sub:Nn \l_@@_x_initial_dim \arraycolsep } % \end{macrocode} % For reasons purely aesthetic, we do an adjustment in the case of a rounded @@ -15345,7 +15497,7 @@ version 2005/12/01 or later. \int_compare:nNnT \l_@@_local_end_int = \c@jCol { \dim_add:Nn \l_@@_x_final_dim \l_@@_right_margin_dim - \bool_if:NT \l_@@_NiceArray_bool + \bool_if:NT \g_@@_NiceArray_bool { \dim_add:Nn \l_@@_x_final_dim \arraycolsep } \tl_if_eq:NnF \g_@@_right_delim_tl ) { \dim_gsub:Nn \l_@@_x_final_dim { 0.5 \l_@@_xdots_inter_dim } } @@ -15389,11 +15541,11 @@ version 2005/12/01 or later. { \int_step_inline:nnn { - \bool_if:nTF { \l_@@_NiceArray_bool && ! \l_@@_except_borders_bool } + \bool_if:nTF { \g_@@_NiceArray_bool && ! \l_@@_except_borders_bool } 1 2 } { - \bool_if:nTF { \l_@@_NiceArray_bool && ! \l_@@_except_borders_bool } + \bool_if:nTF { \g_@@_NiceArray_bool && ! \l_@@_except_borders_bool } { \int_eval:n { \c@iRow + 1 } } \c@iRow } @@ -15480,6 +15632,7 @@ version 2005/12/01 or later. \cs_new_protected:Npn \@@_custom_line:n #1 { \str_clear_new:N \l_@@_command_str + \str_clear_new:N \l_@@_ccommand_str \str_clear_new:N \l_@@_letter_str \keys_set_known:nnN { NiceMatrix / custom-line } { #1 } \l_@@_other_keys_tl % \end{macrocode} @@ -15490,25 +15643,28 @@ version 2005/12/01 or later. % course, a definition of custom lines with no letter and no command would be point-less. % % \begin{macrocode} - \bool_lazy_and:nnTF - { \str_if_empty_p:N \l_@@_letter_str } - { \str_if_empty_p:N \l_@@_command_str } + \bool_lazy_all:nTF + { + { \str_if_empty_p:N \l_@@_letter_str } + { \str_if_empty_p:N \l_@@_command_str } + { \str_if_empty_p:N \l_@@_ccommand_str } + } { \@@_error:n { No~letter~and~no~command } } { \exp_args:NV \@@_custom_line_i:n \l_@@_other_keys_tl } } % \end{macrocode} % % -% % \begin{macrocode} \keys_define:nn { NiceMatrix / custom-line } { % here, we will use change in the future to use .str_set:N letter .code:n = \str_set:Nn \l_@@_letter_str { #1 } , letter .value_required:n = true , - % here, we will use change in the future to use .str_set:N command .code:n = \str_set:Nn \l_@@_command_str { #1 } , command .value_required:n = true , + ccommand .code:n = \str_set:Nn \l_@@_ccommand_str { #1 } , + ccommand .value_required:n = true , } % \end{macrocode} % @@ -15566,6 +15722,7 @@ version 2005/12/01 or later. } } \str_if_empty:NF \l_@@_command_str { \@@_h_custom_line:n { #1 } } + \str_if_empty:NF \l_@@_ccommand_str { \@@_c_custom_line:n { #1 } } } % \end{macrocode} % @@ -15632,8 +15789,9 @@ version 2005/12/01 or later. % % \bigskip % The following command will create the command that the final user will use in -% its array to draw an horizontal rule (hence the `|h|` in the name). |#1| is the -% whole set of keys to pass to |\@@_line:n|. +% its array to draw an horizontal rule (hence the `|h|` in the name) with the +% full width of the array. |#1| is the whole set of keys to pass to the command +% |\@@_hline:n| (which is in the internal |\CodeAfter|). % \begin{macrocode} \cs_new_protected:Npn \@@_h_custom_line:n #1 { @@ -15662,6 +15820,59 @@ version 2005/12/01 or later. } \cs_generate_variant:Nn \@@_h_custom_line:nn { n V } % \end{macrocode} +% +% \bigskip +% \bigskip +% The following command will create the command that the final user will use in +% its array to draw an horizontal rule on only some of the columns of the array +% (hence the letter |c| as in |\cline|). |#1| is the whole set of keys to pass +% to the command |\@@_hline:n| (which is in the internal |\CodeAfter|). +% +% \begin{macrocode} +\cs_new_protected:Npn \@@_c_custom_line:n #1 + { +% \end{macrocode} +% Here, we need an expandable command since it begins with an |\noalign|. +% \begin{macrocode} + \exp_args:Nc \NewExpandableDocumentCommand + { nicematrix - \l_@@_ccommand_str } + { O { } m } + { + \noalign + { + \@@_compute_rule_width:n { #1 , ##1 } + \skip_vertical:n { \l_@@_rule_width_dim } + \clist_map_inline:nn + { ##2 } + { \@@_c_custom_line_i:nn { #1 , ##1 } { ####1 } } + } + } + \seq_put_left:NV \l_@@_custom_line_commands_seq \l_@@_ccommand_str + } +% \end{macrocode} +% The first argument is the list of key-value pairs characteristic of the line. +% The second argument is the specification of columns for the |\cline| with the +% syntax $a$-$b$. +% \begin{macrocode} +\cs_new_protected:Npn \@@_c_custom_line_i:nn #1 #2 + { + \str_if_in:nnTF { #2 } { - } + { \@@_cut_on_hyphen:w #2 \q_stop } + { \@@_cut_on_hyphen:w #2 - #2 \q_stop } + \tl_gput_right:Nx \g_@@_internal_code_after_tl + { + \@@_hline:n + { + #1 , + start = \l_tmpa_tl , + end = \l_tmpb_tl , + position = \int_eval:n { \c@iRow + 1 } , + total-width = \dim_use:N \l_@@_rule_width_dim + } + } + } +\cs_generate_variant:Nn \@@_c_custom_line:nn { n V } +% \end{macrocode} % % \begin{macrocode} \cs_new_protected:Npn \@@_compute_rule_width:n #1 @@ -15711,7 +15922,8 @@ version 2005/12/01 or later. % \end{macrocode} % % \begin{macrocode} -\@@_custom_line:n { letter = : , command = hdottedline , dotted } +\@@_custom_line:n + { letter = : , command = hdottedline , ccommand = cdottedline, dotted } % \end{macrocode} % % \subsubsection*{The key hvlines} @@ -16585,7 +16797,7 @@ version 2005/12/01 or later. % \begin{macrocode} \tl_if_empty:NTF \l_@@_color_tl { \int_compare:nNnT { #2 } = 1 \set@color } - { \color { \l_@@_color_tl } } + { \@@_color:V \l_@@_color_tl } % \end{macrocode} % If the block is mono-row, we use |\g_@@_row_style_tl| even if it has yet been % used in the beginning of the cell where the command |\Block| has been issued @@ -16806,7 +17018,9 @@ version 2005/12/01 or later. draw .default:n = default , rounded-corners .dim_set:N = \l_@@_rounded_corners_dim , rounded-corners .default:n = 4 pt , - color .code:n = \color { #1 } \tl_set:Nn \l_@@_draw_tl { #1 } , + color .code:n = + \@@_color:n { #1 } + \tl_set:Nn \l_@@_draw_tl { #1 } , color .value_required:n = true , borders .clist_set:N = \l_@@_borders_clist , borders .value_required:n = true , @@ -16996,17 +17210,12 @@ version 2005/12/01 or later. % \begin{macrocode} \tl_if_empty:NF \l_@@_fill_tl { -% \end{macrocode} -% The command |\@@_extract_brackets| will extract the potential specification of -% color space at the beginning of |\l_@@_fill_tl| and store it in |\l_tmpa_tl| -% and store the color itself in |\l_tmpb_tl|. -% \begin{macrocode} - \exp_last_unbraced:NV \@@_extract_brackets \l_@@_fill_tl \q_stop \tl_gput_right:Nx \g_nicematrix_code_before_tl { \exp_not:N \roundedrectanglecolor - [ \l_tmpa_tl ] - { \exp_not:V \l_tmpb_tl } + \exp_args:NV \tl_if_head_eq_meaning:nNTF \l_@@_fill_tl [ + { \l_@@_fill_tl } + { { \l_@@_fill_tl } } { #1 - #2 } { \int_use:N \l_@@_last_row_int - \int_use:N \l_@@_last_col_int } { \dim_use:N \l_@@_rounded_corners_dim } @@ -17332,16 +17541,6 @@ version 2005/12/01 or later. } % \end{macrocode} % -% \bigskip -% \begin{macrocode} -\NewDocumentCommand \@@_extract_brackets { O { } } - { - \tl_set:Nn \l_tmpa_tl { #1 } - \@@_store_in_tmpb_tl - } -\cs_new_protected:Npn \@@_store_in_tmpb_tl #1 \q_stop - { \tl_set:Nn \l_tmpb_tl { #1 } } -% \end{macrocode} % % % \bigskip % The first argument of |\@@_stroke_block:nnn| is a list of options for the @@ -17366,7 +17565,7 @@ version 2005/12/01 or later. % \begin{macrocode} \str_if_eq:VnTF \l_@@_draw_tl { default } { \CT@arc@ } - { \exp_args:NV \pgfsetstrokecolor \l_@@_draw_tl } + { \@@_color:V \l_@@_draw_tl } } \pgfsetcornersarced { @@ -17670,14 +17869,16 @@ version 2005/12/01 or later. % % % \bigskip -% We will extract the potential keys |l|, |r| and |c| and pass the other keys to -% the environment |{NiceArrayWithDelims}|. +% We will extract the potential keys |columns-type|, |l|, |c|, |r| and pass +% the other keys to the environment |{NiceArrayWithDelims}|. % \begin{macrocode} \keys_define:nn { NiceMatrix / Auto } { - l .code:n = \tl_set:Nn \l_@@_type_of_col_tl l , - r .code:n = \tl_set:Nn \l_@@_type_of_col_tl r , - c .code:n = \tl_set:Nn \l_@@_type_of_col_tl c + columns-type .code:n = \@@_set_preamble:Nn \l_@@_columns_type_tl { #1 } , + columns-type .value_required:n = true , + l .meta:n = { columns-type = l } , + r .meta:n = { columns-type = r } , + c .meta:n = { columns-type = c } } % \end{macrocode} % @@ -17688,15 +17889,25 @@ version 2005/12/01 or later. \int_zero_new:N \l_@@_nb_cols_int \@@_set_size:n #4 \q_stop % \end{macrocode} -% The group is for the protection of |\l_@@_type_of_col_tl|. +% The group is for the protection of the keys. % \begin{macrocode} \group_begin: - \tl_set:Nn \l_@@_type_of_col_tl c + \bool_set_true:N \l_@@_Matrix_bool \keys_set_known:nnN { NiceMatrix / Auto } { #3, #5, #7 } \l_tmpa_tl +% \end{macrocode} +% We nullify the command |\@@_transform_preamble:| because we will provide a +% preamble which is yet transformed (by using |\l_@@_columns_type_tl| which is +% yet nicematrix-ready). +% +% \begin{macrocode} + \cs_set_eq:NN \@@_transform_preamble: \prg_do_nothing: \use:x { \exp_not:N \begin { NiceArrayWithDelims } { #1 } { #2 } - { * { \int_use:N \l_@@_nb_cols_int } { \l_@@_type_of_col_tl } } + { + * { \int_use:N \l_@@_nb_cols_int } + { \exp_not:V \l_@@_columns_type_tl } + } [ \exp_not:V \l_tmpa_tl ] } \int_compare:nNnT \l_@@_first_row_int = 0 @@ -17733,6 +17944,7 @@ version 2005/12/01 or later. { \cs_set_protected:cpn { #1 AutoNiceMatrix } { + \bool_gset_false:N \g_@@_NiceArray_bool \str_gset:Nx \g_@@_name_env_str { #1 AutoNiceMatrix } \AutoNiceMatrixWithDelims { #2 } { #3 } } @@ -17753,7 +17965,7 @@ version 2005/12/01 or later. \NewDocumentCommand \AutoNiceMatrix { O { } m O { } m ! O { } } { \group_begin: - \bool_set_true:N \l_@@_NiceArray_bool + \bool_gset_true:N \g_@@_NiceArray_bool \AutoNiceMatrixWithDelims . . { #2 } { #4 } [ #1 , #3 , #5 ] \group_end: } @@ -18051,8 +18263,7 @@ version 2005/12/01 or later. % \begin{macrocode} \nullfont \c_math_toggle_token - \tl_if_empty:NF \l_@@_delimiters_color_tl - { \color { \l_@@_delimiters_color_tl } } + \@@_color:V \l_@@_delimiters_color_tl \bool_if:nTF { #3 } { \left #1 } { \left . } \vcenter { @@ -18150,20 +18361,36 @@ version 2005/12/01 or later. \NewDocumentCommand \@@_SubMatrix_in_code_before { m m m m ! O { } } { \peek_remove_spaces:n - { - \@@_cut_on_hyphen:w #3 \q_stop - \tl_clear_new:N \l_@@_tmpc_tl - \tl_clear_new:N \l_@@_tmpd_tl - \tl_set_eq:NN \l_@@_tmpc_tl \l_tmpa_tl - \tl_set_eq:NN \l_@@_tmpd_tl \l_tmpb_tl - \@@_cut_on_hyphen:w #2 \q_stop - \seq_gput_right:Nx \g_@@_submatrix_seq - { { \l_tmpa_tl } { \l_tmpb_tl } { \l_@@_tmpc_tl } { \l_@@_tmpd_tl } } + { \tl_gput_right:Nn \g_@@_internal_code_after_tl { \SubMatrix { #1 } { #2 } { #3 } { #4 } [ #5 ] } + \@@_SubMatrix_in_code_before_i { #2 } { #3 } } } % \end{macrocode} +% +% \begin{macrocode} +\NewDocumentCommand \@@_SubMatrix_in_code_before_i + { > { \SplitArgument { 1 } { - } } m > { \SplitArgument { 1 } { - } } m } + { \@@_SubMatrix_in_code_before_i:nnnn #1 #2 } +% \end{macrocode} +% +% \begin{macrocode} +\cs_new_protected:Npn \@@_SubMatrix_in_code_before_i:nnnn #1 #2 #3 #4 + { + \seq_gput_right:Nx \g_@@_submatrix_seq + { +% \end{macrocode} +% We use |\str_if_eq:nnTF| because it is fully expandable. +% \begin{macrocode} + { \str_if_eq:nnTF { #1 } { last } { \int_use:N \c@iRow } { #1 } } + { \str_if_eq:nnTF { #2 } { last } { \int_use:N \c@jCol } { #2 } } + { \str_if_eq:nnTF { #3 } { last } { \int_use:N \c@iRow } { #3 } } + { \str_if_eq:nnTF { #4 } { last } { \int_use:N \c@jCol } { #4 } } + } + } +% \end{macrocode} +% % % \bigskip % In the internal |code-after| and in the |\CodeAfter| the following command @@ -18189,7 +18416,7 @@ version 2005/12/01 or later. \peek_remove_spaces:n { \@@_sub_matrix:nnnnnnn - { #1 } { #2 } { #3 } { #4 } { #5 } { #6 } { #7 } + { #1 } { #2 } { #3 } { #4 } { #5 } { #6 } { #7 } } } } @@ -18200,26 +18427,26 @@ version 2005/12/01 or later. % |\l_@@_last_i_tl| and |\l_@@_last_j_tl| from the arguments of the command as % provided by the user (for example |2-3| and |5-last|). % \begin{macrocode} -\cs_new_protected:Npn \@@_compute_i_j:nn #1 #2 +\NewDocumentCommand \@@_compute_i_j:nn + { > { \SplitArgument { 1 } { - } } m > { \SplitArgument { 1 } { - } } m } + { \@@_compute_i_j:nnnn #1 #2 } +% \end{macrocode} +% +% \begin{macrocode} +\cs_new_protected:Npn \@@_compute_i_j:nnnn #1 #2 #3 #4 { - \tl_clear_new:N \l_@@_first_i_tl - \tl_clear_new:N \l_@@_first_j_tl - \tl_clear_new:N \l_@@_last_i_tl - \tl_clear_new:N \l_@@_last_j_tl - \@@_cut_on_hyphen:w #1 \q_stop - \tl_if_eq:NnTF \l_tmpa_tl { last } + \tl_set:Nn \l_@@_first_i_tl { #1 } + \tl_set:Nn \l_@@_first_j_tl { #2 } + \tl_set:Nn \l_@@_last_i_tl { #3 } + \tl_set:Nn \l_@@_last_j_tl { #4 } + \tl_if_eq:NnT \l_@@_first_i_tl { last } { \tl_set:NV \l_@@_first_i_tl \c@iRow } - { \tl_set_eq:NN \l_@@_first_i_tl \l_tmpa_tl } - \tl_if_eq:NnTF \l_tmpb_tl { last } + \tl_if_eq:NnT \l_@@_first_j_tl { last } { \tl_set:NV \l_@@_first_j_tl \c@jCol } - { \tl_set_eq:NN \l_@@_first_j_tl \l_tmpb_tl } - \@@_cut_on_hyphen:w #2 \q_stop - \tl_if_eq:NnTF \l_tmpa_tl { last } + \tl_if_eq:NnT \l_@@_last_i_tl { last } { \tl_set:NV \l_@@_last_i_tl \c@iRow } - { \tl_set_eq:NN \l_@@_last_i_tl \l_tmpa_tl } - \tl_if_eq:NnTF \l_tmpb_tl { last } + \tl_if_eq:NnT \l_@@_last_j_tl { last } { \tl_set:NV \l_@@_last_j_tl \c@jCol } - { \tl_set_eq:NN \l_@@_last_j_tl \l_tmpb_tl } } % \end{macrocode} % @@ -18321,8 +18548,7 @@ version 2005/12/01 or later. % \begin{macrocode} \group_begin: \pgfsetlinewidth { 1.1 \arrayrulewidth } - \tl_if_empty:NF \l_@@_rules_color_tl - { \exp_after:wN \@@_set_CT@arc@: \l_@@_rules_color_tl \q_stop } + \@@_set_CT@arc@:V \l_@@_rules_color_tl \CT@arc@ % \end{macrocode} % Now, we draw the potential vertical rules specified in the preamble of the @@ -18596,8 +18822,7 @@ version 2005/12/01 or later. { \nullfont \c_math_toggle_token - \tl_if_empty:NF \l_@@_delimiters_color_tl - { \color { \l_@@_delimiters_color_tl } } + \@@_color:V \l_@@_delimiters_color_tl \left #1 \vcenter { @@ -18628,8 +18853,7 @@ version 2005/12/01 or later. { \nullfont \c_math_toggle_token - \tl_if_empty:NF \l_@@_delimiters_color_tl - { \color { \l_@@_delimiters_color_tl } } + \@@_color:V \l_@@_delimiters_color_tl \left . \vcenter { @@ -18923,12 +19147,6 @@ version 2005/12/01 or later. % Of course, the command |\NiceMatrix| must be defined before such an % instruction is executed. % -% \medskip -% The boolean |\c_@@_messages_for_Overleaf_bool| corresponds to the key -% |messages-for-Overleaf|. -% \begin{macrocode} -\bool_new:N \c_@@_messages_for_Overleaf_bool -% \end{macrocode} % % \medskip % The boolean |\g_@@_footnotehyper_bool| will indicate if the option @@ -19137,7 +19355,7 @@ version 2005/12/01 or later. you~try~to~use~more~columns~than~allowed~by~your~ \@@_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.~ + 'MaxMatrixCols'.~Its~current~value~is~\int_use:N \c@MaxMatrixCols.~ This~error~is~fatal. } % \end{macrocode} @@ -19176,7 +19394,8 @@ version 2005/12/01 or later. 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.\\ - The~columns~you~did~not~used~won't~be~created. + The~columns~you~did~not~used~won't~be~created.\\ + We~won't~have~similar~error~till~the~end~of~the~document. } % \end{macrocode} % @@ -19242,7 +19461,16 @@ version 2005/12/01 or later. is~'standard'.~That~key~will~be~ignored. } % \end{macrocode} -% +% +% \begin{macrocode} +\@@_msg_new:nn { Unknown~key~for~rules } + { + Unknown~key.\\ + There~is~only~two~keys~available~here:~width~and~color.\\ + You~key~'\l_keys_key_str'~will~be~ignored. + } +% \end{macrocode} +% % \begin{macrocode} \@@_msg_new:nnn { Unknown~key~for~custom-line } { @@ -19404,8 +19632,8 @@ version 2005/12/01 or later. { Erroneous~use.\\ Your~use~of~'custom-line'~is~no-op~since~you~don't~have~used~the~ - key~'letter'~(for~a~letter~for~vertical~rules)~nor~the~key~'command'~ - (to~draw~horizontal~rules).\\ + key~'letter'~(for~a~letter~for~vertical~rules)~nor~the~keys~'command'~or~ + ~'ccommand'~(to~draw~horizontal~rules).\\ However,~you~can~go~on. } % \end{macrocode} @@ -19723,7 +19951,8 @@ version 2005/12/01 or later. { siunitx~too~old.\\ You~can't~use~'S'~columns~because~your~version~of~'siunitx'~ - is~too~old.~You~need~at~least~v~3.0.\\ + is~too~old.~You~need~at~least~v~3.0~and~your~log~file~says:~"siunitx,~ + \use:c { ver @ siunitx.sty }". \\ This~error~is~fatal. } % \end{macrocode} @@ -19865,6 +20094,7 @@ version 2005/12/01 or later. last-row,~ left-margin,~ light-syntax,~ + matrix/columns-type,~ notes~(several~subkeys),~ nullify-dots,~ renew-dots,~ @@ -19965,6 +20195,7 @@ version 2005/12/01 or later. code-for-last-col,~ code-for-last-row,~ colortbl-like,~ + columns-type,~ columns-width,~ corners,~ create-extra-nodes,~ @@ -20669,6 +20900,13 @@ version 2005/12/01 or later. % It's possible to use |\line| in the |\CodeAfter| between two blocks (and not % only two cells). % +% \subsection*{Changes between version 6.10 and 6.11} +% +% New key |matrix/columns-type| to spcecify the type of columns of the matrices. +% +% New key |ccommand| in |custom-line| and new command |\cdotteline|. +% +% \subsection*{Changes between version 6.11 and 6.12} % % \PrintIndex % -- cgit v1.2.3