diff options
Diffstat (limited to 'macros/latex/contrib/physics2/tex/phy-diagmat.sty')
-rw-r--r-- | macros/latex/contrib/physics2/tex/phy-diagmat.sty | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/macros/latex/contrib/physics2/tex/phy-diagmat.sty b/macros/latex/contrib/physics2/tex/phy-diagmat.sty new file mode 100644 index 0000000000..c917f797b7 --- /dev/null +++ b/macros/latex/contrib/physics2/tex/phy-diagmat.sty @@ -0,0 +1,92 @@ +%% +%% This is file `phy-diagmat.sty', +%% the `diagmat' module of `physics2' package. +%% +%% ****************************************************** +%% * This work may be distributed and/or modified under * +%% * the conditions of the LaTeX Project Public License * +%% * * +%% * http://www.latex-project.org/lppl.txt * +%% * * +%% * either version 1.3c of this license or any later * +%% * version. * +%% ****************************************************** +%% +%% This work has the LPPL maintenance status `maintained'. +%% +%% The Current Maintainer of this work is Zhang Tingxuan. +%% +\ProvidesExplFile{phy-diagmat.sty}{2023/1/25}{} + {`diagmat' module of `physics2.sty'} +\phy@requiremodule { explsetup } +\RequirePackage { amsmath } +\phy@define@key { diagmat } { empty } [ 0 ] { \tl_gset:Nn \l__phy_mat_empty_tl { #1 } } +% New variables +\clist_new:N \l__phy_mat_diag_clist +\clist_new:N \l__phy_mat_tmpa_clist +\clist_new:N \l__phy_mat_tmpb_clist +\clist_new:N \l__phy_mat_diagpos_clist +\int_new:N \l__phy_mat_dim_int +\tl_new:N \l__phy_mat_line_tl +\tl_new:N \l__phy_diagmat_tl +\tl_new:N \l__phy_mat_empty_tl +\tl_gset:Nn \l__phy_mat_empty_tl { 0 } +\phy@processkeyopt { diagmat } +\keys_define:nn { phy/diagmat } + { + empty .tl_set:N = \l__phy_mat_empty_tl , + } +% Document Commands +\DeclareDocumentCommand \diagmat { O{} m } + { \__phy_diagmat_type:nnn { } { #1 } { #2 } } +\DeclareDocumentCommand \pdiagmat { O{} m } + { \__phy_diagmat_type:nnn { p } { #1 } { #2 } } +\DeclareDocumentCommand \bdiagmat { O{} m } + { \__phy_diagmat_type:nnn { b } { #1 } { #2 } } +\DeclareDocumentCommand \Bdiagmat { O{} m } + { \__phy_diagmat_type:nnn { B } { #1 } { #2 } } +\DeclareDocumentCommand \vdiagmat { O{} m } + { \__phy_diagmat_type:nnn { v } { #1 } { #2 } } +\DeclareDocumentCommand \Vdiagmat { O{} m } + { \__phy_diagmat_type:nnn { V } { #1 } { #2 } } +% Internal function +\cs_new:Npn \__phy_diagmat_type:nnn #1#2#3 + { + \group_begin: + \clist_set:Nn \l__phy_mat_diag_clist { #3 } + \int_set:Nn \l__phy_mat_dim_int { \clist_count:N \l__phy_mat_diag_clist } + \int_compare:nNnT { \l__phy_mat_dim_int } > { \value { MaxMatrixCols } } + { \setcounter { MaxMatrixCols } { \l__phy_mat_dim_int } } + \keys_set:nn { phy/diagmat } { #2 } + \tl_gclear:N \l__phy_diagmat_tl + \int_step_inline:nnn { 0 } { \l__phy_mat_dim_int - 1 } + { + \int_step_inline:nnn { 0 } { \l__phy_mat_dim_int - 1 } + { + \int_compare:nNnTF { ##1 } = { ####1 } + { + \clist_gpop:NN \l__phy_mat_diag_clist \l__phy_tmpa_tl + \tl_if_empty:NTF \l__phy_tmpa_tl + { \tl_gput_right:Nn \l__phy_mat_line_tl { \l__phy_mat_empty_tl } } + { \tl_gput_right:Nx \l__phy_mat_line_tl { \l__phy_tmpa_tl } } + } + { \tl_gput_right:Nn \l__phy_mat_line_tl { \l__phy_mat_empty_tl } } + % The `&' and `\\' between entries. + \int_compare:nNnTF { ####1 } = { \l__phy_mat_dim_int - 1 } + { + \tl_gput_right:Nn \l__phy_mat_line_tl { \\ } + } + { + \tl_gput_right:Nn \l__phy_mat_line_tl { & } + } + } + \tl_gput_right:Nx \l__phy_diagmat_tl { \l__phy_mat_line_tl } + \tl_gclear:N \l__phy_mat_line_tl + } + \begin { #1 matrix } + \tl_use:N \l__phy_diagmat_tl + \end { #1 matrix } + \group_end: + } +\endinput +%% End of file `phy-diagmat.sty'. |