矩阵色块

矩阵色块

我希望生成一个矩阵乘法,其中一个矩阵由彩色块组成。类似于: 在此处输入图片描述

有没有办法在 Latex 中制作出这样的东西?

答案1

我用堆栈实现了这一点。不幸的是,根据框的排列,必须进行一些调整,因此必须仔细考虑每个特定的图像。 是\colblock[color]{rows}{content}基本单位。 \belowbaseline[length]{}用于\colblock将框对齐到顶部。 和\belowbaseline[length]{}可用于代码中移动/对齐框。 传递其中任何一个的倍数\baselineskip 将允许在垂直框位置上进行一些交错。

如果\colblocks 可以是矩形(我假设是正方形),请告诉我,以便我可以纠正答案。

\documentclass{article}
\usepackage{stackengine}
\usepackage{xcolor}
\usepackage{calc}
\newlength\mytemp
\newlength\myoffset
\myoffset=.5\ht\strutbox
\newcommand\colblock[3][blue!20]{%
  \setlength\mytemp{#2\baselineskip}%
  \setlength\mytemp{.5\mytemp-\myoffset}%
  \belowbaseline[0pt]{%
  \fboxsep=-\fboxrule\fbox{\colorbox{#1}{\rule[-\mytemp]{0ex}{#2\baselineskip}%
  \makebox[#2\baselineskip]{$#3$}}}%
}}
\begin{document}
\[
\parenVectorstack{b_1 b_2 . . . . . b_n} =
\left(
\raisebox{4\baselineskip+.5\myoffset}{%
\def\stackalignment{l}\stackunder[0pt]{\colblock{2}{-2}\colblock{2}{-2}}%
  {\colblock{6}{-1}\colblock[red!15]{4}{1}}%
}%
\right)
\parenVectorstack{a_1 a_2 . . . . . a_n}
\]
\end{document}

在此处输入图片描述

答案2

一种使用tikz但将其隐藏在标记中的解决方案:

\begin{blockmatrix}
  \block[blue](0,0)text(2,2)
\end{blockmatrix}

在位置 (0,0) 处绘制一个蓝色方块,大小为 (2,2),中间为“文本”。因此支持不同的颜色和矩形。

\documentclass{article}
\usepackage{amsmath}
\usepackage{xcolor}
\usepackage{tikz}
\usetikzlibrary{calc}

\definecolor{block}{RGB}{0,162,232}

\newenvironment{blockmatrix}{%
  \left(%
  \vcenter\bgroup\hbox\bgroup
  \tikzpicture[
    x=1.5\baselineskip,
    y=1.5\baselineskip,
  ]%
}{%
  \endtikzpicture
  \egroup
  \egroup
  \right)%
}

% \block[#1](#2,#3)#4(#5,#6)
% #1:      fill color
% (#2,#3): lower left corner
% #4:      text in the middle
% (#5,#6): size of the block
\newcommand*{\block}[1][block]{%
  \blockaux{#1}%
}
\def\blockaux#1(#2,#3)#4(#5,#6){%
  \draw[fill={#1}]
  let \p1=(#2,#3),
      \p2=(#5,#6),
      \p3=(#2+#5,#3+#6),
      \p4=(#2+#5/2,#3+#6/2)
  in
    (\p1) rectangle (\p3)
    (\p4) node {$#4$}
  ;%
}

\begin{document}
\[
  \begin{pmatrix}b_1\\b_2\\\vdots\\b_n\end{pmatrix}
  =
  \begin{blockmatrix}
    \block(0,0)-1(3,3)
    \block(3,1)1(2,2)
    \block[yellow](0,3)-2(1,1)
    \block[green](1,3)2(1,1)
  \end{blockmatrix}
  \begin{pmatrix}a_1\\a2\\\vdots\\a_n\end{pmatrix}
\]
\end{document}

结果

答案3

与。{pNiceMatrix}nicematrix

\documentclass{article}
\usepackage{nicematrix}

\begin{document}

$
\renewcommand{\arraystretch}{1.6}
\begin{pmatrix}
b_1 \\ b_2 \\ \vdots \\ b_n
\end{pmatrix}
=
\begin{pNiceMatrix}[margin,columns-width=auto]
\Block[fill=red!15,draw]{1-1}{-2}
   & \Block[fill=green!20,draw]{1-1}{2} &  &  &  \\
\Block[fill=blue!15,draw]{3-3}{-1}
   &   &   & \Block[fill=blue!15,draw]{2-2}{1}
               &   \\
   &   &   &   &   \\
   &   &   &   &   \\
\end{pNiceMatrix}
\begin{pmatrix}
a_1 \\ a_2 \\ \vdots \\ a_n
\end{pmatrix}
$

\end{document}

您需要多次编译(因为nicematrix在后台使用 PGF/Tikz 节点)。

上述代码的输出

相关内容