2x2 矩阵,以 2x2 矩阵作为 M_11 元素

2x2 矩阵,以 2x2 矩阵作为 M_11 元素

我正在尝试创建一个 2x2 矩阵,其第一个元素是另一个 2x2 矩阵

\usepackage{mathtools}
\usepackage{amsmath}
\newcommand{\rvline}{\hspace*{-\arraycolsep}\vline\hspace*{-\arraycolsep}}
\begin{equation}
\sbox0{$\begin{matrix} \boldsymbol{\mathrm{P}}& \rvline&\boldsymbol{\mathrm{S}}  \\\hline \boldsymbol{\mathrm{S}}& \rvline& \boldsymbol{\mathrm{S}} \end{matrix}$}
%
\boldsymbol{\mathrm{\hat{H}}} =\left[
\begin{array}{c|c}
\usebox{0}&\makebox[\wd0]{\boldsymbol{\mathrm{S}}}\\
\hline
  \vphantom{\usebox{0}}\makebox[\wd0]{\boldsymbol{\mathrm{S}}}&\makebox[\wd0]{\boldsymbol{\mathrm{S}}}
\end{array}
\right]
\end{equation}  

由于某种原因,我在编译时收到错误:!Extra },或者忘记了$.\math@atom #1#2->\binrel@ {#1}\binrel@@ {#2} ...0}&\makebox[\wd0]{\boldsymbol{\mathrm{S}}}

答案1

您的代码不易阅读。例如,不要\boldsymbol{\mathrm{S}}}写 ,而要写\mathbf{S}。进行这些更改,用 替换\boldsymbol{\mathrm{\hat{H}}}\widehat{\mathbf{H}}删除一些不必要的\makebox指令,并记住\mathbf{S}必须在数学模式下进行 - 正如已经指出的那样@campa——导致以下结果:

在此处输入图片描述

我相信这就是(接近)您想要实现的目标。

\documentclass{article}
\usepackage{amsmath}  % 'mathtools' package not needed for this example
\newcommand{\rvline}{\hspace*{-\arraycolsep}\vline\hspace*{-\arraycolsep}}
\begin{document}

\begin{equation}
\sbox0{$\begin{matrix} 
       \mathbf{P} & \rvline & \mathbf{S}  \\
       \hline 
       \mathbf{S} & \rvline & \mathbf{S} 
    \end{matrix}$}
%
\widehat{\mathbf{H}} =
\left[ \begin{array}{c|c}
   \usebox{0}                       & \makebox[\wd0]{$\mathbf{S}$} \\
   \hline
   \vphantom{\usebox{0}} \mathbf{S} & \mathbf{S}
\end{array} \right]
\end{equation}

\end{document}

附录,由 @campa 发表的评论提示:上面显示的代码可以正常工作;但是,这在很大程度上是因为它使用了\widehat而不是\hat。为了使代码更加健壮,同时仍然遵循 OP 的原始\sbox/ \usebox/\makebox路径,有必要将运行延迟\sbox0到环境开始之前array

\documentclass{article}
\usepackage{amsmath}
%\newcommand{\rvline}{\hspace*{-\arraycolsep}\vline\hspace*{-\arraycolsep}}
\newcommand\PSSSmat{%  % define a macro that creates the small matrix
  \begin{array}{@{}c|c@{}}  % use 'array', not 'matrix'
    \mathbf{P} & \mathbf{S} \\ \hline \mathbf{S} & \mathbf{S}
  \end{array}}

\begin{document}

\begin{equation}
\hat{\mathbf{H}} =
\sbox0{$\PSSSmat$} % set "box 0" just before array env.
\left[ \begin{array}{c|c}
   \usebox{0}  &  \makebox[\wd0]{$\mathbf{S}$}\\
   \hline
   \vphantom{\usebox{0}} \mathbf{S} & \mathbf{S}
\end{array} \right]
\end{equation}

\end{document}

附言:请注意,在小矩阵的定义中可以使用array环境而不是matrix环境;优点是不再需要创建额外的列来保存\rvline指令。

相关内容