我正在尝试创建一个 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
指令。