
我已經環顧了一段時間,在為以下矩陣著色時似乎遇到了很大的麻煩:
\begin{pmatrix} 3 & -1 & -1 & -1 & 0 & 0 & 0 \\
-1 & 1 & 0 & 0 & 0 & 0 & 0 \\
-1 & 0 & 2 & 0 & 0 & 0 & 0 \\
-1 & 0 & 0 & 2 & -1 & 0 & 0 \\
0 & 0 & -1 & 0 & 3 & -1 & -1 \\
0 & 0 & 0 & -1 & -1 & 3 & -1 \\
0 & 0 & 0 & 0 & -1 & -1 & 2 \end{pmatrix}
如下:
有人知道我從哪裡開始做這件事嗎?我遇到的所有內容似乎都是專門為特定矩陣編寫的,並且在調整程式碼時遇到了麻煩。
答案1
除了Zarko 的評論中列出了可能性,您可以使用tikzmark
,這可以為您提供更精細的自動控制。然而,在您的用例中,不需要更精細的控制,但如果您在矩陣中有更多奇特的條目(例如帶有指數的內容),則可能需要。
\documentclass{article}
\usepackage{eso-pic}
\usepackage{amsmath}
\usepackage{tikz}
\usetikzlibrary{tikzmark,fit}
\begin{document}
\AddToShipoutPictureBG{%
\begin{tikzpicture}[overlay,remember picture]
\node[fill=blue!40,rounded corners,fit=(m1)(m3)]{};
\node[fill=red!40,rounded corners,fit=(m2)(m4)]{};
\node[fill=purple!60,inner xsep=1.6ex,rounded corners,fit=(m2)(m3)]{};
\end{tikzpicture}
}
\[\begin{pmatrix}
\tikzmarknode{m1}{3} & -1 & -1 & -1 & 0 & 0 & 0 \\
-1 & 1 & 0 & 0 & 0 & 0 & 0 \\
-1 & 0 & \tikzmarknode{m2}{2} & 0 & 0 & 0 & 0 \\
-1 & 0 & 0 & \tikzmarknode{m3}{2} & -1 & 0 & 0 \\
0 & 0 & -1 & 0 & 3 & -1 & -1 \\
0 & 0 & 0 & -1 & -1 & 3 & -1 \\
0 & 0 & 0 & 0 & -1 & -1 & \tikzmarknode{m4}{2}
\end{pmatrix}\]
\end{document}
附錄(由 BlackMild 提供):這是 mamot 程式碼的一個小改變。我刪除了第三個節點,並對第一個和第二個節點使用opacity=.3
和,因此它們的顏色是自混合的。inner sep=4pt
node
\documentclass{article}
\usepackage{eso-pic}
\usepackage{amsmath}
\usepackage{tikz}
\usetikzlibrary{tikzmark,fit}
\begin{document}
\AddToShipoutPictureBG{%
\begin{tikzpicture}[overlay,remember picture,opacity=.3,inner sep=4pt]
\node[fill=blue,fit=(m1)(m3)]{};
\node[fill=red,fit=(m2)(m4)]{};
\end{tikzpicture}
}
\[\begin{pmatrix}
\tikzmarknode{m1}{3} & -1 & -1 & -1 & 0 & 0 & 0 \\
-1 & 1 & 0 & 0 & 0 & 0 & 0 \\
-1 & 0 & \tikzmarknode{m2}{2} & 0 & 0 & 0 & 0 \\
-1 & 0 & 0 & \tikzmarknode{m3}{2} & -1 & 0 & 0 \\
0 & 0 & -1 & 0 & 3 & -1 & -1 \\
0 & 0 & 0 & -1 & -1 & 3 & -1 \\
0 & 0 & 0 & 0 & -1 & -1 & \tikzmarknode{m4}{2}
\end{pmatrix}\]
\end{document}
答案2
{pNiceMatrix}
您可以使用of輕鬆做到這一點nicematrix
。
在該環境中,您有一個內建命令\Block
,可以用您想要的顏色填充區塊。
為了表明即使在有背景的情況下這也能工作,我將環境放在{pNiceMatrix}
a 中{tcolorbox}
(user121799 的答案不適用於背景)。
\documentclass{article}
\usepackage{tcolorbox}
\usepackage{nicematrix,tikz}
\begin{document}
\begin{tcolorbox}
\[\begin{pNiceMatrix}[margin]
\Block[fill=blue!40,rounded-corners]{4-4}{}
3 & -1 & -1 & -1 & 0 & 0 & 0 \\
-1 & 1 & 0 & 0 & 0 & 0 & 0 \\
-1 & 0 & \Block[fill=red!40,rounded-corners]{*-*}{}
2 & 0 & 0 & 0 & 0 \\
-1 & 0 & 0 & 2 & -1 & 0 & 0 \\
0 & 0 & -1 & 0 & 3 & -1 & -1 \\
0 & 0 & 0 & -1 & -1 & 3 & -1 \\
0 & 0 & 0 & 0 & -1 & -1 & 2
\end{pNiceMatrix}\]
\end{tcolorbox}
\end{document}
您需要多次編譯(因為nicematrix
使用 PGF/Tikz 節點)。
您可以使用該金鑰opacity
(需要 6.22 版nicematrix
)。
\documentclass{article}
\usepackage{tcolorbox}
\usepackage{nicematrix}
\begin{document}
\begin{tcolorbox}
\[\begin{pNiceMatrix}[margin]
\Block[fill=blue!40,rounded-corners]{4-4}{}
3 & -1 & -1 & -1 & 0 & 0 & 0 \\
-1 & 1 & 0 & 0 & 0 & 0 & 0 \\
-1 & 0 & \Block[fill=red!80,opacity=0.5,rounded-corners]{*-*}{}
2 & 0 & 0 & 0 & 0 \\
-1 & 0 & 0 & 2 & -1 & 0 & 0 \\
0 & 0 & -1 & 0 & 3 & -1 & -1 \\
0 & 0 & 0 & -1 & -1 & 3 & -1 \\
0 & 0 & 0 & 0 & -1 & -1 & 2
\end{pNiceMatrix}\]
\end{tcolorbox}
\end{document}
如果你想要藍色塊後面的紅色塊,這種技術就不行。在這種情況下,可以使用\CodeBefore
提供的 來{pNiceMatrix}
用 Tikz 繪製彩色矩形前數組的構造(使用nicematrix
矩陣中建立的 Tikz 節點)。
再說一次,即使有背景,這也有效。
\documentclass{article}
\usepackage{tcolorbox}
\usepackage{nicematrix,tikz}
\begin{document}
\begin{tcolorbox}
\[\begin{pNiceMatrix}[margin]
\CodeBefore
\begin{tikzpicture}
\fill [red!40,rounded corners] (3-|3) rectangle (8-|8) ;
\fill [blue!40,rounded corners] (1-|1) rectangle (5-|5) ;
\end{tikzpicture}
\Body
3 & -1 & -1 & -1 & 0 & 0 & 0 \\
-1 & 1 & 0 & 0 & 0 & 0 & 0 \\
-1 & 0 & 2 & 0 & 0 & 0 & 0 \\
-1 & 0 & 0 & 2 & -1 & 0 & 0 \\
0 & 0 & -1 & 0 & 3 & -1 & -1 \\
0 & 0 & 0 & -1 & -1 & 3 & -1 \\
0 & 0 & 0 & 0 & -1 & -1 & 2
\end{pNiceMatrix}\]
\end{tcolorbox}
\end{document}