我正在尝试创建一个块矩阵,肯定已经有数百个关于它们的问题了。但到目前为止,我读到的大部分内容最终看起来都很老套。我所拥有的是:
\documentclass{article}
\usepackage[fleqn]{amsmath}
\usepackage{blkarray}
\usepackage{multirow}
\usepackage{mathtools}
\usepackage{graphicx}
\newcommand{\rdots}{\hspace{.2ex}\raisebox{1ex}{\rotatebox{-12}{$\ddots$}}}
\begin{document}
\begin{equation}
\begin{blockarray}{(c@{}c@{}c|c@{}c@{}c)l}
1&&0&\BAmulticolumn{3}{c}{\multirow{3}{*}{\huge$0$}}&\multirow{3}{*}{$\dim F\;\text{vertical}$}\\&\rdots&&&&&\\0&&1&&&&\\
\cline{1-6}
\BAmulticolumn{3}{c|}{\multirow{3}{*}{\huge$0$}}&\tfrac{1}{t}&&0&\multirow{3}{*}{$\dim Z\;\text{horizontal}$}\\&&&&\rdots&&\\&&&0&&\tfrac{1}{t}&\\
\end{blockarray}
\end{equation}
\end{document}
有很多位可以改进,但最重要的是子矩阵中的间距太宽。
我还尝试将多次出现的事情包含在宏中
\newcommand\zeroblock[3][]{\BAmulticolumn{#2}{c#1}{\multirow{#3}{*}{\huge$0$}}}
\newcommand\position[3]{\mspace{#1}\raisebox{#2}{$\mathclap{#3}$}}
\newcommand\diagonal[1]{\begin{matrix}#1&\position{-8mu}{-2em}{\rdots}\scalebox{1.5}{0}\\\scalebox{1.5}{0}\end{matrix}}
\begin{document}
\begin{equation}
\begin{array}{c|c}
\diagonal{1}&\zeroblock33\\
\zeroblock33&\diagonal{\tfrac{1}{t}}
\end{array}
\end{equation}
但\zeroblock
给了我
! Misplaced \omit.
\multispan ->\omit
\@multispan
l.18 \diagonal{1}&\zeroblock33
\\
并且diagonal
,虽然它在内部有效array
,但在内部无效,blockarray
并且给出
! Incompatible list can't be unboxed.
<argument> \BA@first@box
而且看起来也不太好:
所以我在想,肯定有更好的方法来完成这些事情。有吗?
答案1
使用默认的 tabcolsep 并增加数组拉伸:
\documentclass{article}
\usepackage[fleqn]{amsmath}
\usepackage{blkarray}
\usepackage{multirow}
\usepackage{mathtools}
\usepackage{graphicx}
\newcommand{\rdots}{\hspace{.2ex}\raisebox{1ex}{\rotatebox{-12}{$\ddots$}}}
\begin{document}
\begin{equation}\def\arraystretch{1.5}
\begin{blockarray}{(ccc|ccc)l}
1&&0&\BAmulticolumn{3}{c}{\multirow{3}{*}{\huge$0$}}&\multirow{3}{*}{$\dim F\;\text{vertical}$}\\&\rdots&&&&&\\0&&1&&&&\\
\cline{1-6}
\BAmulticolumn{3}{c|}{\multirow{3}{*}{\huge$0$}}&\tfrac{1}{t}&&0&\multirow{3}{*}{$\dim Z\;\text{horizontal}$}\\&&&&\rdots&&\\&&&0&&\frac{1}{t}&\\
\end{blockarray}
\end{equation}
\end{document}
使用小矩阵也是有意义的:
\begin{equation}
\left(
\begin{array}{r@{}c|c@{}l}
& \begin{smallmatrix}
1 & & 0 \\
&\ddots&\\
0 & & 1\rule[-1ex]{0pt}{2ex}
\end{smallmatrix} & \mbox{\huge0} & \rlap{\kern5mm$\dim F$ vertical}\\\hline
& \mbox{\huge0} &
\begin{smallmatrix}\rule{0pt}{2ex}
\frac1t & & 0 \\
&\ddots&\\
0 & & \frac1t
\end{smallmatrix} & \rlap{\kern5mm$\dim Z$ horizontal}
\end{array}
\right)
\end{equation}
答案2
与。{NiceArray}
nicematrix
\documentclass{article}
\usepackage{nicematrix}
\begin{document}
\NiceMatrixOptions{cell-space-limits=1pt}
\newcommand{\BigZero}{\Block{3-3}<\LARGE>{0}}
$\begin{pNiceArray}{ccc|ccc}[last-col]
1 & & 0 & \BigZero \\
& \Ddots & & & & & \dim F \text{ vertical} \\
0 & & 1 \\
\hline
\BigZero & & &\frac{1}{t} & & 0 \\
& & & & \Ddots & & \dim Z \text{ horizontal} \\
& & & 0 & & \frac{1}{t}
\end{pNiceArray}$
\end{document}
您需要多次编译(因为nicematrix
在后台使用 PGF/Tikz 节点)。