带有列分隔线的 Amsmath pmatrix(而不是 \begin{array})

带有列分隔线的 Amsmath pmatrix(而不是 \begin{array})

我知道可以使用以下方法创建带有列分隔符的矩阵\begin{array}

\left(\begin{array}{ccc|c} 
    5 & 1 & 5 & 0\\
    6 & 2 & 2 & 2\\
    0 & 3 & 4 & 1\\
\end{array}\right)

在此处输入图片描述

我想知道是否可以使用\pmatrixamsmath 的命令来实现这种形式,或者在这种情况下使用\begin{array}最佳方法?

答案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}

在此处输入图片描述

答案4

例如,也可以将tabularray包(版本 2022A 或更新版本)与库一起使用amsmath

\documentclass[margin=3mm, varwidth]{standalone}
\usepackage{tabularray}
\UseTblrLibrary{amsmath}

\begin{document}

\[
\begin{+pmatrix}[vline{4}=solid]
5 & 1 & 5 & 0\\
6 & 2 & 2 & 2\\
0 & 3 & 4 & 1\
\end{+pmatrix}
\]

\end{document}

在此处输入图片描述

相关内容