為矩陣部分的背景著色

為矩陣部分的背景著色

我已經環顧了一段時間,在為以下矩陣著色時似乎遇到了很大的麻煩:

\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=4ptnode

在此輸入影像描述

\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}

第三段程式碼的輸出

相關內容