通过此链接我可以更改矩阵中的行距 如何增加矩阵中的行距? 在第二个中我可以创建一个带有分隔线的矩阵 如何在矩阵中添加虚线 但是如何才能在一个“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
、、、和。b
B
v
V