summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/physics2/tex/phy-diagmat.sty
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/physics2/tex/phy-diagmat.sty')
-rw-r--r--macros/latex/contrib/physics2/tex/phy-diagmat.sty92
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'.