增加矩阵中分隔符和相邻列之间的空间

增加矩阵中分隔符和相邻列之间的空间

假设我有以下简单矩阵,按照通常的方式使用构建bmatrix

在此处输入图片描述

注重细节的编辑会询问是否可以出于“美观原因”增加分隔符和相邻列之间的间距。比如说,也许会产生类似以下内容的结果:

在此处输入图片描述

虽然有很多方法可以增加矩阵中行/列之间的间距,但据我所知,这些方法总是适用于行相对于其他行、列相对于其他列。我无法弄清楚如何调整矩阵元素和分隔符之间的间距。

我在以下 MWE 中想出了一个解决方案(产生了上面的嵌入图像),但对于 MS很多矩阵,您可能希望以这种方式进行调整,这种“手动”间距调整很费力,并且违背了我与某些聪明人合作的感觉,他们有更好、更通用(和灵活)的方法。我快速深入研究了一下nicematrix(没有发现任何明显的效果),并考虑恢复一种array方法,但最终,我想我会看看其他人可能会推荐什么。

提前感谢大家的建议。[仅提供编码建议。关于编辑美学的建议?嗯……]

    \documentclass[11pt,letterpaper,oneside]{article}

    \usepackage{amsmath}
    \usepackage{mathtools}

    \begin{document}
     Here is an example matrix:
     \[
     \begin{bmatrix*}[r]
       1 &  2 &  1 \\
       0 & -2 & -3 \\
       0 & 3 &  -2
     \end{bmatrix*}
    \]

Seeking a way to increase the separation between the left 
delimiter and elements of the first column, and the right 
delimiter from the right-most column The following is a 
total blunt-weapon kludge.

     \[
      \begin{bmatrix*}[r]
        \ 1 &  2 &  1 \ \\
        \ 0 & -2 & -3 \ \\
        \ 0 & 3 &  -2 \
      \end{bmatrix*}
    \]

Kludge works, but is there a better way? 
[In other words, a particular package of `setting' I can 
tweak so that it auto-magically applies to bmatrix constructs?]. 

     \end{document}

答案1

可以重新定义现有环境

\RenewDocumentEnvironment{<name>}{<paramters> b}{<body>}

如果仍然需要这样的环境,也可以复制

\NewEnvironmentCopy{<new name>}{<name>}

根据这些信息,我将现有的复制到bmatrix*oldbmatrix*然后根据重新定义它matrix*,同样来自数学工具但在括号处有一些额外的间距。

代码

\documentclass[11pt,letterpaper,oneside]{article}
\usepackage{mathtools}

\NewEnvironmentCopy{oldbmatrix*}{bmatrix*}
\RenewDocumentEnvironment{bmatrix*}{O{c} b}{%
  \left[\hspace{1em}\begin{matrix*}[#1]#2\end{matrix*}\hspace{1em}\right]}{}


\begin{document}
Here is an example matrix:
\[
  \begin{bmatrix*}[r]
    1 &  2 &  1 \\
    0 & -2 & -3 \\
    0 & 3 &  -2
  \end{bmatrix*}
\]
Seeking a way to increase the separation between the left delimiter and elements of the first 
column, and the right delimiter from the right-most column The following is a total blunt- 
weapon kludge.

\[
  \begin{oldbmatrix*}[r]
    1 &  2 &  1 \\
    0 & -2 & -3 \\
    0 & 3 &  -2
  \end{oldbmatrix*}
\]

Kludge works but, is there a better way? [In other words, a particular package of `setting' I 
  can tweak so that it auto-magically applies to bmatrix constructs?]. 
\end{document}

和截图

在此处输入图片描述

答案2

修补相关命令。

\documentclass[11pt,letterpaper,oneside]{article}

\usepackage{amsmath}
\usepackage{mathtools}
\usepackage{xpatch}

% patch amsmath matrix
\makeatletter
\xpatchcmd\env@matrix
 {\arraycolsep}% search
 {0.25\arraycolsep}% replace
 {}{\FAIL}
\xpatchcmd\endmatrix
 {\arraycolsep}% search
 {0.25\arraycolsep}% replace
 {}{\FAIL}
\makeatother

% patch mathtools matrix
\MHInternalSyntaxOn
\xpatchcmd\MT_matrix_begin:N
 {\arraycolsep}% search
 {0.25\arraycolsep}% replace
 {}{\FAIL}
\xpatchcmd\MT_matrix_end:
 {\arraycolsep}% search
 {0.25\arraycolsep}% replace
 {}{\FAIL}
\MHInternalSyntaxOff

\begin{document}

Here is an example matrix:
\[
 \begin{bmatrix}
   1 &  2 &  1 \\
   0 & -2 & -3 \\
   0 & 3 &  -2
 \end{bmatrix}
 \qquad
 \begin{bmatrix*}[r]
   1 &  2 &  1 \\
   0 & -2 & -3 \\
   0 & 3 &  -2
 \end{bmatrix*}
\]

\end{document}

在此处输入图片描述

原因:amsmathmathtools矩阵\hskip-\arraycolsep在左边和右边都起作用。使用补丁后,备份量减少了 3/4。

评论:每个人都有自己的审美观念。

答案3

由于 OP 提到了nicematrix,我给出了一个解决方案nicematrix。但是,它可能对问题处理过度(除非nicematrix用于该包提供的其他功能)。

\documentclass{article}
\usepackage{nicematrix}

\NiceMatrixOptions{margin=5pt,renew-matrix}

\begin{document}

$\begin{bmatrix}
1 & 2 \\
3 & 4 
\end{bmatrix}$

\end{document}

上述代码的输出

相关内容