我想用矩阵表示四维张量。此外,我想标记内部矩阵的行和列。下面给出了我制作这个带标记矩阵的尝试,但有几点我不满意。
- 行和列标签未位于它们所标记内容的中心。例如,$$T_{2}$$ 标签应位于外部矩阵列的 $$1$$ 和 $$2$$ 标签之间。我尝试使用多列和多行,但它们似乎不适用于块矩阵,而且我无法从 CTAN 文档中找出必要的语法。
当张量的某些条目比其他条目长得多时,结果就不那么好了。例如,下面的 (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}
您需要多次编译。