调整 amsmath Xmatrix 环境中分隔符的间距

调整 amsmath Xmatrix 环境中分隔符的间距

我正在使用包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-\arraycolseparray

您可以定义一个通用矩阵环境;它还允许指定列对齐。

\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}

enter image description here

相关内容