我正在使用包Xmatrix
中的环境(“X”代表“p”、“b”、“B”、“v”、“V”中的任意一个)amsmath
。我能够使用参数\arraycolsep
(例如,使用指令\setlength{\arraycolsep}{10pt}
)控制列之间的间距;问题是这样的参数不考虑第一列和左分隔符之间的间距(同样,最后一列和右分隔符之间的间距)。
是否有一些参数控制分隔符和最近列之间的间距?
答案1
环境Xmatrix
本质上
\left<delimiter>\env@matrix<contents>\endmatrix\right<delimiter>
当然,其中\left
和\right
位不用于。matrix
这不是\matrix<contents>\endmatrix
由于技术原因\matrix
,而是\pmatrix
由于 LaTeX 内核中已经定义(因为它们是纯 TeX)。
\env@matrix
和的目的是分别在打开之前和关闭之后\endmatrix
执行。\hskip-\arraycolsep
array
您可以定义一个通用矩阵环境;它还允许指定列对齐。
\documentclass{article}
\usepackage{amsmath}
\usepackage{xparse}
\ExplSyntaxOn
\keys_define:nn { genmatrix }
{
type .tl_set:N = \l__genmatrix_type_tl,
cols .tl_set:N = \l__genmatrix_cols_tl,
sep .dim_set:N = \l__genmatrix_sep_dim,
side .dim_set:N = \l__genmatrix_side_dim,
type .initial:n = {},
side .initial:n = 0pt,
}
\NewDocumentEnvironment{genmatrix}{O{}}
{
\keys_set:nn { genmatrix }
{
sep = \arraycolsep,
cols = *{\value{MaxMatrixCols}}{c},
#1
}
\dim_set_eq:NN \arraycolsep \l__genmatrix_sep_dim
\genmatrix_open:V \l__genmatrix_type_tl
\skip_horizontal:n { \l__genmatrix_side_dim - \l__genmatrix_sep_dim }
\cs_set_eq:cc { @ifnextchar } { new@ifnextchar }
\exp_args:NV \array \l__genmatrix_cols_tl
}
{
\endarray
\skip_horizontal:n { \l__genmatrix_side_dim - \l__genmatrix_sep_dim }
\genmatrix_close:V \l__genmatrix_type_tl
}
\cs_new_protected:Nn \genmatrix_open:n
{
\str_case:nn { #1 }
{
{p}{ \left( }
{b}{ \left[ }
{v}{ \left| }
{B}{ \left\lbrace }
{V}{ \left\| }
}
}
\cs_new_protected:Nn \genmatrix_close:n
{
\str_case:nn { #1 }
{
{p}{ \right) }
{b}{ \right] }
{v}{ \right| }
{B}{ \right\rbrace }
{V}{ \right\| }
}
}
\cs_generate_variant:Nn \genmatrix_open:n { V }
\cs_generate_variant:Nn \genmatrix_close:n { V }
\ExplSyntaxOff
\begin{document}
\begin{gather*}
\begin{genmatrix}[type=p]
1 & 0 & 0 \\
0 & -1 & 0 \\
0 & 0 & 12
\end{genmatrix}
\qquad
\begin{genmatrix}[type=p,side=4pt,sep=10pt]
1 & 0 & 0 \\
0 & -1 & 0 \\
0 & 0 & 12
\end{genmatrix}
\qquad
\begin{genmatrix}[type=p,side=4pt,sep=10pt,cols=rrr]
1 & 0 & 0 \\
0 & -1 & 0 \\
0 & 0 & 12
\end{genmatrix}
\\
\begin{genmatrix}[type=b]
1 & 0 & 0 \\
0 & -1 & 0 \\
0 & 0 & 12
\end{genmatrix}
\qquad
\begin{genmatrix}[type=B,side=4pt,sep=10pt]
1 & 0 & 0 \\
0 & -1 & 0 \\
0 & 0 & 12
\end{genmatrix}
\qquad
\begin{genmatrix}[type=v,side=4pt,sep=10pt,cols=rrr]
1 & 0 & 0 \\
0 & -1 & 0 \\
0 & 0 & 12
\end{genmatrix}
\end{gather*}
\end{document}