summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/nicematrix/nicematrix-code.dtx
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/nicematrix/nicematrix-code.dtx')
-rw-r--r--macros/latex/contrib/nicematrix/nicematrix-code.dtx1093
1 files changed, 587 insertions, 506 deletions
diff --git a/macros/latex/contrib/nicematrix/nicematrix-code.dtx b/macros/latex/contrib/nicematrix/nicematrix-code.dtx
index 9a4e6cc863..8246cffbd8 100644
--- a/macros/latex/contrib/nicematrix/nicematrix-code.dtx
+++ b/macros/latex/contrib/nicematrix/nicematrix-code.dtx
@@ -17,11 +17,11 @@
%
% \fi
% \iffalse
-\def\myfileversion{6.23}
-\def\myfiledate{2023/09/02}
+\def\myfileversion{6.24}
+\def\myfiledate{2023/09/28}
%
%
-%<*batchfile>
+%<*batchfile>
\begingroup
\input l3docstrip.tex
\keepsilent
@@ -708,40 +708,6 @@ version 2005/12/01 or later.
% \end{macrocode}
%
% \bigskip
-% \textbf{The column S of siunitx}\par\nobreak
-%
-% The command |\@@_renew_NC@rewrite@S:| will be used in each environment of
-% \pkg{nicematrix} in order to ``rewrite'' the |S| column in each environment.
-% \begin{macrocode}
-\hook_gput_code:nnn { begindocument } { . }
- {
- \IfPackageLoadedTF { siunitx }
- {
- \cs_new_protected:Npn \@@_renew_NC@rewrite@S:
- {
- \renewcommand*{\NC@rewrite@S}[1][]
- {
-% \end{macrocode}
-% |\@temptokena| is a toks (not supported by the L3 programming layer).
-% \begin{macrocode}
- \tl_if_empty:nTF { ##1 }
- {
- \@temptokena \exp_after:wN
- { \tex_the:D \@temptokena \@@_S: }
- }
- {
- \@temptokena \exp_after:wN
- { \tex_the:D \@temptokena \@@_S: [ ##1 ] }
- }
- \NC@find
- }
- }
- }
- { \cs_set_eq:NN \@@_renew_NC@rewrite@S: \prg_do_nothing: }
- }
-% \end{macrocode}
-%
-% \bigskip
% \begin{macrocode}
\cs_new_protected:Npn \@@_rescan_for_spanish:N #1
{
@@ -965,6 +931,13 @@ version 2005/12/01 or later.
% \begin{macrocode}
\dim_new:N \l_@@_rule_width_dim
% \end{macrocode}
+%
+% \bigskip
+% The key |color| in a command of rule such as |\Hline| (or the specifier
+% ``\verb+|+'' in the preamble of an environment).
+% \begin{macrocode}
+\tl_new:N \l_@@_rule_color_tl
+% \end{macrocode}
%
% \bigskip
% The following boolean will be raised when the command |\rotate| is used.
@@ -1017,21 +990,32 @@ version 2005/12/01 or later.
% \begin{macrocode}
\tl_new:N \g_@@_left_delim_tl
\tl_new:N \g_@@_right_delim_tl
+% \end{macrocode}
+%
+% \bigskip
+% The token list |\g_@@_user_preamble_tl| will contain the preamble provided by
+% the the final user of \pkg{nicematrix} (eg the preamble of an environment
+% |{NiceTabular}|).
+% \begin{macrocode}
+\tl_new:N \g_@@_user_preamble_tl
+% \end{macrocode}
+% The token list |\g_@@_array_preamble_tl| will contain the preamble constructed
+% by \pkg{nicematrix} for the environment |{array}| (of \pkg{array}).
+% \begin{macrocode}
+\tl_new:N \g_@@_array_preamble_tl
+% \end{macrocode}
+% For |\multicolumn|.
+% \begin{macrocode}
\tl_new:N \g_@@_preamble_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|.
+% |matrix / columns-type| of |\NiceMatrixOptions|.
% \begin{macrocode}
\tl_new:N \l_@@_columns_type_tl
-\hook_gput_code:nnn { begindocument } { . }
- { \@@_set_preamble:Nn \l_@@_columns_type_tl { c } }
+\tl_set:Nn \l_@@_columns_type_tl { c }
% \end{macrocode}
%
% \bigskip
@@ -1432,6 +1416,15 @@ version 2005/12/01 or later.
% \begin{macrocode}
\tl_new:N \l_@@_color_tl
% \end{macrocode}
+%
+% \medskip
+% In the key |tikz| of a command |\Block| or in the argument of a command
+% |\TikzEveryCell|, the final user puts a list of tikz keys. But, you have added
+% another key, named |offset| (which means that an offset will be used for the
+% frame of the block or the cell). The following parameter corresponds to that key.
+% \begin{macrocode}
+\dim_new:N \l_@@_offset_dim
+% \end{macrocode}
%
% \medskip
% Here is the dimension for the width of the rule when a block (created by
@@ -2363,8 +2356,7 @@ version 2005/12/01 or later.
\bool_new:N \l_@@_delimiters_max_width_bool
% \end{macrocode}
%
-% \bigskip
-% \begin{macrocode}
+%
% \bigskip
% \begin{macrocode}
\keys_define:nn { NiceMatrix / xdots }
@@ -2663,6 +2655,7 @@ version 2005/12/01 or later.
SubMatrix / rules .inherit:n = NiceMatrix / rules ,
CodeAfter / xdots .inherit:n = NiceMatrix / xdots ,
CodeBefore / sub-matrix .inherit:n = NiceMatrix / sub-matrix ,
+ CodeAfter / sub-matrix .inherit:n = NiceMatrix / sub-matrix ,
NiceMatrix .inherit:n =
{
NiceMatrix / Global ,
@@ -2759,8 +2752,7 @@ version 2005/12/01 or later.
notes .value_required:n = true ,
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 .tl_set:N = \l_@@_columns_type_tl ,
matrix / columns-type .value_required:n = true ,
caption-above .bool_set:N = \l_@@_caption_above_bool ,
caption-above .default:n = true ,
@@ -2794,7 +2786,7 @@ version 2005/12/01 or later.
\int_set:Nn \l_@@_last_col_int { -1 }
}
{ \int_set:Nn \l_@@_last_col_int { #1 } } ,
- columns-type .code:n = \@@_set_preamble:Nn \l_@@_columns_type_tl { #1 } ,
+ columns-type .tl_set:N = \l_@@_columns_type_tl ,
columns-type .value_required:n = true ,
l .meta:n = { columns-type = l } ,
r .meta:n = { columns-type = r } ,
@@ -2892,6 +2884,31 @@ version 2005/12/01 or later.
}
% \end{macrocode}
%
+%
+% \bigskip
+% The |\CodeAfter| (inserted with the key |code-after| or after the keyword
+% |\CodeAfter|) may always begin with a list of pairs \textsl{key=value} between
+% square brackets. Here is the corresponding set of keys.
+%
+% We \emph{must} put the following instructions \emph{after} the :
+%
+% \begin{verbatim}
+% CodeAfter / sub-matrix .inherit:n = NiceMatrix / sub-matrix
+% \end{verbatim}
+%
+% \begin{macrocode}
+\keys_define:nn { NiceMatrix / CodeAfter }
+ {
+ delimiters / color .tl_set:N = \l_@@_delimiters_color_tl ,
+ delimiters / color .value_required:n = true ,
+ rules .code:n = \keys_set:nn { NiceMatrix / rules } { #1 } ,
+ rules .value_required:n = true ,
+ xdots .code:n = \keys_set:nn { NiceMatrix / xdots } { #1 } ,
+ sub-matrix .code:n = \keys_set:nn { NiceMatrix / sub-matrix } { #1 } ,
+ sub-matrix .value_required:n = true ,
+ unknown .code:n = \@@_error:n { Unknown~key~for~CodeAfter }
+ }
+% \end{macrocode}
%
% \bigskip
% \section{Important code used by \{NiceArrayWithDelims\} }
@@ -3459,19 +3476,6 @@ version 2005/12/01 or later.
}
% \end{macrocode}
%
-% \bigskip
-% The command |\@@_newcolumntype| is the command |\newcolumntype| of
-% \pkg{array} without the warnings for redefinitions of columns types (we will
-% use it to redefine the columns types |w| and |W|).
-% \begin{macrocode}
-\cs_set_protected:Npn \@@_newcolumntype #1
- {
- \cs_set:cpn { NC @ find @ #1 } ##1 #1 { \NC@ { ##1 } }
- \peek_meaning:NTF [
- { \newcol@ #1 }
- { \newcol@ #1 [ 0 ] }
- }
-% \end{macrocode}
%
%
% \bigskip
@@ -3712,10 +3716,6 @@ version 2005/12/01 or later.
% \begin{macrocode}
\cs_set_eq:NN \@ifnextchar \new@ifnextchar
% \end{macrocode}
-%
-% \begin{macrocode}
- \@@_renew_NC@rewrite@S:
-% \end{macrocode}
%
% \begin{macrocode}
\bool_gset_false:N \g_@@_last_col_found_bool
@@ -3998,6 +3998,7 @@ version 2005/12/01 or later.
\cs_set_eq:NN \chessboardcolors \@@_chessboardcolors
\cs_set_eq:NN \SubMatrix \@@_SubMatrix_in_code_before
\cs_set_eq:NN \ShowCellNames \@@_ShowCellNames
+ \cs_set_eq:NN \TikzEveryCell \@@_TikzEveryCell
}
% \end{macrocode}
%
@@ -4231,7 +4232,7 @@ version 2005/12/01 or later.
% \begin{macrocode}
\tl_gset:Nn \g_@@_left_delim_tl { #1 }
\tl_gset:Nn \g_@@_right_delim_tl { #2 }
- \tl_gset:Nn \g_@@_preamble_tl { #4 }
+ \tl_gset:Nn \g_@@_user_preamble_tl { #4 }
% \end{macrocode}
%
%
@@ -4611,20 +4612,17 @@ version 2005/12/01 or later.
% \vspace{1cm}
% \section{We construct the preamble of the array}
%
-% \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_@@_delims_bool| will be set
-% to |true| if we detect in the preamble a delimiter at the beginning or at the
-% end.}
+% \bigskip
+% The final user provides a preamble, but we must convert that preamble into a
+% preamble that will be given to |{array}| (of the package \pkg{array}).
%
% \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.
+% The preamble given by the final user is stored in |\g_@@_user_preamble_tl|.
+% The modified version will be stored in |\g_@@_array_preamble_tl| also.
% \begin{macrocode}
\cs_new_protected:Npn \@@_transform_preamble:
{
- \bool_if:NT \l_@@_preamble_bool \@@_transform_preamble_i:
+ \@@_transform_preamble_i:
\@@_transform_preamble_ii:
}
% \end{macrocode}
@@ -4632,97 +4630,50 @@ version 2005/12/01 or later.
% \begin{macrocode}
\cs_new_protected:Npn \@@_transform_preamble_i:
{
-% \end{macrocode}
-% First, we will do an ``expansion'' of the preamble with the tools of the
-% package \pkg{array} itself. This ``expansion'' will expand all the constructions
-% with |*| and all column types (defined by the user or by various packages
-% using |\newcolumntype|).
-%
-% Since we use the tools of \pkg{array} to do this expansion, we will have a
-% programmation which is not in the style of the L3 programming layer.
-%
-%
-% \bigskip
-% We redefine the column types |w| and |W|. We use |\@@_newcolumntype| instead
-% of |\newcolumtype| because we don't want warnings for column types already
-% defined. These redefinitions are in fact \emph{protections} of the letters |w|
-% and |W|. We don't want these columns type expanded because we will do the
-% patch ourselves after. We want to be able to use the standard column types |w|
-% and |W| in potential |{tabular}| of \pkg{array} in some cells of our array.
-% That's why we do those redefinitions in a TeX group.
-% \begin{macrocode}
+ \int_gzero:N \c@jCol
\group_begin:
- \@@_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: } }
% \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).
+% 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|).
% \begin{macrocode}
- \exp_args:NV \@temptokena \g_@@_preamble_tl
+ \seq_gclear:N \g_@@_cols_vlism_seq
% \end{macrocode}
-% Initialisation of a flag used by \pkg{array} to detect the end of the expansion.
+% |\g_tmpb_bool| will be raised if you have a \verb+|+ at the end of the
+% preamble provided by the final user.
% \begin{macrocode}
- \@tempswatrue
+ \bool_gset_false:N \g_tmpb_bool
% \end{macrocode}
-% The following line actually does the expansion (it's has been copied from
-% |array.sty|). The expanded version is still in |\@temptokena|.
+%
+% The following sequence will store the arguments of the successive |>| in the
+% preamble.
% \begin{macrocode}
- \@whilesw \if@tempswa \fi { \@tempswafalse \the \NC@list }
- \int_gzero:N \c@jCol
- \tl_gclear:N \g_@@_preamble_tl
+ \tl_gclear_new:N \g_@@_pre_cell_tl
% \end{macrocode}
-% |\g_tmpb_bool| will be raised if you have a \verb+|+ at the end of the preamble.
+% The counter |\l_tmpa_int| will count the number of consecutive occurrences
+% of the symbol \verb+|+.
% \begin{macrocode}
- \bool_gset_false:N \g_tmpb_bool
+ \int_zero:N \l_tmpa_int
+ \tl_gclear:N \g_@@_array_preamble_tl
\tl_if_eq:NnTF \l_@@_vlines_clist { all }
{
- \tl_gset:Nn \g_@@_preamble_tl
+ \tl_gset:Nn \g_@@_array_preamble_tl
{ ! { \skip_horizontal:N \arrayrulewidth } }
}
{
\clist_if_in:NnT \l_@@_vlines_clist 1
{
- \tl_gset:Nn \g_@@_preamble_tl
+ \tl_gset:Nn \g_@@_array_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
-% (hence the name |vlism|).
-% \begin{macrocode}
- \seq_clear:N \g_@@_cols_vlism_seq
-% \end{macrocode}
-%
-% \bigskip
-% The following sequence will store the arguments of the successive |>| in the
-% preamble.
+% Now, we actually make the preamble (which will be given to |{array}|). It will
+% be stored in |\g_@@_array_preamble_tl|.
% \begin{macrocode}
- \tl_gclear_new:N \g_@@_pre_cell_tl
-% \end{macrocode}
-%
-% The counter |\l_tmpa_int| will count the number of consecutive occurrences
-% of the symbol \verb+|+.
-% \begin{macrocode}
- \int_zero:N \l_tmpa_int
-% \end{macrocode}
-% Now, we actually patch the preamble (and it is constructed in
-% |\g_@@_preamble_tl|).
-% \begin{macrocode}
- \exp_after:wN \@@_patch_preamble:n \the \@temptokena \q_stop
+ \exp_last_unbraced:NV \@@_make_preamble:n \g_@@_user_preamble_tl \q_stop
\int_gset_eq:NN \g_@@_static_num_of_col_int \c@jCol
% \end{macrocode}
-% Remark that |\g_@@_static_num_of_col_int| will stay equel to zero in the
-% environments without preamble since we are in a code that is executed only
-% in the environments \emph{with} preamble.
%
% \medskip
% Now, we replace |\columncolor| by |\@@_columncolor_preamble|.
@@ -4732,28 +4683,18 @@ version 2005/12/01 or later.
\regex_replace_all:NnN
\c_@@_columncolor_regex
{ \c { @@_columncolor_preamble } }
- \g_@@_preamble_tl
+ \g_@@_array_preamble_tl
}
% \end{macrocode}
%
% \medskip
-% Now, we can close the TeX group which was opened for the redefinition of
-% the columns of type |w| and~|W|.
+% We are not sure that the following TeX group is still necessary.
% \begin{macrocode}
\group_end:
}
% \end{macrocode}
%
-%
-%
% \bigskip
-% Now, we have to ``patch'' that preamble by transforming some columns.
-% We will insert in the TeX flow the preamble in its actual form (that is to say
-% after the ``expansion'') following by a marker |\q_stop| and we will consume
-% these tokens constructing the (new form of the) preamble in
-% |\g_@@_preamble_tl|. This is done recursively with the command
-% |\@@_patch_preamble:n|. In the same time, we will count the columns with the
-% counter |\c@jCol|.
% \begin{macrocode}
\cs_new_protected:Npn \@@_transform_preamble_ii:
{
@@ -4779,7 +4720,7 @@ version 2005/12/01 or later.
% 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 }
+ { \tl_gput_left:NV \g_@@_array_preamble_tl \c_@@_preamble_first_col_tl }
{
\bool_lazy_all:nT
{
@@ -4788,10 +4729,10 @@ version 2005/12/01 or later.
{ \tl_if_empty_p:N \l_@@_vlines_clist }
{ \bool_not_p:n \l_@@_exterior_arraycolsep_bool }
}
- { \tl_gput_left:Nn \g_@@_preamble_tl { @ { } } }
+ { \tl_gput_left:Nn \g_@@_array_preamble_tl { @ { } } }
}
\int_compare:nNnTF \l_@@_last_col_int > { -1 }
- { \tl_gput_right:NV \g_@@_preamble_tl \c_@@_preamble_last_col_tl }
+ { \tl_gput_right:NV \g_@@_array_preamble_tl \c_@@_preamble_last_col_tl }
{
\bool_lazy_all:nT
{
@@ -4800,7 +4741,7 @@ version 2005/12/01 or later.
{ \tl_if_empty_p:N \l_@@_vlines_clist }
{ \bool_not_p:n \l_@@_exterior_arraycolsep_bool }
}
- { \tl_gput_right:Nn \g_@@_preamble_tl { @ { } } }
+ { \tl_gput_right:Nn \g_@@_array_preamble_tl { @ { } } }
}
% \end{macrocode}
% We add a last column to raise a good error message when the user puts more
@@ -4810,61 +4751,31 @@ version 2005/12/01 or later.
% \begin{macrocode}
\dim_compare:nNnT \l_@@_tabular_width_dim = \c_zero_dim
{
- \tl_gput_right:Nn \g_@@_preamble_tl
+ \tl_gput_right:Nn \g_@@_array_preamble_tl
{ > { \@@_error_too_much_cols: } l }
}
}
% \end{macrocode}
%
% \bigskip
-% The command |\@@_patch_preamble:n| is the main function for the transformation
+% The command |\@@_make_preamble:n| is the main function for the creation
% of the preamble. It is recursive.
% \begin{macrocode}
-\cs_new_protected:Npn \@@_patch_preamble:n #1
+\cs_new_protected:Npn \@@_make_preamble:n #1
{
- \str_case:nnF { #1 }
+ \str_if_eq:nnF { #1 } { \q_stop }
{
- c { \@@_patch_preamble_i:n #1 }
- l { \@@_patch_preamble_i:n #1 }
- r { \@@_patch_preamble_i:n #1 }
- > { \@@_patch_preamble_xiv:n }
- ! { \@@_patch_preamble_ii:nn #1 }
- @ { \@@_patch_preamble_ii:nn #1 }
- | { \@@_patch_preamble_iii:n #1 }
- p { \@@_patch_preamble_iv:n #1 }
- b { \@@_patch_preamble_iv:n #1 }
- m { \@@_patch_preamble_iv:n #1 }
- \@@_V: { \@@_patch_preamble_v:n }
- V { \@@_patch_preamble_v:n }
- \@@_w: { \@@_patch_preamble_vi:nnnn { } #1 }
- \@@_W: { \@@_patch_preamble_vi:nnnn { \@@_special_W: } #1 }
- \@@_S: { \@@_patch_preamble_vii:n }
- ( { \@@_patch_preamble_viii:nn #1 }
- [ { \@@_patch_preamble_viii:nn #1 }
- \{ { \@@_patch_preamble_viii:nn #1 }
- \left { \@@_patch_preamble_viii:nn }
- ) { \@@_patch_preamble_ix:nn #1 }
- ] { \@@_patch_preamble_ix:nn #1 }
- \} { \@@_patch_preamble_ix:nn #1 }
- \right { \@@_patch_preamble_ix:nn }
- X { \@@_patch_preamble_x:n }
-% \end{macrocode}
-% When \pkg{tabularx} is loaded, a local redefinition of the specifier |X| is
-% done to replace |X| by |\@@_X|. Thus, our column type |X| will be used in the
-% |{NiceTabularX}|.
-% \begin{macrocode}
- \@@_X { \@@_patch_preamble_x:n }
- \q_stop { }
- }
- {
- \str_if_eq:nVTF { #1 } \l_@@_letter_vlism_tl
+ \cs_if_exist:cTF { @@ \token_to_str:N #1 }
+ { \use:c { @@ \token_to_str:N #1 } { #1 } }
{
- \seq_gput_right:Nx \g_@@_cols_vlism_seq
- { \int_eval:n { \c@jCol + 1 } }
- \tl_gput_right:Nx \g_@@_preamble_tl
- { \exp_not:N ! { \skip_horizontal:N \arrayrulewidth } }
- \@@_patch_preamble:n
- }
+ \str_if_eq:nVTF { #1 } \l_@@_letter_vlism_tl
+ {
+ \seq_gput_right:Nx \g_@@_cols_vlism_seq
+ { \int_eval:n { \c@jCol + 1 } }
+ \tl_gput_right:Nx \g_@@_array_preamble_tl
+ { \exp_not:N ! { \skip_horizontal:N \arrayrulewidth } }
+ \@@_make_preamble:n
+ }
% \end{macrocode}
% Now the case of a letter set by the final user for a customized rule. Such
% customized rule is defined by using the key |custom-line| in
@@ -4876,35 +4787,72 @@ version 2005/12/01 or later.
% keys of that set of keys won't never be used as keys by the final user (he
% will use, instead, letters in the preamble of its array).
% \begin{macrocode}
- {
- \keys_if_exist:nnTF { NiceMatrix / ColumnTypes } { #1 }
- {
- \keys_set:nn { NiceMatrix / ColumnTypes } { #1 }
- \@@_patch_preamble:n
- }
{
- \tl_if_eq:nnT { #1 } { S }
- { \@@_fatal:n { unknown~column~type~S } }
- { \@@_fatal:nn { unknown~column~type } { #1 } }
+ \keys_if_exist:nnTF { NiceMatrix / ColumnTypes } { #1 }
+ {
+ \keys_set:nn { NiceMatrix / ColumnTypes } { #1 }
+ \@@_make_preamble:n
+ }
+ {
+ \cs_if_exist:cTF { NC @ find @ #1 }
+ {
+ \tl_set_eq:Nc \l_tmpb_tl { NC @ rewrite @ #1 }
+ \exp_last_unbraced:NV \@@_make_preamble:n \l_tmpb_tl
+ }
+ {
+ \tl_if_eq:nnT { #1 } { S }
+ { \@@_fatal:n { unknown~column~type~S } }
+ { \@@_fatal:nn { unknown~column~type } { #1 } }
+ }
+ }
}
}
}
}
% \end{macrocode}
%
-%
% \bigskip
% Now, we will list all the auxiliary functions for the different types of
% entries in the preamble of the array.
+% \begin{macrocode}
+\cs_new:cpn { @@ \string c } { \@@_make_preamble_i:n }
+\cs_new:cpn { @@ \string l } { \@@_make_preamble_i:n }
+\cs_new:cpn { @@ \string r } { \@@_make_preamble_i:n }
+\cs_new:cpn { @@ \string > } { \@@_make_preamble_xiv:nn }
+\cs_new:cpn { @@ \string ! } { \@@_make_preamble_ii:nn }
+\cs_new:cpn { @@ \string @ } { \@@_make_preamble_ii:nn }
+\cs_new:cpn { @@ \string | } { \@@_make_preamble_iii:n }
+\cs_new:cpn { @@ \string p } { \@@_make_preamble_iv:n }
+\cs_new:cpn { @@ \string b } { \@@_make_preamble_iv:n }
+\cs_new:cpn { @@ \string m } { \@@_make_preamble_iv:n }
+\cs_new:cpn { @@ \string V } { \@@_make_preamble_v:nn }
+\cs_new:cpn { @@ \string w } { \@@_make_preamble_vi:nnnn { } }
+\cs_new:cpn { @@ \string W } { \@@_make_preamble_vi:nnnn { \@@_special_W: } }
+\cs_new:cpn { @@ \string S } { \@@_make_preamble_vii:nn }
+\cs_new:cpn { @@ \string ( } { \@@_make_preamble_viii:nn }
+\cs_new:cpn { @@ \string [ } { \@@_make_preamble_viii:nn }
+\cs_new:cpn { @@ \string \{ } { \@@_make_preamble_viii:nn }
+\cs_new:cpn { @@ \string \left } { \@@_make_preamble_viii_ii:n }
+\cs_new:cpn { @@ \string ) } { \@@_make_preamble_ix:nn }
+\cs_new:cpn { @@ \string ] } { \@@_make_preamble_ix:nn }
+\cs_new:cpn { @@ \string \} } { \@@_make_preamble_ix:nn }
+\cs_new:cpn { @@ \string \right } { \@@_make_preamble_ix_ii:n }
+\cs_new:cpn { @@ \string X } { \@@_make_preamble_x:nn }
+\cs_new:cpn { @@ \string * } { \@@_make_preamble_xvi:nnn }
+\cs_new:cpn { @@ \string \NC@find } { \@@_make_preamble_xx:n }
+% \end{macrocode}
+% The token |\NC@find| is at the head of the definition of the columns type done
+% by |\newcolumntype|. We wan't that token to be no-op here.
+%
%
-% \medskip
+% \bigskip
% For |c|, |l| and |r|
% \begin{macrocode}
-\cs_new_protected:Npn \@@_patch_preamble_i:n #1
+\cs_new_protected:Npn \@@_make_preamble_i:n #1
{
- \tl_gput_right:NV \g_@@_preamble_tl \g_@@_pre_cell_tl
+ \tl_gput_right:NV \g_@@_array_preamble_tl \g_@@_pre_cell_tl
\tl_gclear:N \g_@@_pre_cell_tl
- \tl_gput_right:Nn \g_@@_preamble_tl
+ \tl_gput_right:Nn \g_@@_array_preamble_tl
{
> { \@@_cell_begin:w \str_set:Nn \l_@@_hpos_cell_str { #1 } }
#1
@@ -4915,17 +4863,17 @@ version 2005/12/01 or later.
% We increment the counter of columns and then we test for the presence of a |<|.
% \begin{macrocode}
\int_gincr:N \c@jCol
- \@@_patch_preamble_xi:n
+ \@@_make_preamble_xi:n
}
% \end{macrocode}
%
% \medskip
% For |>|, |!| and |@|
% \begin{macrocode}
-\cs_new_protected:Npn \@@_patch_preamble_ii:nn #1 #2
+\cs_new_protected:Npn \@@_make_preamble_ii:nn #1 #2
{
- \tl_gput_right:Nn \g_@@_preamble_tl { #1 { #2 } }
- \@@_patch_preamble:n
+ \tl_gput_right:Nn \g_@@_array_preamble_tl { #1 { #2 } }
+ \@@_make_preamble:n
}
% \end{macrocode}
%
@@ -4933,34 +4881,41 @@ version 2005/12/01 or later.
% \medskip
% For \verb+|+
% \begin{macrocode}
-\cs_new_protected:Npn \@@_patch_preamble_iii:n #1
+\cs_new_protected:Npn \@@_make_preamble_iii:n #1
{
% \end{macrocode}
% |\l_tmpa_int| is the number of successive occurrences of \verb+|+
% \begin{macrocode}
\int_incr:N \l_tmpa_int
- \@@_patch_preamble_iii_i:n
+ \@@_make_preamble_iii_i:n
}
% \end{macrocode}
%
% \begin{macrocode}
-\cs_new_protected:Npn \@@_patch_preamble_iii_i:n #1
+\cs_new_protected:Npn \@@_make_preamble_iii_i:n #1
{
\str_if_eq:nnTF { #1 } |
- { \@@_patch_preamble_iii:n | }
- {
- \str_if_eq:nnTF { #1 } [
- { \@@_patch_preamble_iii_ii:nw { } [ }
- { \@@_patch_preamble_iii_ii:nw { #1 } [ ] }
- }
+ { \@@_make_preamble_iii:n | }
+ { \@@_make_preamble_iii_ii:nn { } #1 }
}
% \end{macrocode}
%
% \begin{macrocode}
-\cs_new_protected:Npn \@@_patch_preamble_iii_ii:nw #1 [ #2 ]
+\cs_new_protected:Npn \@@_make_preamble_iii_ii:nn #1 #2
+ {
+ \str_if_eq:nnTF { #2 } [
+ { \@@_make_preamble_iii_ii:nw { #1 } [ }
+ { \@@_make_preamble_iii_iii:nn { #2 } { #1 } }
+ }
+\cs_new_protected:Npn \@@_make_preamble_iii_ii:nw #1 [ #2 ]
+ { \@@_make_preamble_iii_ii:nn { #1 , #2 } }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_make_preamble_iii_iii:nn #1 #2
{
\@@_compute_rule_width:n { multiplicity = \l_tmpa_int , #2 }
- \tl_gput_right:Nx \g_@@_preamble_tl
+ \tl_gput_right:Nx \g_@@_array_preamble_tl
{
% \end{macrocode}
% Here, the command |\dim_eval:n| is mandatory.
@@ -4984,15 +4939,15 @@ version 2005/12/01 or later.
}
\int_zero:N \l_tmpa_int
\str_if_eq:nnT { #1 } { \q_stop } { \bool_gset_true:N \g_tmpb_bool }
- \@@_patch_preamble:n #1
+ \@@_make_preamble:n #1
}
% \end{macrocode}
%
% \begin{macrocode}
-\cs_new_protected:Npn \@@_patch_preamble_xiv:n #1
+\cs_new_protected:Npn \@@_make_preamble_xiv:nn #1 #2
{
- \tl_gput_right:Nn \g_@@_pre_cell_tl { > { #1 } }
- \@@_patch_preamble:n
+ \tl_gput_right:Nn \g_@@_pre_cell_tl { > { #2 } }
+ \@@_make_preamble:n
}
% \end{macrocode}
%
@@ -5053,29 +5008,29 @@ version 2005/12/01 or later.
% \medskip
% For |p|, |b| and |m|. The argument |#1| is that value : |p|, |b| or |m|.
% \begin{macrocode}
-\cs_new_protected:Npn \@@_patch_preamble_iv:n #1
+\cs_new_protected:Npn \@@_make_preamble_iv:n #1
{
\str_set:Nn \l_@@_vpos_col_str { #1 }
% \end{macrocode}
% Now, you look for a potential character |[| after the letter of the specifier
% (for the options).
% \begin{macrocode}
- \@@_patch_preamble_iv_i:n
+ \@@_make_preamble_iv_i:n
}
% \end{macrocode}
%
% \begin{macrocode}
-\cs_new_protected:Npn \@@_patch_preamble_iv_i:n #1
+\cs_new_protected:Npn \@@_make_preamble_iv_i:n #1
{
\str_if_eq:nnTF { #1 } { [ }
- { \@@_patch_preamble_iv_ii:w [ }
- { \@@_patch_preamble_iv_ii:w [ ] { #1 } }
+ { \@@_make_preamble_iv_ii:w [ }
+ { \@@_make_preamble_iv_ii:w [ ] { #1 } }
}
% \end{macrocode}
%
% \begin{macrocode}
-\cs_new_protected:Npn \@@_patch_preamble_iv_ii:w [ #1 ]
- { \@@_patch_preamble_iv_iii:nn { #1 } }
+\cs_new_protected:Npn \@@_make_preamble_iv_ii:w [ #1 ]
+ { \@@_make_preamble_iv_iii:nn { #1 } }
% \end{macrocode}
%
% \medskip
@@ -5084,7 +5039,7 @@ version 2005/12/01 or later.
%
% |#2| is the mandatory argument of the specifier: the width of the column.
% \begin{macrocode}
-\cs_new_protected:Npn \@@_patch_preamble_iv_iii:nn #1 #2
+\cs_new_protected:Npn \@@_make_preamble_iv_iii:nn #1 #2
{
% \end{macrocode}
% The possible values of |\l_@@_hpos_col_str| are |j| (for \emph{justified} which is
@@ -5093,9 +5048,8 @@ version 2005/12/01 or later.
% \begin{macrocode}
\str_set:Nn \l_@@_hpos_col_str { j }
\tl_set:Nn \l_tmpa_tl { #1 }
- \tl_replace_all:Nnn \l_tmpa_tl { \@@_S: } { S }
\@@_keys_p_column:V \l_tmpa_tl
- \@@_patch_preamble_iv_iv:nn { #2 } { minipage }
+ \@@_make_preamble_iv_iv:nn { #2 } { minipage }
}
% \end{macrocode}
%
@@ -5109,11 +5063,11 @@ version 2005/12/01 or later.
% The first argument is the width of the column. The second is the type of
% environment: |minipage| or |varwidth|.
% \begin{macrocode}
-\cs_new_protected:Npn \@@_patch_preamble_iv_iv:nn #1 #2
+\cs_new_protected:Npn \@@_make_preamble_iv_iv:nn #1 #2
{
\use:x
{
- \@@_patch_preamble_iv_v:nnnnnnnn
+ \@@_make_preamble_iv_v:nnnnnnnn
{ \str_if_eq:VnTF \l_@@_vpos_col_str { p } { t } { b } }
{ \dim_eval:n { #1 } }
{
@@ -5160,7 +5114,7 @@ version 2005/12/01 or later.
% We increment the counter of columns, and then we test for the presence of a |<|.
% \begin{macrocode}
\int_gincr:N \c@jCol
- \@@_patch_preamble_xi:n
+ \@@_make_preamble_xi:n
}
% \end{macrocode}
%
@@ -5189,14 +5143,14 @@ version 2005/12/01 or later.
% |#8| is the letter |c| or |r| or |l| which is the basic specificier of column
% which is used \emph{in fine}.
% \begin{macrocode}
-\cs_new_protected:Npn \@@_patch_preamble_iv_v:nnnnnnnn #1 #2 #3 #4 #5 #6 #7 #8
+\cs_new_protected:Npn \@@_make_preamble_iv_v:nnnnnnnn #1 #2 #3 #4 #5 #6 #7 #8
{
\str_if_eq:VnTF \l_@@_hpos_col_str { si }
- { \tl_gput_right:Nn \g_@@_preamble_tl { > { \@@_test_if_empty_for_S: } } }
- { \tl_gput_right:Nn \g_@@_preamble_tl { > { \@@_test_if_empty: } } }
- \tl_gput_right:NV \g_@@_preamble_tl \g_@@_pre_cell_tl
+ { \tl_gput_right:Nn \g_@@_array_preamble_tl { > { \@@_test_if_empty_for_S: } } }
+ { \tl_gput_right:Nn \g_@@_array_preamble_tl { > { \@@_test_if_empty: } } }
+ \tl_gput_right:NV \g_@@_array_preamble_tl \g_@@_pre_cell_tl
\tl_gclear:N \g_@@_pre_cell_tl
- \tl_gput_right:Nn \g_@@_preamble_tl
+ \tl_gput_right:Nn \g_@@_array_preamble_tl
{
> {
% \end{macrocode}
@@ -5324,26 +5278,25 @@ version 2005/12/01 or later.
% \medskip
% For |V| (similar to the |V| of \pkg{varwidth}).
% \begin{macrocode}
-\cs_new_protected:Npn \@@_patch_preamble_v:n #1
+\cs_new_protected:Npn \@@_make_preamble_v:nn #1 #2
{
- \str_if_eq:nnTF { #1 } { [ }
- { \@@_patch_preamble_v_i:w [ }
- { \@@_patch_preamble_v_i:w [ ] { #1 } }
+ \str_if_eq:nnTF { #2 } { [ }
+ { \@@_make_preamble_v_i:w [ }
+ { \@@_make_preamble_v_i:w [ ] { #2 } }
}
-\cs_new_protected:Npn \@@_patch_preamble_v_i:w [ #1 ]
- { \@@_patch_preamble_v_ii:nn { #1 } }
-\cs_new_protected:Npn \@@_patch_preamble_v_ii:nn #1 #2
+\cs_new_protected:Npn \@@_make_preamble_v_i:w [ #1 ]
+ { \@@_make_preamble_v_ii:nn { #1 } }
+\cs_new_protected:Npn \@@_make_preamble_v_ii:nn #1 #2
{
\str_set:Nn \l_@@_vpos_col_str { p }
\str_set:Nn \l_@@_hpos_col_str { j }
\tl_set:Nn \l_tmpa_tl { #1 }
- \tl_replace_all:Nnn \l_tmpa_tl { \@@_S: } { S }
\@@_keys_p_column:V \l_tmpa_tl
\IfPackageLoadedTF { varwidth }
- { \@@_patch_preamble_iv_iv:nn { #2 } { varwidth } }
+ { \@@_make_preamble_iv_iv:nn { #2 } { varwidth } }
{
\@@_error_or_warning:n { varwidth~not~loaded }
- \@@_patch_preamble_iv_iv:nn { #2 } { minipage }
+ \@@_make_preamble_iv_iv:nn { #2 } { minipage }
}
}
% \end{macrocode}
@@ -5360,11 +5313,11 @@ version 2005/12/01 or later.
% |#4| is the width of the column.
%
% \begin{macrocode}
-\cs_new_protected:Npn \@@_patch_preamble_vi:nnnn #1 #2 #3 #4
+\cs_new_protected:Npn \@@_make_preamble_vi:nnnn #1 #2 #3 #4
{
\str_if_eq:nnTF { #3 } { s }
- { \@@_patch_preamble_vi_i:nnnn { #1 } { #4 } }
- { \@@_patch_preamble_vi_ii:nnnn { #1 } { #2 } { #3 } { #4 } }
+ { \@@_make_preamble_vi_i:nnnn { #1 } { #4 } }
+ { \@@_make_preamble_vi_ii:nnnn { #1 } { #2 } { #3 } { #4 } }
}
% \end{macrocode}
%
@@ -5376,11 +5329,11 @@ version 2005/12/01 or later.
%
% |#2| is the width of the column.
% \begin{macrocode}
-\cs_new_protected:Npn \@@_patch_preamble_vi_i:nnnn #1 #2
+\cs_new_protected:Npn \@@_make_preamble_vi_i:nnnn #1 #2
{
- \tl_gput_right:NV \g_@@_preamble_tl \g_@@_pre_cell_tl
+ \tl_gput_right:NV \g_@@_array_preamble_tl \g_@@_pre_cell_tl
\tl_gclear:N \g_@@_pre_cell_tl
- \tl_gput_right:Nn \g_@@_preamble_tl
+ \tl_gput_right:Nn \g_@@_array_preamble_tl
{
> {
\dim_set:Nn \l_@@_col_width_dim { #2 }
@@ -5396,7 +5349,7 @@ version 2005/12/01 or later.
}
}
\int_gincr:N \c@jCol
- \@@_patch_preamble_xi:n
+ \@@_make_preamble_xi:n
}
% \end{macrocode}
%
@@ -5404,11 +5357,11 @@ version 2005/12/01 or later.
% Then, the most important version, for the horizontal alignments types of |c|,
% |l| and |r| (and not |s|).
% \begin{macrocode}
-\cs_new_protected:Npn \@@_patch_preamble_vi_ii:nnnn #1 #2 #3 #4
+\cs_new_protected:Npn \@@_make_preamble_vi_ii:nnnn #1 #2 #3 #4
{
- \tl_gput_right:NV \g_@@_preamble_tl \g_@@_pre_cell_tl
+ \tl_gput_right:NV \g_@@_array_preamble_tl \g_@@_pre_cell_tl
\tl_gclear:N \g_@@_pre_cell_tl
- \tl_gput_right:Nn \g_@@_preamble_tl
+ \tl_gput_right:Nn \g_@@_array_preamble_tl
{
> {
% \end{macrocode}
@@ -5434,7 +5387,7 @@ version 2005/12/01 or later.
% We increment the counter of columns and then we test for the presence of a |<|.
% \begin{macrocode}
\int_gincr:N \c@jCol
- \@@_patch_preamble_xi:n
+ \@@_make_preamble_xi:n
}
% \end{macrocode}
%
@@ -5448,31 +5401,29 @@ version 2005/12/01 or later.
% \end{macrocode}
%
% \medskip
-% For |\@@_S:|. If the user has used |S[...]|, |S| has been replaced by |\@@_S:|
-% during the first expansion of the preamble (done with the tools of standard
-% LaTeX and \pkg{array}).
+% For |S| (of \pkg{siunitx}).
% \begin{macrocode}
-\cs_new_protected:Npn \@@_patch_preamble_vii:n #1
+\cs_new_protected:Npn \@@_make_preamble_vii:nn #1 #2
{
- \str_if_eq:nnTF { #1 } { [ }
- { \@@_patch_preamble_vii_i:w [ }
- { \@@_patch_preamble_vii_i:w [ ] { #1 } }
+ \str_if_eq:nnTF { #2 } { [ }
+ { \@@_make_preamble_vii_i:w [ }
+ { \@@_make_preamble_vii_i:w [ ] { #2 } }
}
% \end{macrocode}
%
% \begin{macrocode}
-\cs_new_protected:Npn \@@_patch_preamble_vii_i:w [ #1 ]
- { \@@_patch_preamble_vii_ii:n { #1 } }
+\cs_new_protected:Npn \@@_make_preamble_vii_i:w [ #1 ]
+ { \@@_make_preamble_vii_ii:n { #1 } }
% \end{macrocode}
%
% \begin{macrocode}
-\cs_new_protected:Npn \@@_patch_preamble_vii_ii:n #1
+\cs_new_protected:Npn \@@_make_preamble_vii_ii:n #1
{
\IfPackageAtLeastTF { siunitx } { 2022/01/01 }
{
- \tl_gput_right:NV \g_@@_preamble_tl \g_@@_pre_cell_tl
+ \tl_gput_right:NV \g_@@_array_preamble_tl \g_@@_pre_cell_tl
\tl_gclear:N \g_@@_pre_cell_tl
- \tl_gput_right:Nn \g_@@_preamble_tl
+ \tl_gput_right:Nn \g_@@_array_preamble_tl
{
> {
\@@_cell_begin:w
@@ -5486,7 +5437,7 @@ version 2005/12/01 or later.
% We increment the counter of columns and then we test for the presence of a |<|.
% \begin{macrocode}
\int_gincr:N \c@jCol
- \@@_patch_preamble_xi:n
+ \@@_make_preamble_xi:n
}
{ \@@_fatal:n { Version~of~siunitx~too~old } }
}
@@ -5496,7 +5447,7 @@ version 2005/12/01 or later.
% \medskip
% For |(|, |[| and |\{|.
% \begin{macrocode}
-\cs_new_protected:Npn \@@_patch_preamble_viii:nn #1 #2
+\cs_new_protected:Npn \@@_make_preamble_viii:nn #1 #2
{
\bool_if:NT \l_@@_small_bool { \@@_fatal:n { Delimiter~with~small } }
% \end{macrocode}
@@ -5513,30 +5464,35 @@ version 2005/12/01 or later.
% \begin{macrocode}
\tl_gset:Nn \g_@@_left_delim_tl { #1 }
\tl_gset:Nn \g_@@_right_delim_tl { . }
- \@@_patch_preamble:n #2
+ \@@_make_preamble:n #2
}
{
- \tl_gput_right:Nn \g_@@_preamble_tl { ! { \enskip } }
- \@@_patch_preamble_viii_i:nn { #1 } { #2 }
+ \tl_gput_right:Nn \g_@@_array_preamble_tl { ! { \enskip } }
+ \@@_make_preamble_viii_i:nn { #1 } { #2 }
}
}
- { \@@_patch_preamble_viii_i:nn { #1 } { #2 } }
+ { \@@_make_preamble_viii_i:nn { #1 } { #2 } }
}
% \end{macrocode}
%
% \begin{macrocode}
-\cs_new_protected:Npn \@@_patch_preamble_viii_i:nn #1 #2
+\cs_new_protected:Npn \@@_make_preamble_viii_i:nn #1 #2
{
\tl_gput_right:Nx \g_@@_pre_code_after_tl
{ \@@_delimiter:nnn #1 { \int_eval:n { \c@jCol + 1 } } \c_true_bool }
\tl_if_in:nnTF { ( [ \{ ) ] \} \left \right } { #2 }
{
\@@_error:nn { delimiter~after~opening } { #2 }
- \@@_patch_preamble:n
+ \@@_make_preamble:n
}
- { \@@_patch_preamble:n #2 }
+ { \@@_make_preamble:n #2 }
}
% \end{macrocode}
+%
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_make_preamble_viii_ii:n #1
+ { \@@_make_preamble_viii:nn }
+% \end{macrocode}
%
% \bigskip
% For the closing delimiters. We have two arguments for the following command because
@@ -5546,48 +5502,48 @@ version 2005/12/01 or later.
% considered as the right delimiter of the environment if the environment is
% |{NiceArray}|).
% \begin{macrocode}
-\cs_new_protected:Npn \@@_patch_preamble_ix:nn #1 #2
+\cs_new_protected:Npn \@@_make_preamble_ix:nn #1 #2
{
\bool_if:NT \l_@@_small_bool { \@@_fatal:n { Delimiter~with~small } }
\tl_if_in:nnTF { ) ] \} } { #2 }
- { \@@_patch_preamble_ix_i:nnn #1 #2 }
+ { \@@_make_preamble_ix_i:nnn #1 #2 }
{
\tl_if_eq:nnTF { \q_stop } { #2 }
{
\str_if_eq:VnTF \g_@@_right_delim_tl { . }
{ \tl_gset:Nn \g_@@_right_delim_tl { #1 } }
{
- \tl_gput_right:Nn \g_@@_preamble_tl { ! { \enskip } }
+ \tl_gput_right:Nn \g_@@_array_preamble_tl { ! { \enskip } }
\tl_gput_right:Nx \g_@@_pre_code_after_tl
{ \@@_delimiter:nnn #1 { \int_use:N \c@jCol } \c_false_bool }
- \@@_patch_preamble:n #2
+ \@@_make_preamble:n #2
}
}
{
\tl_if_in:nnT { ( [ \{ \left } { #2 }
- { \tl_gput_right:Nn \g_@@_preamble_tl { ! { \enskip } } }
+ { \tl_gput_right:Nn \g_@@_array_preamble_tl { ! { \enskip } } }
\tl_gput_right:Nx \g_@@_pre_code_after_tl
{ \@@_delimiter:nnn #1 { \int_use:N \c@jCol } \c_false_bool }
- \@@_patch_preamble:n #2
+ \@@_make_preamble:n #2
}
}
}
% \end{macrocode}
%
% \begin{macrocode}
-\cs_new_protected:Npn \@@_patch_preamble_ix_i:nnn #1 #2 #3
+\cs_new_protected:Npn \@@_make_preamble_ix_i:nnn #1 #2 #3
{
\tl_if_eq:nnTF { \q_stop } { #3 }
{
\str_if_eq:VnTF \g_@@_right_delim_tl { . }
{
- \tl_gput_right:Nn \g_@@_preamble_tl { ! { \enskip } }
+ \tl_gput_right:Nn \g_@@_array_preamble_tl { ! { \enskip } }
\tl_gput_right:Nx \g_@@_pre_code_after_tl
{ \@@_delimiter:nnn #1 { \int_use:N \c@jCol } \c_false_bool }
\tl_gset:Nn \g_@@_right_delim_tl { #2 }
}
{
- \tl_gput_right:Nn \g_@@_preamble_tl { ! { \enskip } }
+ \tl_gput_right:Nn \g_@@_array_preamble_tl { ! { \enskip } }
\tl_gput_right:Nx \g_@@_pre_code_after_tl
{ \@@_delimiter:nnn #1 { \int_use:N \c@jCol } \c_false_bool }
\@@_error:nn { double~closing~delimiter } { #2 }
@@ -5597,27 +5553,32 @@ version 2005/12/01 or later.
\tl_gput_right:Nx \g_@@_pre_code_after_tl
{ \@@_delimiter:nnn #1 { \int_use:N \c@jCol } \c_false_bool }
\@@_error:nn { double~closing~delimiter } { #2 }
- \@@_patch_preamble:n #3
+ \@@_make_preamble:n #3
}
}
% \end{macrocode}
+%
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_make_preamble_ix_ii:n #1
+ { \@@_make_preamble_ix:nn }
+% \end{macrocode}
%
% \bigskip
% For the case of a letter |X|. This specifier may take in an optional argument
% (between square brackets). That's why we test whether there is a |[| after the
% letter |X|.
% \begin{macrocode}
-\cs_new_protected:Npn \@@_patch_preamble_x:n #1
+\cs_new_protected:Npn \@@_make_preamble_x:nn #1 #2
{
- \str_if_eq:nnTF { #1 } { [ }
- { \@@_patch_preamble_x_i:w [ }
- { \@@_patch_preamble_x_i:w [ ] #1 }
+ \str_if_eq:nnTF { #2 } { [ }
+ { \@@_make_preamble_x_i:w [ }
+ { \@@_make_preamble_x_i:w [ ] #2 }
}
% \end{macrocode}
%
% \begin{macrocode}
-\cs_new_protected:Npn \@@_patch_preamble_x_i:w [ #1 ]
- { \@@_patch_preamble_x_ii:n { #1 } }
+\cs_new_protected:Npn \@@_make_preamble_x_i:w [ #1 ]
+ { \@@_make_preamble_x_ii:n { #1 } }
% \end{macrocode}
% |#1| is the optional argument of the |X| specifier (a list of
% \emph{key}-\emph{value} pairs).
@@ -5636,7 +5597,7 @@ version 2005/12/01 or later.
% \medskip
% In the following command, |#1| is the list of the options of the specifier |X|.
% \begin{macrocode}
-\cs_new_protected:Npn \@@_patch_preamble_x_ii:n #1
+\cs_new_protected:Npn \@@_make_preamble_x_ii:n #1
{
% \end{macrocode}
% The possible values of |\l_@@_hpos_col_str| are |j| (for \emph{justified} which is
@@ -5661,7 +5622,6 @@ version 2005/12/01 or later.
\int_zero_new:N \l_@@_weight_int
\int_set:Nn \l_@@_weight_int { 1 }
\tl_set:Nn \l_tmpa_tl { #1 }
- \tl_replace_all:Nnn \l_tmpa_tl { \@@_S: } { S }
\@@_keys_p_column:V \l_tmpa_tl
\keys_set:nV { WithArrows / X-column } \l_tmpa_tl
\int_compare:nNnT \l_@@_weight_int < 0
@@ -5679,12 +5639,12 @@ version 2005/12/01 or later.
\bool_if:NTF \l_@@_X_columns_aux_bool
{
\exp_args:Nnx
- \@@_patch_preamble_iv_iv:nn
+ \@@_make_preamble_iv_iv:nn
{ \l_@@_weight_int \l_@@_X_columns_dim }
{ minipage }
}
{
- \tl_gput_right:Nn \g_@@_preamble_tl
+ \tl_gput_right:Nn \g_@@_array_preamble_tl
{
> {
\@@_cell_begin:w
@@ -5715,7 +5675,7 @@ version 2005/12/01 or later.
}
}
\int_gincr:N \c@jCol
- \@@_patch_preamble_xi:n
+ \@@_make_preamble_xi:n
}
}
% \end{macrocode}
@@ -5727,38 +5687,38 @@ version 2005/12/01 or later.
% |!{\skip_horizontal:N ...}| when the key |vlines| is used. In fact, we have
% also to test whether there is, after the |<{...}|, a |@{...}|.
% \begin{macrocode}
-\cs_new_protected:Npn \@@_patch_preamble_xi:n #1
+\cs_new_protected:Npn \@@_make_preamble_xi:n #1
{
\str_if_eq:nnTF { #1 } { < }
- \@@_patch_preamble_xiii:n
+ \@@_make_preamble_xiii:n
{
\str_if_eq:nnTF { #1 } { @ }
- \@@_patch_preamble_xv:n
+ \@@_make_preamble_xv:n
{
\tl_if_eq:NnTF \l_@@_vlines_clist { all }
{
- \tl_gput_right:Nn \g_@@_preamble_tl
+ \tl_gput_right:Nn \g_@@_array_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
+ \tl_gput_right:Nn \g_@@_array_preamble_tl
{ ! { \skip_horizontal:N \arrayrulewidth } }
}
}
- \@@_patch_preamble:n { #1 }
+ \@@_make_preamble:n { #1 }
}
}
}
% \end{macrocode}
%
% \begin{macrocode}
-\cs_new_protected:Npn \@@_patch_preamble_xiii:n #1
+\cs_new_protected:Npn \@@_make_preamble_xiii:n #1
{
- \tl_gput_right:Nn \g_@@_preamble_tl { < { #1 } }
- \@@_patch_preamble_xi:n
+ \tl_gput_right:Nn \g_@@_array_preamble_tl { < { #1 } }
+ \@@_make_preamble_xi:n
}
% \end{macrocode}
%
@@ -5766,43 +5726,41 @@ version 2005/12/01 or later.
% draw a vertical rule, we have to add in that |@{...}| a |\hskip| corresponding
% to the width of the vertical rule.
% \begin{macrocode}
-\cs_new_protected:Npn \@@_patch_preamble_xv:n #1
+\cs_new_protected:Npn \@@_make_preamble_xv:n #1
{
\tl_if_eq:NnTF \l_@@_vlines_clist { all }
{
- \tl_gput_right:Nn \g_@@_preamble_tl
+ \tl_gput_right:Nn \g_@@_array_preamble_tl
{ @ { #1 \skip_horizontal:N \arrayrulewidth } }
}
{
\exp_args:NNx
\clist_if_in:NnTF \l_@@_vlines_clist { \int_eval:n { \c@jCol + 1 } }
{
- \tl_gput_right:Nn \g_@@_preamble_tl
+ \tl_gput_right:Nn \g_@@_array_preamble_tl
{ @ { #1 \skip_horizontal:N \arrayrulewidth } }
}
- { \tl_gput_right:Nn \g_@@_preamble_tl { @ { #1 } } }
+ { \tl_gput_right:Nn \g_@@_array_preamble_tl { @ { #1 } } }
}
- \@@_patch_preamble:n
+ \@@_make_preamble:n
}
% \end{macrocode}
%
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_make_preamble_xx:n #1 { \@@_make_preamble:n }
+% \end{macrocode}
+%
% \bigskip
% \begin{macrocode}
-\cs_new_protected:Npn \@@_set_preamble:Nn #1 #2
- {
- \group_begin:
- \@@_newcolumntype w [ 2 ] { \@@_w: { ##1 } { ##2 } }
- \@@_newcolumntype W [ 2 ] { \@@_W: { ##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
- \group_end:
- \tl_set_eq:NN #1 \g_@@_preamble_tl
+\cs_new_protected:Npn \@@_make_preamble_xvi:nnn #1 #2 #3
+ {
+ \tl_clear:N \l_tmpa_tl
+ \int_step_inline:nn { #2 } { \tl_put_right:Nn \l_tmpa_tl { #3 } }
+ \exp_last_unbraced:NV \@@_make_preamble:n \l_tmpa_tl
}
% \end{macrocode}
%
+%
% \bigskip
% \section{The redefinition of \textbackslash multicolumn}
%
@@ -5823,25 +5781,12 @@ version 2005/12/01 or later.
\cs_set:Npn \@addamp { \if@firstamp \@firstampfalse \else \@preamerr 5 \fi }
% \end{macrocode}
%
-% \begin{macrocode}
- \@@_newcolumntype w [ 2 ] { \@@_w: { ##1 } { ##2 } }
- \@@_newcolumntype W [ 2 ] { \@@_W: { ##1 } { ##2 } }
-% \end{macrocode}
-%
-% \medskip
-% You do the expansion of the (small) preamble with the tools of \pkg{array}.
-% \begin{macrocode}
- \@temptokena = { #2 }
- \@tempswatrue
- \@whilesw \if@tempswa \fi { \@tempswafalse \the \NC@list }
-% \end{macrocode}
-%
% \medskip
% Now, we patch the (small) preamble as we have done with the main preamble of
% the array.
% \begin{macrocode}
\tl_gclear:N \g_@@_preamble_tl
- \exp_after:wN \@@_patch_m_preamble:n \the \@temptokena \q_stop
+ \@@_make_m_preamble:n #2 \q_stop
% \end{macrocode}
%
% \medskip
@@ -5905,28 +5850,40 @@ version 2005/12/01 or later.
% All those commands have a |m| in their name to recall that they deal with the
% redefinition of |\multicolumn|.
% \begin{macrocode}
-\cs_new_protected:Npn \@@_patch_m_preamble:n #1
+\cs_new_protected:Npn \@@_make_m_preamble:n #1
{
\str_case:nnF { #1 }
{
- c { \@@_patch_m_preamble_i:n #1 }
- l { \@@_patch_m_preamble_i:n #1 }
- r { \@@_patch_m_preamble_i:n #1 }
- > { \@@_patch_m_preamble_ii:nn #1 }
- ! { \@@_patch_m_preamble_ii:nn #1 }
- @ { \@@_patch_m_preamble_ii:nn #1 }
- | { \@@_patch_m_preamble_iii:n #1 }
- p { \@@_patch_m_preamble_iv:nnn t #1 }
- m { \@@_patch_m_preamble_iv:nnn c #1 }
- b { \@@_patch_m_preamble_iv:nnn b #1 }
- \@@_w: { \@@_patch_m_preamble_v:nnnn { } #1 }
- \@@_W: { \@@_patch_m_preamble_v:nnnn { \@@_special_W: } #1 }
+ c { \@@_make_m_preamble_i:n #1 }
+ l { \@@_make_m_preamble_i:n #1 }
+ r { \@@_make_m_preamble_i:n #1 }
+ > { \@@_make_m_preamble_ii:nn #1 }
+ ! { \@@_make_m_preamble_ii:nn #1 }
+ @ { \@@_make_m_preamble_ii:nn #1 }
+ | { \@@_make_m_preamble_iii:n #1 }
+ p { \@@_make_m_preamble_iv:nnn t #1 }
+ m { \@@_make_m_preamble_iv:nnn c #1 }
+ b { \@@_make_m_preamble_iv:nnn b #1 }
+ w { \@@_make_m_preamble_v:nnnn { } #1 }
+ W { \@@_make_m_preamble_v:nnnn { \@@_special_W: } #1 }
\q_stop { }
+% \end{macrocode}
+% The token |\NC@find| is at the head of the definition of the columns type done
+% by |\newcolumntype|. We wan't that token to no-op here.
+% \begin{macrocode}
+ \NC@find { \@@_make_preamble:n }
}
{
- \tl_if_eq:nnT { #1 } { S }
- { \@@_fatal:n { unknown~column~type~S } }
- { \@@_fatal:nn { unknown~column~type } { #1 } }
+ \cs_if_exist:cTF { NC @ find @ #1 }
+ {
+ \tl_set_eq:Nc \l_tmpa_tl { NC @ rewrite @ #1 }
+ \exp_last_unbraced:NV \@@_make_m_preamble:n \l_tmpa_tl
+ }
+ {
+ \tl_if_eq:nnT { #1 } { S }
+ { \@@_fatal:n { unknown~column~type~S } }
+ { \@@_fatal:nn { unknown~column~type } { #1 } }
+ }
}
}
% \end{macrocode}
@@ -5934,7 +5891,7 @@ version 2005/12/01 or later.
% \medskip
% For |c|, |l| and |r|
% \begin{macrocode}
-\cs_new_protected:Npn \@@_patch_m_preamble_i:n #1
+\cs_new_protected:Npn \@@_make_m_preamble_i:n #1
{
\tl_gput_right:Nn \g_@@_preamble_tl
{
@@ -5946,17 +5903,17 @@ version 2005/12/01 or later.
%
% We test for the presence of a |<|.
% \begin{macrocode}
- \@@_patch_m_preamble_x:n
+ \@@_make_m_preamble_x:n
}
% \end{macrocode}
%
% \medskip
% For |>|, |!| and |@|
% \begin{macrocode}
-\cs_new_protected:Npn \@@_patch_m_preamble_ii:nn #1 #2
+\cs_new_protected:Npn \@@_make_m_preamble_ii:nn #1 #2
{
\tl_gput_right:Nn \g_@@_preamble_tl { #1 { #2 } }
- \@@_patch_m_preamble:n
+ \@@_make_m_preamble:n
}
% \end{macrocode}
%
@@ -5964,17 +5921,17 @@ version 2005/12/01 or later.
% \medskip
% For \verb+|+
% \begin{macrocode}
-\cs_new_protected:Npn \@@_patch_m_preamble_iii:n #1
+\cs_new_protected:Npn \@@_make_m_preamble_iii:n #1
{
\tl_gput_right:Nn \g_@@_preamble_tl { #1 }
- \@@_patch_m_preamble:n
+ \@@_make_m_preamble:n
}
% \end{macrocode}
%
% \medskip
% For |p|, |m| and |b|
% \begin{macrocode}
-\cs_new_protected:Npn \@@_patch_m_preamble_iv:nnn #1 #2 #3
+\cs_new_protected:Npn \@@_make_m_preamble_iv:nnn #1 #2 #3
{
\tl_gput_right:Nn \g_@@_preamble_tl
{
@@ -5995,14 +5952,14 @@ version 2005/12/01 or later.
% \end{macrocode}
% We test for the presence of a |<|.
% \begin{macrocode}
- \@@_patch_m_preamble_x:n
+ \@@_make_m_preamble_x:n
}
% \end{macrocode}
%
% \medskip
% For |w| and |W|
% \begin{macrocode}
-\cs_new_protected:Npn \@@_patch_m_preamble_v:nnnn #1 #2 #3 #4
+\cs_new_protected:Npn \@@_make_m_preamble_v:nnnn #1 #2 #3 #4
{
\tl_gput_right:Nn \g_@@_preamble_tl
{
@@ -6025,7 +5982,7 @@ version 2005/12/01 or later.
% \end{macrocode}
% We test for the presence of a |<|.
% \begin{macrocode}
- \@@_patch_m_preamble_x:n
+ \@@_make_m_preamble_x:n
}
% \end{macrocode}
%
@@ -6033,19 +5990,19 @@ version 2005/12/01 or later.
% After a specifier of column, we have to test whether there is one or several
% |<{..}|.
% \begin{macrocode}
-\cs_new_protected:Npn \@@_patch_m_preamble_x:n #1
+\cs_new_protected:Npn \@@_make_m_preamble_x:n #1
{
\str_if_eq:nnTF { #1 } { < }
- \@@_patch_m_preamble_ix:n
- { \@@_patch_m_preamble:n { #1 } }
+ \@@_make_m_preamble_ix:n
+ { \@@_make_m_preamble:n { #1 } }
}
% \end{macrocode}
%
% \begin{macrocode}
-\cs_new_protected:Npn \@@_patch_m_preamble_ix:n #1
+\cs_new_protected:Npn \@@_make_m_preamble_ix:n #1
{
\tl_gput_right:Nn \g_@@_preamble_tl { < { #1 } }
- \@@_patch_m_preamble_x:n
+ \@@_make_m_preamble_x:n
}
% \end{macrocode}
%
@@ -6521,7 +6478,7 @@ version 2005/12/01 or later.
% 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}
- \@@_array:V \g_@@_preamble_tl
+ \@@_array:V \g_@@_array_preamble_tl
}
}
}
@@ -6656,7 +6613,7 @@ version 2005/12/01 or later.
% |\@@_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
+ \@@_array:V \g_@@_array_preamble_tl \l_@@_new_body_tl
}
% \end{macrocode}
%
@@ -7273,31 +7230,11 @@ version 2005/12/01 or later.
{ \endNiceArray }
% \end{macrocode}
%
-% \bigskip
-% \begin{macrocode}
-\cs_set_protected:Npn \@@_newcolumntype #1
- {
- \cs_if_free:cT { NC @ find @ #1 }
- { \NC@list \expandafter { \the \NC@list \NC@do #1 } }
- \cs_set:cpn {NC @ find @ #1 } ##1 #1 { \NC@ { ##1 } }
- \peek_meaning:NTF [
- { \newcol@ #1 }
- { \newcol@ #1 [ 0 ] }
- }
-% \end{macrocode}
%
% \bigskip
% \begin{macrocode}
\NewDocumentEnvironment { NiceTabularX } { m O { } m ! O { } }
{
-% \end{macrocode}
-% The following code prevents the expansion of the `X` columns with the
-% definition of that columns in \pkg{tabularx} (this would result in an error in
-% |{NiceTabularX}|).
-% \begin{macrocode}
- \IfPackageLoadedTF { tabularx }
- { \newcolumntype { X } { \@@_X } }
- { }
\str_gset:Nn \g_@@_name_env_str { NiceTabularX }
\dim_zero_new:N \l_@@_width_dim
\dim_set:Nn \l_@@_width_dim { #1 }
@@ -7305,7 +7242,11 @@ version 2005/12/01 or later.
\bool_set_true:N \l_@@_tabular_bool
\NiceArray { #3 }
}
- { \endNiceArray }
+ {
+ \endNiceArray
+ \int_compare:nNnT \g_@@_total_X_weight_int = \c_zero_int
+ { \@@_error:n { NiceTabularX~without~X } }
+ }
% \end{macrocode}
%
% \bigskip
@@ -7578,6 +7519,7 @@ version 2005/12/01 or later.
\cs_set_eq:NN \UnderBrace \@@_UnderBrace
\cs_set_eq:NN \OverBrace \@@_OverBrace
\cs_set_eq:NN \ShowCellNames \@@_ShowCellNames
+ \cs_set_eq:NN \TikzEveryCell \@@_TikzEveryCell
\cs_set_eq:NN \line \@@_line
\g_@@_pre_code_after_tl
\tl_gclear:N \g_@@_pre_code_after_tl
@@ -10608,7 +10550,7 @@ version 2005/12/01 or later.
{
\peek_remove_spaces:n
{
- \tl_gput_right:Nx \g__nicematrix_pre_code_before_tl
+ \tl_gput_right:Nx \g_@@_pre_code_before_tl
{
\@@_rowlistcolors
[ #1 ] { \int_use:N \c@iRow } { #2 }
@@ -10754,7 +10696,17 @@ 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@:n { #1 } ,
+% \end{macrocode}
+% We want that, even when the rule has been defined with TikZ by the key |tikz|,
+% the user has still the possibility to change the color of the rule with the key
+% |color| (in the command |\Hline|, not in the key |tikz| of the command
+% |\Hline|). The main use is, when the user has defined its own command
+% |\MyDashedLine| by |\newcommand{\MyDashedRule}{\Hline[tikz=dashed]}|, to give
+% the ability to write |\MyDashedRule[color=red]|.
+% \begin{macrocode}
+ color .code:n =
+ \@@_set_CT@arc@:n { #1 }
+ \tl_set:Nn \l_@@_rule_color_tl { #1 } ,
color .value_required:n = true ,
sep-color .code:n = \@@_set_CT@drsc@:n { #1 } ,
sep-color .value_required:n = true ,
@@ -10763,9 +10715,11 @@ version 2005/12/01 or later.
% sub-rules since a rule may be broken by blocks or others) will be drawn with
% Tikz.
% \begin{macrocode}
- tikz .tl_set:N = \l_@@_tikz_rule_tl ,
+ tikz .code:n =
+ \IfPackageLoadedTF { tikz }
+ { \clist_put_right:Nn \l_@@_tikz_rule_tl { #1 } }
+ { \@@_error:n { tikz~without~tikz } } ,
tikz .value_required:n = true ,
- tikz .initial:n = ,
total-width .dim_set:N = \l_@@_rule_width_dim ,
total-width .value_required:n = true ,
width .meta:n = { total-width = #1 } ,
@@ -10887,6 +10841,7 @@ version 2005/12/01 or later.
% \begin{macrocode}
\cs_new_protected:Npn \@@_vline_ii:
{
+ \tl_clear:N \l_@@_tikz_rule_tl
\keys_set:nV { NiceMatrix / RulesBis } \l_@@_other_keys_tl
\bool_if:NTF \l_@@_dotted_bool
\@@_vline_iv:
@@ -10983,12 +10938,21 @@ version 2005/12/01 or later.
% \end{macrocode}
%
% \bigskip
-% The following code is for the case when the user uses the key |tikz| (in the
-% definition of a customized rule by using the key |custom-line|).
+% The following code is for the case when the user uses the key |tikz|.
% \begin{macrocode}
\cs_new_protected:Npn \@@_vline_v:
{
\begin {tikzpicture }
+ % added 2023/09/25
+% \end{macrocode}
+% By default, the color defined by |\arrayrulecolor| or by |rules/color| will be
+% used, but it's still possible to change the color by using the key |color| or,
+% of course, the key |color| inside the key |tikz| (that is to say the key
+% |color| provided by \textsc{pgf}.
+% \begin{macrocode}
+ \CT@arc@
+ \tl_if_empty:NF \l_@@_rule_color_tl
+ { \tl_put_right:Nx \l_@@_tikz_rule_tl { , color = \l_@@_rule_color_tl } }
\pgfrememberpicturepositiononpagetrue
\pgf@relevantforpicturesizefalse
\@@_qpoint:n { row - \int_use:N \l_@@_local_start_int }
@@ -11142,6 +11106,7 @@ version 2005/12/01 or later.
% \begin{macrocode}
\cs_new_protected:Npn \@@_hline_ii:
{
+ \tl_clear:N \l_@@_tikz_rule_tl
\keys_set:nV { NiceMatrix / RulesBis } \l_@@_other_keys_tl
\bool_if:NTF \l_@@_dotted_bool
\@@_hline_iv:
@@ -11304,6 +11269,16 @@ version 2005/12/01 or later.
\cs_new_protected:Npn \@@_hline_v:
{
\begin { tikzpicture }
+ % added 2023/09/25
+% \end{macrocode}
+% By default, the color defined by |\arrayrulecolor| or by |rules/color| will be
+% used, but it's still possible to change the color by using the key |color| or,
+% of course, the key |color| inside the key |tikz| (that is to say the key
+% |color| provided by \textsc{pgf}.
+% \begin{macrocode}
+ \CT@arc@
+ \tl_if_empty:NF \l_@@_rule_color_tl
+ { \tl_put_right:Nx \l_@@_tikz_rule_tl { , color = \l_@@_rule_color_tl } }
\pgfrememberpicturepositiononpagetrue
\pgf@relevantforpicturesizefalse
\@@_qpoint:n { col - \int_use:N \l_@@_local_start_int }
@@ -11481,7 +11456,7 @@ version 2005/12/01 or later.
{
\IfPackageLoadedTF { tikz }
{ }
- { \@@_error:n { tikz~in~custom-line~without~tikz }}
+ { \@@_error:n { tikz~in~custom-line~without~tikz } }
\bool_if:NT \l_@@_color_bool
{ \@@_error:n { color~in~custom-line~with~tikz } }
}
@@ -11589,25 +11564,10 @@ version 2005/12/01 or later.
{
% \end{macrocode}
% We use |\cs_set:cpn| and not |\cs_new:cpn| because we want a local definition.
-% Moreover, the command must \emph{not} be protected since it begins with |\noalign|.
+% Moreover, the command must \emph{not} be protected since it begins with
+% |\noalign| (which is in |\Hline|).
% \begin{macrocode}
- \cs_set:cpn { nicematrix - \l_@@_command_str }
- {
- \noalign
- {
- \@@_compute_rule_width:n { #1 }
- \skip_vertical:n { \l_@@_rule_width_dim }
- \tl_gput_right:Nx \g_@@_pre_code_after_tl
- {
- \@@_hline:n
- {
- #1 ,
- position = \int_eval:n { \c@iRow + 1 } ,
- total-width = \dim_use:N \l_@@_rule_width_dim
- }
- }
- }
- }
+ \cs_set:cpn { nicematrix - \l_@@_command_str } { \Hline [ #1 ] }
\seq_put_left:NV \l_@@_custom_line_commands_seq \l_@@_command_str
}
% \end{macrocode}
@@ -11697,7 +11657,7 @@ version 2005/12/01 or later.
% \end{macrocode}
% In the following line, the |\dim_use:N| is mandatory since we do an expansion.
% \begin{macrocode}
- \tl_gput_right:Nx \g_@@_preamble_tl
+ \tl_gput_right:Nx \g_@@_array_preamble_tl
{ \exp_not:N ! { \skip_horizontal:n { \dim_use:N \l_@@_rule_width_dim } } }
\tl_gput_right:Nx \g_@@_pre_code_after_tl
{
@@ -12365,9 +12325,7 @@ version 2005/12/01 or later.
% |\multicolumn{|$n$|}{...}{...}| with $n$>1 was issued and in
% |\g_@@_multicolumn_sizes_seq| the correspondant values of $n$.
% \begin{macrocode}
- \cs_if_exist_use:NF
\seq_map_pairwise_function:NNN
- \seq_mapthread_function:NNN
\g_@@_multicolumn_cells_seq
\g_@@_multicolumn_sizes_seq
\@@_node_for_multicolumn:nn
@@ -13839,7 +13797,7 @@ version 2005/12/01 or later.
borders .clist_set:N = \l_@@_borders_clist ,
rounded-corners .dim_set:N = \l_@@_rounded_corners_dim ,
rounded-corners .default:n = 4 pt ,
- line-width .dim_set:N = \l_@@_line_width_dim ,
+ line-width .dim_set:N = \l_@@_line_width_dim
}
% \end{macrocode}
%
@@ -13847,21 +13805,44 @@ version 2005/12/01 or later.
% 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.
+% a comma-separated list of the Tikz keys used with the path. However, among
+% those keys, you have added in \pkg{nicematrix} a special key |offset| (an
+% offset for the rectangle of the block). That's why we have to extract that key
+% first.
% \begin{macrocode}
-\cs_new_protected:Npn \@@_block_tikz:nnnnn #1 #2 #3 #4 #5
+\cs_new_protected:Npn \@@_block_tikz:nnnnn #1 #2 #3 #4 #5
{
\begin { tikzpicture }
\@@_clip_with_rounded_corners:
\clist_map_inline:nn { #5 }
{
- \path [ ##1 ]
- ( #1 -| #2 )
+ \keys_set_known:nnN { NiceMatrix / SpecialOffset } { ##1 } \l_tmpa_tl
+ \use:x { \exp_not:N \path [ \l_tmpa_tl ] }
+ (
+ [
+ xshift = \dim_use:N \l_@@_offset_dim ,
+ yshift = - \dim_use:N \l_@@_offset_dim
+ ]
+ #1 -| #2
+ )
rectangle
- ( \int_eval:n { #3 + 1 } -| \int_eval:n { #4 + 1 } ) ;
+ (
+ [
+ xshift = - \dim_use:N \l_@@_offset_dim ,
+ yshift = \dim_use:N \l_@@_offset_dim
+ ]
+ \int_eval:n { #3 + 1 } -| \int_eval:n { #4 + 1 }
+ ) ;
}
\end { tikzpicture }
}
+\cs_generate_variant:Nn \@@_block_tikz:nnnnn { n n n n V }
+% \end{macrocode}
+%
+% \medskip
+% \begin{macrocode}
+\keys_define:nn { NiceMatrix / SpecialOffset }
+ { offset .dim_set:N = \l_@@_offset_dim }
% \end{macrocode}
%
%
@@ -13898,7 +13879,7 @@ version 2005/12/01 or later.
% \begin{macrocode}
\keys_define:nn { NiceMatrix / Auto }
{
- columns-type .code:n = \@@_set_preamble:Nn \l_@@_columns_type_tl { #1 } ,
+ columns-type .tl_set:N = \l_@@_columns_type_tl ,
columns-type .value_required:n = true ,
l .meta:n = { columns-type = l } ,
r .meta:n = { columns-type = r } ,
@@ -13934,7 +13915,7 @@ version 2005/12/01 or later.
% preamble which is yet transformed (by using |\l_@@_columns_type_tl| which is
% yet nicematrix-ready).
% \begin{macrocode}
- \bool_set_false:N \l_@@_preamble_bool
+ % \bool_set_false:N \l_@@_preamble_bool
\use:x
{
\exp_not:N \begin { NiceArrayWithDelims } { #1 } { #2 }
@@ -14133,27 +14114,6 @@ version 2005/12/01 or later.
% \section{The keyword \textbackslash CodeAfter}
%
%
-% The |\CodeAfter| (inserted with the key |code-after| or after the keyword
-% |\CodeAfter|) may always begin with a list of pairs \textsl{key=value} between
-% square brackets. Here is the corresponding set of keys.
-% \begin{macrocode}
-\keys_define:nn { NiceMatrix }
- {
- CodeAfter / rules .inherit:n = NiceMatrix / rules ,
- CodeAfter / sub-matrix .inherit:n = NiceMatrix / sub-matrix
- }
-\keys_define:nn { NiceMatrix / CodeAfter }
- {
- sub-matrix .code:n = \keys_set:nn { NiceMatrix / sub-matrix } { #1 } ,
- sub-matrix .value_required:n = true ,
- delimiters / color .tl_set:N = \l_@@_delimiters_color_tl ,
- delimiters / color .value_required:n = true ,
- rules .code:n = \keys_set:nn { NiceMatrix / rules } { #1 } ,
- rules .value_required:n = true ,
- xdots .code:n = \keys_set:nn { NiceMatrix / xdots } { #1 } ,
- unknown .code:n = \@@_error:n { Unknown~key~for~CodeAfter }
- }
-% \end{macrocode}
%
% \medskip
% In fact, in this subsection, we define the user command |\CodeAfter| for the
@@ -14334,13 +14294,11 @@ version 2005/12/01 or later.
vlines .clist_set:N = \l_@@_submatrix_vlines_clist ,
vlines .default:n = all ,
hvlines .meta:n = { hlines, vlines } ,
- hvlines .value_forbidden:n = true ,
+ hvlines .value_forbidden:n = true
}
\keys_define:nn { NiceMatrix }
{
SubMatrix .inherit:n = NiceMatrix / sub-matrix ,
- CodeAfter / sub-matrix .inherit:n = NiceMatrix / sub-matrix ,
- NiceMatrix / sub-matrix .inherit:n = NiceMatrix / sub-matrix ,
NiceArray / sub-matrix .inherit:n = NiceMatrix / sub-matrix ,
pNiceArray / sub-matrix .inherit:n = NiceMatrix / sub-matrix ,
NiceMatrixOptions / sub-matrix .inherit:n = NiceMatrix / sub-matrix ,
@@ -14385,6 +14343,8 @@ version 2005/12/01 or later.
}
% \end{macrocode}
%
+%
+%
% \bigskip
% \begin{macrocode}
\NewDocumentCommand \@@_SubMatrix_in_code_before { m m m m ! O { } }
@@ -15133,6 +15093,109 @@ version 2005/12/01 or later.
{ }
}
% \end{macrocode}
+%
+% \bigskip
+% \section{The command TikzEveryCell}
+%
+% \begin{macrocode}
+
+
+\bool_new:N \l_@@_not_empty_bool
+\bool_new:N \l_@@_empty_bool
+
+\keys_define:nn { NiceMatrix / TikzEveryCell }
+ {
+ not-empty .code:n =
+ \bool_lazy_or:nnTF
+ \l_@@_in_code_after_bool
+ \g_@@_recreate_cell_nodes_bool
+ { \bool_set_true:N \l_@@_not_empty_bool }
+ { \@@_error:n { detection~of~empty~cells } } ,
+ not-empty .value_forbidden:n = true ,
+ empty .code:n =
+ \bool_lazy_or:nnTF
+ \l_@@_in_code_after_bool
+ \g_@@_recreate_cell_nodes_bool
+ { \bool_set_true:N \l_@@_empty_bool }
+ { \@@_error:n { detection~of~empty~cells } } ,
+ empty .value_forbidden:n = true ,
+ unknown .code:n = \@@_error:n { Unknown~key~for~TikzEveryCell }
+ }
+
+
+\NewDocumentCommand { \@@_TikzEveryCell } { O { } m }
+ {
+ \IfPackageLoadedTF { tikz }
+ {
+ \group_begin:
+ \keys_set:nn { NiceMatrix / TikzEveryCell } { #1 }
+ \tl_set:Nn \l_tmpa_tl { #2 }
+ \seq_map_inline:Nn \g_@@_pos_of_blocks_seq
+ { \@@_for_a_block:nnnnn ##1 }
+ \@@_all_the_cells:
+ \group_end:
+ }
+ { \@@_error:n { TikzEveryCell~without~tikz } }
+ }
+
+\tl_new:N \@@_i_tl
+\tl_new:N \@@_j_tl
+
+\cs_new_protected:Nn \@@_all_the_cells:
+ {
+ \int_step_variable:nNn { \int_use:c { c@iRow } } \@@_i_tl
+ {
+ \int_step_variable:nNn { \int_use:c { c@jCol } } \@@_j_tl
+ {
+ \cs_if_exist:cF { cell - \@@_i_tl - \@@_j_tl }
+ {
+ \exp_args:NNx \seq_if_in:NnF \l_@@_corners_cells_seq
+ { \@@_i_tl - \@@_j_tl }
+ {
+ \bool_set_false:N \l_tmpa_bool
+ \cs_if_exist:cTF
+ { pgf @ sh @ ns @ \@@_env: - \@@_i_tl - \@@_j_tl }
+ {
+ \bool_if:NF \l_@@_empty_bool
+ { \bool_set_true:N \l_tmpa_bool }
+ }
+ {
+ \bool_if:NF \l_@@_not_empty_bool
+ { \bool_set_true:N \l_tmpa_bool }
+ }
+ \bool_if:NT \l_tmpa_bool
+ {
+ \@@_block_tikz:nnnnV
+ \@@_i_tl \@@_j_tl \@@_i_tl \@@_j_tl \l_tmpa_tl
+ }
+ }
+ }
+ }
+ }
+ }
+
+\cs_new_protected:Nn \@@_for_a_block:nnnnn
+ {
+ \bool_if:NF \l_@@_empty_bool
+ {
+ \@@_block_tikz:nnnnV
+ { #1 } { #2 } { #3 } { #4 } \l_tmpa_tl
+ }
+ \@@_mark_cells_of_block:nnnn { #1 } { #2 } { #3 } { #4 }
+ }
+
+\cs_new_protected:Nn \@@_mark_cells_of_block:nnnn
+ {
+ \int_step_inline:nnn { #1 } { #3 }
+ {
+ \int_step_inline:nnn { #2 } { #4 }
+ { \cs_set:cpn { cell - ##1 - ####1 } { } }
+ }
+ }
+
+
+% \end{macrocode}
+%
%
% \bigskip
% \section{The command \textbackslash ShowCellNames}
@@ -15494,27 +15557,7 @@ version 2005/12/01 or later.
}
}
}
- {
- \IfPackageLoadedTF { tabularx }
- {
- \str_if_eq:VnTF \g_@@_name_env_str { NiceTabularX }
- {
- \int_compare:nNnTF \c@iRow = \c_zero_int
- { \@@_fatal:n { X~columns~with~tabularx } }
- {
- \@@_fatal:nn { too~much~cols~for~array }
- {
- However,~this~message~may~be~erroneous:~
- maybe~you~have~used~X~columns~while~'tabularx'~is~loaded,~
- ~which~is~forbidden~(however,~it's~still~possible~to~use~
- X~columns~in~{NiceTabularX}).
- }
- }
- }
- { \@@_fatal:nn { too~much~cols~for~array } { } }
- }
- { \@@_fatal:nn { too~much~cols~for~array } { } }
- }
+ { \@@_fatal:nn { too~much~cols~for~array } }
}
% \end{macrocode}
%
@@ -15593,22 +15636,11 @@ version 2005/12/01 or later.
~you~try~to~use~more~columns~than~allowed~by~your~
\@@_full_name_env:.\@@_message_hdotsfor:\ The~maximal~number~of~columns~is~
\int_use:N \g_@@_static_num_of_col_int\
- ~(plus~the~potential~exterior~ones).~#1
+ ~(plus~the~potential~exterior~ones).
This~error~is~fatal.
}
% \end{macrocode}
%
-% \medskip
-% \begin{macrocode}
-\@@_msg_new:nn { X~columns~with~tabularx }
- {
- There~is~a~problem.\\
- You~have~probably~used~X~columns~in~your~environment~{\g_@@_name_env_str}.~
- That's~not~allowed~because~'tabularx'~is~loaded~(however,~you~can~use~X~columns~
- in~an~environment~{NiceTabularX}).\\
- This~error~is~fatal.
- }
-% \end{macrocode}
%
% \begin{macrocode}
\@@_msg_new:nn { columns~not~used }
@@ -15735,6 +15767,16 @@ version 2005/12/01 or later.
% \end{macrocode}
%
% \begin{macrocode}
+\@@_msg_new:nn { Unknown~key~for~TikzEveryCell }
+ {
+ Unknown~key.\\
+ There~is~only~two~keys~available~here:~
+ 'empty'~and~'not-empty'.\\
+ Your~key~'\l_keys_key_str'~will~be~ignored.
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
\@@_msg_new:nn { Unknown~key~for~rotate }
{
Unknown~key.\\
@@ -15876,6 +15918,17 @@ version 2005/12/01 or later.
% \end{macrocode}
%
% \begin{macrocode}
+\@@_msg_new:nn { detection~of~empty~cells }
+ {
+ Problem~with~'not-empty'\\
+ For~technical~reasons,~you~must~activate~
+ 'recreate-cell-nodes'~in~\token_to_str:N \CodeBefore\
+ in~order~to~use~the~key~'\l_keys_key_str'.\\
+ That~key~will~be~ignored.
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
\@@_msg_new:nn { ragged2e~not~loaded }
{
You~have~to~load~'ragged2e'~in~order~to~use~the~key~'\l_keys_key_str'~in~
@@ -16066,9 +16119,19 @@ version 2005/12/01 or later.
% \end{macrocode}
%
% \begin{macrocode}
+\@@_msg_new:nn { TikzEveryCell~without~tikz }
+ {
+ TikZ~not~loaded.\\
+ You~can't~use~\token_to_str:N \TikzEveryCell\
+ because~you~have~not~loaded~tikz.~
+ This~command~will~be~ignored.
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
\@@_msg_new:nn { tikz~key~without~tikz }
{
- Tikz~not~loaded.\\
+ TikZ~not~loaded.\\
You~can't~use~the~key~'tikz'~for~the~command~'\token_to_str:N
\Block'~because~you~have~not~loaded~tikz.~
This~key~will~be~ignored.
@@ -16190,6 +16253,15 @@ version 2005/12/01 or later.
% \end{macrocode}
%
% \begin{macrocode}
+\@@_msg_new:nn { tikz~without~tikz }
+ {
+ Tikz~not~loaded.\\
+ You~can't~use~the~key~'tikz'~here~because~Tikz~is~not~
+ loaded.~If~you~go~on,~that~key~will~be~ignored.
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
\@@_msg_new:nn { tikz~in~custom-line~without~tikz }
{
Tikz~not~loaded.\\
@@ -16714,6 +16786,15 @@ version 2005/12/01 or later.
}
% \end{macrocode}
%
+% \begin{macrocode}
+\@@_msg_new:nn { NiceTabularX~without~X }
+ {
+ NiceTabularX~without~X.\\
+ You~should~not~use~{NiceTabularX}~without~X~columns.\\
+ However,~you~can~go~on.
+ }
+% \end{macrocode}
+%
% \newpage
% \tableofcontents
%