From 0770d0964f61096883b1a75524e16c31da08b9a4 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Fri, 19 Jul 2019 20:42:46 +0000 Subject: nicematrix (19jul19) git-svn-id: svn://tug.org/texlive/trunk@51680 c570f23f-e606-0410-a88d-b1316a301751 --- .../texmf-dist/tex/latex/nicematrix/nicematrix.sty | 453 +++++++++++++-------- 1 file changed, 276 insertions(+), 177 deletions(-) (limited to 'Master/texmf-dist/tex/latex/nicematrix') diff --git a/Master/texmf-dist/tex/latex/nicematrix/nicematrix.sty b/Master/texmf-dist/tex/latex/nicematrix/nicematrix.sty index 86dc6b39765..a1e3830d1cf 100644 --- a/Master/texmf-dist/tex/latex/nicematrix/nicematrix.sty +++ b/Master/texmf-dist/tex/latex/nicematrix/nicematrix.sty @@ -18,8 +18,8 @@ %% and version 1.3 or later is part of all distributions of %% LaTeX version 2005/12/01 or later. %% -\def\myfileversion{2.2.1} -\def\myfiledate{2019/07/02} +\def\myfileversion{2.3} +\def\myfiledate{2019/07/18} \RequirePackage{tikz} \usetikzlibrary{fit} \RequirePackage{expl3}[2019/02/15] @@ -36,6 +36,12 @@ \RequirePackage { array } \RequirePackage { amsmath } \RequirePackage { xparse } [ 2018-10-17 ] +\cs_new_protected:Nn \__nm_error:n { \msg_error:nn { nicematrix } { #1 } } +\cs_new_protected:Nn \__nm_error:nn { \msg_error:nn { nicematrix } { #1 } { #2 } } +\cs_new_protected:Npn \__nm_msg_new:nn { \msg_new:nnn { nicematrix } } +\cs_new_protected:Npn \__nm_msg_new:nnn { \msg_new:nnnn { nicematrix } } +\cs_new_protected:Npn \__nm_msg_redirect_name:nn + { \msg_redirect_name:nnn { nicematrix } } \bool_new:N \c__nm_revtex_bool \@ifclassloaded { revtex4-1 } { \bool_set_true:N \c__nm_revtex_bool } @@ -43,21 +49,33 @@ \@ifclassloaded { revtex4-2 } { \bool_set_true:N \c__nm_revtex_bool } { } -\cs_new_protected:Nn \__nm_error:n { \msg_error:nn { nicematrix } { #1 } } -\cs_new_protected:Nn \__nm_error:nn { \msg_error:nn { nicematrix } { #1 } { #2 } } -\cs_new_protected:Npn \__nm_msg_new:nn { \msg_new:nnn { nicematrix } } -\cs_new_protected:Npn \__nm_msg_new:nnn { \msg_new:nnnn { nicematrix } } -\cs_new_protected:Npn \__nm_msg_redirect_name:nn - { \msg_redirect_name:nnn { nicematrix } } +\__nm_msg_new:nn { Draft~mode } + { The~compilation~is~in~draft~mode:~the~dotted~lines~won't~be~drawn. } +\bool_if:NT \c__nm_draft_bool + { \msg_warning:nn { nicematrix } { Draft~mode } } +\AtBeginDocument + { + \clist_map_inline:nn + { + siunitx + } + { + \bool_new:c { c__nm_#1_loaded_bool } + \@ifpackageloaded { #1 } + { \bool_set_true:c { c__nm_#1_loaded_bool } } + { } + } + } \ProvideDocumentCommand \iddots { } { \mathinner - { \mkern 1 mu - \raise \p@ \hbox { . } + { + \mkern 1 mu + \raise \p@ \hbox:n { . } \mkern 2 mu - \raise 4 \p@ \hbox { . } + \raise 4 \p@ \hbox:n { . } \mkern 2 mu - \raise 7 \p@ \vbox { \kern 7 pt \hbox { . } } \mkern 1 mu + \raise 7 \p@ \vbox { \kern 7 pt \hbox:n { . } } \mkern 1 mu } } \int_new:N \g__nm_env_int @@ -68,18 +86,54 @@ \bool_new:N \l__nm_exterior_column_bool \bool_new:N \g__nm_exterior_column_found_bool \bool_new:N \l__nm_in_NiceArray_bool -\seq_new:N \c__nm_env_with_preamble_seq -\seq_set_from_clist:Nn \c__nm_env_with_preamble_seq +\cs_set_protected:Npn \__nm_adapt_S_column: + { + \bool_if:NT \c__nm_siunitx_loaded_bool + { + \group_begin: + \@temptokena = { } + \cs_set_eq:NN \NC@find \prg_do_nothing: + \NC@rewrite@S { } + \exp_args:NNo \tl_gset:Nn \g_tmpa_tl { \tex_the:D \@temptokena } + \group_end: + \tl_new:N \c__nm_table_collect_begin_tl + \tl_set:Nx \l_tmpa_tl { \tl_item:Nn \g_tmpa_tl 2 } + \tl_gset:Nx \c__nm_table_collect_begin_tl { \tl_item:Nn \l_tmpa_tl 1 } + \tl_new:N \c__nm_table_print_tl + \tl_gset:Nx \c__nm_table_print_tl { \tl_item:Nn \g_tmpa_tl { -1 } } + } + \cs_gset_eq:NN \__nm_adapt_S_column: \prg_do_nothing: + } +\cs_new_protected:Npn \__nm_renew_NC@rewrite@S: + { + \renewcommand*{\NC@rewrite@S}[1][] + { + \@temptokena \exp_after:wN + { + \tex_the:D \@temptokena + > { \__nm_Cell: \c__nm_table_collect_begin_tl S {##1} } + c + < { \c__nm_table_print_tl \__nm_end_Cell: } + } + \NC@find + } + } +\__nm_msg_new:nn { Option~Transparent~suppressed } { - NiceArray , NiceArrayCwithDelims , pNiceArrayC , vNiceArrayC , VNiceArrayC , - bNiceArrayC , BNiceArrayC , NiceArrayRCwithDelims , pNiceArrayRC , - vNiceArrayRC , VNiceArrayRC , bNiceArrayRC , BNiceArrayRC + The~option~'Transparent'~has~been~renamed~'transparent'.\\ + However,~you~can~go~on~for~this~time. + } +\__nm_msg_new:nn { Option~RenewMatrix~suppressed } + { + The~option~'RenewMatrix~has~been~renamed~'renew-matrix'.\\ + However,~you~can~go~on~for~this~time. } \str_new:N \l__nm_pos_env_str \str_set:Nn \l__nm_pos_env_str c \bool_new:N \l__nm_exterior_arraycolsep_bool \bool_new:N \l__nm_parallelize_diags_bool \bool_set_true:N \l__nm_parallelize_diags_bool +\bool_new:N \l__nm_hlines_bool \bool_new:N \l__nm_nullify_dots_bool \bool_new:N \l__nm_auto_columns_width_bool \tl_new:N \l__nm_code_for_last_col_tl @@ -96,6 +150,7 @@ \dim_new:N \g__nm_extra_right_margin_dim \keys_define:nn { NiceMatrix / Global } { + hlines .bool_set:N = \l__nm_hlines_bool , parallelize-diags .bool_set:N = \l__nm_parallelize_diags_bool , parallelize-diags .default:n = true , renew-dots .bool_set:N = \l__nm_renew_dots_bool , @@ -156,10 +211,13 @@ { renew-matrix .code:n = \__nm_renew_matrix: , renew-matrix .value_forbidden:n = true , - RenewMatrix .meta:n = renew-matrix , + RenewMatrix .code:n = \__nm_error:n { Option~RenewMatrix~suppressed } + \__nm_renew_matrix: , transparent .meta:n = { renew-dots , renew-matrix } , transparent .value_forbidden:n = true, - Transparent .meta:n = transparent, + Transparent .code:n = \__nm_error:n { Option~Transparent~suppressed } + \__nm_renew_matrix: + \bool_set_true:N \l__nm_renew_dots_bool , code-for-last-col .tl_set:N = \l__nm_code_for_last_col_tl , code-for-last-col .value_required:n = true , code-for-first-row .tl_set:N = \l__nm_code_for_first_row_tl , @@ -189,6 +247,7 @@ allow-duplicate-names,~ code-for-last-col,~ exterior-arraycolsep,~ + hlines,~ left-margin,~ letter-for-dotted-lines,~ nullify-dots,~ @@ -221,6 +280,7 @@ create-extra-nodes,~ extra-left-margin,~ extra-right-margin,~ + hlines,~ left-margin,~ name,~ nullify-dots,~ @@ -265,6 +325,7 @@ columns-width,~ extra-left-margin,~ extra-right-margin,~ + hlines,~ left-margin,~ name,~ nullify-dots,~ @@ -279,12 +340,14 @@ \int_compare:nNnT \g__nm_column_int = 1 { \int_gincr:N \g__nm_row_int } \int_gset:Nn \g__nm_column_total_int { \int_max:nn \g__nm_column_total_int \g__nm_column_int } - \hbox_set:Nw \l_tmpa_box $ % $ + \hbox_set:Nw \l_tmpa_box + \c_math_toggle_token \int_compare:nNnT \g__nm_row_int = \c_zero_int \l__nm_code_for_first_row_tl } \cs_new_protected:Nn \__nm_end_Cell: - { $ % $ + { + \c_math_toggle_token \hbox_set_end: \dim_gset:Nn \g__nm_max_cell_width_dim { \dim_max:nn \g__nm_max_cell_width_dim { \box_wd:N \l_tmpa_box } } @@ -344,41 +407,11 @@ nested.~You~can~go~on,~but,~maybe,~you~will~have~errors~or~an~incorrect~ result. } -\cs_new_protected:Npn \__nm_define_dots: +\__nm_msg_new:nn { Outside~math~mode } { - \cs_set_eq:NN \Ldots \__nm_Ldots - \cs_set_eq:NN \Cdots \__nm_Cdots - \cs_set_eq:NN \Vdots \__nm_Vdots - \cs_set_eq:NN \Ddots \__nm_Ddots - \cs_set_eq:NN \Iddots \__nm_Iddots - \bool_if:NT \l__nm_renew_dots_bool - { - \cs_set_eq:NN \ldots \__nm_Ldots - \cs_set_eq:NN \cdots \__nm_Cdots - \cs_set_eq:NN \vdots \__nm_Vdots - \cs_set_eq:NN \ddots \__nm_Ddots - \cs_set_eq:NN \iddots \__nm_Iddots - \cs_set_eq:NN \dots \__nm_Ldots - \cs_set_eq:NN \hdotsfor \__nm_Hdotsfor - } - } -\cs_new_protected:Npn \__nm_define_dots_to_nil: - { - \cs_set_eq:NN \Ldots \prg_do_nothing: - \cs_set_eq:NN \Cdots \prg_do_nothing: - \cs_set_eq:NN \Vdots \prg_do_nothing: - \cs_set_eq:NN \Ddots \prg_do_nothing: - \cs_set_eq:NN \Iddots \prg_do_nothing: - \bool_if:NT \l__nm_renew_dots_bool - { - \cs_set_eq:NN \ldots \prg_do_nothing: - \cs_set_eq:NN \cdots \prg_do_nothing: - \cs_set_eq:NN \vdots \prg_do_nothing: - \cs_set_eq:NN \ddots \prg_do_nothing: - \cs_set_eq:NN \iddots \prg_do_nothing: - \cs_set_eq:NN \dots \prg_do_nothing: - \cs_set_eq:NN \hdotsfor \__nm_Hdotsfor - } + The~environment~\{\@currenvir\}~can~be~used~only~in~math~mode~ + (and~not~in~\token_to_str:N \vcenter).\_ + If~you~go~on,~you~will~have~other~errors. } \cs_new_protected:Nn \__nm_renewcolumntype:nn { @@ -399,7 +432,8 @@ \box_move_down:nn \l_tmpa_dim { \vbox:n - { \hbox_to_wd:nn { \box_wd:N \l_tmpb_box } + { + \hbox_to_wd:nn { \box_wd:N \l_tmpb_box } { \hfil \tikz [ remember~picture , overlay ] @@ -434,13 +468,21 @@ } } } +\cs_new_protected:Npn \__nm_test_if_math_mode: + { + \ifmmode \else + \__nm_error:n { Outside~math~mode } + \fi + } \NewDocumentEnvironment { NiceArray } { O { } m ! O { } } { + \__nm_adapt_S_column: + \__nm_test_if_math_mode: \bool_if:NT \l__nm_in_NiceArray_bool { \__nm_error:n { Yet~in~NiceArray } } + \bool_set_true:N \l__nm_in_NiceArray_bool \cs_if_exist:NT \tikz@library@external@loaded { \tikzset { external / export = false } } - \bool_set_true:N \l__nm_in_NiceArray_bool \group_insert_after:N \__nm_after_array: \tl_gclear_new:N \g__nm_lines_to_draw_tl \int_gincr:N \g__nm_env_int @@ -454,7 +496,7 @@ { \group_insert_after:N \__nm_write_max_cell_width: \cs_if_free:cTF { __nm_max_cell_width_ \int_use:N \g__nm_env_int } - { \dim_set:Nn \l__nm_columns_width_dim \c_zero_dim } + { \dim_zero:N \l__nm_columns_width_dim } { \dim_set:Nx \l__nm_columns_width_dim { \use:c { __nm_max_cell_width _ \int_use:N \g__nm_env_int } } @@ -475,7 +517,21 @@ \tl_gset_eq:NN \g__nm_name_str \l__nm_name_str \cs_set:Npn \ialign { - \everycr { \noalign { \int_gzero:N \g__nm_column_int } } + \everycr + { + \noalign + { + \int_gzero:N \g__nm_column_int + \bool_if:NT \l__nm_hlines_bool + { + \int_compare:nNnT \g__nm_row_int > { -1 } + { + \hrule \@height \arrayrulewidth + \skip_vertical:n { - \arrayrulewidth } + } + } + } + } \tabskip = \c_zero_skip \cs_set:Npn \ialign { @@ -510,22 +566,30 @@ { \int_gset_eq:NN \g__nm_last_vdotted_col_int \g__nm_column_int \tl_gput_right:Nx \g__nm_code_after_tl - { - \exp_not:N \__nm_vdottedline:n - \exp_not:N { - \int_use:N \g__nm_column_int - \exp_not:N } - } + { \__nm_vdottedline:n { \int_use:N \g__nm_column_int } } } } } - \bool_if:NTF \c__nm_draft_bool - \__nm_define_dots_to_nil: - \__nm_define_dots: + \cs_set_eq:NN \Ldots \__nm_Ldots + \cs_set_eq:NN \Cdots \__nm_Cdots + \cs_set_eq:NN \Vdots \__nm_Vdots + \cs_set_eq:NN \Ddots \__nm_Ddots + \cs_set_eq:NN \Iddots \__nm_Iddots \cs_set_eq:NN \hdottedline \__nm_hdottedline: \cs_set_eq:NN \Hspace \__nm_Hspace: \cs_set_eq:NN \Hdotsfor \__nm_Hdotsfor \cs_set_eq:NN \multicolumn \__nm_multicolumn:nnn + \bool_if:NT \l__nm_renew_dots_bool + { + \cs_set_eq:NN \ldots \__nm_Ldots + \cs_set_eq:NN \cdots \__nm_Cdots + \cs_set_eq:NN \vdots \__nm_Vdots + \cs_set_eq:NN \ddots \__nm_Ddots + \cs_set_eq:NN \iddots \__nm_Iddots + \cs_set_eq:NN \dots \__nm_Ldots + \cs_set_eq:NN \hdotsfor \__nm_Hdotsfor + } + \bool_if:NT \c__nm_siunitx_loaded_bool \__nm_renew_NC@rewrite@S: \seq_gclear_new:N \g__nm_empty_cells_seq \seq_gclear_new:N \g__nm_multicolumn_cells_seq \seq_gclear_new:N \g__nm_multicolumn_sizes_seq @@ -538,7 +602,8 @@ \cs_set_eq:NN \@ifnextchar \new@ifnextchar \bool_if:NF \l__nm_exterior_arraycolsep_bool { \skip_horizontal:n { - \arraycolsep } } - \skip_horizontal:n { \l__nm_left_margin_dim + \l__nm_extra_left_margin_dim } + \skip_horizontal:n \l__nm_left_margin_dim + \skip_horizontal:n \l__nm_extra_left_margin_dim \bool_if:NTF \c__nm_revtex_bool { \cs_set_eq:NN \@acoll \@arrayacol @@ -553,23 +618,38 @@ { \endarray \bool_if:NF \l__nm_exterior_arraycolsep_bool { \skip_horizontal:n { - \arraycolsep } } - \skip_horizontal:n - { \g__nm_right_margin_dim + \g__nm_extra_right_margin_dim } + \skip_horizontal:n \g__nm_right_margin_dim + \skip_horizontal:n \g__nm_extra_right_margin_dim } \NewDocumentEnvironment { pNiceMatrix } { } - { \left( \begin{NiceMatrix} } + { + \__nm_test_if_math_mode: + \left( \begin{NiceMatrix} + } { \end{NiceMatrix} \right) } \NewDocumentEnvironment { bNiceMatrix } { } - { \left[ \begin{NiceMatrix} } + { + \__nm_test_if_math_mode: + \left[ \begin{NiceMatrix} + } { \end{NiceMatrix} \right] } \NewDocumentEnvironment { BNiceMatrix } { } - { \left\{ \begin{NiceMatrix} } + { + \__nm_test_if_math_mode: + \left\{ \begin{NiceMatrix} + } { \end{NiceMatrix} \right\} } \NewDocumentEnvironment { vNiceMatrix } { } - { \left\lvert \begin{NiceMatrix} } + { + \__nm_test_if_math_mode: + \left\lvert \begin{NiceMatrix} + } { \end{NiceMatrix} \right\rvert } \NewDocumentEnvironment { VNiceMatrix } {} - { \left\lVert \begin{NiceMatrix} } + { + \__nm_test_if_math_mode: + \left\lVert \begin{NiceMatrix} + } { \end{NiceMatrix} \right\rVert } \cs_new_protected:Nn \__nm_write_max_cell_width: { @@ -581,10 +661,13 @@ \cs_gset:cpn { __nm_max_cell_width_ \int_use:N \g__nm_env_int } { \dim_use:N \g__nm_max_cell_width_dim } } - \iow_now:Nx \@mainaux + \str_if_empty:NF \g__nm_name_str { - \cs_gset:cpn { __nm_max_cell_width_ \g__nm_name_str } - { \dim_use:N \g__nm_max_cell_width_dim } + \iow_now:Nx \@mainaux + { + \cs_gset:cpn { __nm_max_cell_width_ \g__nm_name_str } + { \dim_use:N \g__nm_max_cell_width_dim } + } } \iow_now:Nn \@mainaux \ExplSyntaxOff } @@ -606,32 +689,37 @@ \pgfpointanchor \l_tmpa_tl { west } \dim_gset:Nn \g_tmpb_dim \pgf@x \end { pgfpicture } - \dim_compare:nTF - { \dim_abs:n { \g_tmpb_dim - \g_tmpa_dim } < 0.5 pt } + \dim_compare:nNnTF + { \dim_abs:n { \g_tmpb_dim - \g_tmpa_dim } } < { 0.5 pt } \prg_return_false: \prg_return_true: } } } -\cs_new_protected:Nn \__nm_instruction_of_type:n +\bool_if:NTF \c__nm_draft_bool + { \cs_set_protected:Npn \__nm_instruction_of_type:n #1 { } } { - \tl_gput_right:Nx \g__nm_lines_to_draw_tl + \cs_new_protected:Npn \__nm_instruction_of_type:n #1 { - \exp_not:c { __nm _ draw _ #1 : nn } - { \int_use:N \g__nm_row_int } - { \int_use:N \g__nm_column_int } + \tl_gput_right:Nx \g__nm_lines_to_draw_tl + { + \exp_not:c { __nm _ draw _ #1 : nn } + { \int_use:N \g__nm_row_int } + { \int_use:N \g__nm_column_int } + } } } \cs_new_protected:Nn \__nm_after_array: { - \int_compare:nNnTF \g__nm_row_int > 0 + \int_compare:nNnTF \g__nm_row_int > \c_zero_int \__nm_after_array_i: { \__nm_error:n { Zero~row } } } \__nm_msg_new:nn { Zero~row } { - There~is~a~problem.~Maybe~your~environment~is~empty.~Maybe~you~have~used~L,~ - ~C~and~R~instead~of~l,~c~and~r~in~the~preamble~of~your~environment.\\ + There~is~a~problem.~Maybe~your~environment~\{\@currenvir\}~is~empty.~ + Maybe~you~have~used~L,~C~and~R~instead~of~l,~c~and~r~in~the~preamble~ + of~your~environment. \\ If~you~go~on,~the~result~may~be~incorrect. } \cs_new_protected:Nn \__nm_after_array_i: @@ -1079,7 +1167,7 @@ \hspace } \cs_set_eq:NN \__nm_old_multicolumn \multicolumn -\cs_new:Nn \__nm_multicolumn:nnn +\cs_new:Npn \__nm_multicolumn:nnn #1 #2 #3 { \__nm_old_multicolumn { #1 } { #2 } { #3 } \int_compare:nNnT #1 > 1 @@ -1090,16 +1178,23 @@ } \int_gadd:Nn \g__nm_column_int { #1 - 1 } } -\NewDocumentCommand \__nm_Hdotsfor { O { } m } +\bool_if:NTF \c__nm_draft_bool + { + \NewDocumentCommand \__nm_Hdotsfor { O { } m } + { \prg_replicate:nn { #2 - 1 } { & } } + } { - \tl_gput_right:Nx \g__nm_lines_to_draw_tl + \NewDocumentCommand \__nm_Hdotsfor { O { } m } { - \exp_not:N \__nm_draw_Hdotsfor:nnn - { \int_use:N \g__nm_row_int } - { \int_use:N \g__nm_column_int } - { #2 } + \tl_gput_right:Nx \g__nm_lines_to_draw_tl + { + \__nm_draw_Hdotsfor:nnn + { \int_use:N \g__nm_row_int } + { \int_use:N \g__nm_column_int } + { #2 } + } + \prg_replicate:nn { #2 - 1 } { & } } - \prg_replicate:nn { #2 - 1 } { & } } \cs_new_protected:Nn \__nm_draw_Hdotsfor:nnn { @@ -1159,10 +1254,16 @@ \__nm_draw_tikz_line: } \cs_generate_variant:Nn \dim_set:Nn { N v } -\cs_set:Npn \__nm_dotfill: - { \cleaders \hbox_to_wd:nn {.44em} {\hss .\hss } \hfill \kern \c_zero_dim } - -\cs_new:Nn \__nm_hdottedline: +\bool_if:NTF \c__nm_draft_bool + { \cs_set_eq:NN \__nm_dotfill: \prg_do_nothing: } + { + \cs_set:Npn \__nm_dotfill: + { + \cleaders \hbox_to_wd:nn { .44 em } { \hss .\hss } \hfill + \skip_horizontal:n \c_zero_dim + } + } +\cs_new:Npn \__nm_hdottedline: { \noalign { @@ -1180,19 +1281,6 @@ } } } -\__nm_msg_new:nn { Use~of~hdottedline~in~first~position } - { - You~can't~use~the~command~\token_to_str:N\hdottedline\ in~the~first~row~ - of~the~environment~\{\@currenvir\}.~But~maybe~you~have~used~l,~c~and~r~ - instead~of~L,~C,~R~in~the~preamble~of~the~array.\\ - If~you~go~on,~this~dotted~line~will~be~ignored. - } -\__nm_msg_new:nn { Use~of~hdottedline~in~first~position~bis } - { - You~can't~use~the~command~\token_to_str:N\hdottedline\ in~the~first~row~ - of~the~environment~\{\@currenvir\}. \\ - If~you~go~on,~this~dotted~line~will~be~ignored. - } \cs_new_protected:Nn \__nm_vdottedline:n { \int_compare:nNnTF #1 = \c_zero_int @@ -1293,6 +1381,7 @@ create-extra-nodes,~ extra-left-margin,~ extra-right-margin,~ + hlines,~ left-margin,~ name,~ nullify-dots,~ @@ -1312,11 +1401,11 @@ \int_gincr:N \g__nm_column_int \int_gset:Nn \g__nm_column_total_int { \int_max:nn \g__nm_column_total_int \g__nm_column_int } - \hbox_set:Nw \l_tmpa_box $ % $ + \hbox_set:Nw \l_tmpa_box \c_math_toggle_token \l__nm_code_for_last_col_tl } l - < { $ % $ + < { \c_math_toggle_token \hbox_set_end: \dim_gset:Nn \g__nm_width_last_col_dim { @@ -1363,6 +1452,7 @@ } \NewDocumentEnvironment { NiceArrayCwithDelims } { m m O { } m ! O { } } { + \__nm_test_if_math_mode: \dim_gzero_new:N \g__nm_width_last_col_dim \keys_set:nn { NiceMatrix / NiceArrayC } { #3 , #5 } \bool_set_false:N \l__nm_exterior_arraycolsep_bool @@ -1414,6 +1504,7 @@ create-extra-nodes,~ extra-left-margin,~ extra-right-margin,~ + hlines,~ left-margin,~ name,~ nullify-dots,~ @@ -1421,8 +1512,16 @@ renew-dots~ and~right-margin. } +\cs_new_protected:Npn \__nm_vline: + { + \int_compare:nNnTF \g__nm_column_int = \c_zero_int + { \int_compare:nNnF \g__nm_row_int < \c_zero_int \vline } + { \int_compare:nNnF \g__nm_row_int < \c_one_int \vline } + } \NewDocumentEnvironment { NiceArrayRCwithDelims } { m m O { } m ! O { } } { + \__nm_test_if_math_mode: + \cs_set_protected:Npn \@arrayrule { \@addtopreamble \__nm_vline: } \int_zero:N \l__nm_nb_first_row_int \dim_gzero_new:N \g__nm_width_last_col_dim \keys_set:nn { NiceMatrix / NiceArrayRC } { #3 , #5 } @@ -1430,25 +1529,25 @@ \str_set:Nn \l__nm_pos_env_str c \box_clear_new:N \l__nm_the_array_box \hbox_set:Nw \l__nm_the_array_box - $ % $ + \c_math_toggle_token \__nm_NiceArrayC:n { #4 } } { \end { NiceArray } - $ % $ + \c_math_toggle_token \hbox_set_end: \dim_set:Nn \l_tmpa_dim { ( \dim_max:nn - { 12 pt } - { \g__nm_max_ht_row_one_dim + \g__nm_max_dp_row_zero_dim } + { 12 pt } + { \g__nm_max_ht_row_one_dim + \g__nm_max_dp_row_zero_dim } ) + \g__nm_max_ht_row_zero_dim - \g__nm_max_ht_row_one_dim } \hbox_set:Nn \l_tmpa_box { - $ % $ + \c_math_toggle_token \left #1 \vcenter { @@ -1456,7 +1555,7 @@ \box_use_drop:N \l__nm_the_array_box } \right #2 - $ % $ + \c_math_toggle_token \skip_horizontal:n \g__nm_width_last_col_dim } \box_set_ht:Nn \l_tmpa_box { \box_ht:N \l_tmpa_box + \l_tmpa_dim } @@ -1482,44 +1581,44 @@ \cs_new_protected:Nn \__nm_create_extra_nodes: { \begin { tikzpicture } [ remember~picture , overlay ] - \int_step_variable:nnnNn \l__nm_nb_first_row_int 1 \g__nm_row_int \__nm_i + \int_step_variable:nnnNn \l__nm_nb_first_row_int 1 \g__nm_row_int \__nm_i: { - \dim_zero_new:c { l__nm_row_\__nm_i _min_dim } - \dim_set_eq:cN { l__nm_row_\__nm_i _min_dim } \c_max_dim - \dim_zero_new:c { l__nm_row_\__nm_i _max_dim } - \dim_set:cn { l__nm_row_\__nm_i _max_dim } { - \c_max_dim } + \dim_zero_new:c { l__nm_row_\__nm_i: _min_dim } + \dim_set_eq:cN { l__nm_row_\__nm_i: _min_dim } \c_max_dim + \dim_zero_new:c { l__nm_row_\__nm_i: _max_dim } + \dim_set:cn { l__nm_row_\__nm_i: _max_dim } { - \c_max_dim } } - \int_step_variable:nNn \g__nm_column_total_int \__nm_j + \int_step_variable:nNn \g__nm_column_total_int \__nm_j: { - \dim_zero_new:c { l__nm_column_\__nm_j _min_dim } - \dim_set_eq:cN { l__nm_column_\__nm_j _min_dim } \c_max_dim - \dim_zero_new:c { l__nm_column_\__nm_j _max_dim } - \dim_set:cn { l__nm_column_\__nm_j _max_dim } { - \c_max_dim } + \dim_zero_new:c { l__nm_column_\__nm_j: _min_dim } + \dim_set_eq:cN { l__nm_column_\__nm_j: _min_dim } \c_max_dim + \dim_zero_new:c { l__nm_column_\__nm_j: _max_dim } + \dim_set:cn { l__nm_column_\__nm_j: _max_dim } { - \c_max_dim } } - \int_step_variable:nnNn \l__nm_nb_first_row_int \g__nm_row_int \__nm_i + \int_step_variable:nnNn \l__nm_nb_first_row_int \g__nm_row_int \__nm_i: { - \int_step_variable:nNn \g__nm_column_total_int \__nm_j + \int_step_variable:nNn \g__nm_column_total_int \__nm_j: { \cs_if_exist:cT - { pgf@sh@ns@nm - \int_use:N \g__nm_env_int - \__nm_i- \__nm_j } + { pgf@sh@ns@nm - \int_use:N \g__nm_env_int - \__nm_i: - \__nm_j: } { \tikz@parse@node \pgfutil@firstofone ( nm - \int_use:N \g__nm_env_int - - \__nm_i - \__nm_j .south~west ) - \dim_set:cn { l__nm_row_\__nm_i _min_dim} - { \dim_min:vn { l__nm_row _ \__nm_i _min_dim } \pgf@y } - \seq_if_in:NxF \g__nm_multicolumn_cells_seq { \__nm_i - \__nm_j } + - \__nm_i: - \__nm_j: .south~west ) + \dim_set:cn { l__nm_row_\__nm_i: _min_dim} + { \dim_min:vn { l__nm_row _ \__nm_i: _min_dim } \pgf@y } + \seq_if_in:NxF \g__nm_multicolumn_cells_seq { \__nm_i: - \__nm_j: } { - \dim_set:cn { l__nm_column _ \__nm_j _ min_dim} - { \dim_min:vn { l__nm_column _ \__nm_j _min_dim } \pgf@x } + \dim_set:cn { l__nm_column _ \__nm_j: _min_dim} + { \dim_min:vn { l__nm_column _ \__nm_j: _min_dim } \pgf@x } } \tikz@parse@node \pgfutil@firstofone - ( nm - \int_use:N \g__nm_env_int - \__nm_i - \__nm_j .north~east ) - \dim_set:cn { l__nm_row _ \__nm_i _ max_dim } - { \dim_max:vn { l__nm_row _ \__nm_i _ max_dim } \pgf@y } - \seq_if_in:NxF \g__nm_multicolumn_cells_seq { \__nm_i - \__nm_j } + ( nm - \int_use:N \g__nm_env_int - \__nm_i: - \__nm_j: .north~east ) + \dim_set:cn { l__nm_row _ \__nm_i: _ max_dim } + { \dim_max:vn { l__nm_row _ \__nm_i: _ max_dim } \pgf@y } + \seq_if_in:NxF \g__nm_multicolumn_cells_seq { \__nm_i: - \__nm_j: } { - \dim_set:cn { l__nm_column _ \__nm_j _ max_dim } - { \dim_max:vn { l__nm_column _ \__nm_j _max_dim } \pgf@x } + \dim_set:cn { l__nm_column _ \__nm_j: _ max_dim } + { \dim_max:vn { l__nm_column _ \__nm_j: _max_dim } \pgf@x } } } } @@ -1527,33 +1626,33 @@ \tikzset { name~suffix = -medium } \__nm_create_nodes: \int_set:Nn \l__nm_nb_first_row_int 1 - \int_step_variable:nNn { \g__nm_row_int - 1 } \__nm_i + \int_step_variable:nNn { \g__nm_row_int - 1 } \__nm_i: { - \dim_set:cn { l__nm_row _ \__nm_i _ min _ dim } + \dim_set:cn { l__nm_row _ \__nm_i: _ min _ dim } { ( - \dim_use:c { l__nm_row _ \__nm_i _ min _ dim } + - \dim_use:c { l__nm_row _ \int_eval:n { \__nm_i + 1 } _ max _ dim } + \dim_use:c { l__nm_row _ \__nm_i: _ min _ dim } + + \dim_use:c { l__nm_row _ \int_eval:n { \__nm_i: + 1 } _ max _ dim } ) / 2 } - \dim_set_eq:cc { l__nm_row _ \int_eval:n { \__nm_i + 1 } _ max _ dim } - { l__nm_row_\__nm_i _min_dim } + \dim_set_eq:cc { l__nm_row _ \int_eval:n { \__nm_i: + 1 } _ max _ dim } + { l__nm_row_\__nm_i: _min_dim } } - \int_step_variable:nNn { \g__nm_column_int - 1 } \__nm_j + \int_step_variable:nNn { \g__nm_column_int - 1 } \__nm_j: { - \dim_set:cn { l__nm_column _ \__nm_j _ max _ dim } + \dim_set:cn { l__nm_column _ \__nm_j: _ max _ dim } { ( \dim_use:c - { l__nm_column _ \__nm_j _ max _ dim } + + { l__nm_column _ \__nm_j: _ max _ dim } + \dim_use:c - { l__nm_column _ \int_eval:n { \__nm_j + 1 } _ min _ dim } + { l__nm_column _ \int_eval:n { \__nm_j: + 1 } _ min _ dim } ) / 2 } - \dim_set_eq:cc { l__nm_column _ \int_eval:n { \__nm_j + 1 } _ min _ dim } - { l__nm_column _ \__nm_j _ max _ dim } + \dim_set_eq:cc { l__nm_column _ \int_eval:n { \__nm_j: + 1 } _ min _ dim } + { l__nm_column _ \__nm_j: _ max _ dim } } \dim_sub:cn { l__nm_column _ 1 _ min _ dim } @@ -1564,7 +1663,7 @@ \tikzset { name~suffix = -large } \__nm_create_nodes: \end{tikzpicture} - \cs_set:Nn \__nm_create_extra_nodes: { } + \cs_set:Npn \__nm_create_extra_nodes: { } \begin { tikzpicture } [ remember~picture , overlay ] \tikz@parse@node \pgfutil@firstofone ( nm - \int_use:N \g__nm_env_int - 1 - 1 - large .north~west ) @@ -1584,25 +1683,25 @@ } \cs_new_protected:Nn \__nm_create_nodes: { - \int_step_variable:nnnNn \l__nm_nb_first_row_int 1 \g__nm_row_int \__nm_i + \int_step_variable:nnNn \l__nm_nb_first_row_int \g__nm_row_int \__nm_i: { - \int_step_variable:nnnNn 1 1 \g__nm_column_total_int \__nm_j + \int_step_variable:nNn \g__nm_column_total_int \__nm_j: { \coordinate ( __nm~south~west ) - at ( \dim_use:c { l__nm_column_ \__nm_j _min_dim } , - \dim_use:c { l__nm_row_ \__nm_i _min_dim } ) ; + at ( \dim_use:c { l__nm_column_ \__nm_j: _min_dim } , + \dim_use:c { l__nm_row_ \__nm_i: _min_dim } ) ; \coordinate ( __nm~north~east ) - at ( \dim_use:c { l__nm_column_ \__nm_j _max_dim }, - \dim_use:c { l__nm_row_ \__nm_i _max_dim } ) ; + at ( \dim_use:c { l__nm_column_ \__nm_j: _max_dim }, + \dim_use:c { l__nm_row_ \__nm_i: _max_dim } ) ; \node [ node~contents = { } , fit = ( __nm~south~west ) ( __nm~north~east ) , inner~sep = \c_zero_dim , - name = nm - \int_use:N \g__nm_env_int - \__nm_i - \__nm_j , + name = nm - \int_use:N \g__nm_env_int - \__nm_i: - \__nm_j: , alias = \str_if_empty:NF \g__nm_name_str - { \g__nm_name_str - \__nm_i - \__nm_j } + { \g__nm_name_str - \__nm_i: - \__nm_j: } ] ; } @@ -1614,34 +1713,34 @@ } \cs_new_protected:Npn \__nm_extract_coords: #1 - #2 \q_stop { - \cs_set:Npn \__nm_i { #1 } - \cs_set:Npn \__nm_j { #2 } + \cs_set:Npn \__nm_i: { #1 } + \cs_set:Npn \__nm_j: { #2 } } \cs_new_protected:Nn \__nm_node_for_multicolumn:nn { \__nm_extract_coords: #1 \q_stop \coordinate ( __nm~south~west ) at ( - \dim_use:c { l__nm_column _ \__nm_j _ min _ dim } , - \dim_use:c { l__nm_row _ \__nm_i _ min _ dim } + \dim_use:c { l__nm_column _ \__nm_j: _ min _ dim } , + \dim_use:c { l__nm_row _ \__nm_i: _ min _ dim } ) ; \coordinate ( __nm~north~east ) at ( - \dim_use:c { l__nm_column _ \int_eval:n { \__nm_j + #2 - 1 } _ max _ dim} , - \dim_use:c { l__nm_row _ \__nm_i _ max _ dim } + \dim_use:c { l__nm_column _ \int_eval:n { \__nm_j: + #2 - 1 } _ max _ dim} , + \dim_use:c { l__nm_row _ \__nm_i: _ max _ dim } ) ; \node [ node~contents = { } , fit = ( __nm~south~west ) ( __nm~north~east ) , inner~sep = \c_zero_dim , - name = nm - \int_use:N \g__nm_env_int - \__nm_i - \__nm_j , + name = nm - \int_use:N \g__nm_env_int - \__nm_i: - \__nm_j: , alias = - \str_if_empty:NF \g__nm_name_str { \g__nm_name_str - \__nm_i - \__nm_j } + \str_if_empty:NF \g__nm_name_str { \g__nm_name_str - \__nm_i: - \__nm_j: } ] ; } -\ProcessKeysOptions {NiceMatrix} +\ProcessKeysOptions { NiceMatrix } \cs_new:Npn \__nm_seq_mapthread_function:NNN #1 #2 #3 { \group_begin: -- cgit v1.2.3