带有标签行和列的嵌套数组

带有标签行和列的嵌套数组

我想用矩阵表示四维张量。此外,我想标记内部矩阵的行和列。下面给出了我制作这个带标记矩阵的尝试,但有几点我不满意。

  1. 行和列标签未位于它们所标记内容的中心。例如,$$T_{2}$$ 标签应位于外部矩阵列的 $$1$$ 和 $$2$$ 标签之间。我尝试使用多列和多行,但它们似乎不适用于块矩阵,而且我无法从 CTAN 文档中找出必要的语法。
  2. 当张量的某些条目比其他条目长得多时,结果就不那么好了。例如,下面的 (2,2) 块比 (1,2) 块宽得多,而 (1,2) 块不会进行调整以匹配。

    \documentclass{article}
        \usepackage{blkarray}
    
        \newcommand{\tensorblock}[1]
        {
            \begin{blockarray}{c@{~}c@{~~}cc}
                && T_{4} \\
                && 1 & 2 \\
                \begin{block}{c@{~}c@{~~}[cc]}
                    T_{3} & 1 & 0 & 0 \\
                    & 2 & 0 & #1 \\
                \end{block}
            \end{blockarray}
        }
    \begin{document}
    \[
        \begin{blockarray}{c@{~}c@{~~}cc}
            && T_{2} \\
            && 1 & 2 \\
            \begin{block}{c@{~}c@{~~}[cc]}
                T_{1} & 1 & \tensorblock{0} & \tensorblock{0} \\
                & 2 & \tensorblock{0} & \tensorblock{111111} \\
            \end{block}
        \end{blockarray}
    \]
    \end{document}
    

答案1

如果您希望不同的列具有相同的宽度,则需要提前知道该宽度。

\documentclass{article}
    \usepackage{blkarray}

    \newcommand{\tensorblock}[1]
    {
        \begin{blockarray}{c@{~}c@{~~}cc}
            && \BAmulticolumn{2}{c}{T_{4}} \\
            && \makebox[\widest]{1} & \makebox[\widest]{2} \\
            \begin{block}{c@{~}c@{~~}[cc]}
                T_{3} & 1 & 0 & 0 \\
                & 2 & 0 & #1 \\
            \end{block}
        \end{blockarray}
    }
  \newlength{\widest}
\begin{document}
\settowidth{\widest}{111111}%
\[
    \begin{blockarray}{c@{~}c@{~~}cc}
        && \BAmulticolumn{2}{c}{T_{2}} \\
        && 1 & 2 \\
        \begin{block}{c@{~}c@{~~}[cc]}
            T_{1} & 1 & \tensorblock{0} & \tensorblock{0} \\
            & 2 & \tensorblock{0} & \tensorblock{111111} \\
        \end{block}
    \end{blockarray}
\]
\end{document}

演示

答案2

这是一个{NiceArray}使用 的解决方案nicematrix

\documentclass{article}
\usepackage{nicematrix}

\begin{document}

$\begin{NiceArray}{ccccw{c}{1cm}w{c}{1cm}ccw{c}{1cm}w{c}{1cm}}
    &   & \Block{1-*}{T_2} \\
    &   & \Block{1-4}{1} &&&& \Block{1-4}{2} \\
\Block{8-1}{T_1}
    &   &     &   & \Block{1-2}{T_4} && && \Block{1-2}{T_4} \\
    &   &     &   & 1 & 2 &     &   & 1 & 2 \\
    & 1 & T_3 & 1 & 0 & 0 & T_3 & 1 & 0 & 0 \\
    &   &     & 2 & 0 & 0 &     & 2 & 0 & 0 \\
    &   &     &   & \Block{1-2}{T_4} && && \Block{1-2}{T_4} \\
    &   &     &   & 1 & 2 &     &   & 1 & 2 \\
    & 2 & T_3 & 1 & 0 & 0 & T_3 & 1 & 0 & 0 \\
    &   &     & 2 & 0 & 0 &     & 2 & 0 & 111111 \\
\CodeAfter
  \SubMatrix[{5-5}{6-6}]
  \SubMatrix[{5-9}{6-10}]
  \SubMatrix[{9-5}{10-6}]
  \SubMatrix[{9-9}{10-10}]
  \SubMatrix[{3-3}{10-10}][extra-height=6pt,xshift=2pt]
\end{NiceArray}$

\end{document}

您需要多次编译。

上述代码的输出

相关内容