我想要生成类似以下代码的输出:
\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]
可能会更容易。