我正在尝试在矩阵的左括号后和右括号前添加额外的空格。我已使用 更改了列间距\arraycolsep
,但我还希望条目右对齐。
我可以通过使用第一列使其适用于左括号\
,但右对齐会在最后一列覆盖它:
\begin{vmatrix*}[r]
\vec{i} & \vec{j} & \vec{k} \ \\
\ #1 & #2 & #3 \\
\ #4 & #5 & #6
\end{vmatrix*}
我正在使用以下命令来输入该矩阵的条目:
\def\crossmatrix#1{\crossmatrixentries(#1)}
\def\crossmatrixentries(#1,#2,#3,#4,#5,#6)
我已经插入
\renewcommand\arraystretch{1.5} \arraycolsep=5pt
以帮助留出空间。然后我通过以下方式调用了矩阵
\crossmatrix{-3,-6,9,2,-7,-4}
答案1
与其尝试修改vmatrix*
环境的内部运作,不如更直接地从基本环境开始array
并简单地微调一些设置。
我猜你主要关心的是垂直条和数组内容之间的间距。以下示例显示了如何调整间距。示例中使用的调整量(2mu
左侧和5mu
右侧)当然可以根据你的需要和喜好进行更改。(内部使用的间距vmatrix
在0mu
两侧。)
\documentclass{article}
\usepackage{mathtools,array}
\begin{document}
\begin{tabular}{l>{$}l<{$}}
\texttt{vmatrix*[r]} &
\begin{vmatrix*}[r]
\vec{i} & \vec{j} & \vec{k} \\
-3 & -6 & 9 \\
2 & -7 & -4
\end{vmatrix*} \\[5ex]
\texttt{array} &
\left\lvert\begin{array}{@{\mkern3mu} rrr @{\mkern5mu}}
\vec{i} & \vec{j} & \vec{k} \\
-3 & -6 & 9 \\
2 & -7 & -4
\end{array}\right\rvert\\
\end{tabular}
\end{document}
答案2
我最近也遇到了同样的问题。我对环境不太满意,array
因为每次创建矩阵时都需要指定列数。用环境替换文档中每个矩阵实例可能非常繁琐array
。
因此,array
我没有使用,而是深入研究了的源代码mathtools
,找到了vmatrix*
\newenvironment{vmatrix*}[1][c]
{\left\lvert\MT_matrix_begin:N #1}
{\MT_matrix_end:\right\rvert}
这很容易覆盖。我们只需要在序言中重新定义环境,并在垂直线前后添加一些字距调整
\MHInternalSyntaxOn
\renewenvironment{vmatrix*}[1][c]
{\left\lvert\mkern5mu\MT_matrix_begin:N #1}
{\MT_matrix_end:\mkern5mu\right\rvert}
\MHInternalSyntaxOff
bmatrix
我原本的意图是增加和vmatrix
下的间距newpxmath
。对于只想使用bmatrix
和vmatrix
环境的人amsmath
,你可以做类似的事情
\makeatletter
\renewenvironment{bmatrix}
{\left[\mkern3.5mu\env@matrix}
{\endmatrix\mkern3.5mu\right]}
\renewenvironment{vmatrix}
{\left\lvert\mkern5mu\env@matrix}
{\endmatrix\mkern5mu\right\rvert}
\makeatother
这是一个最小的工作示例
\documentclass{article}
\usepackage{mathtools}
\usepackage{newpxmath}
\MHInternalSyntaxOn
\renewenvironment{vmatrix*}[1][c]
{\left\lvert\mkern5mu\MT_matrix_begin:N #1}
{\MT_matrix_end:\mkern5mu\right\rvert}
\MHInternalSyntaxOff
\makeatletter
\renewenvironment{bmatrix}
{\left[\mkern3.5mu\env@matrix}
{\endmatrix\mkern3.5mu\right]}
\renewenvironment{vmatrix}
{\left\lvert\mkern5mu\env@matrix}
{\endmatrix\mkern5mu\right\rvert}
\makeatother
\begin{document}
\begin{align*}
\begin{vmatrix*}[r]
\vec{i} & \vec{j} & \vec{k} \\
-3 & -6 & 9 \\
2 & -7 & -4
\end{vmatrix*} \\
\begin{vmatrix}
\vec{i} & \vec{j} & \vec{k} \\
-3 & -6 & 9 \\
2 & -7 & -4
\end{vmatrix} \\
\begin{bmatrix}
\vec{i} & \vec{j} & \vec{k} \\
-3 & -6 & 9 \\
2 & -7 & -4
\end{bmatrix}
\end{align*}
\end{document}
和预览
答案3
我发现困难源于两件事:1)矩阵列是右对齐的,这往往会对矩阵的右侧造成很大影响;2)列可以自由地假设不等的宽度(OP 的 MWE 没有强调这个问题,但我相信选择这样做的术语会显示出额外的不平衡)。
所以我的解决方案是强制矩阵列具有相同的宽度(我可以通过使用 TABstacks 来实现),并且用 3pt 填充每个条目的右侧\kern
,用相同的 填充第 1 列的左侧\kern
。
在下面的 MWE 中,我给出了三个例子:OP 所展示的内容;列中具有不同宽度数据的示例;以及没有任何负数的示例。
\documentclass{article}
\usepackage{tabstackengine}
\def\crossmatrix#1{\crossmatrixentries(#1)}
\def\crossmatrixentries(#1,#2,#3,#4,#5,#6){%
\fixTABwidth{T}% FIXED COLUMN WIDTH
\setstacktabbedgap{6pt}% INTERCOLUMN SPACING
\setstackgap{L}{18pt}% INTERROW BASELINESKIP
\def\>{\kern3pt}% EXTRA KERN APPLIED VARIOUSLY THROUGHOUT
\vertMatrixstack[r]{
\>\vec i\> & \vec j\> & \vec k\> \\
\>#1\> & #2\> & #3\>\\
\>#4\> & #5\> & #6\>
}
=
\vertMatrixstack[r]{
\>#2\> & #3\>\\
\>#5\> & #6\>
} \vec i
-
\vertMatrixstack[r]{
\>#1\> & #3\>\\
\>#4\> & #6\>
} \vec j
+
\vertMatrixstack[r]{
\>#1\> & #2\>\\
\>#4\> & #5\>
} \vec j
}
\begin{document}
The cross product $\vec{PQ} \times \vec{PR}$ generates the normal vector
\[
\vec n = \crossmatrixentries(-3,-6,9,2,-7,-4)
\]
\[
\vec n = \crossmatrixentries(-3,-63,9,2,-7,-40)
\]
\[
\vec n = \crossmatrixentries(3,6,9,2,7,4)
\]
\end{document}