答案1
这是一个添加任意数量垂直条的相当通用的方法;您需要指定条之间的列数,因此您的示例需要3|1
。
定义环境的可选参数Xmatrix+
用于列的对齐(默认c
)。
\documentclass{article}
\usepackage{amsmath}
\ExplSyntaxOn
\cs_new_protected:Nn \ben_matrix_preamble:nn
{
\seq_set_split:Nnn \l_tmpa_seq { | } { #2 }
\seq_set_map:NNn \l_tmpb_seq \l_tmpa_seq { *{##1}{#1} }
\exp_args:Ne \array{ @{} \seq_use:Nn \l_tmpb_seq { | } @{} }
}
\clist_map_inline:nn { {},b,B,p,v,V }
{
\use:e
{
\NewDocumentEnvironment{#1matrix+}{O{c}m}
{
\left\str_case:nnF { #1 } {{b}{[}{B}{\{}{p}{(}{v}{|}{V}{\|}}{.}
\ben_matrix_preamble:nn { ##1 } { ##2 }
}
{
\exp_not:N \endarray
\right\str_case:nnF { #1 } {{b}{]}{B}{\}}{p}{)}{v}{|}{V}{\|}}{.}
}
}
}
\ExplSyntaxOff
\begin{document}
\[
\begin{matrix+}{3|1}
5 & 1 & 5 & 0 \\
6 & 2 & 2 & 2 \\
0 & 3 & 4 & 1
\end{matrix+}
+
\begin{pmatrix+}{3|1}
5 & 1 & 5 & 0 \\
6 & 2 & 2 & 2 \\
0 & 3 & 4 & 1
\end{pmatrix+}
+
\begin{bmatrix+}{3|1}
5 & 1 & 5 & 0 \\
6 & 2 & 2 & 2 \\
0 & 3 & 4 & 1
\end{bmatrix+}
\]
\[
\begin{pmatrix+}{2|1|1}
5 & 1 & 5 & 0 \\
6 & 2 & 2 & 2 \\
0 & 3 & 4 & 1
\end{pmatrix+}
\]
\[
\begin{pmatrix+}{3|1}
-5 & 1 & 5 & 0 \\
6 & -2 & 2 & -2 \\
0 & 3 & 4 & 1
\end{pmatrix+}
\ne
\begin{pmatrix+}[r]{3|1}
-5 & 1 & 5 & 0 \\
6 & -2 & 2 & -2 \\
0 & 3 & 4 & 1
\end{pmatrix+}
\]
\end{document}
这定义了matrix+
、bmatrix+
、Bmatrix+
、pmatrix+
和vmatrix+
,Vmatrix+
反映了标准amsmath
矩阵环境。
看似神秘的代码\clist_map_inline:nn
只是为了避免编写
\NewDocumentEnvironment{matrix+}{O{c}m}
{
\left.\ben_matrix_preamble:nn { ##1 } { ##2 }
}
{
\endarray\right.
}
\NewDocumentEnvironment{bmatrix+}{O{c}m}
{
\left[\ben_matrix_preamble:nn { ##1 } { ##2 }
}
{
\endarray\right]
}
其他四种环境也是如此。
答案2
对于四列矩阵没有一条垂直线,
\left(\begin{array}{@{}cccc@{}} ... \end{array}\right)
和
\begin{pmatrix} ... \end{pmatrix}
产生相同的输出. (请注意 2 个实例@{}
。)当然,这不是巧合,因为[bBvVp]matrix
环境在内部使用array
环境。
因此,我看不出设置四列矩阵有什么重大缺点和垂直线环境
\left(\begin{array}{@{}ccc|c@{}}
...
\end{array}
再次注意@{}
粒子。
答案3
另一个选择是使用包pNiceArray
中的环境nicematrix
:
\documentclass{article}
\usepackage{nicematrix}
\begin{document}
\(\begin{pNiceArray}{ccc|c}
5 & 1 & 5 & 0\\
6 & 2 & 2 & 2\\
0 & 3 & 4 & 1\\
\end{pNiceArray}\)
\end{document}
S
此外,您还可以在加载包时访问列类型siunitx
,从而更好地控制数字的对齐和格式:
\documentclass{article}
\usepackage{nicematrix}
\usepackage{siunitx}
\begin{document}
\(\sisetup{table-format = 1.0}
\begin{pNiceArray}{S[table-format = +1.0] S[table-format = 2.1] S |S}
5 & 12.0 & 5 & 0\\
-6 & 2.2 & 2 & 2\\
0 & 3 & 4 & 1\\
\end{pNiceArray}\)
\end{document}