summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/nicematrix
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2018-02-14 00:06:17 +0000
committerKarl Berry <karl@freefriends.org>2018-02-14 00:06:17 +0000
commit1bf53a1df338cff0bfd274cd81f5fe2c4b64ad6e (patch)
tree844294a6f01f4765de014895565f19ad3d1ee14f /Master/texmf-dist/tex/latex/nicematrix
parent84a8ae7611e78c584fa28e9b48879fc2aa02646a (diff)
nicematrix (13feb18)
git-svn-id: svn://tug.org/texlive/trunk@46627 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/nicematrix')
-rw-r--r--Master/texmf-dist/tex/latex/nicematrix/nicematrix.sty386
1 files changed, 386 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/latex/nicematrix/nicematrix.sty b/Master/texmf-dist/tex/latex/nicematrix/nicematrix.sty
new file mode 100644
index 00000000000..d0c2e771cc6
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/nicematrix/nicematrix.sty
@@ -0,0 +1,386 @@
+%%
+%% This is file `nicematrix.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% nicematrix.dtx (with options: `package')
+%%
+%% Copyright (C) 2017 by F. Pantigny
+%%
+%% This file may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either
+%% version 1.3 of this license or (at your option) any later
+%% version. The latest version of this license is in:
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% and version 1.3 or later is part of all distributions of
+%% LaTeX version 2005/12/01 or later.
+%%
+\def\myfileversion{1.0}
+\def\myfiledate{2018/02/13}
+\RequirePackage{tikz}
+\usetikzlibrary{calc,math}
+\RequirePackage{l3keys2e}
+\ProvidesExplPackage
+ {nicematrix}
+ {\myfiledate}
+ {\myfileversion}
+ {Draws nice dotted lines in matrix environments}
+\RequirePackage{array}
+\RequirePackage{mathtools}
+\RequirePackage{xparse}
+\ProvideDocumentCommand \iddots {}
+ {\mathinner{\mkern 1mu
+ \raise 1pt \hbox{.}
+ \mkern 2mu
+ \raise 4pt\hbox{.}
+ \mkern 2mu
+ \raise7pt \vbox{\kern 7pt
+ \hbox{.}}
+ \mkern1mu}}
+\cs_new_protected:Nn \__nm_multicolumn:nn
+ {\msg_error:nn {nicematrix} {multicolumn~forbidden}}
+\int_new:N \g__nm_env_int
+\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_renew_matrix_bool
+\keys_define:nn {NiceMatrix}
+ {ParallelizeDiagonals .bool_set:N = \l__nm_parallelize_diags_bool,
+ ParallelizeDiagonals .default:n = true,
+ RenewDots .bool_set:N = \l__nm_renew_dots_bool,
+ RenewDots .default:n = true,
+ RenewMatrix .code:n = {\cs_set_eq:NN \env@matrix \NiceMatrix
+ \bool_set_true:N \l__nm_renew_matrix_bool},
+ RenewMatrix .default:n = true,
+ Transparent .meta:n = {RenewDots,RenewMatrix},
+ Transparent .value_forbidden:n = true,
+ NullifyDots .bool_set:N = \l__nm_nullify_dots_bool ,
+ NullifyDots .default:n = true}
+\NewDocumentCommand \NiceMatrixOptions {m}
+ {\keys_set:nn {NiceMatrix} {#1}}
+\cs_new_protected:Nn \__nm_Cell:
+ {
+ \int_gincr:N \g__nm_column_int
+ \int_gset:Nn \g__nm_nb_column_int {\int_max:nn \g__nm_nb_column_int \g__nm_column_int}
+ \tikz[remember~picture, inner~sep = 0pt, minimum~width = 0pt, baseline]
+ \node [anchor=base] (nm-\int_use:N \g__nm_env_int-
+ \int_use:N \g__nm_line_int-
+ \int_use:N \g__nm_column_int)
+ \bgroup $} % $
+\cs_new_protected:Nn \__nm_end_Cell:
+ {$\egroup ;} % $
+\cs_new_protected:Nn \__nm_Cell_First_Column:
+ {\int_gincr:N \g__nm_line_int
+ \int_gset:Nn \g__nm_column_int 0
+ \__nm_Cell:}
+\NewDocumentEnvironment {NiceMatrix} {}
+ {
+ \aftergroup \__nm_draw_lines:
+ \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 \Hspace \__nm_Hspace:
+ \cs_set_eq:NN \NiceMatrixEndPoint \__nm_NiceMatrixEndPoint:
+ \bool_if:NF \l__nm_renew_matrix_bool
+ {\cs_set_eq:NN \multicolumn \__nm_multicolumn:nn}
+ \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}
+ \int_gincr:N \g__nm_env_int
+ \seq_gclear_new:N \g__nm_empty_cells_seq
+ \int_gzero_new:N \g__nm_instruction_int
+ \int_gzero_new:N \g__nm_line_int
+ \int_gzero_new:N \g__nm_column_int
+ \int_gzero_new:N \g__nm_nb_column_int
+ \hskip -\arraycolsep
+ \cs_set_eq:NN \@ifnextchar \new@ifnextchar
+ \int_set:Nn \l_tmpa_int {\c@MaxMatrixCols - 1}
+ \array{>{\__nm_Cell_First_Column:}c<{\__nm_end_Cell:}
+ *\l_tmpa_int{>{\__nm_Cell:}c<{\__nm_end_Cell:}}}}
+ {\endarray
+ \hskip -\arraycolsep}
+\NewDocumentEnvironment {pNiceMatrix} {}
+ {\left(\begin{NiceMatrix}}
+ {\end{NiceMatrix}\right)}
+\NewDocumentEnvironment {bNiceMatrix} {}
+ {\left[\begin{NiceMatrix}}
+ {\end{NiceMatrix}\right]}
+\NewDocumentEnvironment {BNiceMatrix} {}
+ {\left\{\begin{NiceMatrix}}
+ {\end{BNiceMatrix}\right\}}
+\NewDocumentEnvironment {vNiceMatrix} {}
+ {\left\lvert\begin{NiceMatrix}}
+ {\end{BNiceMatrix}\right\rvert}
+\NewDocumentEnvironment {VNiceMatrix} {}
+ {\left\lVert\begin{NiceMatrix}}
+ {\end{BNiceMatrix}\right\rVert}
+\prg_set_conditional:Npnn \__nm_if_not_empty_cell:nn #1#2 {T}
+ {\cs_if_exist:cTF {pgf@sh@ns@nm-
+ \int_use:N \g__nm_env_int-
+ \int_use:N #1-
+ \int_use:N #2}
+ {\seq_if_in:NxTF \g__nm_empty_cells_seq
+ {\int_use:N #1-\int_use:N #2}
+ {\prg_return_false:}
+ {\tikz[remember~picture]
+ \path let \p1 = (nm-
+ \int_use:N \g__nm_env_int-
+ \int_use:N #1-
+ \int_use:N #2.east),
+ \p2 = (nm-
+ \int_use:N \g__nm_env_int-
+ \int_use:N #1-
+ \int_use:N #2.west)
+ in \pgfextra {\dim_gset:Nn \g_tmpa_dim {\x1}
+ \dim_gset:Nn \g_tmpb_dim {\x2}} ;
+ \dim_gsub:Nn \g_tmpa_dim \g_tmpb_dim
+ \dim_compare:nNnTF {\dim_abs:n \g_tmpa_dim} < {0.5 pt}
+ {\prg_return_false:}
+ {\prg_return_true:}}}
+ {\prg_return_false:}
+ }
+\cs_new_protected:Nn \__nm_instruction_of_type:n
+ {\int_gincr:N \g__nm_instruction_int
+ \prop_put:Nnn \l_tmpa_prop {type} {#1}
+ \prop_put:NnV \l_tmpa_prop {line} \g__nm_line_int
+ \prop_put:NnV \l_tmpa_prop {column} \g__nm_column_int
+ \prop_gclear_new:c
+ {g__nm_instruction_\int_use:N\g__nm_instruction_int _prop}
+ \prop_gset_eq:cN
+ {g__nm_instruction_\int_use:N\g__nm_instruction_int _prop}
+ \l_tmpa_prop
+ }
+
+\cs_new_protected:Nn \__nm_draw_lines:
+ {
+ \seq_clear_new:N \l__nm_yet_drawn_seq
+ \int_zero_new:N \l__nm_type_int
+ \int_zero_new:N \l__nm_line_int
+ \int_zero_new:N \l__nm_column_int
+ \int_zero_new:N \l__nm_di_int
+ \int_zero_new:N \l__nm_dj_int
+ \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}
+ \int_zero_new:N \l__nm_instruction_int
+ \int_incr:N \l__nm_instruction_int
+ \int_until_do:nNnn \l__nm_instruction_int > \g__nm_instruction_int
+ {
+ \prop_get:cnN {g__nm_instruction_\int_use:N \l__nm_instruction_int _prop}
+ {type} \l_tmpa_tl
+ \int_set:Nn \l__nm_type_int {\l_tmpa_tl}
+ \prop_get:cnN {g__nm_instruction_\int_use:N \l__nm_instruction_int _prop}
+ {line} \l_tmpa_tl
+ \int_set:Nn \l__nm_line_int {\l_tmpa_tl}
+ \prop_get:cnN {g__nm_instruction_\int_use:N \l__nm_instruction_int _prop}
+ {column} \l_tmpa_tl
+ \int_set:Nn \l__nm_column_int {\l_tmpa_tl}
+ \int_case:nn \l__nm_type_int
+ { 0 {\int_set:Nn \l__nm_di_int 0
+ \int_set:Nn \l__nm_dj_int 1}
+ 1 {\int_set:Nn \l__nm_di_int 0
+ \int_set:Nn \l__nm_dj_int 1}
+ 2 {\int_set:Nn \l__nm_di_int 1
+ \int_set:Nn \l__nm_dj_int 0}
+ 3 {\int_set:Nn \l__nm_di_int 1
+ \int_set:Nn \l__nm_dj_int 1}
+ 4 {\int_set:Nn \l__nm_di_int 1
+ \int_set:Nn \l__nm_dj_int {-1}}}
+ \bool_if_exist:NTF \l__nm_impossible_instruction_bool
+ {\bool_set_false:N \l__nm_impossible_instruction_bool}
+ {\bool_new:N \l__nm_impossible_instruction_bool}
+ \int_zero_new:N \l__nm_final_i_int
+ \int_zero_new:N \l__nm_final_j_int
+ \int_set:Nn \l__nm_final_i_int \l__nm_line_int
+ \int_set:Nn \l__nm_final_j_int \l__nm_column_int
+ \bool_if_exist:NTF \l__nm_stop_loop_bool
+ {\bool_set_false:N \l__nm_stop_loop_bool}
+ {\bool_new:N \l__nm_stop_loop_bool}
+ \bool_do_until:Nn \l__nm_stop_loop_bool
+ {\int_add:Nn \l__nm_final_i_int \l__nm_di_int
+ \int_add:Nn \l__nm_final_j_int \l__nm_dj_int
+ \bool_if:nTF { \int_compare_p:nNn \l__nm_final_i_int < 1
+ || \int_compare_p:nNn \l__nm_final_i_int > \g__nm_line_int
+ || \int_compare_p:nNn \l__nm_final_j_int < 1
+ || \int_compare_p:nNn \l__nm_final_j_int > \g__nm_nb_column_int}
+ {\bool_set_true:N \l__nm_impossible_instruction_bool
+ \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}}
+ }
+ \int_zero_new:N \l__nm_initial_i_int
+ \int_zero_new:N \l__nm_initial_j_int
+ \int_set:Nn \l__nm_initial_i_int \l__nm_line_int
+ \int_set:Nn \l__nm_initial_j_int \l__nm_column_int
+ \bool_set_eq:NN \l__nm_stop_loop_bool \l__nm_impossible_instruction_bool
+ \bool_do_until:Nn \l__nm_stop_loop_bool
+ {\int_sub:Nn \l__nm_initial_i_int \l__nm_di_int
+ \int_sub:Nn \l__nm_initial_j_int \l__nm_dj_int
+ \bool_if:nTF
+ { \int_compare_p:nNn \l__nm_initial_i_int < 1
+ || \int_compare_p:nNn \l__nm_initial_i_int > \g__nm_line_int
+ || \int_compare_p:nNn \l__nm_initial_j_int < 1
+ || \int_compare_p:nNn \l__nm_initial_j_int > \g__nm_nb_column_int}
+ {\bool_set_true:N \l__nm_impossible_instruction_bool
+ \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:NTF \l__nm_impossible_instruction_bool
+ {\msg_error:nn {nicematrix} {Impossible~instruction}}
+ {\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:NVF \l__nm_yet_drawn_seq \l_tmpa_tl
+ {\seq_put_left:NV \l__nm_yet_drawn_seq \l_tmpa_tl
+ \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
+ \int_case:nn \l__nm_type_int
+ {0 \__nm_draw_ldots_line:
+ 1 \__nm_draw_cdots_line:
+ 2 \__nm_draw_vdots_line:
+ 3 \__nm_draw_ddots_line:
+ 4 \__nm_draw_iddots_line:}}}
+ \int_incr:N \l__nm_instruction_int
+ }
+}
+\cs_new_protected:Nn \__nm_retrieve_coords:nn
+ {\tikz[remember~picture]
+ \path let \p1 = (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),
+ \p2 = (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)
+ in \pgfextra {\dim_gset:Nn \g__nm_x_initial_dim {\x1}
+ \dim_gset:Nn \g__nm_y_initial_dim {\y1}
+ \dim_gset:Nn \g__nm_x_final_dim {\x2}
+ \dim_gset:Nn \g__nm_y_final_dim {\y2}} ; }
+\cs_new_protected:Nn \__nm_draw_ldots_line:
+ {\__nm_retrieve_coords:nn {.south~east} {.south~west}
+ \__nm_draw_tikz_line:}
+\cs_new_protected:Nn \__nm_draw_cdots_line:
+ {\__nm_retrieve_coords:nn {.mid~east} {.mid~west}
+ \__nm_draw_tikz_line:}
+\cs_new_protected:Nn \__nm_draw_vdots_line:
+ {\__nm_retrieve_coords:nn {.south} {.north}
+ \__nm_draw_tikz_line:}
+\cs_new_protected:Nn \__nm_draw_ddots_line:
+ {\__nm_retrieve_coords:nn {.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 = 1
+ {\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_line:
+ {\__nm_retrieve_coords:nn {.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 = 1
+ {\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:
+ {\begin{tikzpicture}[overlay]
+ \tikzmath{
+ coordinate~\a , \b ;
+ real~\l, \x, \d ;
+ integer~\n ;
+ \a = (\g__nm_x_initial_dim, \g__nm_y_initial_dim) ;
+ \b = (\g__nm_x_final_dim, \g__nm_y_final_dim) ;
+ \l = veclen(\bx-\ax,\by-\ay) ;
+ \n = (\l - 0.54em)/(0.45em) ;
+ \x = (\l - \n*0.45em)/(2*\l) ;
+ \d = 0.45em / \l ;
+ if~\n>0
+ then~{ for~\k in~{0,...,\n}
+ { {\node at ($(\a)!\x+\k*\d!(\b)$) {.} ; } ; } ;
+ } ;
+ }
+ \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_line_int-
+ \int_use:N \g__nm_column_int}}
+\NewDocumentCommand \__nm_Ldots {s}
+ {\IfBooleanF {#1} {\__nm_instruction_of_type:n 0}
+ \bool_if:NF \l__nm_nullify_dots_bool {\phantom \__nm_ldots}
+ \__nm_add_to_empty_cells:}
+\NewDocumentCommand \__nm_Cdots {s}
+ {\IfBooleanF {#1} {\__nm_instruction_of_type:n 1}
+ \bool_if:NF \l__nm_nullify_dots_bool {\phantom \__nm_cdots}
+ \__nm_add_to_empty_cells:}
+\NewDocumentCommand \__nm_Vdots {s}
+ {\IfBooleanF {#1} {\__nm_instruction_of_type:n 2}
+ \bool_if:NF \l__nm_nullify_dots_bool {\phantom \__nm_vdots}
+ \__nm_add_to_empty_cells:}
+\NewDocumentCommand \__nm_Ddots {s}
+ {\IfBooleanF {#1} {\__nm_instruction_of_type:n 3}
+ \bool_if:NF \l__nm_nullify_dots_bool {\phantom \__nm_ddots}
+ \__nm_add_to_empty_cells:}
+\NewDocumentCommand \__nm_Iddots {s}
+ {\IfBooleanF {#1} {\__nm_instruction_of_type:n 4}
+ \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_new_protected:Nn \__nm_NiceMatrixEndPoint:
+ {\kern 0.5pt}
+\ProcessKeysOptions {NiceMatrix}
+\msg_new:nnnn {nicematrix}
+ {Impossible~instruction}
+ {It's~not~possible~to~execute~the~instruction~
+ \int_case:nn \l__nm_type_int
+ {0 {\token_to_str:N \Ldots}
+ 1 {\token_to_str:N \Cdots}
+ 2 {\token_to_str:N \Vdots}
+ 3 {\token_to_str:N \Ddots}}~in~the~line~\int_use:N\l__nm_line_int\
+ ~and~the~column~\int_use:N\l__nm_column_int\space of~the~matrix~
+ because~it's~impossible~to~find~one~of~its~extremities~
+ (both~extremities~must~be~non~empty~cells~of~the~matrix).~
+ If~you~go~on,~the~instruction~will~be~ignored.}
+ {You~can~specify~a~end~of~line~on~a~empty~cell~
+ with~\token_to_str:N \NiceMatrixEndPoint.}
+\msg_new:nnn {nicematrix}
+ {multicolumn~forbidden}
+ {The~command~\token_to_str:N \multicolumn\
+ is~forbidden~in~the~environment~\{NiceMatrix\}~
+ and~its~variants.~The~command~\token_to_str:N \hdotsfor\
+ of~amsmath~is~also~forbidden~since~it~uses~
+ \token_to_str:N \multicolumn.~You~can~go~on~but~your~line~will~
+ probably~be~wrong.}
+\endinput
+%%
+%% End of file `nicematrix.sty'.