这是我的 MWE:
\documentclass[a4paper,12pt]{article}
\usepackage[T1]{fontenc}
\usepackage{mathtools}
\usepackage{physics}
\usepackage{easybmat}
\begin{document}
First attempt:
\begin{align*}
&\left[\begin{BMAT}{c1c}{c1c}
a& \begin{matrix} b_1& b_2 \end{matrix} \\
\begin{matrix} c_1 \\ c_2 \end{matrix}& D
\end{BMAT}\right]
\left[\begin{BMAT}{c1c}{c1c}
a& \mathmakebox[\widthof{$\begin{matrix} b_1& b_2 \end{matrix} $}]{\vb*b}\\
\begin{matrix} c_1 \\ c_2 \end{matrix}& D
\end{BMAT}\right]\\
&\left[\begin{BMAT}{c1c}{c1c}
a& \mathmakebox[\widthof{$\begin{matrix} b_1& b_2 \end{matrix} $}]{\vb*b}\\
\begin{matrix} c_1 \\ c_2 \end{matrix}& D
\end{BMAT}\right]
\end{align*}
Second attempt:
\begin{align*}
&\left[\begin{BMAT}{c1c}{c1c}
a& \begin{matrix} b_1& b_2 \end{matrix} \\
\begin{matrix} c_1 \\ c_2 \end{matrix}& D
\end{BMAT}\right]
\left[\begin{BMAT}{c1c}{c1c}
a& \begin{matrix}
\mathmakebox[\widthof{$\begin{matrix} b_1& b_2 \end{matrix} $}]{\vb*b}
\end{matrix}\\
\begin{matrix} c_1 \\ c_2 \end{matrix}& D
\end{BMAT}\right]\\
&\left[\begin{BMAT}{c1c}{c1c}
a& \begin{matrix}
\mathmakebox[\widthof{$\begin{matrix} b_1& b_2 \end{matrix} $}]{\vb*b}
\end{matrix}\\
\begin{matrix} c_1 \\ c_2 \end{matrix}& D
\end{BMAT}\right]
\end{align*}
\end{document}
这里mathtools
该命令需要软件包\mathmakebox
;我使用的是easybmat
包,因为它是处理矩阵块的绝佳工具,这对我的目的是必要的;physics
这里的包只是为了快速表示向量,但当然这不是必要的。应该得到这个结果:
我经常需要将矩阵划分为几个部分,或者将几个块合并为几个更大的块等等……在执行这些操作时,我经常会对应物体具有相同的视觉尺寸。
在上面的 MWE 中,我尝试展示如何制作一个“多列”矩阵元素,该元素的宽度与同一行中的一些连续元素相同,并且具有\mathmakebox
和\widthof
。[*]
在“第一次尝试”中,显示此技巧在水平间距下完美运行,但在垂直间距下不适用;在“第二次尝试”中,显示了垂直间距的解决方法。
我的问题是:
- 有没有比我上面使用的(在 MWE 中)更清洁的解决方案?
- (基本的)是否有类似的程序来让同一列中的某些连续元素具有相同高度的“多行”矩阵元素?在 MWE 中,只需考虑更换列(C1,C2)带有向量C,类似于(二)1,b2)和b;我特意问这个问题,因为
\heightof
in\mathmakebox
不起作用。[**] - (更一般)有没有办法制作一个用于填充数学运算的框,其尺寸(高度和宽度)与其他数学表达式相同?最终有没有办法使用两个不同的表达式,一个用于宽度,一个用于高度?
[*] 我必须在这里补充一点,在管理矩阵时,我通常会避免合并列和/或行;我发现嵌套矩阵是一种更简单的解决方案;当然,我在这方面可能完全错了!无论如何,这个问题最终也可能对与矩阵无关的其他目的有意义。
[**] 我可能也有一个解决这个问题的办法,即使用宽度为零的框,在其中放置幻像表达式;我没有发布它:它太不雅观了,如果我发布了,我就会被永远禁止。
答案1
您可以使用保存箱来避免重复工作。
\documentclass{article}
\usepackage{mathtools}
\usepackage{easybmat}
\newsavebox{\tempbox}% \sbox0 doesn't work
\begin{document}
\savebox\tempbox{$\begin{matrix} b_1 & b_2 \end{matrix}$}% must be outside align environment
\begin{align*}
&\left[\begin{BMAT}{c1c}{c1c}
a& \usebox\tempbox \\
\begin{matrix} c_1 \\ c_2 \end{matrix}& D
\end{BMAT}\right]
\left[\begin{BMAT}{c1c}{c1c}
a& \mathmakebox[\wd\tempbox]{\boldsymbol{b}}\\
\begin{matrix} c_1 \\ c_2 \end{matrix}& D
\end{BMAT}\right]\\
&\left[\begin{BMAT}{c1c}{c1c}
a& \mathmakebox[\wd\tempbox]{\boldsymbol{b}}\\
\begin{matrix} c_1 \\ c_2 \end{matrix}& D
\end{BMAT}\right]
\end{align*}
\end{document}