我想写一个矩阵方程,其中矩阵在对角线上包含大小相同的彩色块。例如:
有人知道该怎么做吗?
答案1
以下示例根据行数自动计算对角线框的矩阵内容。表格的环境有点棘手,因为每个单元格都放在一个组中。因此,该示例首先在全局宏中收集矩阵的内容,\DiagonalMatrixLines
并在矩阵环境中使用此宏。\foreach
包的宏pgffor
用于循环。(还有许多其他可能性。)
正方形由行的高度和深度决定。矩阵环境基于array
插入特殊支柱\@arstrut
来设置行的最小高度和深度的环境。环境添加的额外空白通过设置为零来array
删除。\arraycolsep
\vdots
占用一行多一点,但似乎对角线框的矩阵不应该包含一行\vdots
。因此是一个高度小四个块、高度大五个块的矩阵。下一个示例使用左矩阵的内部部分来获取矩阵的高度,并使用此高度调整对角线块矩阵的大小。矩阵的垂直中间位于数学轴上。因此,我们必须在调整大小之前将矩阵的中间移动到基线。
\documentclass{article}
\usepackage{xcolor}
\usepackage{amsmath}
\usepackage{pgf,pgffor,graphicx}
\makeatletter
\newcommand*{\DiagonalMatrixBlock}{%
\begingroup
\setlength{\fboxsep}{0pt}%
\colorbox{red}{%
\@arstrut
\kern\dp\@arstrutbox
\kern\ht\@arstrutbox
}%
\endgroup
}
\newcommand*{\@DiagonalMatrix}[1]{%
\begingroup
\setlength{\arraycolsep}{0pt}%
\global\let\DiagonalMatrixLines\@empty
\foreach[count=\xi] \x in {1,...,#1} {%
\ifnum\xi>1 %
\g@addto@macro\DiagonalMatrixLines{\\}%
\fi
\foreach \x in {1,...,\xi} {
\g@addto@macro\DiagonalMatrixLines{&}%
}%
\g@addto@macro\DiagonalMatrixLines{\DiagonalMatrixBlock}%
}%
\endgroup
}
\newcommand*{\DiagonalMatrix}[1]{%
\begingroup
\setlength{\arraycolsep}{0pt}%
\@DiagonalMatrix{#1}%
\begin{pmatrix}\DiagonalMatrixLines\end{pmatrix}%
\endgroup
}
\newcommand*{\ScaledDiagonalMatrix}[2]{%
\begingroup
\sbox0{$\begin{matrix}#2\end{matrix}$}%
\sbox2{$\vcenter{}$}
\setlength{\arraycolsep}{0pt}%
\@DiagonalMatrix{#1}%
\left(%
\raisebox{\ht2}{%
\resizebox{!}{\dimexpr\ht0-\ht2\relax}{%
\raisebox{-\ht2}{%
$\begin{matrix}\DiagonalMatrixLines\end{matrix}$%
}%
}%
}%
\right)%
\endgroup
}
\makeatother
\begin{document}
\[
\begin{pmatrix}
b_1 \\ b_2 \\ \vdots \\ b_n
\end{pmatrix}
=
\DiagonalMatrix{5}
\begin{pmatrix}
a_1 \\ a_2 \\ \vdots \\ a_n
\end{pmatrix}
\]
\[
\newcommand*{\MatrixB}{b_1 \\ b_2 \\ \vdots \\ b_n}
\begin{pmatrix}\MatrixB\end{pmatrix}
=
\ScaledDiagonalMatrix{8}{\MatrixB}
\begin{pmatrix}
a_1 \\ a_2 \\ \vdots \\ a_n
\end{pmatrix}
\]
\end{document}
答案2
可能有很多方法可以做到这一点,但这是一种使用包colorbox
的简单方法color
。
\documentclass{article}
\usepackage{xcolor}
\begin{document}
\[\left(\begin{array}{c}b_1\\b_2\\\vdots\\b_n\end{array}\right) =
\left(\begin{array}{cccc}
\colorbox{red}{\,}\\
&\colorbox{red}{\,}\\
&&\ddots\\
&&&\colorbox{red}{\,}
\end{array}\right)
\left(\begin{array}{c}a_1\\a_2\\\vdots\\a_n\end{array}\right)\]
\end{document}
答案3
另一种方法是使用pmatrix
来自amsmath
矩阵和\cellcolor
(从table
选项到xcolor
)来为单元格着色:
\documentclass{article}
\usepackage[table]{xcolor}
\usepackage{amsmath}
\begin{document}
\[
\begin{pmatrix}
b_1\\b_2\\\vdots\\b_n
\end{pmatrix} =
\begin{pmatrix}
& \cellcolor{red} \\
&&\cellcolor{red}\\
&&&\ddots\\
&&&&\cellcolor{red} &
\end{pmatrix}
\begin{pmatrix}
a_1\\a_2\\\vdots\\a_n
\end{pmatrix}
\]
\end{document}
答案4
与。{pNiceMatrix}
nicematrix
\documentclass{article}
\usepackage{nicematrix}
\begin{document}
$\begin{pNiceMatrix}[nullify-dots]
b_1 \\
b_2 \\
\Vdots \\
\\
b_n
\end{pNiceMatrix}
=
\begin{pNiceMatrix}[columns-width=1.8mm,margin]
\CodeBefore
\cellcolor{red}{1-1,2-2,3-3,4-4,5-5}
\Body
&&&& \\
\\
\\
\\
\\
\end{pNiceMatrix}
\begin{pNiceMatrix}
a_1 \\
a_2 \\
\Vdots \\
\\
a_n
\end{pNiceMatrix}$
\end{document}
您需要多次编译(因为nicematrix
在后台使用 PGF/Tikz 节点)。