diff options
Diffstat (limited to 'Master/texmf-dist/tex/latex/nicematrix')
-rw-r--r-- | Master/texmf-dist/tex/latex/nicematrix/nicematrix.sty | 2546 |
1 files changed, 1452 insertions, 1094 deletions
diff --git a/Master/texmf-dist/tex/latex/nicematrix/nicematrix.sty b/Master/texmf-dist/tex/latex/nicematrix/nicematrix.sty index d681eeb9ac4..dea687e5f4a 100644 --- a/Master/texmf-dist/tex/latex/nicematrix/nicematrix.sty +++ b/Master/texmf-dist/tex/latex/nicematrix/nicematrix.sty @@ -18,1123 +18,1481 @@ %% and version 1.3 or later is part of all distributions of %% LaTeX version 2005/12/01 or later. %% -\def\myfileversion{2.1.4} -\def\myfiledate{2019/01/28} +\def\myfileversion{2.1.5} +\def\myfiledate{2019/05/27} \RequirePackage{tikz} \usetikzlibrary{fit} -\RequirePackage{expl3}[2018-01-01] +\RequirePackage{expl3}[2019/02/15] \RequirePackage{l3keys2e} \ProvidesExplPackage {nicematrix} {\myfiledate} {\myfileversion} {Several features to improve the typesetting of mathematical matrices with TikZ} -\bool_new:N \c__nicem_draft_bool -\DeclareOption {draft} {\bool_set_true:N \c__nicem_draft_bool} -\DeclareOption* {} +\bool_new:N \c__nm_draft_bool +\DeclareOption { draft } { \bool_set_true:N \c__nm_draft_bool } +\DeclareOption* { } \ProcessOptions \relax -\RequirePackage{array} -\RequirePackage{amsmath} -\RequirePackage{xparse}[2018-10-17] -\cs_new_protected:Nn \__nicem_error:n - {\msg_error:nn {nicematrix} {#1}} -\cs_new_protected:Nn \__nicem_error:nn - {\msg_error:nn {nicematrix} {#1} {#2}} -\cs_new_protected:Nn \__nicem_bool_new:N - {\bool_if_exist:NTF #1 - {\bool_set_false:N #1} - {\bool_new:N #1}} -\ProvideDocumentCommand \iddots {} - {\mathinner{\mkern 1mu - \raise \p@ \hbox{.} - \mkern 2mu - \raise 4\p@ \hbox{.} - \mkern 2mu - \raise 7\p@ \vbox{\kern 7pt - \hbox{.}} - \mkern 1mu}} -\int_new:N \g__nicem_env_int -\dim_new:N \l__nicem_columns_width_dim -\seq_new:N \g__nicem_names_seq -\int_new:N \l__nicem_nb_first_row_int -\int_set:Nn \l__nicem_nb_first_row_int 1 -\bool_new:N \l__nicem_exterior_column_bool -\tl_new:N \l__nicem_pos_env_tl -\tl_set:Nn \l__nicem_pos_env_tl c -\bool_new:N \l__nicem_exterior_arraycolsep_bool -\bool_new:N \l__nicem_parallelize_diags_bool -\bool_set_true:N \l__nicem_parallelize_diags_bool -\bool_new:N \l__nicem_nullify_dots_bool -\bool_new:N \l__nicem_auto_columns_width_bool -\tl_new:N \l__nicem_code_for_last_col_tl -\tl_new:N \g__nicem_name_tl -\tl_new:N \l__nicem_name_tl -\bool_new:N \l__nicem_extra_nodes_bool -\bool_new:N \g__nicem_extra_nodes_bool -\dim_new:N \l__nicem_left_margin_dim -\dim_new:N \l__nicem_right_margin_dim -\dim_new:N \g__nicem_left_margin_dim -\dim_new:N \g__nicem_right_margin_dim -\dim_new:N \l__nicem_extra_left_margin_dim -\dim_new:N \l__nicem_extra_right_margin_dim -\dim_new:N \g__nicem_extra_right_margin_dim -\keys_define:nn {NiceMatrix/NiceMatrixOptions} - {parallelize-diags .bool_set:N = \l__nicem_parallelize_diags_bool, - parallelize-diags .default:n = true, - ParallelizeDiagonals .meta:n = parallelize-diags, - renew-dots .bool_set:N = \l__nicem_renew_dots_bool, - renew-dots .default:n = true, - RenewDots .meta:n = renew-dots, - renew-matrix .code:n = \__nicem_renew_matrix:, - renew-matrix .value_forbidden:n = true, - RenewMatrix .meta:n = renew-matrix, - transparent .meta:n = {renew-dots,renew-matrix}, - transparent .value_forbidden:n = true, - Transparent .meta:n = transparent, - nullify-dots .bool_set:N = \l__nicem_nullify_dots_bool , - nullify-dots .default:n = true, - NullifyDots .meta:n = nullify-dots, - code-for-last-col .tl_set:N = \l__nicem_code_for_last_col_tl, - code-for-last-col .value_required:n = true, - code-for-first-row .tl_set:N = \l__nicem_code_for_first_row_tl, - code-for-first-row .value_required:n = true, - exterior-arraycolsep .bool_set:N = \l__nicem_exterior_arraycolsep_bool , - exterior-arraycolsep .default:n = true, - columns-width .code:n = \str_if_eq:nnTF {#1} {auto} - {\__nicem_error:n {Option~auto~for~columns-width}} - {\dim_set:Nn \l__nicem_columns_width_dim {#1}}, - create-extra-nodes .bool_set:N = \l__nicem_extra_nodes_bool, - create-extra-nodes .default:n = true, - left-margin .dim_set:N = \l__nicem_left_margin_dim, - left-margin .default:n = \arraycolsep, - right-margin .dim_set:N = \l__nicem_right_margin_dim, - right-margin .default:n = \arraycolsep, - unknown .code:n = \__nicem_error:n {Unknown~key~for~NiceMatrixOptions}} -\msg_new:nnnn {nicematrix} - {Unknown~key~for~NiceMatrixOptions} - {The~key~"\tl_use:N\l_keys_key_tl"~is~unknown~for~the~command~ - \token_to_str:N \NiceMatrixOptions.\\ - If~you~go~on,~it~will~be~ignored.\\ - For~a~list~of~the~available~keys,~type~H~<return>.} - {The~available~keys~are~(in~alphabetic~order):~ - code-for-last-col,~ - exterior-arraycolsep,~ - left-margin,~ - nullify-dots,~ - parallelize-diags,~ - renew-dots,~ - renew-matrix,~ - right-margin,~ - and~transparent} -\msg_new:nnn {nicematrix} - {Option~auto~for~columns-width} - {You~can't~give~the~value~"auto"~to~the~option~"columns-width"~here.~ - If~you~go~on,~the~option~will~be~ignored.} -\NewDocumentCommand \NiceMatrixOptions {m} - {\keys_set:nn {NiceMatrix/NiceMatrixOptions} {#1}} -\keys_define:nn {NiceMatrix/NiceMatrix} - {parallelize-diags .bool_set:N = \l__nicem_parallelize_diags_bool, - parallelize-diags .default:n = true, - renew-dots .bool_set:N = \l__nicem_renew_dots_bool, - renew-dots .default:n = true, - nullify-dots .bool_set:N = \l__nicem_nullify_dots_bool , - nullify-dots .default:n = true, - columns-width .code:n = \str_if_eq:nnTF {#1} {auto} - {\bool_set_true:N - \l__nicem_auto_columns_width_bool} - {\dim_set:Nn \l__nicem_columns_width_dim {#1}}, - name .code:n = {\seq_if_in:NnTF \g__nicem_names_seq {#1} - {\__nicem_error:nn {Duplicate~name} {#1}} - {\seq_gput_left:Nn \g__nicem_names_seq {#1}} - \tl_set:Nn \l__nicem_name_tl {#1}}, - name .value_required:n = true, - code-after .tl_set:N = \l__nicem_code_after_tl, - code-after .initial:n = \c_empty_tl, - code-after .value_required:n = true, - create-extra-nodes .bool_set:N = \l__nicem_extra_nodes_bool, - create-extra-nodes .default:n = true, - left-margin .dim_set:N = \l__nicem_left_margin_dim, - left-margin .default:n = \arraycolsep, - right-margin .dim_set:N = \l__nicem_right_margin_dim, - right-margin .default:n = \arraycolsep, - extra-left-margin .dim_set:N = \l__nicem_extra_left_margin_dim, - extra-right-margin .dim_set:N = \l__nicem_extra_right_margin_dim, - unknown .code:n = \__nicem_error:n {Unknown~option~for~NiceMatrix}} -\msg_new:nnnn {nicematrix} - {Unknown~option~for~NiceMatrix} - {The~option~"\tl_use:N\l_keys_key_tl"~is~unknown~for~the~environment~ - \{NiceMatrix\}~and~its~variants.\\ - If~you~go~on,~it~will~be~ignored.\\ - For~a~list~of~the~available~options,~type~H~<return>.} - {The~available~options~are~(in~alphabetic~order):~ - code-after,~ - columns-width,~ - create-extra-nodes,~ - extra-left-margin,~ - extra-right-margin,~ - left-margin,~ - name,~ - nullify-dots,~ - parallelize-diags,~ - renew-dots~ - and~right-margin.} -\msg_new:nnnn {nicematrix} - {Duplicate~name} - {The~name~"#1"~is~already~used~and~you~shouldn't~use~ - the~same~environment~name~twice.~You~can~go~on,~but,~ - maybe,~you~will~have~incorrect~results~especially~ - if~you~use~"columns-width=auto".\\ - For~a~list~of~the~names~already~used,~type~H~<return>.} - {The~names~already~defined~in~this~document~are:~ - \seq_use:Nnnn~\g__nicem_names_seq~{,~} {,~} {~and~}.} -\keys_define:nn {NiceMatrix/NiceArray} - {parallelize-diags .bool_set:N = \l__nicem_parallelize_diags_bool, - parallelize-diags .default:n = true, - renew-dots .bool_set:N = \l__nicem_renew_dots_bool, - renew-dots .default:n = true, - nullify-dots .bool_set:N = \l__nicem_nullify_dots_bool , - nullify-dots .default:n = true, - columns-width .code:n = \str_if_eq:nnTF {#1} {auto} - {\bool_set_true:N \l__nicem_auto_columns_width_bool} - {\dim_set:Nn \l__nicem_columns_width_dim {#1}}, - columns-width .value_required:n = true, - name .code:n = {\seq_if_in:NnTF \g__nicem_names_seq {#1} - {\__nicem_error:nn {Duplicate~name} {#1}} - {\seq_gput_left:Nn \g__nicem_names_seq {#1}} - \tl_set:Nn \l__nicem_name_tl {#1}}, - name .value_required:n = true, - c .code:n = \tl_set:Nn \l__nicem_pos_env_tl c, - t .code:n = \tl_set:Nn \l__nicem_pos_env_tl t, - b .code:n = \tl_set:Nn \l__nicem_pos_env_tl b, - code-after .tl_set:N = \l__nicem_code_after_tl, - code-after .initial:n = \c_empty_tl, - code-after .value_required:n = true, - create-extra-nodes .bool_set:N = \l__nicem_extra_nodes_bool, - create-extra-nodes .default:n = true, - left-margin .dim_set:N = \l__nicem_left_margin_dim, - left-margin .default:n = \arraycolsep, - right-margin .dim_set:N = \l__nicem_right_margin_dim, - right-margin .default:n = \arraycolsep, - extra-left-margin .dim_set:N = \l__nicem_extra_left_margin_dim, - extra-right-margin .dim_set:N = \l__nicem_extra_right_margin_dim, - unknown .code:n = \__nicem_error:n {Unknown~option~for~NiceArray}} -\msg_new:nnnn {nicematrix} - {Unknown~option~for~NiceArray} - {The~option~"\tl_use:N\l_keys_key_tl"~is~unknown~for~the~environment~ - \{NiceArray\}.\\ - If~you~go~on,~it~will~be~ignored.\\ - For~a~list~of~the~available~options,~type~H~<return>.} - {The~available~options~are~(in~alphabetic~order):~ - b,~ - c,~ - code-after,~ - create-extra-nodes,~ - columns-width,~ - extra-left-margin,~ - extra-right-margin,~ - left-margin,~ - name,~ - nullify-dots,~ - parallelize-diags,~ - renew-dots,~ - right-margin,~ - and~t.} -\cs_new_protected:Nn \__nicem_Cell: - { - \int_gincr:N \g__nicem_column_int - \int_compare:nNnT \g__nicem_column_int = 1 - {\int_gincr:N \g__nicem_row_int} - \int_gset:Nn \g__nicem_column_total_int - {\int_max:nn \g__nicem_column_total_int \g__nicem_column_int} +\RequirePackage { array } +\RequirePackage { amsmath } +\RequirePackage { xparse } [ 2018-10-17 ] +\bool_new:N \c__nm_revtex_bool +\@ifclassloaded { revtex4-1 } + { \bool_set_true:N \c__nm_revtex_bool } + { } +\@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 } } +\ProvideDocumentCommand \iddots { } + { + \mathinner + { \mkern 1 mu + \raise \p@ \hbox { . } + \mkern 2 mu + \raise 4 \p@ \hbox { . } + \mkern 2 mu + \raise 7 \p@ \vbox { \kern 7 pt \hbox { . } } \mkern 1 mu + } + } +\int_new:N \g__nm_env_int +\dim_new:N \l__nm_columns_width_dim +\seq_new:N \g__nm_names_seq +\int_new:N \l__nm_nb_first_row_int +\int_set:Nn \l__nm_nb_first_row_int 1 +\bool_new:N \l__nm_exterior_column_bool +\bool_new:N \l__nm_in_NiceArray_bool +\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_nullify_dots_bool +\bool_new:N \l__nm_auto_columns_width_bool +\tl_new:N \l__nm_code_for_last_col_tl +\str_new:N \g__nm_name_str +\str_new:N \l__nm_name_str +\bool_new:N \l__nm_extra_nodes_bool +\bool_new:N \g__nm_extra_nodes_bool +\dim_new:N \l__nm_left_margin_dim +\dim_new:N \l__nm_right_margin_dim +\dim_new:N \g__nm_left_margin_dim +\dim_new:N \g__nm_right_margin_dim +\dim_new:N \l__nm_extra_left_margin_dim +\dim_new:N \l__nm_extra_right_margin_dim +\dim_new:N \g__nm_extra_right_margin_dim +\keys_define:nn { NiceMatrix / Global } + { + 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 , + renew-dots .default:n = true , + nullify-dots .bool_set:N = \l__nm_nullify_dots_bool , + nullify-dots .default:n = true , + create-extra-nodes .bool_set:N = \l__nm_extra_nodes_bool , + create-extra-nodes .default:n = true, + left-margin .dim_set:N = \l__nm_left_margin_dim , + left-margin .default:n = \arraycolsep , + right-margin .dim_set:N = \l__nm_right_margin_dim , + right-margin .default:n = \arraycolsep , + extra-left-margin .dim_set:N = \l__nm_extra_left_margin_dim , + extra-right-margin .dim_set:N = \l__nm_extra_right_margin_dim + } +\keys_define:nn { NiceMatrix / Env } + { + columns-width .code:n = + \str_if_eq:nnTF { #1 } { auto } + { \bool_set_true:N \l__nm_auto_columns_width_bool } + { \dim_set:Nn \l__nm_columns_width_dim { #1 } } , + columns-width .value_required:n = true , + name .code:n = + \seq_if_in:NnTF \g__nm_names_seq { #1 } + { \__nm_error:nn { Duplicate~name } { #1 } } + { \seq_gput_left:Nn \g__nm_names_seq { #1 } } + \str_set:Nn \l__nm_name_str { #1 } , + name .value_required:n = true , + code-after .tl_set:N = \l__nm_code_after_tl , + code-after .initial:n = \c_empty_tl , + code-after .value_required:n = true , + } +\keys_define:nn { NiceMatrix } + { + NiceMatrixOptions .inherit:n = NiceMatrix / Global , + NiceMatrix .inherit:n = + { + NiceMatrix / Global , + NiceMatrix / Env + } , + NiceArray .inherit:n = + { + NiceMatrix / Global , + NiceMatrix / Env + } , + NiceArrayC .inherit:n = + { + NiceMatrix / Global , + NiceMatrix / Env + } , + NiceArrayRC .inherit:n = + { + NiceMatrix / Global , + NiceMatrix / Env + } + } +\keys_define:nn { NiceMatrix / NiceMatrixOptions } + { + renew-matrix .code:n = \__nm_renew_matrix: , + renew-matrix .value_forbidden:n = true , + RenewMatrix .meta:n = renew-matrix , + transparent .meta:n = { renew-dots , renew-matrix } , + transparent .value_forbidden:n = true, + Transparent .meta:n = transparent, + 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 , + code-for-first-row .value_required:n = true , + exterior-arraycolsep .bool_set:N = \l__nm_exterior_arraycolsep_bool , + exterior-arraycolsep .default:n = true , + columns-width .code:n = + \str_if_eq:nnTF { #1 } { auto } + { \__nm_error:n { Option~auto~for~columns-width } } + { \dim_set:Nn \l__nm_columns_width_dim { #1 } } , + allow-duplicate-names .code:n = + \__nm_msg_redirect_name:nn { Duplicate~name } {none} , + allow-duplicate-names .value_forbidden:n = true , + unknown .code:n = \__nm_error:n { Unknown~key~for~NiceMatrixOptions } } +\__nm_msg_new:nnn { Unknown~key~for~NiceMatrixOptions } + { + The~key~'\tl_use:N\l_keys_key_tl'~is~unknown~for~the~command~ + \token_to_str:N \NiceMatrixOptions. \\ + If~you~go~on,~it~will~be~ignored. \\ + For~a~list~of~the~available~keys,~type~H~<return>. + } + { + The~available~keys~are~(in~alphabetic~order):~ + allow-duplicate-names,~ + code-for-last-col,~ + exterior-arraycolsep,~ + left-margin,~ + nullify-dots,~ + parallelize-diags,~ + renew-dots,~ + renew-matrix,~ + right-margin,~ + and~transparent + } +\__nm_msg_new:nn { Option~auto~for~columns-width } + { + You~can't~give~the~value~'auto'~to~the~option~'columns-width'~here.~ + If~you~go~on,~the~option~will~be~ignored. + } +\NewDocumentCommand \NiceMatrixOptions { m } + { \keys_set:nn { NiceMatrix / NiceMatrixOptions } { #1 } } +\keys_define:nn { NiceMatrix / NiceMatrix } + { unknown .code:n = \__nm_error:n { Unknown~option~for~NiceMatrix } } +\__nm_msg_new:nnn { Unknown~option~for~NiceMatrix } + { + The~option~'\tl_use:N\l_keys_key_tl'~is~unknown~for~the~environment~ + \{NiceMatrix\}~and~its~variants. \\ + If~you~go~on,~it~will~be~ignored. \\ + For~a~list~of~the~available~options,~type~H~<return>. + } + { + The~available~options~are~(in~alphabetic~order):~ + code-after,~ + columns-width,~ + create-extra-nodes,~ + extra-left-margin,~ + extra-right-margin,~ + left-margin,~ + name,~ + nullify-dots,~ + parallelize-diags,~ + renew-dots~ + and~right-margin. + } +\__nm_msg_new:nnn { Duplicate~name } + { + The~name~'\l_keys_value_tl'~is~already~used~and~you~shouldn't~use~ + the~same~environment~name~twice.~You~can~go~on,~but,~ + maybe,~you~will~have~incorrect~results~especially~ + if~you~use~'columns-width=auto'. \\ + For~a~list~of~the~names~already~used,~type~H~<return>. \\ + If~you~don't~want~to~see~this~message~again,~use~the~option~ + 'allow-duplicate-names'. + } + { + The~names~already~defined~in~this~document~are:~ + \seq_use:Nnnn \g__nm_names_seq { ,~ } { ,~ } { ~and~ }. + } +\keys_define:nn { NiceMatrix / NiceArray } + { + c .code:n = \str_set:Nn \l__nm_pos_env_str c , + t .code:n = \str_set:Nn \l__nm_pos_env_str t , + b .code:n = \str_set:Nn \l__nm_pos_env_str b , + unknown .code:n = \__nm_error:n { Unknown~option~for~NiceArray } + } +\__nm_msg_new:nnn { Unknown~option~for~NiceArray } + { + The~option~'\tl_use:N\l_keys_key_tl'~is~unknown~for~the~environment~ + \{NiceArray\}. \\ + If~you~go~on,~it~will~be~ignored. \\ + For~a~list~of~the~available~options,~type~H~<return>. + } + { + The~available~options~are~(in~alphabetic~order):~ + b,~ + c,~ + code-after,~ + create-extra-nodes,~ + columns-width,~ + extra-left-margin,~ + extra-right-margin,~ + left-margin,~ + name,~ + nullify-dots,~ + parallelize-diags,~ + renew-dots,~ + right-margin,~ + and~t. + } +\cs_new_protected:Nn \__nm_Cell: + { + \int_gincr:N \g__nm_column_int + \int_compare:nNnT \g__nm_column_int = \c_one_int + { \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 $ % $ - \int_compare:nNnT \g__nicem_row_int = 0 - \l__nicem_code_for_first_row_tl} -\cs_new_protected:Nn \__nicem_end_Cell: - {$ % $ + \int_compare:nNnT \g__nm_row_int = \c_zero_int + \l__nm_code_for_first_row_tl + } +\cs_new_protected:Nn \__nm_end_Cell: + { $ % $ \hbox_set_end: - \dim_gset:Nn \g__nicem_max_cell_width_dim - {\dim_max:nn \g__nicem_max_cell_width_dim {\box_wd:N \l_tmpa_box}} - \int_compare:nNnT \g__nicem_row_int = 0 - {\dim_gset:Nn \g__nicem_max_dp_row_zero_dim - {\dim_max:nn \g__nicem_max_dp_row_zero_dim {\box_dp:N \l_tmpa_box}} - \dim_gset:Nn \g__nicem_max_ht_row_zero_dim - {\dim_max:nn \g__nicem_max_ht_row_zero_dim {\box_ht:N \l_tmpa_box}}} - \int_compare:nNnT \g__nicem_row_int = 1 - {\dim_gset:Nn \g__nicem_max_ht_row_one_dim - {\dim_max:nn \g__nicem_max_ht_row_one_dim {\box_ht:N \l_tmpa_box}}} - \tikz[remember~picture, inner~sep = 0pt, minimum~width = 0pt, baseline] - \node [anchor = base, - name = nm-\int_use:N \g__nicem_env_int- - \int_use:N \g__nicem_row_int- - \int_use:N \g__nicem_column_int, - alias = \tl_if_empty:NF \l__nicem_name_tl - {\tl_use:N \l__nicem_name_tl- - \int_use:N \g__nicem_row_int- - \int_use:N \g__nicem_column_int} ] - \bgroup - \box_use:N \l_tmpa_box - \egroup ;} -\NewDocumentEnvironment {NiceMatrix} {!O{}} - {\keys_set:nn {NiceMatrix/NiceMatrix} {#1} - \tl_set:Nn \l__nicem_pos_env_tl c - \bool_set_false:N \l__nicem_exterior_arraycolsep_bool - \NiceArray{*\c@MaxMatrixCols{C}} + \dim_gset:Nn \g__nm_max_cell_width_dim + { \dim_max:nn \g__nm_max_cell_width_dim { \box_wd:N \l_tmpa_box } } + \int_compare:nNnT \g__nm_row_int = \c_zero_int + { + \dim_gset:Nn \g__nm_max_dp_row_zero_dim + { \dim_max:nn \g__nm_max_dp_row_zero_dim { \box_dp:N \l_tmpa_box } } + \dim_gset:Nn \g__nm_max_ht_row_zero_dim + { \dim_max:nn \g__nm_max_ht_row_zero_dim { \box_ht:N \l_tmpa_box } } } - {\endarray - \skip_horizontal:n {-\arraycolsep} - \skip_horizontal:n {\g__nicem_right_margin_dim + \g__nicem_extra_right_margin_dim}} -\cs_generate_variant:Nn \dim_set:Nn {Nx} -\msg_new:nnn {nicematrix} - {We~are~yet~in~an~environment~NiceArray} - {Environments~\{NiceArray\}~(or~\{NiceMatrix\},~etc.)~can't~be~ - nested.~We~can~go~on,~but,~maybe,~you~will~have~errors~or~an~incorrect~ - result.} -\cs_new_protected:Npn \__nicem_define_dots: - {\cs_set_eq:NN \Ldots \__nicem_Ldots - \cs_set_eq:NN \Cdots \__nicem_Cdots - \cs_set_eq:NN \Vdots \__nicem_Vdots - \cs_set_eq:NN \Ddots \__nicem_Ddots - \cs_set_eq:NN \Iddots \__nicem_Iddots - \bool_if:NT \l__nicem_renew_dots_bool - {\cs_set_eq:NN \ldots \__nicem_Ldots - \cs_set_eq:NN \cdots \__nicem_Cdots - \cs_set_eq:NN \vdots \__nicem_Vdots - \cs_set_eq:NN \ddots \__nicem_Ddots - \cs_set_eq:NN \iddots \__nicem_Iddots - \cs_set_eq:NN \dots \__nicem_Ldots - \cs_set_eq:NN \hdotsfor \__nicem_Hdotsfor}} -\cs_new_protected:Npn \__nicem_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__nicem_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 \__nicem_Hdotsfor}} -\NewDocumentEnvironment {NiceArray} {O{} m !O{}} - {\cs_if_exist:NT \__nicem_in_NiceArray: - {\__nicem_error:n {We~are~yet~in~an~environment~NiceArray}} - \cs_if_exist:NT \tikz@library@external@loaded - {\tikzset{external/export = false}} - \cs_set:Npn \__nicem_in_NiceArray: {--Void--} - \group_insert_after:N \__nicem_after_array: - \tl_gclear_new:N \g__nicem_lines_to_draw_tl - \int_gincr:N \g__nicem_env_int - \bool_if:NF \l__nicem_block_auto_columns_width_bool - {\dim_gzero_new:N \g__nicem_max_cell_width_dim} - \dim_gzero_new:N \g__nicem_max_dp_row_zero_dim - \dim_gzero_new:N \g__nicem_max_ht_row_zero_dim - \dim_gzero_new:N \g__nicem_max_ht_row_one_dim - \keys_set:nn {NiceMatrix/NiceArray} {#1,#3} - \bool_if:NT \l__nicem_auto_columns_width_bool - {\group_insert_after:N \__nicem_write_max_cell_width: - \cs_if_free:cTF {__nicem_max_cell_width_\int_use:N \g__nicem_env_int} - {\dim_set:Nn \l__nicem_columns_width_dim \c_zero_dim} - {\dim_set:Nx \l__nicem_columns_width_dim - {\use:c {__nicem_max_cell_width_\int_use:N \g__nicem_env_int}}} - \tl_if_empty:NF \l__nicem_name_tl - {\cs_if_free:cF {__nicem_max_cell_width_\l__nicem_name_tl} - {\dim_set:Nx \l__nicem_columns_width_dim - {\use:c {__nicem_max_cell_width_\l__nicem_name_tl}}}} - } - \bool_gset_eq:NN \g__nicem_extra_nodes_bool \l__nicem_extra_nodes_bool - \dim_gset_eq:NN \g__nicem_left_margin_dim \l__nicem_left_margin_dim - \dim_gset_eq:NN \g__nicem_right_margin_dim \l__nicem_right_margin_dim - \dim_gset_eq:NN \g__nicem_extra_right_margin_dim \l__nicem_extra_right_margin_dim - \tl_gset_eq:NN \g__nicem_code_after_tl \l__nicem_code_after_tl - \tl_gset_eq:NN \g__nicem_name_tl \l__nicem_name_tl - \cs_set:Npn \ialign - {\everycr{\noalign{\int_gzero:N \g__nicem_column_int}} - \tabskip = \c_zero_skip - \cs_set:Npn \ialign {\everycr{} - \tabskip = \c_zero_skip - \halign} - \halign} - \dim_compare:nNnTF \l__nicem_columns_width_dim = \c_zero_dim - {\newcolumntype{L}{>{\__nicem_Cell:}l<{\__nicem_end_Cell:}} - \newcolumntype{C}{>{\__nicem_Cell:}c<{\__nicem_end_Cell:}} - \newcolumntype{R}{>{\__nicem_Cell:}r<{\__nicem_end_Cell:}}} - {\newcolumntype{L}{wl{\dim_use:N \l__nicem_columns_width_dim}} - \newcolumntype{C}{wc{\dim_use:N \l__nicem_columns_width_dim}} - \newcolumntype{R}{wr{\dim_use:N \l__nicem_columns_width_dim}}} - \cs_set_eq:NN \NC@find@w \relax - \cs_set_eq:NN \NC@find@W \relax - \newcolumntype{w}[2] - {>{\hbox_set:Nw \l_tmpa_box - \__nicem_Cell:} - c - <{\__nicem_end_Cell: - \hbox_set_end: - \makebox[##2][##1]{\box_use:N \l_tmpa_box}}} - \newcolumntype{W}[2] - {>{\hbox_set:Nw \l_tmpa_box - \__nicem_Cell:} + \int_compare:nNnT \g__nm_row_int = \c_one_int + { + \dim_gset:Nn \g__nm_max_ht_row_one_dim + { \dim_max:nn \g__nm_max_ht_row_one_dim { \box_ht:N \l_tmpa_box } } + } + \tikz + [ + remember~picture , + inner~sep = \c_zero_dim , + minimum~width = \c_zero_dim , + baseline + ] + \node + [ + anchor = base , + name = nm - \int_use:N \g__nm_env_int - + \int_use:N \g__nm_row_int - + \int_use:N \g__nm_column_int , + alias = + \str_if_empty:NF \l__nm_name_str + { + \l__nm_name_str - + \int_use:N \g__nm_row_int - + \int_use:N \g__nm_column_int + } + ] + \bgroup + \box_use:N \l_tmpa_box + \egroup ; + } +\NewDocumentEnvironment { NiceMatrix } { ! O { } } + { + \keys_set:nn { NiceMatrix / NiceMatrix } { #1 } + \str_set:Nn \l__nm_pos_env_str c + \bool_set_false:N \l__nm_exterior_arraycolsep_bool + \NiceArray { * \c@MaxMatrixCols C } + } + { + \endarray + \skip_horizontal:n + { \g__nm_right_margin_dim + \g__nm_extra_right_margin_dim - \arraycolsep } + } +\cs_generate_variant:Nn \dim_set:Nn { N x } +\__nm_msg_new:nn { Yet~in~NiceArray } + { + Environments~\{NiceArray\}~(or~\{NiceMatrix\},~etc.)~can't~be~ + nested.~We~can~go~on,~but,~maybe,~you~will~have~errors~or~an~incorrect~ + result. + } +\cs_new_protected:Npn \__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 + \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 + } + } +\NewDocumentEnvironment { NiceArray } { O { } m ! O { } } + { + \bool_if:NT \l__nm_in_NiceArray_bool + { \__nm_error:n { Yet~in~NiceArray } } + \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 + \bool_if:NF \l__nm_block_auto_columns_width_bool + { \dim_gzero_new:N \g__nm_max_cell_width_dim } + \dim_gzero_new:N \g__nm_max_dp_row_zero_dim + \dim_gzero_new:N \g__nm_max_ht_row_zero_dim + \dim_gzero_new:N \g__nm_max_ht_row_one_dim + \keys_set:nn { NiceMatrix / NiceArray } { #1 , #3 } + \bool_if:NT \l__nm_auto_columns_width_bool + { + \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_set:Nx \l__nm_columns_width_dim + { \use:c { __nm_max_cell_width _ \int_use:N \g__nm_env_int } } + } + \str_if_empty:NF \l__nm_name_str + { + \cs_if_free:cF { __nm_max_cell_width_ \l__nm_name_str } + { + \dim_set:Nx \l__nm_columns_width_dim + { \use:c { __nm_max_cell_width_ \l__nm_name_str } } + } + } + } + \bool_gset_eq:NN \g__nm_extra_nodes_bool \l__nm_extra_nodes_bool + \dim_gset_eq:NN \g__nm_left_margin_dim \l__nm_left_margin_dim + \dim_gset_eq:NN \g__nm_right_margin_dim \l__nm_right_margin_dim + \dim_gset_eq:NN \g__nm_extra_right_margin_dim \l__nm_extra_right_margin_dim + \tl_gset_eq:NN \g__nm_code_after_tl \l__nm_code_after_tl + \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 } } + \tabskip = \c_zero_skip + \cs_set:Npn \ialign + { + \everycr { } + \tabskip = \c_zero_skip + \halign + } + \halign + } + \dim_compare:nNnTF \l__nm_columns_width_dim = \c_zero_dim + { + \newcolumntype L { > \__nm_Cell: l < \__nm_end_Cell: } + \newcolumntype C { > \__nm_Cell: c < \__nm_end_Cell: } + \newcolumntype R { > \__nm_Cell: r < \__nm_end_Cell: } + } + { + \newcolumntype L { w l { \dim_use:N \l__nm_columns_width_dim } } + \newcolumntype C { w c { \dim_use:N \l__nm_columns_width_dim } } + \newcolumntype R { w r { \dim_use:N \l__nm_columns_width_dim } } + } + \cs_set_eq:NN \NC@find@w \relax + \cs_set_eq:NN \NC@find@W \relax + \newcolumntype w [ 2 ] + { + > { + \hbox_set:Nw \l_tmpa_box + \__nm_Cell:} c - <{\__nicem_end_Cell: - \hbox_set_end: - \cs_set_eq:NN \hss \hfil - \makebox[##2][##1]{\box_use:N \l_tmpa_box}}} - \bool_if:NTF \c__nicem_draft_bool - \__nicem_define_dots_to_nil: - \__nicem_define_dots: - \cs_set_eq:NN \Hspace \__nicem_Hspace: - \cs_set_eq:NN \Hdotsfor \__nicem_Hdotsfor - \cs_set_eq:NN \multicolumn \__nicem_multicolumn:nnn - \seq_gclear_new:N \g__nicem_empty_cells_seq - \seq_gclear_new:N \g__nicem_multicolumn_cells_seq - \seq_gclear_new:N \g__nicem_multicolumn_sizes_seq - \int_gzero_new:N \g__nicem_row_int - \int_gset:Nn \g__nicem_row_int {\l__nicem_nb_first_row_int - 1} - \int_gzero_new:N \g__nicem_column_int - \int_gzero_new:N \g__nicem_column_total_int - \cs_set_eq:NN \@ifnextchar \new@ifnextchar - \bool_if:NF \l__nicem_exterior_arraycolsep_bool - {\skip_horizontal:n {-\arraycolsep}} - \skip_horizontal:n {\l__nicem_left_margin_dim + \l__nicem_extra_left_margin_dim} - \array[\l__nicem_pos_env_tl]{#2}} - {\endarray - \bool_if:NF \l__nicem_exterior_arraycolsep_bool - {\skip_horizontal:n {-\arraycolsep}} - \skip_horizontal:n {\g__nicem_right_margin_dim + \g__nicem_extra_right_margin_dim}} -\NewDocumentEnvironment {pNiceMatrix} {} - {\left(\begin{NiceMatrix}} - {\end{NiceMatrix}\right)} -\NewDocumentEnvironment {bNiceMatrix} {} - {\left[\begin{NiceMatrix}} - {\end{NiceMatrix}\right]} -\NewDocumentEnvironment {BNiceMatrix} {} - {\left\{\begin{NiceMatrix}} - {\end{NiceMatrix}\right\}} -\NewDocumentEnvironment {vNiceMatrix} {} - {\left\lvert\begin{NiceMatrix}} - {\end{NiceMatrix}\right\rvert} -\NewDocumentEnvironment {VNiceMatrix} {} - {\left\lVert\begin{NiceMatrix}} - {\end{NiceMatrix}\right\rVert} -\cs_new_protected:Nn \__nicem_write_max_cell_width: - {\bool_if:NF \l__nicem_block_auto_columns_width_bool - {\iow_now:Nn \@mainaux {\ExplSyntaxOn} - \iow_now:Nx \@mainaux {\cs_gset:cpn - {__nicem_max_cell_width_\int_use:N \g__nicem_env_int} - {\dim_use:N \g__nicem_max_cell_width_dim} } - \iow_now:Nx \@mainaux {\cs_gset:cpn {__nicem_max_cell_width_\g__nicem_name_tl} - {\dim_use:N \g__nicem_max_cell_width_dim} } - \iow_now:Nn \@mainaux {\ExplSyntaxOff}}} -\prg_set_conditional:Npnn \__nicem_if_not_empty_cell:nn #1#2 {T,TF} - {\cs_if_exist:cTF {pgf@sh@ns@nm-\int_use:N \g__nicem_env_int- - \int_use:N #1- - \int_use:N #2} - {\seq_if_in:NxTF \g__nicem_empty_cells_seq - {\int_use:N #1-\int_use:N #2} - {\prg_return_false:} - {\begin{pgfpicture} - \tl_set:Nx \l_tmpa_tl {nm-\int_use:N \g__nicem_env_int- - \int_use:N #1- - \int_use:N #2} - \pgfpointanchor \l_tmpa_tl {east} - \dim_gset:Nn \g_tmpa_dim \pgf@x - \pgfpointanchor \l_tmpa_tl {west} - \dim_gset:Nn \g_tmpb_dim \pgf@x - \end{pgfpicture} - \dim_compare:nNnTF {\dim_abs:n {\g_tmpb_dim-\g_tmpa_dim}} < {0.5 pt} - \prg_return_false: - \prg_return_true: - }} - \prg_return_false: + < { + \__nm_end_Cell: + \hbox_set_end: + \makebox [ ##2 ] [ ##1 ] { \box_use:N \l_tmpa_box } + } + } + \newcolumntype W [ 2 ] + { + > { + \hbox_set:Nw \l_tmpa_box + \__nm_Cell: + } + c + < { + \__nm_end_Cell: + \hbox_set_end: + \cs_set_eq:NN \hss \hfil + \makebox [ ##2 ] [ ##1 ] { \box_use:N \l_tmpa_box } + } + } + \bool_if:NTF \c__nm_draft_bool + \__nm_define_dots_to_nil: + \__nm_define_dots: + \cs_set_eq:NN \Hspace \__nm_Hspace: + \cs_set_eq:NN \Hdotsfor \__nm_Hdotsfor + \cs_set_eq:NN \multicolumn \__nm_multicolumn:nnn + \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 + \int_gzero_new:N \g__nm_row_int + \int_gset:Nn \g__nm_row_int { \l__nm_nb_first_row_int - 1 } + \int_gzero_new:N \g__nm_column_int + \int_gzero_new:N \g__nm_column_total_int + \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 } + \bool_if:NTF \c__nm_revtex_bool + { + \cs_set_eq:NN \@acoll \@arrayacol + \cs_set_eq:NN \@acolr \@arrayacol + \cs_set_eq:NN \@acol \@arrayacol + \cs_set:Npn \@halignto { } + \@array@array } -\cs_new_protected:Nn \__nicem_instruction_of_type:n - {\tl_gput_right:Nx \g__nicem_lines_to_draw_tl - {\exp_not:c {__nicem_draw_#1:nn} - {\int_use:N \g__nicem_row_int} - {\int_use:N \g__nicem_column_int}}} -\cs_new_protected:Nn \__nicem_after_array: - {\group_begin: - \cs_if_exist:NT \tikz@library@external@loaded - {\tikzset{external/export = false}} - \int_gset_eq:NN \g__nicem_column_int \g__nicem_column_total_int - \bool_if:NT \l__nicem_exterior_column_bool {\int_gdecr:N \g__nicem_column_int} - \seq_gclear_new:N \g__nicem_yet_drawn_seq - \bool_if:NT \l__nicem_parallelize_diags_bool - {\int_zero_new:N \l__nicem_ddots_int - \int_zero_new:N \l__nicem_iddots_int - \dim_zero_new:N \l__nicem_delta_x_one_dim - \dim_zero_new:N \l__nicem_delta_y_one_dim - \dim_zero_new:N \l__nicem_delta_x_two_dim - \dim_zero_new:N \l__nicem_delta_y_two_dim} - \bool_if:NT \g__nicem_extra_nodes_bool \__nicem_create_extra_nodes: - \tl_if_empty:NF \g__nicem_lines_to_draw_tl - {\int_zero_new:N \l__nicem_initial_i_int - \int_zero_new:N \l__nicem_initial_j_int - \int_zero_new:N \l__nicem_final_i_int - \int_zero_new:N \l__nicem_final_j_int - \__nicem_bool_new:N \l__nicem_initial_open_bool - \__nicem_bool_new:N \l__nicem_final_open_bool - \g__nicem_lines_to_draw_tl} - \tl_gclear:N \g__nicem_lines_to_draw_tl - \tikzset{every~picture/.style = {overlay, - remember~picture, - name~prefix = nm-\int_use:N \g__nicem_env_int-}} - \cs_set_eq:NN \line \__nicem_line:nn - \g__nicem_code_after_tl - \group_end:} -\cs_new_protected:Nn \__nicem_find_extremities_of_line:nnnn - {\int_set:Nn \l__nicem_initial_i_int {#1} - \int_set:Nn \l__nicem_initial_j_int {#2} - \int_set:Nn \l__nicem_final_i_int {#1} - \int_set:Nn \l__nicem_final_j_int {#2} - \bool_set_false:N \l__nicem_initial_open_bool - \bool_set_false:N \l__nicem_final_open_bool - \__nicem_bool_new:N \l__nicem_stop_loop_bool - \bool_do_until:Nn \l__nicem_stop_loop_bool - {\int_add:Nn \l__nicem_final_i_int {#3} - \int_add:Nn \l__nicem_final_j_int {#4} - \bool_if:nTF { \int_compare_p:nNn - \l__nicem_final_i_int < {\l__nicem_nb_first_row_int - 1} - || \int_compare_p:nNn - \l__nicem_final_i_int > \g__nicem_row_int - || \int_compare_p:nNn - \l__nicem_final_j_int < 1 - || \int_compare_p:nNn - \l__nicem_final_j_int > \g__nicem_column_total_int - || \int_compare_p:nNn - \l__nicem_final_j_int > \g__nicem_column_int - && \int_compare_p:nNn {#4} > 0 } - {\bool_set_true:N \l__nicem_final_open_bool - \int_sub:Nn \l__nicem_final_i_int {#3} - \int_sub:Nn \l__nicem_final_j_int {#4} - \bool_set_true:N \l__nicem_stop_loop_bool} - {\__nicem_if_not_empty_cell:nnT - \l__nicem_final_i_int - \l__nicem_final_j_int - {\bool_set_true:N \l__nicem_stop_loop_bool}} - } - \bool_set_false:N \l__nicem_stop_loop_bool - \bool_do_until:Nn \l__nicem_stop_loop_bool - {\int_sub:Nn \l__nicem_initial_i_int {#3} - \int_sub:Nn \l__nicem_initial_j_int {#4} - \bool_if:nTF - { \int_compare_p:nNn - \l__nicem_initial_i_int < \l__nicem_nb_first_row_int - || \int_compare_p:nNn - \l__nicem_initial_i_int > \g__nicem_row_int - || \int_compare_p:nNn - \l__nicem_initial_j_int < 1 - || \int_compare_p:nNn - \l__nicem_initial_j_int > \g__nicem_column_total_int} - {\bool_set_true:N \l__nicem_initial_open_bool - \int_add:Nn \l__nicem_initial_i_int {#3} - \int_add:Nn \l__nicem_initial_j_int {#4} - \bool_set_true:N \l__nicem_stop_loop_bool} - {\__nicem_if_not_empty_cell:nnT - \l__nicem_initial_i_int - \l__nicem_initial_j_int - {\bool_set_true:N \l__nicem_stop_loop_bool}} - } - \bool_if:nT {\l__nicem_initial_open_bool || \l__nicem_final_open_bool} - \__nicem_create_extra_nodes: } -\prg_set_conditional:Npnn \__nicem_if_yet_drawn: {F} - {\tl_set:Nx \l_tmpa_tl {\int_use:N \l__nicem_initial_i_int- - \int_use:N \l__nicem_initial_j_int- - \int_use:N \l__nicem_final_i_int- - \int_use:N \l__nicem_final_j_int} - \seq_if_in:NVTF \g__nicem_yet_drawn_seq \l_tmpa_tl - {\prg_return_true:} - {\seq_gput_left:NV \g__nicem_yet_drawn_seq \l_tmpa_tl - \prg_return_false:}} -\cs_new_protected:Nn \__nicem_retrieve_coords:nn - {\dim_gzero_new:N \g__nicem_x_initial_dim - \dim_gzero_new:N \g__nicem_y_initial_dim - \dim_gzero_new:N \g__nicem_x_final_dim - \dim_gzero_new:N \g__nicem_y_final_dim - \begin{tikzpicture}[remember~picture] + \array + [ \l__nm_pos_env_str ] { #2 } + } + { \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 } + } +\NewDocumentEnvironment { pNiceMatrix } { } + { \left( \begin{NiceMatrix} } + { \end{NiceMatrix} \right) } +\NewDocumentEnvironment { bNiceMatrix } { } + { \left[ \begin{NiceMatrix} } + { \end{NiceMatrix} \right] } +\NewDocumentEnvironment { BNiceMatrix } { } + { \left\{ \begin{NiceMatrix} } + { \end{NiceMatrix} \right\} } +\NewDocumentEnvironment { vNiceMatrix } { } + { \left\lvert \begin{NiceMatrix} } + { \end{NiceMatrix} \right\rvert } +\NewDocumentEnvironment { VNiceMatrix } {} + { \left\lVert \begin{NiceMatrix} } + { \end{NiceMatrix} \right\rVert } +\cs_new_protected:Nn \__nm_write_max_cell_width: + { + \bool_if:NF \l__nm_block_auto_columns_width_bool + { + \iow_now:Nn \@mainaux \ExplSyntaxOn + \iow_now:Nx \@mainaux + { + \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 + { + \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 + } + } +\prg_set_conditional:Npnn \__nm_if_not_empty_cell:nn #1 #2 { T , TF } + { + \cs_if_free:cTF + { pgf@sh@ns@nm -\int_use:N \g__nm_env_int - \int_use:N #1 - \int_use:N #2 } + \prg_return_false: + { + \seq_if_in:NxTF \g__nm_empty_cells_seq { \int_use:N #1 - \int_use:N #2 } + \prg_return_false: + { + \begin { pgfpicture } + \tl_set:Nx \l_tmpa_tl + { nm - \int_use:N \g__nm_env_int - \int_use:N #1 - \int_use:N #2 } + \pgfpointanchor \l_tmpa_tl { east } + \dim_gset:Nn \g_tmpa_dim \pgf@x + \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 } + \prg_return_false: + \prg_return_true: + } + } + } +\cs_new_protected:Nn \__nm_instruction_of_type:n + { + \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: + { + \group_begin: + \cs_if_exist:NT \tikz@library@external@loaded + { \tikzset { external / export = false } } + \int_gset_eq:NN \g__nm_column_int \g__nm_column_total_int + \bool_if:NT \l__nm_exterior_column_bool { \int_gdecr:N \g__nm_column_int } + \seq_gclear_new:N \g__nm_yet_drawn_seq + \bool_if:NT \l__nm_parallelize_diags_bool + { + \int_zero_new:N \l__nm_ddots_int + \int_zero_new:N \l__nm_iddots_int + \dim_zero_new:N \l__nm_delta_x_one_dim + \dim_zero_new:N \l__nm_delta_y_one_dim + \dim_zero_new:N \l__nm_delta_x_two_dim + \dim_zero_new:N \l__nm_delta_y_two_dim + } + \bool_if:NT \g__nm_extra_nodes_bool \__nm_create_extra_nodes: + \tl_if_empty:NF \g__nm_lines_to_draw_tl + { + \int_zero_new:N \l__nm_initial_i_int + \int_zero_new:N \l__nm_initial_j_int + \int_zero_new:N \l__nm_final_i_int + \int_zero_new:N \l__nm_final_j_int + \bool_set_false:N \l__nm_initial_open_bool + \bool_set_false:N \l__nm_final_open_bool + \g__nm_lines_to_draw_tl + } + \tl_gclear:N \g__nm_lines_to_draw_tl + \tikzset + { + every~picture / .style = + { + overlay , + remember~picture , + name~prefix = nm - \int_use:N \g__nm_env_int - + } + } + \cs_set_eq:NN \line \__nm_line:nn + \g__nm_code_after_tl + \group_end: + } +\cs_new_protected:Nn \__nm_find_extremities_of_line:nnnn + { + \int_set:Nn \l__nm_initial_i_int { #1 } + \int_set:Nn \l__nm_initial_j_int { #2 } + \int_set:Nn \l__nm_final_i_int { #1 } + \int_set:Nn \l__nm_final_j_int { #2 } + \bool_set_false:N \l__nm_initial_open_bool + \bool_set_false:N \l__nm_final_open_bool + \bool_set_false:N \l__nm_stop_loop_bool + \bool_do_until:Nn \l__nm_stop_loop_bool + { + \int_add:Nn \l__nm_final_i_int { #3 } + \int_add:Nn \l__nm_final_j_int { #4 } + \bool_if:nTF + { + \int_compare_p:nNn + \l__nm_final_i_int < { \l__nm_nb_first_row_int - 1 } + || \int_compare_p:nNn \l__nm_final_i_int > \g__nm_row_int + || \int_compare_p:nNn \l__nm_final_j_int < \c_one_int + || \int_compare_p:nNn \l__nm_final_j_int > \g__nm_column_total_int + || \int_compare_p:nNn \l__nm_final_j_int > \g__nm_column_int + && \int_compare_p:nNn { #4 } > \c_zero_int + } + { + \bool_set_true:N \l__nm_final_open_bool + \int_sub:Nn \l__nm_final_i_int { #3 } + \int_sub:Nn \l__nm_final_j_int { #4 } + \bool_set_true:N \l__nm_stop_loop_bool + } + { + \__nm_if_not_empty_cell:nnT \l__nm_final_i_int \l__nm_final_j_int + { \bool_set_true:N \l__nm_stop_loop_bool } + } + } + \bool_set_false:N \l__nm_stop_loop_bool + \bool_do_until:Nn \l__nm_stop_loop_bool + { + \int_sub:Nn \l__nm_initial_i_int { #3 } + \int_sub:Nn \l__nm_initial_j_int { #4 } + \bool_if:nTF + { + \int_compare_p:nNn \l__nm_initial_i_int < \l__nm_nb_first_row_int + || + \int_compare_p:nNn \l__nm_initial_i_int > \g__nm_row_int + || + \int_compare_p:nNn \l__nm_initial_j_int < 1 + || + \int_compare_p:nNn \l__nm_initial_j_int > \g__nm_column_total_int + } + { + \bool_set_true:N \l__nm_initial_open_bool + \int_add:Nn \l__nm_initial_i_int { #3 } + \int_add:Nn \l__nm_initial_j_int { #4 } + \bool_set_true:N \l__nm_stop_loop_bool + } + { + \__nm_if_not_empty_cell:nnT + \l__nm_initial_i_int \l__nm_initial_j_int + { \bool_set_true:N \l__nm_stop_loop_bool } + } + } + \bool_if:nT { \l__nm_initial_open_bool || \l__nm_final_open_bool } + \__nm_create_extra_nodes: + } +\prg_set_conditional:Npnn \__nm_if_yet_drawn: { F } + { + \tl_set:Nx \l_tmpa_tl + { + \int_use:N \l__nm_initial_i_int - + \int_use:N \l__nm_initial_j_int - + \int_use:N \l__nm_final_i_int - + \int_use:N \l__nm_final_j_int + } + \seq_if_in:NVTF \g__nm_yet_drawn_seq \l_tmpa_tl + \prg_return_true: + { + \seq_gput_left:NV \g__nm_yet_drawn_seq \l_tmpa_tl + \prg_return_false: + } + } +\cs_new_protected:Nn \__nm_retrieve_coords:nn + { + \dim_gzero_new:N \g__nm_x_initial_dim + \dim_gzero_new:N \g__nm_y_initial_dim + \dim_gzero_new:N \g__nm_x_final_dim + \dim_gzero_new:N \g__nm_y_final_dim + \begin { tikzpicture } [ remember~picture ] \tikz@parse@node\pgfutil@firstofone - (nm-\int_use:N \g__nicem_env_int- - \int_use:N \l__nicem_initial_i_int- - \int_use:N \l__nicem_initial_j_int #1) - \dim_gset:Nn \g__nicem_x_initial_dim \pgf@x - \dim_gset:Nn \g__nicem_y_initial_dim \pgf@y + ( nm - \int_use:N \g__nm_env_int - + \int_use:N \l__nm_initial_i_int - + \int_use:N \l__nm_initial_j_int #1 ) + \dim_gset:Nn \g__nm_x_initial_dim \pgf@x + \dim_gset:Nn \g__nm_y_initial_dim \pgf@y \tikz@parse@node\pgfutil@firstofone - (nm-\int_use:N \g__nicem_env_int- - \int_use:N \l__nicem_final_i_int- - \int_use:N \l__nicem_final_j_int #2) - \dim_gset:Nn \g__nicem_x_final_dim \pgf@x - \dim_gset:Nn \g__nicem_y_final_dim \pgf@y - \end{tikzpicture} } -\cs_generate_variant:Nn \__nicem_retrieve_coords:nn {xx} -\cs_new_protected:Nn \__nicem_draw_Ldots:nn - {\__nicem_find_extremities_of_line:nnnn {#1} {#2} 0 1 - \__nicem_if_yet_drawn:F \__nicem_actually_draw_Ldots:} -\cs_new_protected:Nn \__nicem_actually_draw_Ldots: - {\__nicem_retrieve_coords:xx {\bool_if:NTF \l__nicem_initial_open_bool - {-medium.base~west} - {.base~east}} - {\bool_if:NTF \l__nicem_final_open_bool - {-medium.base~east} - {.base~west}} - \bool_if:NT \l__nicem_initial_open_bool - {\dim_gset_eq:NN \g__nicem_y_initial_dim \g__nicem_y_final_dim } - \bool_if:NT \l__nicem_final_open_bool - {\dim_gset_eq:NN \g__nicem_y_final_dim \g__nicem_y_initial_dim } - \dim_gadd:Nn \g__nicem_y_initial_dim {0.53pt} - \dim_gadd:Nn \g__nicem_y_final_dim {0.53pt} - \__nicem_draw_tikz_line:} -\cs_new_protected:Nn \__nicem_draw_Cdots:nn - {\__nicem_find_extremities_of_line:nnnn {#1} {#2} 0 1 - \__nicem_if_yet_drawn:F - {\__nicem_retrieve_coords:xx {\bool_if:NTF \l__nicem_initial_open_bool - {-medium.mid~west} - {.mid~east}} - {\bool_if:NTF \l__nicem_final_open_bool - {-medium.mid~east} - {.mid~west}} - \bool_if:NT \l__nicem_initial_open_bool - {\dim_gset_eq:NN \g__nicem_y_initial_dim \g__nicem_y_final_dim } - \bool_if:NT \l__nicem_final_open_bool - {\dim_gset_eq:NN \g__nicem_y_final_dim \g__nicem_y_initial_dim } - \__nicem_draw_tikz_line:}} -\cs_new_protected:Nn \__nicem_draw_Vdots:nn - {\__nicem_find_extremities_of_line:nnnn {#1} {#2} 1 0 - \__nicem_if_yet_drawn:F - {\__nicem_retrieve_coords:xx {\bool_if:NTF \l__nicem_initial_open_bool - {-medium.north~west} - {.south~west}} - {\bool_if:NTF \l__nicem_final_open_bool - {-medium.south~west} - {.north~west}} - \bool_set:Nn \l_tmpa_bool - {\dim_compare_p:nNn \g__nicem_x_initial_dim = \g__nicem_x_final_dim} - \__nicem_retrieve_coords:xx {\bool_if:NTF \l__nicem_initial_open_bool - {-medium.north} - {.south}} - {\bool_if:NTF \l__nicem_final_open_bool - {-medium.south} - {.north}} - \bool_set:Nn \l_tmpb_bool - {\dim_compare_p:nNn \g__nicem_x_initial_dim = \g__nicem_x_final_dim} - \bool_if:NF \l_tmpb_bool - {\dim_gset:Nn \g__nicem_x_initial_dim - {\bool_if:NTF \l_tmpa_bool \dim_min:nn \dim_max:nn - \g__nicem_x_initial_dim \g__nicem_x_final_dim} - \dim_gset_eq:NN \g__nicem_x_final_dim \g__nicem_x_initial_dim} - \__nicem_draw_tikz_line:}} -\cs_new_protected:Nn \__nicem_draw_Ddots:nn - {\__nicem_find_extremities_of_line:nnnn {#1} {#2} 1 1 - \__nicem_if_yet_drawn:F - {\__nicem_retrieve_coords:xx {\bool_if:NTF \l__nicem_initial_open_bool - {-medium.north~west} - {.south~east}} - {\bool_if:NTF \l__nicem_final_open_bool - {-medium.south~east} - {.north~west}} - \bool_if:NT \l__nicem_parallelize_diags_bool - {\int_incr:N \l__nicem_ddots_int - \int_compare:nNnTF \l__nicem_ddots_int = 1 - {\dim_set:Nn \l__nicem_delta_x_one_dim {\g__nicem_x_final_dim - \g__nicem_x_initial_dim } - \dim_set:Nn \l__nicem_delta_y_one_dim {\g__nicem_y_final_dim - \g__nicem_y_initial_dim }} - {\dim_gset:Nn \g__nicem_y_final_dim - {\g__nicem_y_initial_dim + - (\g__nicem_x_final_dim - \g__nicem_x_initial_dim) - * \dim_ratio:nn \l__nicem_delta_y_one_dim \l__nicem_delta_x_one_dim }}} - \__nicem_draw_tikz_line:}} -\cs_new_protected:Nn \__nicem_draw_Iddots:nn - {\__nicem_find_extremities_of_line:nnnn {#1} {#2} 1 {-1} - \__nicem_if_yet_drawn:F - {\__nicem_retrieve_coords:xx {\bool_if:NTF \l__nicem_initial_open_bool - {-medium.north~east} - {.south~west}} - {\bool_if:NTF \l__nicem_final_open_bool - {-medium.south~west} - {.north~east}} - \bool_if:NT \l__nicem_parallelize_diags_bool - {\int_incr:N \l__nicem_iddots_int - \int_compare:nNnTF \l__nicem_iddots_int = 1 - {\dim_set:Nn \l__nicem_delta_x_two_dim {\g__nicem_x_final_dim - \g__nicem_x_initial_dim} - \dim_set:Nn \l__nicem_delta_y_two_dim {\g__nicem_y_final_dim - \g__nicem_y_initial_dim}} - {\dim_gset:Nn \g__nicem_y_final_dim - {\g__nicem_y_initial_dim + - (\g__nicem_x_final_dim - \g__nicem_x_initial_dim) - * \dim_ratio:nn \l__nicem_delta_y_two_dim \l__nicem_delta_x_two_dim }}} - \__nicem_draw_tikz_line:}} -\cs_new_protected:Nn \__nicem_draw_tikz_line: - { - \dim_zero_new:N \l__nicem_l_dim - \dim_set:Nn \l__nicem_l_dim - { \fp_to_dim:n - { sqrt( ( \dim_use:N \g__nicem_x_final_dim - -\dim_use:N \g__nicem_x_initial_dim) ^2 - +( \dim_use:N \g__nicem_y_final_dim - -\dim_use:N \g__nicem_y_initial_dim) ^2 )} - } - \dim_compare:nNnF \l__nicem_l_dim = \c_zero_dim - {\bool_if:NTF \l__nicem_initial_open_bool - {\bool_if:NTF \l__nicem_final_open_bool - {\int_set:Nn \l_tmpa_int - {\dim_ratio:nn {\l__nicem_l_dim} {0.45em}}} - {\int_set:Nn \l_tmpa_int - {\dim_ratio:nn {\l__nicem_l_dim - 0.3em} {0.45em}}}} - {\bool_if:NTF \l__nicem_final_open_bool - {\int_set:Nn \l_tmpa_int - {\dim_ratio:nn {\l__nicem_l_dim - 0.3em} {0.45em}}} - {\int_set:Nn \l_tmpa_int - {\dim_ratio:nn {\l__nicem_l_dim - 0.6em} {0.45em}}}} - \dim_set:Nn \l_tmpa_dim {(\g__nicem_x_final_dim - \g__nicem_x_initial_dim) - * \dim_ratio:nn {0.45em} \l__nicem_l_dim} - \dim_set:Nn \l_tmpb_dim {(\g__nicem_y_final_dim - \g__nicem_y_initial_dim) - * \dim_ratio:nn {0.45em} \l__nicem_l_dim} - \int_set:Nn \l_tmpb_int - {\bool_if:NTF \l__nicem_initial_open_bool - {\bool_if:NTF \l__nicem_final_open_bool 1 0} - {\bool_if:NTF \l__nicem_final_open_bool 2 1}} - \dim_gadd:Nn \g__nicem_x_initial_dim - { (\g__nicem_x_final_dim - \g__nicem_x_initial_dim) - * \dim_ratio:nn {\l__nicem_l_dim - 0.45 em * \l_tmpa_int} - {\l__nicem_l_dim * 2} - * \l_tmpb_int} - \dim_gadd:Nn \g__nicem_y_initial_dim - { (\g__nicem_y_final_dim - \g__nicem_y_initial_dim) - * \dim_ratio:nn {\l__nicem_l_dim - 0.45 em * \l_tmpa_int} - {\l__nicem_l_dim * 2} - * \l_tmpb_int} - \begin{tikzpicture}[overlay] - \int_step_inline:nnnn 0 1 \l_tmpa_int - { \pgfpathcircle{\pgfpoint{\g__nicem_x_initial_dim} - {\g__nicem_y_initial_dim}} - {0.53pt} - \pgfusepath{fill} - \dim_gadd:Nn \g__nicem_x_initial_dim \l_tmpa_dim - \dim_gadd:Nn \g__nicem_y_initial_dim \l_tmpb_dim } - \end{tikzpicture}} -} -\cs_set_eq:NN \__nicem_ldots \ldots -\cs_set_eq:NN \__nicem_cdots \cdots -\cs_set_eq:NN \__nicem_vdots \vdots -\cs_set_eq:NN \__nicem_ddots \ddots -\cs_set_eq:NN \__nicem_iddots \iddots -\cs_new_protected:Nn \__nicem_add_to_empty_cells: - {\seq_gput_right:Nx \g__nicem_empty_cells_seq - {\int_use:N \g__nicem_row_int- - \int_use:N \g__nicem_column_int}} -\NewDocumentCommand \__nicem_Ldots {s} - {\bool_if:nF {#1} {\__nicem_instruction_of_type:n {Ldots}} - \bool_if:NF \l__nicem_nullify_dots_bool {\phantom \__nicem_ldots} - \__nicem_add_to_empty_cells:} -\NewDocumentCommand \__nicem_Cdots {s} - {\bool_if:nF {#1} {\__nicem_instruction_of_type:n {Cdots}} - \bool_if:NF \l__nicem_nullify_dots_bool {\phantom \__nicem_cdots} - \__nicem_add_to_empty_cells:} -\NewDocumentCommand \__nicem_Vdots {s} - {\bool_if:nF {#1} {\__nicem_instruction_of_type:n {Vdots}} - \bool_if:NF \l__nicem_nullify_dots_bool {\phantom \__nicem_vdots} - \__nicem_add_to_empty_cells:} -\NewDocumentCommand \__nicem_Ddots {s} - {\bool_if:nF {#1} {\__nicem_instruction_of_type:n {Ddots}} - \bool_if:NF \l__nicem_nullify_dots_bool {\phantom \__nicem_ddots} - \__nicem_add_to_empty_cells:} -\NewDocumentCommand \__nicem_Iddots {s} - {\bool_if:nF {#1} {\__nicem_instruction_of_type:n {Iddots}} - \bool_if:NF \l__nicem_nullify_dots_bool {\phantom \__nicem_iddots} - \__nicem_add_to_empty_cells:} -\cs_new_protected:Nn \__nicem_Hspace: - {\__nicem_add_to_empty_cells: - \hspace} -\cs_set_eq:NN \__nicem_old_multicolumn \multicolumn -\cs_new:Nn \__nicem_multicolumn:nnn - {\__nicem_old_multicolumn{#1}{#2}{#3} - \int_compare:nNnT #1 > 1 - {\seq_gput_left:Nx \g__nicem_multicolumn_cells_seq - {\int_eval:n \g__nicem_row_int - - \int_use:N \g__nicem_column_int} - \seq_gput_left:Nn \g__nicem_multicolumn_sizes_seq {#1}} - \int_gadd:Nn \g__nicem_column_int {#1-1}} -\NewDocumentCommand {\__nicem_Hdotsfor} {O{} m} - {\tl_gput_right:Nx \g__nicem_lines_to_draw_tl - {\exp_not:N \__nicem_draw_Hdotsfor:nnn - {\int_use:N \g__nicem_row_int} - {\int_use:N \g__nicem_column_int} - {#2}} - \prg_replicate:nn {#2-1} {&}} -\cs_new_protected:Nn \__nicem_draw_Hdotsfor:nnn - {\bool_set_false:N \l__nicem_initial_open_bool - \bool_set_false:N \l__nicem_final_open_bool - \int_set:Nn \l__nicem_initial_i_int {#1} - \int_set:Nn \l__nicem_final_i_int {#1} - \int_compare:nNnTF #2 = 1 - {\int_set:Nn \l__nicem_initial_j_int 1 - \bool_set_true:N \l__nicem_initial_open_bool} - {\int_set:Nn \l_tmpa_int {#2-1} - \__nicem_if_not_empty_cell:nnTF \l__nicem_initial_i_int \l_tmpa_int - {\int_set:Nn \l__nicem_initial_j_int {#2-1}} - {\int_set:Nn \l__nicem_initial_j_int {#2} - \bool_set_true:N \l__nicem_initial_open_bool}} - \int_compare:nNnTF {#2+#3-1} = \g__nicem_column_int - {\int_set:Nn \l__nicem_final_j_int {#2+#3-1} - \bool_set_true:N \l__nicem_final_open_bool} - {\int_set:Nn \l_tmpa_int {#2+#3} - \__nicem_if_not_empty_cell:nnTF \l__nicem_final_i_int \l_tmpa_int - {\int_set:Nn \l__nicem_final_j_int {#2+#3}} - {\int_set:Nn \l__nicem_final_j_int {#2+#3-1} - \bool_set_true:N \l__nicem_final_open_bool}} - \bool_if:nT {\l__nicem_initial_open_bool || \l__nicem_final_open_bool} - \__nicem_create_extra_nodes: - \__nicem_actually_draw_Ldots:} -\cs_new_protected:Nn \__nicem_line:nn - {\dim_zero_new:N \g__nicem_x_initial_dim - \dim_zero_new:N \g__nicem_y_initial_dim - \dim_zero_new:N \g__nicem_x_final_dim - \dim_zero_new:N \g__nicem_y_final_dim - \__nicem_bool_new:N \l__nicem_initial_open_bool - \__nicem_bool_new:N \l__nicem_final_open_bool - \begin{tikzpicture} - \path~(#1)~--~(#2)~node[at~start]~(i)~{}~node[at~end]~(f)~{} ; - \tikz@parse@node\pgfutil@firstofone (i) - \dim_gset:Nn \g__nicem_x_initial_dim \pgf@x - \dim_gset:Nn \g__nicem_y_initial_dim \pgf@y - \tikz@parse@node\pgfutil@firstofone (f) - \dim_gset:Nn \g__nicem_x_final_dim \pgf@x - \dim_gset:Nn \g__nicem_y_final_dim \pgf@y - \end{tikzpicture} - \__nicem_draw_tikz_line:} -\bool_new:N \l__nicem_block_auto_columns_width_bool -\keys_define:nn {NiceMatrix/NiceMatrixBlock} - {auto-columns-width .code:n = - {\bool_set_true:N \l__nicem_block_auto_columns_width_bool - \dim_gzero_new:N \g__nicem_max_cell_width_dim - \bool_set_true:N \l__nicem_auto_columns_width_bool}} -\NewDocumentEnvironment {NiceMatrixBlock} {!O{}} - {\keys_set:nn {NiceMatrix/NiceMatrixBlock} {#1} - \int_zero_new:N \l__nicem_first_env_block_int - \int_set:Nn \l__nicem_first_env_block_int {\g__nicem_env_int + 1}} - {\bool_if:NT \l__nicem_block_auto_columns_width_bool - {\iow_now:Nn \@mainaux \ExplSyntaxOn - \int_step_inline:nnnn \l__nicem_first_env_block_int 1 \g__nicem_env_int - {\iow_now:Nx \@mainaux - {\cs_gset:cpn {__nicem_max_cell_width_##1} - {\dim_use:N \g__nicem_max_cell_width_dim}}} - \iow_now:Nn \@mainaux \ExplSyntaxOff}} -\keys_define:nn {NiceMatrix/NiceArrayC} - {parallelize-diags .bool_set:N = \l__nicem_parallelize_diags_bool, - parallelize-diags .default:n = true, - renew-dots .bool_set:N = \l__nicem_renew_dots_bool, - renew-dots .default:n = true, - nullify-dots .bool_set:N = \l__nicem_nullify_dots_bool , - nullify-dots .default:n = true, - code-for-last-col .tl_set:N = \l__nicem_code_for_last_col_tl, - code-for-last-col .value_required:n = true, - columns-width .code:n = \str_if_eq:nnTF {#1} {auto} - {\bool_set_true:N - \l__nicem_auto_columns_width_bool} - {\dim_set:Nn \l__nicem_columns_width_dim {#1}}, - columns-width .value_required:n = true, - name .code:n = {\seq_if_in:NnTF \g__nicem_names_seq {#1} - {\__nicem_error:nn {Duplicate~name} {#1}} - {\seq_gput_left:Nn \g__nicem_names_seq {#1}} - \tl_set:Nn \l__nicem_name_tl {#1}}, - name .value_required:n = true, - code-after .tl_set:N = \l__nicem_code_after_tl, - code-after .initial:n = \c_empty_tl, - code-after .value_required:n = true, - create-extra-nodes .bool_set:N = \l__nicem_extra_nodes_bool, - create-extra-nodes .default:n = true, - left-margin .dim_set:N = \l__nicem_left_margin_dim, - left-margin .default:n = \arraycolsep, - right-margin .dim_set:N = \l__nicem_right_margin_dim, - right-margin .default:n = \arraycolsep, - extra-left-margin .dim_set:N = \l__nicem_extra_left_margin_dim, - extra-right-margin .dim_set:N = \l__nicem_extra_right_margin_dim, - unknown .code:n = \__nicem_error:n {Unknown~option~for~NiceArrayC}} -\msg_new:nnnn {nicematrix} - {Unknown~option~for~NiceArrayC} - {The~option~"\tl_use:N\l_keys_key_tl"~is~unknown~for~the~environment~ - \{\@currenvir\}.\\ - If~you~go~on,~it~will~be~ignored.\\ - For~a~list~of~the~available~options,~type~H~<return>.} - {The~available~options~are~(in~alphabetic~order):~ - code-after,~ - code-for-last-col,~ - columns-width,~ - create-extra-nodes,~ - extra-left-margin,~ - extra-right-margin,~ - left-margin,~ - name,~ - nullify-dots,~ - parallelize-diags~ - renew-dots~ - and~right-margin.} -\cs_new_protected:Nn \__nicem_NiceArrayC:n - {\bool_set_true:N \l__nicem_exterior_column_bool - \begin{NiceArray} - {#1 - >{\int_gincr:N \g__nicem_column_int - \int_gset:Nn \g__nicem_column_total_int - {\int_max:nn \g__nicem_column_total_int \g__nicem_column_int} - \hbox_set:Nw \l_tmpa_box $ % $ - \l__nicem_code_for_last_col_tl - } - l - <{ $ % $ - \hbox_set_end: - \dim_gset:Nn \g__nicem_width_last_col_dim - {\dim_max:nn \g__nicem_width_last_col_dim - {\box_wd:N \l_tmpa_box}} - \skip_horizontal:n {-2\arraycolsep} - \hbox_overlap_right:n - {\skip_horizontal:n - { 2\arraycolsep + \l__nicem_right_margin_dim - + \l__nicem_extra_right_margin_dim} - \tikz[remember~picture, inner~sep=0pt, minimum~width=0pt, baseline] - \node [anchor=base, - name = nm-\int_use:N \g__nicem_env_int- - \int_use:N \g__nicem_row_int- - \int_use:N \g__nicem_column_int, - alias = \tl_if_empty:NF \l__nicem_name_tl - {\l__nicem_name_tl- - \int_use:N \g__nicem_row_int- - \int_use:N \g__nicem_column_int}] - {\box_use:N \l_tmpa_box} ; } }}} -\NewDocumentEnvironment{NiceArrayCwithDelims} {mm O{} m !O{}} - {\dim_gzero_new:N \g__nicem_width_last_col_dim - \keys_set:nn {NiceMatrix/NiceArrayC} {#3,#5} - \bool_set_false:N \l__nicem_exterior_arraycolsep_bool - \tl_set:Nn \l__nicem_pos_env_tl c - \left#1 - \__nicem_NiceArrayC:n {#4}} - {\end{NiceArray} - \right#2 - \skip_horizontal:n \g__nicem_width_last_col_dim - } -\NewDocumentEnvironment {pNiceArrayC} {} - {\NiceArrayCwithDelims{(}{)}} - {\endNiceArrayCwithDelims} -\NewDocumentEnvironment {vNiceArrayC} {} - {\NiceArrayCwithDelims{|}{|}} - {\endNiceArrayCwithDelims} -\NewDocumentEnvironment {VNiceArrayC} {} - {\NiceArrayCwithDelims{\|}{\|}} - {\endNiceArrayCwithDelims} -\NewDocumentEnvironment {bNiceArrayC} {} - {\NiceArrayCwithDelims{[}{]}} - {\endNiceArrayCwithDelims} -\NewDocumentEnvironment {BNiceArrayC} {} - {\NiceArrayCwithDelims{\{}{\}}} - {\endNiceArrayCwithDelims} -\keys_define:nn {NiceMatrix/NiceArrayRC} - {parallelize-diags .bool_set:N = \l__nicem_parallelize_diags_bool, - parallelize-diags .default:n = true, - renew-dots .bool_set:N = \l__nicem_renew_dots_bool, - renew-dots .default:n = true, - nullify-dots .bool_set:N = \l__nicem_nullify_dots_bool , - nullify-dots .default:n = true, - code-for-first-row .tl_set:N = \l__nicem_code_for_first_row_tl, - code-for-first-row .value_required:n = true, - code-for-last-col .tl_set:N = \l__nicem_code_for_last_col_tl, - code-for-last-col .value_required:n = true, - columns-width .code:n = \str_if_eq:nnTF {#1} {auto} - {\bool_set_true:N - \l__nicem_auto_columns_width_bool} - {\dim_set:Nn \l__nicem_columns_width_dim {#1}}, - columns-width .value_required:n = true, - name .code:n = {\seq_if_in:NnTF \g__nicem_names_seq {#1} - {\__nicem_error:nn {Duplicate~name} {#1}} - {\seq_gput_left:Nn \g__nicem_names_seq {#1}} - \tl_set:Nn \l__nicem_name_tl {#1}}, - code-after .tl_set:N = \l__nicem_code_after_tl, - create-extra-nodes .bool_set:N = \l__nicem_extra_nodes_bool, - create-extra-nodes .default:n = true, - left-margin .dim_set:N = \l__nicem_left_margin_dim, - left-margin .default:n = \arraycolsep, - right-margin .dim_set:N = \l__nicem_right_margin_dim, - right-margin .default:n = \arraycolsep, - extra-left-margin .dim_set:N = \l__nicem_extra_left_margin_dim, - extra-right-margin .dim_set:N = \l__nicem_extra_right_margin_dim, - unknown .code:n = \__nicem_error:n {Unknown~option~for~NiceArrayRC}} -\msg_new:nnnn {nicematrix} - {Unknown~option~for~NiceArrayRC} - {The~option~"\tl_use:N\l_keys_key_tl"~is~unknown~for~the~environment~ - \{\@currenvir\}.\\ - If~you~go~on,~it~will~be~ignored.\\ - For~a~list~of~the~available~options,~type~H~<return>.} - {The~available~options~are~(in~alphabetic~order):~ - code-after,~ - code-for-last-col,~ - code-for-first-row,~ - columns-width,~ - create-extra-nodes,~ - extra-left-margin,~ - extra-right-margin,~ - left-margin,~ - name,~ - nullify-dots,~ - parallelize-diags,~ - renew-dots~ - and~right-margin.} -\NewDocumentEnvironment {NiceArrayRCwithDelims} {mm O{} m !O{}} - {\int_zero:N \l__nicem_nb_first_row_int - \dim_gzero_new:N \g__nicem_width_last_col_dim - \keys_set:nn {NiceMatrix/NiceArrayRC} {#3,#5} - \bool_set_false:N \l__nicem_exterior_arraycolsep_bool - \tl_set:Nn \l__nicem_pos_env_tl c - \box_clear_new:N \l__nicem_the_array_box - \hbox_set:Nw \l__nicem_the_array_box - $ % $ - \__nicem_NiceArrayC:n {#4}} - { \end{NiceArray} - $ % $ - \hbox_set_end: - \dim_set:Nn \l_tmpa_dim - { ( \dim_max:nn {12pt} - {\g__nicem_max_ht_row_one_dim + \g__nicem_max_dp_row_zero_dim}) - + \g__nicem_max_ht_row_zero_dim - - \g__nicem_max_ht_row_one_dim } - \hbox_set:Nn \l_tmpa_box - {$ % $ - \left#1 - \vcenter {\skip_vertical:n {- \l_tmpa_dim} - \box_use_drop:N \l__nicem_the_array_box} - \right#2 - $ % $ - \skip_horizontal:n \g__nicem_width_last_col_dim} - \box_set_ht:Nn \l_tmpa_box {\box_ht:N \l_tmpa_box + \l_tmpa_dim} - \box_use_drop:N \l_tmpa_box - } -\NewDocumentEnvironment {pNiceArrayRC} {} - {\NiceArrayRCwithDelims{(}{)}} - {\endNiceArrayRCwithDelims} -\NewDocumentEnvironment {bNiceArrayRC} {} - {\NiceArrayRCwithDelims{[}{]}} - {\endNiceArrayRCwithDelims} -\NewDocumentEnvironment {vNiceArrayRC} {} - {\NiceArrayRCwithDelims{|}{|}} - {\endNiceArrayRCwithDelims} -\NewDocumentEnvironment {VNiceArrayRC} {} - {\NiceArrayRCwithDelims{\|}{\|}} - {\endNiceArrayRCwithDelims} -\NewDocumentEnvironment {BNiceArrayRC} {} - {\NiceArrayRCwithDelims{\{}{\}}} - {\endNiceArrayRCwithDelims} -\cs_generate_variant:Nn \dim_min:nn {vn} -\cs_generate_variant:Nn \dim_max:nn {vn} -\cs_new_protected:Nn \__nicem_create_extra_nodes: - {\begin{tikzpicture}[remember~picture,overlay] - \int_step_variable:nnnNn \l__nicem_nb_first_row_int 1 \g__nicem_row_int \__nicem_i - {\dim_zero_new:c {l__nicem_row_\__nicem_i _min_dim} - \dim_set_eq:cN {l__nicem_row_\__nicem_i _min_dim} \c_max_dim - \dim_zero_new:c {l__nicem_row_\__nicem_i _max_dim} - \dim_set:cn {l__nicem_row_\__nicem_i _max_dim} {-\c_max_dim}} - \int_step_variable:nnnNn 1 1 \g__nicem_column_total_int \__nicem_j - {\dim_zero_new:c {l__nicem_column_\__nicem_j _min_dim} - \dim_set_eq:cN {l__nicem_column_\__nicem_j _min_dim} \c_max_dim - \dim_zero_new:c {l__nicem_column_\__nicem_j _max_dim} - \dim_set:cn {l__nicem_column_\__nicem_j _max_dim} {-\c_max_dim}} - \int_step_variable:nnnNn \l__nicem_nb_first_row_int 1 \g__nicem_row_int \__nicem_i - {\int_step_variable:nnnNn 1 1 \g__nicem_column_total_int \__nicem_j - {\cs_if_exist:cT {pgf@sh@ns@nm-\int_use:N \g__nicem_env_int-\__nicem_i-\__nicem_j} - {\tikz@parse@node \pgfutil@firstofone - (nm-\int_use:N \g__nicem_env_int-\__nicem_i-\__nicem_j.south~west) - \dim_set:cn {l__nicem_row_\__nicem_i _min_dim} - {\dim_min:vn {l__nicem_row_\__nicem_i _min_dim} \pgf@y} - \seq_if_in:NxF \g__nicem_multicolumn_cells_seq {\__nicem_i-\__nicem_j} - {\dim_set:cn {l__nicem_column_\__nicem_j _min_dim} - {\dim_min:vn {l__nicem_column_\__nicem_j _min_dim} \pgf@x}} - \tikz@parse@node \pgfutil@firstofone - (nm-\int_use:N \g__nicem_env_int-\__nicem_i-\__nicem_j.north~east) - \dim_set:cn {l__nicem_row_\__nicem_i _max_dim} - {\dim_max:vn {l__nicem_row_\__nicem_i _max_dim} \pgf@y} - \seq_if_in:NxF \g__nicem_multicolumn_cells_seq {\__nicem_i-\__nicem_j} - {\dim_set:cn {l__nicem_column_\__nicem_j _max_dim} - {\dim_max:vn {l__nicem_column_\__nicem_j _max_dim} \pgf@x}}} - }} - \tikzset{name~suffix = -medium} - \__nicem_create_nodes: - \int_set:Nn \l__nicem_nb_first_row_int 1 - \int_step_variable:nnnNn 1 1 {\g__nicem_row_int-1} \__nicem_i - {\dim_set:cn {l__nicem_row_\__nicem_i _min_dim} - {( \dim_use:c {l__nicem_row_\__nicem_i _min_dim} - + \dim_use:c {l__nicem_row_\int_eval:n{\__nicem_i+1}_max_dim}) / 2} - \dim_set_eq:cc {l__nicem_row_\int_eval:n{\__nicem_i+1}_max_dim} - {l__nicem_row_\__nicem_i _min_dim} } - \int_step_variable:nnnNn 1 1 {\g__nicem_column_int-1} \__nicem_j - {\dim_set:cn {l__nicem_column_\__nicem_j _max_dim} - {( \dim_use:c {l__nicem_column_\__nicem_j _max_dim} - + \dim_use:c {l__nicem_column_\int_eval:n{\__nicem_j+1}_min_dim}) / 2} - \dim_set_eq:cc {l__nicem_column_\int_eval:n{\__nicem_j+1}_min_dim} - {l__nicem_column_\__nicem_j _max_dim} } - \dim_sub:cn {l__nicem_column_1_min_dim} \g__nicem_left_margin_dim - \dim_add:cn {l__nicem_column_\int_use:N \g__nicem_column_int _max_dim} - \g__nicem_right_margin_dim - \tikzset{name~suffix = -large} - \__nicem_create_nodes: - \end{tikzpicture} - \cs_set:Nn \__nicem_create_extra_nodes: {}} -\cs_new_protected:Nn \__nicem_create_nodes: - {\int_step_variable:nnnNn \l__nicem_nb_first_row_int 1 \g__nicem_row_int \__nicem_i - {\int_step_variable:nnnNn 1 1 \g__nicem_column_total_int \__nicem_j - {\coordinate (__nicem~south~west) - at (\dim_use:c {l__nicem_column_\__nicem_j _min_dim}, - \dim_use:c {l__nicem_row_\__nicem_i _min_dim}) ; - \coordinate (__nicem~north~east) - at (\dim_use:c {l__nicem_column_\__nicem_j _max_dim}, - \dim_use:c {l__nicem_row_\__nicem_i _max_dim}) ; - \draw node [fit = {(__nicem~south~west) (__nicem~north~east)}, - inner~sep=0pt, - name = nm-\int_use:N \g__nicem_env_int-\__nicem_i-\__nicem_j, - alias = \tl_if_empty:NF \g__nicem_name_tl - {\tl_use:N \g__nicem_name_tl-\__nicem_i-\__nicem_j}] - {} ; + ( nm - \int_use:N \g__nm_env_int - + \int_use:N \l__nm_final_i_int - + \int_use:N \l__nm_final_j_int #2 ) + \dim_gset:Nn \g__nm_x_final_dim \pgf@x + \dim_gset:Nn \g__nm_y_final_dim \pgf@y + \end { tikzpicture } + } +\cs_generate_variant:Nn \__nm_retrieve_coords:nn { x x } +\cs_new_protected:Nn \__nm_draw_Ldots:nn + { + \__nm_find_extremities_of_line:nnnn { #1 } { #2 } \c_zero_int \c_one_int + \__nm_if_yet_drawn:F \__nm_actually_draw_Ldots: + } +\cs_new_protected:Nn \__nm_actually_draw_Ldots: + { + \__nm_retrieve_coords:xx + { + \bool_if:NTF \l__nm_initial_open_bool + { - medium.base~west } + { .base~east } + } + { + \bool_if:NTF \l__nm_final_open_bool + { - medium.base~east } + { . base~west } + } + \bool_if:NT \l__nm_initial_open_bool + { \dim_gset_eq:NN \g__nm_y_initial_dim \g__nm_y_final_dim } + \bool_if:NT \l__nm_final_open_bool + { \dim_gset_eq:NN \g__nm_y_final_dim \g__nm_y_initial_dim } + \dim_gadd:Nn \g__nm_y_initial_dim { 0.53 pt } + \dim_gadd:Nn \g__nm_y_final_dim { 0.53 pt } + \__nm_draw_tikz_line: + } +\cs_new_protected:Nn \__nm_draw_Cdots:nn + { + \__nm_find_extremities_of_line:nnnn { #1 } { #2 } \c_zero_int \c_one_int + \__nm_if_yet_drawn:F + { + \__nm_retrieve_coords:xx + { + \bool_if:NTF \l__nm_initial_open_bool + { - medium.mid~west } + { .mid~east } + } + { + \bool_if:NTF \l__nm_final_open_bool + { - medium.mid~east } + { .mid~west } + } + \bool_if:NT \l__nm_initial_open_bool + { \dim_gset_eq:NN \g__nm_y_initial_dim \g__nm_y_final_dim } + \bool_if:NT \l__nm_final_open_bool + { \dim_gset_eq:NN \g__nm_y_final_dim \g__nm_y_initial_dim } + \__nm_draw_tikz_line: + } + } +\cs_new_protected:Nn \__nm_draw_Vdots:nn + { + \__nm_find_extremities_of_line:nnnn { #1 } { #2 } \c_one_int \c_zero_int + \__nm_if_yet_drawn:F + { \__nm_retrieve_coords:xx + { + \bool_if:NTF \l__nm_initial_open_bool + { - medium.north~west } + { .south~west } + } + { + \bool_if:NTF \l__nm_final_open_bool + { - medium.south~west } + { .north~west } + } + \bool_set:Nn \l_tmpa_bool + { \dim_compare_p:nNn \g__nm_x_initial_dim = \g__nm_x_final_dim } + \__nm_retrieve_coords:xx + { + \bool_if:NTF \l__nm_initial_open_bool + { - medium.north } + { .south } + } + { + \bool_if:NTF \l__nm_final_open_bool + { - medium.south } + { .north } + } + \bool_set:Nn \l_tmpb_bool + { \dim_compare_p:nNn \g__nm_x_initial_dim = \g__nm_x_final_dim } + \bool_if:NF \l_tmpb_bool + { + \dim_gset:Nn \g__nm_x_initial_dim + { + \bool_if:NTF \l_tmpa_bool \dim_min:nn \dim_max:nn + \g__nm_x_initial_dim \g__nm_x_final_dim } + \dim_gset_eq:NN \g__nm_x_final_dim \g__nm_x_initial_dim } - \__nicem_seq_mapthread_function:NNN \g__nicem_multicolumn_cells_seq - \g__nicem_multicolumn_sizes_seq - \__nicem_node_for_multicolumn:nn + \__nm_draw_tikz_line: } -\cs_set:Npn \__nicem_extract_coords: #1-#2\q_stop{\cs_set:Npn \__nicem_i {#1} - \cs_set:Npn \__nicem_j {#2}} -\cs_new_protected:Nn \__nicem_node_for_multicolumn:nn - {\__nicem_extract_coords: #1\q_stop - \coordinate (__nicem~south~west) - at (\dim_use:c {l__nicem_column_\__nicem_j _min_dim}, - \dim_use:c {l__nicem_row_\__nicem_i _min_dim}) ; - \coordinate (__nicem~north~east) - at (\dim_use:c {l__nicem_column_\int_eval:n{\__nicem_j+#2-1}_max_dim}, - \dim_use:c {l__nicem_row_\__nicem_i _max_dim}) ; - \draw node [fit = {(__nicem~south~west) (__nicem~north~east)}, - inner~sep=0pt, - name = nm-\int_use:N \g__nicem_env_int-\__nicem_i-\__nicem_j, - alias = \tl_if_empty:NF \g__nicem_name_tl - {\tl_use:N \g__nicem_name_tl-\__nicem_i-\__nicem_j}] - {} ; + } +\cs_new_protected:Nn \__nm_draw_Ddots:nn + { + \__nm_find_extremities_of_line:nnnn { #1 } { #2 } \c_one_int \c_one_int + \__nm_if_yet_drawn:F + { + \__nm_retrieve_coords:xx + { + \bool_if:NTF \l__nm_initial_open_bool + { - medium.north~west } + { .south~east } + } + { + \bool_if:NTF \l__nm_final_open_bool + { - medium.south~east } + { .north~west } + } + \bool_if:NT \l__nm_parallelize_diags_bool + { + \int_incr:N \l__nm_ddots_int + \int_compare:nNnTF \l__nm_ddots_int = \c_one_int + { + \dim_set:Nn \l__nm_delta_x_one_dim + { \g__nm_x_final_dim - \g__nm_x_initial_dim } + \dim_set:Nn \l__nm_delta_y_one_dim + { \g__nm_y_final_dim - \g__nm_y_initial_dim } + } + { + \dim_gset:Nn \g__nm_y_final_dim + { + \g__nm_y_initial_dim + + ( \g__nm_x_final_dim - \g__nm_x_initial_dim ) * + \dim_ratio:nn \l__nm_delta_y_one_dim \l__nm_delta_x_one_dim + } + } + } + \__nm_draw_tikz_line: + } + } +\cs_new_protected:Nn \__nm_draw_Iddots:nn + { + \__nm_find_extremities_of_line:nnnn { #1 } { #2 } 1 { -1 } + \__nm_if_yet_drawn:F + { \__nm_retrieve_coords:xx + { + \bool_if:NTF \l__nm_initial_open_bool + { - medium.north~east } + { .south~west } + } + { + \bool_if:NTF \l__nm_final_open_bool + { - medium.south~west } + { .north~east } + } + \bool_if:NT \l__nm_parallelize_diags_bool + { + \int_incr:N \l__nm_iddots_int + \int_compare:nNnTF \l__nm_iddots_int = \c_one_int + { + \dim_set:Nn \l__nm_delta_x_two_dim + { \g__nm_x_final_dim - \g__nm_x_initial_dim } + \dim_set:Nn \l__nm_delta_y_two_dim + { \g__nm_y_final_dim - \g__nm_y_initial_dim } + } + { + \dim_gset:Nn \g__nm_y_final_dim + { + \g__nm_y_initial_dim + + ( \g__nm_x_final_dim - \g__nm_x_initial_dim ) * + \dim_ratio:nn \l__nm_delta_y_two_dim \l__nm_delta_x_two_dim + } + } + } + \__nm_draw_tikz_line: + } + } +\cs_new_protected:Nn \__nm_draw_tikz_line: + { + \dim_zero_new:N \l__nm_l_dim + \dim_set:Nn \l__nm_l_dim + { + \fp_to_dim:n + { + sqrt + ( ( \dim_use:N \g__nm_x_final_dim + - \dim_use:N \g__nm_x_initial_dim + ) ^ 2 + + + ( \dim_use:N \g__nm_y_final_dim + - \dim_use:N \g__nm_y_initial_dim + ) ^ 2 + ) + } + } + \dim_compare:nNnF \l__nm_l_dim = \c_zero_dim + { + \bool_if:NTF \l__nm_initial_open_bool + { + \bool_if:NTF \l__nm_final_open_bool + { + \int_set:Nn \l_tmpa_int + { \dim_ratio:nn \l__nm_l_dim { 0.45 em } } + } + { + \int_set:Nn \l_tmpa_int + { \dim_ratio:nn { \l__nm_l_dim - 0.3 em } { 0.45 em } } + } + } + { + \bool_if:NTF \l__nm_final_open_bool + { + \int_set:Nn \l_tmpa_int + { \dim_ratio:nn { \l__nm_l_dim - 0.3 em } { 0.45 em } } + } + { \int_set:Nn \l_tmpa_int + { \dim_ratio:nn { \l__nm_l_dim - 0.6 em } { 0.45 em }} + } + } + \dim_set:Nn \l_tmpa_dim + { + ( \g__nm_x_final_dim - \g__nm_x_initial_dim ) * + \dim_ratio:nn { 0.45 em } \l__nm_l_dim + } + \dim_set:Nn \l_tmpb_dim + { + ( \g__nm_y_final_dim - \g__nm_y_initial_dim ) * + \dim_ratio:nn { 0.45 em } \l__nm_l_dim + } + \int_set:Nn \l_tmpb_int + { + \bool_if:NTF \l__nm_initial_open_bool + { \bool_if:NTF \l__nm_final_open_bool 1 0 } + { \bool_if:NTF \l__nm_final_open_bool 2 1 } + } + \dim_gadd:Nn \g__nm_x_initial_dim + { + ( \g__nm_x_final_dim - \g__nm_x_initial_dim ) * + \dim_ratio:nn + { \l__nm_l_dim - 0.45 em * \l_tmpa_int } { \l__nm_l_dim * 2 } * + \l_tmpb_int + } + \dim_gadd:Nn \g__nm_y_initial_dim + { + ( \g__nm_y_final_dim - \g__nm_y_initial_dim ) * + \dim_ratio:nn + { \l__nm_l_dim - 0.45 em * \l_tmpa_int } + { \l__nm_l_dim * 2 } * + \l_tmpb_int + } + \begin { tikzpicture } [ overlay ] + \int_step_inline:nnnn 0 1 \l_tmpa_int + { + \pgfpathcircle + { \pgfpoint { \g__nm_x_initial_dim } { \g__nm_y_initial_dim } } + { 0.53 pt } + \pgfusepath { fill } + \dim_gadd:Nn \g__nm_x_initial_dim \l_tmpa_dim + \dim_gadd:Nn \g__nm_y_initial_dim \l_tmpb_dim + } + \end { tikzpicture } + } + } +\cs_set_eq:NN \__nm_ldots \ldots +\cs_set_eq:NN \__nm_cdots \cdots +\cs_set_eq:NN \__nm_vdots \vdots +\cs_set_eq:NN \__nm_ddots \ddots +\cs_set_eq:NN \__nm_iddots \iddots +\cs_new_protected:Nn \__nm_add_to_empty_cells: + { + \seq_gput_right:Nx \g__nm_empty_cells_seq + { \int_use:N \g__nm_row_int - \int_use:N \g__nm_column_int } + } +\NewDocumentCommand \__nm_Ldots { s } + { + \bool_if:nF { #1 } { \__nm_instruction_of_type:n { Ldots } } + \bool_if:NF \l__nm_nullify_dots_bool { \phantom \__nm_ldots } + \__nm_add_to_empty_cells: + } +\NewDocumentCommand \__nm_Cdots { s } + { + \bool_if:nF { #1 } { \__nm_instruction_of_type:n { Cdots } } + \bool_if:NF \l__nm_nullify_dots_bool { \phantom \__nm_cdots } + \__nm_add_to_empty_cells: + } +\NewDocumentCommand \__nm_Vdots { s } + { + \bool_if:nF { #1 } { \__nm_instruction_of_type:n { Vdots } } + \bool_if:NF \l__nm_nullify_dots_bool { \phantom \__nm_vdots } + \__nm_add_to_empty_cells: + } +\NewDocumentCommand \__nm_Ddots { s } + { + \bool_if:nF { #1 } { \__nm_instruction_of_type:n { Ddots } } + \bool_if:NF \l__nm_nullify_dots_bool { \phantom \__nm_ddots } + \__nm_add_to_empty_cells: + } +\NewDocumentCommand \__nm_Iddots { s } + { + \bool_if:nF { #1 } { \__nm_instruction_of_type:n { Iddots } } + \bool_if:NF \l__nm_nullify_dots_bool { \phantom \__nm_iddots } + \__nm_add_to_empty_cells: + } +\cs_new_protected:Nn \__nm_Hspace: + { + \__nm_add_to_empty_cells: + \hspace + } +\cs_set_eq:NN \__nm_old_multicolumn \multicolumn +\cs_new:Nn \__nm_multicolumn:nnn + { + \__nm_old_multicolumn { #1 } { #2 } { #3 } + \int_compare:nNnT #1 > 1 + { + \seq_gput_left:Nx \g__nm_multicolumn_cells_seq + { \int_eval:n \g__nm_row_int - \int_use:N \g__nm_column_int } + \seq_gput_left:Nn \g__nm_multicolumn_sizes_seq { #1 } + } + \int_gadd:Nn \g__nm_column_int { #1 - 1 } + } +\NewDocumentCommand \__nm_Hdotsfor { O { } m } + { + \tl_gput_right:Nx \g__nm_lines_to_draw_tl + { + \exp_not:N \__nm_draw_Hdotsfor:nnn + { \int_use:N \g__nm_row_int } + { \int_use:N \g__nm_column_int } + { #2 } + } + \prg_replicate:nn { #2 - 1 } { & } + } +\cs_new_protected:Nn \__nm_draw_Hdotsfor:nnn + { + \bool_set_false:N \l__nm_initial_open_bool + \bool_set_false:N \l__nm_final_open_bool + \int_set:Nn \l__nm_initial_i_int { #1 } + \int_set:Nn \l__nm_final_i_int { #1 } + \int_compare:nNnTF #2 = 1 + { + \int_set:Nn \l__nm_initial_j_int 1 + \bool_set_true:N \l__nm_initial_open_bool + } + { + \int_set:Nn \l_tmpa_int { #2 - 1 } + \__nm_if_not_empty_cell:nnTF \l__nm_initial_i_int \l_tmpa_int + { \int_set:Nn \l__nm_initial_j_int { #2 - 1 } } + { + \int_set:Nn \l__nm_initial_j_int {#2} + \bool_set_true:N \l__nm_initial_open_bool + } + } + \int_compare:nNnTF { #2 + #3 -1 } = \g__nm_column_int + { + \int_set:Nn \l__nm_final_j_int { #2 + #3 - 1 } + \bool_set_true:N \l__nm_final_open_bool + } + { + \int_set:Nn \l_tmpa_int { #2 + #3 } + \__nm_if_not_empty_cell:nnTF \l__nm_final_i_int \l_tmpa_int + { \int_set:Nn \l__nm_final_j_int { #2 + #3 } } + { + \int_set:Nn \l__nm_final_j_int { #2 + #3 - 1 } + \bool_set_true:N \l__nm_final_open_bool + } + } + \bool_if:nT { \l__nm_initial_open_bool || \l__nm_final_open_bool } + \__nm_create_extra_nodes: + \__nm_actually_draw_Ldots: + } +\cs_new_protected:Nn \__nm_line:nn + { + \dim_zero_new:N \g__nm_x_initial_dim + \dim_zero_new:N \g__nm_y_initial_dim + \dim_zero_new:N \g__nm_x_final_dim + \dim_zero_new:N \g__nm_y_final_dim + \bool_set_false:N \l__nm_initial_open_bool + \bool_set_false:N \l__nm_final_open_bool + \begin { tikzpicture } + \path~(#1)~--~(#2)~node[at~start]~(i)~{}~node[at~end]~(f)~{} ; + \tikz@parse@node \pgfutil@firstofone ( i ) + \dim_gset:Nn \g__nm_x_initial_dim \pgf@x + \dim_gset:Nn \g__nm_y_initial_dim \pgf@y + \tikz@parse@node \pgfutil@firstofone ( f ) + \dim_gset:Nn \g__nm_x_final_dim \pgf@x + \dim_gset:Nn \g__nm_y_final_dim \pgf@y + \end { tikzpicture } + \__nm_draw_tikz_line: + } +\bool_new:N \l__nm_block_auto_columns_width_bool +\keys_define:nn { NiceMatrix / NiceMatrixBlock } + { + auto-columns-width .code:n = + { + \bool_set_true:N \l__nm_block_auto_columns_width_bool + \dim_gzero_new:N \g__nm_max_cell_width_dim + \bool_set_true:N \l__nm_auto_columns_width_bool + } + } +\NewDocumentEnvironment { NiceMatrixBlock } { ! O { } } + { + \keys_set:nn { NiceMatrix / NiceMatrixBlock } { #1 } + \int_zero_new:N \l__nm_first_env_block_int + \int_set:Nn \l__nm_first_env_block_int { \g__nm_env_int + 1 } + } + { + \bool_if:NT \l__nm_block_auto_columns_width_bool + { + \iow_now:Nn \@mainaux \ExplSyntaxOn + \int_step_inline:nnnn \l__nm_first_env_block_int 1 \g__nm_env_int + { + \iow_now:Nx \@mainaux + { + \cs_gset:cpn { __nm _ max _ cell _ width _ ##1 } + { \dim_use:N \g__nm_max_cell_width_dim } + } + } + \iow_now:Nn \@mainaux \ExplSyntaxOff + } + } +\keys_define:nn { NiceMatrix / NiceArrayC } + { + code-for-last-col .tl_set:N = \l__nm_code_for_last_col_tl , + code-for-last-col .value_required:n = true , + unknown .code:n = \__nm_error:n { Unknown~option~for~NiceArrayC } + } +\__nm_msg_new:nnn { Unknown~option~for~NiceArrayC } + { + The~option~'\tl_use:N\l_keys_key_tl'~is~unknown~for~the~environment~ + \{\@currenvir\}. \\ + If~you~go~on,~it~will~be~ignored. \\ + For~a~list~of~the~available~options,~type~H~<return>. + } + { + The~available~options~are~(in~alphabetic~order):~ + code-after,~ + code-for-last-col,~ + columns-width,~ + create-extra-nodes,~ + extra-left-margin,~ + extra-right-margin,~ + left-margin,~ + name,~ + nullify-dots,~ + parallelize-diags~ + renew-dots~ + and~right-margin. + } +\cs_new_protected:Nn \__nm_NiceArrayC:n + { + \bool_set_true:N \l__nm_exterior_column_bool + \begin { NiceArray } + { #1 + > + { + \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 $ % $ + \l__nm_code_for_last_col_tl + } + l + < { $ % $ + \hbox_set_end: + \dim_gset:Nn \g__nm_width_last_col_dim + { + \dim_max:nn + \g__nm_width_last_col_dim + { \box_wd:N \l_tmpa_box } + } + \skip_horizontal:n { - 2 \arraycolsep } + \hbox_overlap_right:n + { + \skip_horizontal:n + { + 2 \arraycolsep + + \l__nm_right_margin_dim + + \l__nm_extra_right_margin_dim + } + \tikz + [ + remember~picture , + inner~sep = \c_zero_dim , + minimum~width = \c_zero_dim , + baseline + ] + \node + [ + anchor = base , + name = + nm - + \int_use:N \g__nm_env_int - + \int_use:N \g__nm_row_int - + \int_use:N \g__nm_column_int , + alias = + \str_if_empty:NF \l__nm_name_str + { + \l__nm_name_str - + \int_use:N \g__nm_row_int - + \int_use:N \g__nm_column_int + } + ] + { \box_use:N \l_tmpa_box } ; + } + } + } + } +\NewDocumentEnvironment { NiceArrayCwithDelims } { m m O { } m ! O { } } + { + \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 + \str_set:Nn \l__nm_pos_env_str c + \left #1 + \__nm_NiceArrayC:n { #4 } + } + { + \end { NiceArray } + \right #2 + \skip_horizontal:n \g__nm_width_last_col_dim + } +\NewDocumentEnvironment { pNiceArrayC } { } + { \NiceArrayCwithDelims ( ) } + { \endNiceArrayCwithDelims } +\NewDocumentEnvironment { vNiceArrayC } { } + { \NiceArrayCwithDelims | | } + { \endNiceArrayCwithDelims } +\NewDocumentEnvironment { VNiceArrayC } { } + { \NiceArrayCwithDelims \| \| } + { \endNiceArrayCwithDelims } +\NewDocumentEnvironment { bNiceArrayC } { } + { \NiceArrayCwithDelims [ ] } + { \endNiceArrayCwithDelims } +\NewDocumentEnvironment { BNiceArrayC } { } + { \NiceArrayCwithDelims \{ \} } + { \endNiceArrayCwithDelims } +\keys_define:nn { NiceMatrix / NiceArrayRC } + { + code-for-first-row .tl_set:N = \l__nm_code_for_first_row_tl , + code-for-first-row .value_required:n = true , + code-for-last-col .tl_set:N = \l__nm_code_for_last_col_tl , + code-for-last-col .value_required:n = true , + unknown .code:n = \__nm_error:n { Unknown~option~for~NiceArrayRC } + } +\__nm_msg_new:nnn { Unknown~option~for~NiceArrayRC } + { + The~option~'\tl_use:N\l_keys_key_tl'~is~unknown~for~the~environment~ + \{ \@currenvir \}. \\ + If~you~go~on,~it~will~be~ignored. \\ + For~a~list~of~the~available~options,~type~H~<return>. + } + { + The~available~options~are~(in~alphabetic~order):~ + code-after,~ + code-for-last-col,~ + code-for-first-row,~ + columns-width,~ + create-extra-nodes,~ + extra-left-margin,~ + extra-right-margin,~ + left-margin,~ + name,~ + nullify-dots,~ + parallelize-diags,~ + renew-dots~ + and~right-margin. + } +\NewDocumentEnvironment { NiceArrayRCwithDelims } { m m O { } m ! O { } } + { + \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 } + \bool_set_false:N \l__nm_exterior_arraycolsep_bool + \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 + $ % $ + \__nm_NiceArrayC:n { #4 } + } + { + \end { NiceArray } + $ % $ + \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 } + ) + + \g__nm_max_ht_row_zero_dim - \g__nm_max_ht_row_one_dim + } + \hbox_set:Nn \l_tmpa_box + { + $ % $ + \left #1 + \vcenter + { + \skip_vertical:n { - \l_tmpa_dim } + \box_use_drop:N \l__nm_the_array_box + } + \right #2 + $ % $ + \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 } + \box_use_drop:N \l_tmpa_box + } +\NewDocumentEnvironment { pNiceArrayRC } { } + { \NiceArrayRCwithDelims ( ) } + { \endNiceArrayRCwithDelims } +\NewDocumentEnvironment { bNiceArrayRC } { } + { \NiceArrayRCwithDelims [ ] } + { \endNiceArrayRCwithDelims } +\NewDocumentEnvironment { vNiceArrayRC } { } + { \NiceArrayRCwithDelims | | } + { \endNiceArrayRCwithDelims } +\NewDocumentEnvironment { VNiceArrayRC } { } + { \NiceArrayRCwithDelims \| \| } + { \endNiceArrayRCwithDelims } +\NewDocumentEnvironment { BNiceArrayRC } { } + { \NiceArrayRCwithDelims \{ \} } + { \endNiceArrayRCwithDelims } +\cs_generate_variant:Nn \dim_min:nn { v n } +\cs_generate_variant:Nn \dim_max:nn { v n } +\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 + { + \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:nnnNn 1 1 \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 } + } + \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 + { \cs_if_exist:cT + { 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 } + { + \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 } + { + \dim_set:cn { l__nm_column _ \__nm_j _ max_dim } + { \dim_max:vn { l__nm_column _ \__nm_j _max_dim } \pgf@x } + } + } + } } + \tikzset { name~suffix = -medium } + \__nm_create_nodes: + \int_set:Nn \l__nm_nb_first_row_int 1 + \int_step_variable:nnnNn 1 1 { \g__nm_row_int - 1 } \__nm_i + { + \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 } + ) + / 2 + } + \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:nnnNn 1 1 { \g__nm_column_int - 1 } \__nm_j + { + \dim_set:cn { l__nm_column _ \__nm_j _ max _ dim } + { + ( + \dim_use:c + { l__nm_column _ \__nm_j _ max _ dim } + + \dim_use:c + { 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_sub:cn + { l__nm_column _ 1 _ min _ dim } + \g__nm_left_margin_dim + \dim_add:cn + { l__nm_column _ \int_use:N \g__nm_column_int _ max _ dim } + \g__nm_right_margin_dim + \tikzset { name~suffix = -large } + \__nm_create_nodes: + \end{tikzpicture} + \cs_set:Nn \__nm_create_extra_nodes: { } + } +\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:nnnNn 1 1 \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 } ) ; + \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 } ) ; + \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 , + alias = + \str_if_empty:NF \g__nm_name_str + { \g__nm_name_str - \__nm_i - \__nm_j } + ] + ; + } + } + \__nm_seq_mapthread_function:NNN + \g__nm_multicolumn_cells_seq + \g__nm_multicolumn_sizes_seq + \__nm_node_for_multicolumn:nn + } +\cs_new_protected:Npn \__nm_extract_coords: #1 - #2 \q_stop + { + \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 } + ) ; + \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 } + ) ; + \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 , + alias = + \str_if_empty:NF \g__nm_name_str { \g__nm_name_str - \__nm_i - \__nm_j } + ] + ; + } \ProcessKeysOptions {NiceMatrix} -\cs_new:Npn \__nicem_seq_mapthread_function:NNN #1#2#3 - {\group_begin: - \int_step_inline:nnnn 1 1 {\seq_count:N #1} - {\seq_pop:NN #1 \l_tmpa_tl - \seq_pop:NN #2 \l_tmpb_tl - \exp_args:NVV #3 \l_tmpa_tl \l_tmpb_tl} +\cs_new:Npn \__nm_seq_mapthread_function:NNN #1 #2 #3 + { + \group_begin: + \int_step_inline:nnnn 1 1 { \seq_count:N #1 } + { + \seq_pop:NN #1 \l_tmpa_tl + \seq_pop:NN #2 \l_tmpb_tl + \exp_args:NVV #3 \l_tmpa_tl \l_tmpb_tl + } \group_end: } -\cs_set:Nn \__nicem_renew_matrix: - {\RenewDocumentEnvironment {pmatrix} {} - {\begin{pNiceMatrix}} - {\end{pNiceMatrix}} - \RenewDocumentEnvironment {vmatrix} {} - {\begin{vNiceMatrix}} - {\end{vNiceMatrix}} - \RenewDocumentEnvironment {Vmatrix} {} - {\begin{VNiceMatrix}} - {\end{VNiceMatrix}} - \RenewDocumentEnvironment {bmatrix} {} - {\begin{bNiceMatrix}} - {\end{bNiceMatrix}} - \RenewDocumentEnvironment {Bmatrix} {} - {\begin{BNiceMatrix}} - {\end{BNiceMatrix}}} +\cs_set_protected:Npn \__nm_renew_matrix: + { + \RenewDocumentEnvironment { pmatrix } { } + { \pNiceMatrix } + { \endpNiceMatrix } + \RenewDocumentEnvironment { vmatrix } { } + { \vNiceMatrix } + { \endvNiceMatrix } + \RenewDocumentEnvironment { Vmatrix } { } + { \VNiceMatrix } + { \endVNiceMatrix } + \RenewDocumentEnvironment { bmatrix } { } + { \bNiceMatrix } + { \endbNiceMatrix } + \RenewDocumentEnvironment { Bmatrix } { } + { \BNiceMatrix } + { \endBNiceMatrix } + } \endinput %% %% End of file `nicematrix.sty'. |