看似簡單的分塊矩陣

看似簡單的分塊矩陣

我有一個看似簡單的區塊矩陣,我想用盡可能少的依賴項來設定它。我已經加載了 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}

也許最好將變數分配給其他組件(例如AB)以保持矩陣間距。

答案2

{pNiceMatrix}.nicematrix此環境類似於{pmatrix}( 的amsmath) 經典環境,但在行、單元格和列下創建 PGF/Tikz 節點。可以使用這些節點在 .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}

輸出是相同的。

相關內容