我有一个看似简单的块矩阵,我想用尽可能少的依赖项来设置它。我已经加载了 amsmath 和相关函数。我唯一想避免的是 blkarray。
以下是我想要做的:
这是我的一次失败的尝试,它产生了最令人发指的间距,线条无法相交而形成角落。
\begin{equation}
\begin{pmatrix}[ccc]
J_1 & \begin{array}{|cc}0 & 0\\ 0 & 0\end{array} & \begin{array}{cc}0 & 0\\ 0 & 0\end{array}\\ \cline{1-2}
\begin{array}{cc|}0&0\\0&0\end{array} & J_2 & \begin{array}{|cc}0&0\\0&0\end{array}\\ \cline{2-3}
\begin{array}{cc}0 & 0\\ 0 & 0\end{array} & \begin{array}{cc|}0 & 0\\ 0 & 0\end{array} & J_3
\end{pmatrix}
\end{equation}
这真是太丑陋了:
注意:我修改了 pmatrix,使其将列规范作为可选参数。就假装它是一个数组。
我的困难似乎源于我想要 2x2 块,而我见过的大多数其他人似乎都使用多行或多列来滑行,但不能同时使用两者。
编辑:这并不那么丑陋,但垂直线仅覆盖多行距离的一半:
\begin{equation}
\begin{array}{cccccc}
\multicolumn{2}{c|}{\multirow{2}{*}{$J_1$}} & 0 & 0 & 0 & 0\\
& & 0 & 0 & 0 & 0\\ \cline{1-4}
0 & 0 & \multicolumn{2}{|c|}{\multirow{2}{*}{$J_1$}} & 0 & 0\\
0 & 0 & & & 0 & 0\\ \cline{3-6}
0 & 0 & 0 & 0 & \multicolumn{2}{|c}{\multirow{2}{*}{$J_1$}} \\
0 & 0 & 0 & 0 & & \\
\end{array}
\end{equation}
答案1
矩阵构造的基本部分如下所示:
\documentclass{article}
\newcommand{\mc}{\multicolumn{1}{c}}
\begin{document}
\[
\renewcommand{\arraystretch}{1.2}
\left(
\begin{array}{ c c | c c | c c }
\multicolumn{1}{|c}{} & & 0 & \mc{0} & 0 & 0 \\
\multicolumn{2}{|c|}{\raisebox{.6\normalbaselineskip}[0pt][0pt]{$J_1$}} & 0 & \mc{0} & 0 & 0 \\
\cline{1-4}
0 & 0 & & & 0 & 0 \\
0 & 0 & \multicolumn{2}{c|}{\raisebox{.6\normalbaselineskip}[0pt][0pt]{$J_2$}} & 0 & 0 \\
\cline{3-6}
0 & \mc{0} & 0 & 0 & & \multicolumn{1}{c|}{} \\
0 & \mc{0} & 0 & 0 & \multicolumn{2}{c|}{\raisebox{.6\normalbaselineskip}[0pt][0pt]{$J_3$}}
\end{array}
\right)
\]
\end{document}
也许最好将变量分配给其他组件(如A
和B
),以维持矩阵间距。
答案2
使用{pNiceMatrix}
。nicematrix
该环境类似于经典环境{pmatrix}
(amsmath
),但在行、单元格和列下创建 PGF/Tikz 节点。可以使用这些节点在 中使用 Tikz 绘制您想要的任何规则\CodeAfter
。
\documentclass{article}
\usepackage{nicematrix}
\usepackage{tikz}
\begin{document}
$\begin{pNiceMatrix}[margin]
\Block{2-2}{J_1} & & 0 & 0 & 0 & 0 \\
& & 0 & 0 & 0 & 0 \\
0 & 0 & \Block{2-2}{J_2} & & 0 & 0 \\
0 & 0 & & & 0 & 0 \\
0 & 0 & 0 & 0 & \Block{2-2}{J_3} \\
0 & 0 & 0 & 0 \\
\CodeAfter
\begin{tikzpicture}
\draw (1-|1) |- (3-|5) -- (7-|5) ;
\draw (1-|3) |- (5-|7) -- (7-|7) ;
\end{tikzpicture}
\end{pNiceMatrix}$
\end{document}
您需要多次编译(因为 PGF/Tikz 节点)。
如果你不想明确使用 Tikz,你也可以使用borders
命令的键指定块的边框\Block
。
\documentclass{article}
\usepackage{nicematrix}
\usepackage{tikz}
\begin{document}
$\begin{pNiceMatrix}[margin]
\Block[borders={left,bottom,right}]{2-2}{J_1} & & 0 & 0 & 0 & 0 \\
& & 0 & 0 & 0 & 0 \\
0 & 0 & \Block[draw]{2-2}{J_2} & & 0 & 0 \\
0 & 0 & & & 0 & 0 \\
0 & 0 & 0 & 0 & \Block[borders={left,top,right}]{2-2}{J_3} \\
0 & 0 & 0 & 0 \\
\end{pNiceMatrix}$
\end{document}
输出是一样的。