您可以使 \middle 分隔符周围的间距与数组线周围的间距相同吗?

您可以使 \middle 分隔符周围的间距与数组线周围的间距相同吗?

我想要生成类似以下代码的输出:

\left[ \begin{array}{ccc|c}
0 & 3 & -2 & 8 \\
1 & 1 & 0 & 4 \\
1 & 0 & 1 & 3
\end{array} \right]

但可以使用matrix。不幸的是,此代码:

\left[ \begin{matrix}
0 & 3 & -2 \\
1 & 1 & 0 \\
1 & 0 & 1
\end{matrix} \middle| \begin{matrix}
8 \\
4 \\
3
\end{matrix} \right]

产生的矩阵在中间 | 处间距太近。

有没有办法实现与阵列相同的间距?

答案1

如果你需要绝对精确,可以添加精确的空间,它用于通过\hspace\arraycolsep

\documentclass{article}
\usepackage{amsmath}

\begin{document}
$$
\left[ \begin{matrix}
0 & 3 & -2 \\
1 & 1 & 0 \\
1 & 0 & 1
\end{matrix} \hspace\arraycolsep\middle|\hspace\arraycolsep \begin{matrix}
8 \\
4 \\
3
\end{matrix} \right]
$$
\end{document}

在此处输入图片描述

但是,您也可以简单地使用~空格字符,\middle|这对我来说看起来也不错(但不如列中的其他间距那么精确)。

\documentclass{article}
\usepackage{amsmath}

\begin{document}
$$
\left[ \begin{matrix}
0 & 3 & -2 \\
1 & 1 & 0 \\
1 & 0 & 1
\end{matrix} ~\middle|~ \begin{matrix}
8 \\
4 \\
3
\end{matrix} \right]
$$
\end{document}

在此处输入图片描述

答案2

读了你的问题后,我意识到很少使用的包spalign可以满足你的要求。对于矩阵,有很多不错的选择,而且这个包也不难理解。我把你的数字放在了正确的 r 选项中,你可以看到,符号与其他数字的位置很合适。如果再加一个减号,结果会是一样的。代码真的精简到了最基本的部分。

\documentclass[a4paper,12pt]{article}
\usepackage{amsmath,amssymb,spalign}


\begin{document}
$\spaligndelims{[}{]}\spalignaugmatn[r]{1}{0 3 -2 8; 1 1 0 4; 1 0 1 3}$
\end{document}

在此处输入图片描述

答案3

您可以定义自己的环境。

\documentclass{article}
\usepackage{amsmath}

\ExplSyntaxOn

\NewDocumentEnvironment{bmatrixp}{O{1} b}
 {
  \schuelermine_bmatrixp:nn { #1 } { #2 }
 }
 {}

\cs_new_protected:Nn \schuelermine_bmatrixp:nn
 {
  % split at \\
  \seq_set_split:Nnn \l_tmpa_seq { \\ } { #2 }
  % check for a trailing \\; if the last item is empty
  % do nothing, otherwise add back the row
  \seq_pop_right:NN \l_tmpa_seq \l_tmpa_tl
  \tl_if_empty:VF \l_tmpa_tl { \seq_put_right:NV \l_tmpa_seq \l_tmpa_tl }
  % now count the number of columns in each row
  \int_zero:N \l_tmpa_int
  \seq_map_inline:Nn \l_tmpa_seq
   {
    \seq_set_split:Nnn \l_tmpb_seq { & } { ##1 }
    \int_set:Nn \l_tmpa_int { \int_max:nn { \l_tmpa_int } { \seq_count:N \l_tmpb_seq } }
   }
  % we can make the array
  \left[
  \begin{array}{ @{} *{\int_eval:n { \l_tmpa_int - #1 }}{c} | *{#1}{c} @{} }
  #2
  \end{array}
  \right]
 }

\ExplSyntaxOff

\begin{document}

\[
\begin{bmatrixp}
0 & 3 & -2 & 8 \\
1 & 1 & 0 & 4 \\
1 & 0 & 1 & 3
\end{bmatrixp}
\]

\[
\begin{bmatrixp}[2]
0 & 3 & -2 & 8 & a \\
1 & 1 & 0 & 4 & b \\
1 & 0 & 1 & 3 & c \\
\end{bmatrixp}
\]

\end{document}

这个想法是检查环境的内容,以便能够计算列数。此时,我们可以|在列规范的正确位置添加。可选参数告诉分区符号右侧应该有多少列。

在此处输入图片描述

然而

\left[\begin{array}{@{} ccc | c @{}}
0 & 3 & -2 & 8 \\
1 & 1 & 0 & 4 \\
1 & 0 & 1 & 3
\end{array}\right]

可能会更容易。

相关内容