矩阵命令有两个功能

矩阵命令有两个功能

通过此链接我可以更改矩阵中的行距 如何增加矩阵中的行距? 在第二个中我可以创建一个带有分隔线的矩阵 如何在矩阵中添加虚线 但是如何才能在一个“renewcommand”中包含这两个功能,例如 \renewcommand*\env@matrix[2].... 以便文档中的所有半命令都有效

1:

\begin{bmatrix}[1.25][c|c]

\end{bmatrix}

2:

\begin{bmatrix}[1.25]
...
\end{bmatrix}

3:

\begin{bmatrix}[c|c]
...
\end{bmatrix}

4:

\begin{bmatrix}
...
\end{bmatrix}

或者使用“xkeyval”包,并且文档中的所有半命令均有效

\begin{bmatrix}[size=1.25, type=c|c]

\end{bmatrix}

2:

\begin{bmatrix}[size=1.25]
...
\end{bmatrix}

3:

\begin{bmatrix}[type=c|c]
...
\end{bmatrix}

4:

\begin{bmatrix}
...
\end{bmatrix}

答案1

让我们大胆一点,一次性重新实现所有矩阵。

\documentclass{article}
\usepackage{amsmath}
\usepackage{xparse}

\ExplSyntaxOn
\NewDocumentEnvironment{newmatrix}{O{}}
 {
  \group_begin:
  \keys_set:nn { eager/newmatrix } { stretch=1, cols=, type=, *=false, #1 }
  \__eager_newmatrix_left:V \l__eager_newmatrix_type_tl
  \__eager_newmatrix_stretch:V \l__eager_newmatrix_stretch_tl
  % the usual start for \env@matrix
  \bool_if:NF \l__eager_newmatrix_noskip_bool
   {
    \skip_horizontal:n { -\arraycolsep }
   }
  \cs_set_eq:cc { @ifnextchar } { new@ifnextchar }
  \tl_if_empty:NTF \l__eager_newmatrix_cols_tl
   {
    \array{ * { \use:c { c@MaxMatrixCols } } { c } }
   }
   {
    \exp_args:NV \array \l__eager_newmatrix_cols_tl
   }
 }
 {
  \endarray
  \bool_if:NF \l__eager_newmatrix_noskip_bool
   {
    \skip_horizontal:n { -\arraycolsep }
   }
  \__eager_newmatrix_right:V \l__eager_newmatrix_type_tl
  \group_end:
 }

\keys_define:nn { eager/newmatrix }
 {
  stretch .tl_set:N   = \l__eager_newmatrix_stretch_tl,
  cols    .tl_set:N   = \l__eager_newmatrix_cols_tl,
  type    .tl_set:N   = \l__eager_newmatrix_type_tl,
  *       .bool_set:N = \l__eager_newmatrix_noskip_bool,
  *       .default:n  = true,
 }

\cs_new_protected:Nn  \__eager_newmatrix_stretch:n
 {
  \cs_set:Npn \arraystretch { #1 }
 }
\cs_generate_variant:Nn \__eager_newmatrix_stretch:n { V }

\cs_new_protected:Nn \__eager_newmatrix_left:n
 {
  \tl_if_empty:nF { #1 } { \left \__eager_newmatrix_left_aux:n { #1 } }
 }
\cs_generate_variant:Nn \__eager_newmatrix_left:n { V }

\cs_new_protected:Nn \__eager_newmatrix_right:n
 {
  \tl_if_empty:nF { #1 } { \right \__eager_newmatrix_right_aux:n { #1 } }
 }
\cs_generate_variant:Nn \__eager_newmatrix_right:n { V }

\cs_new:Nn \__eager_newmatrix_left_aux:n
 {
  \str_case:nn { #1 }
   {
    {p}{(} {b}{[} {B}{\{} {v}{|} {V}{\|}
   }
 }
\cs_new:Nn \__eager_newmatrix_right_aux:n
 {
  \str_case:nn { #1 }
   {
    {p}{)} {b}{]} {B}{\}} {v}{|} {V}{\|}
   }
 }

\ExplSyntaxOff

\begin{document}

\begin{gather*}
  \begin{newmatrix}[type=p]
    1 & 0 \\
    0 & 1
  \end{newmatrix}
  =
  \begin{newmatrix}[type=b,stretch=1.5,cols=c|c,*]
    1 & 0 \\
  \hline
    0 & 1
  \end{newmatrix}
\\
\begin{newmatrix}[cols=lcr]
111 & 222 & 333 \\
11 & 22 & 33 \\
1 & 2 & 3
\end{newmatrix}
\end{gather*}

\end{document}

*如果您打算使用,则该选项是必需的\hline,因为否则规则将与分隔符重叠。

允许的类型为“空” p、、、和。bBvV

在此处输入图片描述

相关内容