![增加矩阵中分隔符和相邻列之间的空间](https://linux22.com/image/467583/%E5%A2%9E%E5%8A%A0%E7%9F%A9%E9%98%B5%E4%B8%AD%E5%88%86%E9%9A%94%E7%AC%A6%E5%92%8C%E7%9B%B8%E9%82%BB%E5%88%97%E4%B9%8B%E9%97%B4%E7%9A%84%E7%A9%BA%E9%97%B4.png)
假设我有以下简单矩阵,按照通常的方式使用构建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}
原因:amsmath
和mathtools
矩阵\hskip-\arraycolsep
在左边和右边都起作用。使用补丁后,备份量减少了 3/4。
评论:每个人都有自己的审美观念。