如何为 bmatrix 中的某一行的部分着色

如何为 bmatrix 中的某一行的部分着色

我正在尝试为 bmatrix 的一部分行着色。我该如何实现呢?以下是我目前所做的:

\documentclass{article}
\usepackage{amsmath,mathtools}
\begin{document}    
\[
\begin{bmatrix*}[r]
    3 & 1 & -3 & 0 & 4 & 1 \\
    0 & 1 & -1 & 2 & -2 & 5 \\
    -2 & -3 & 1  & 1 & 0 & 1
\end{bmatrix*}
\]
\end{document}

在下面的矩阵中,我用蓝色突出显示了第 1 行和第 3 至第 5 列。另外,我用绿色突出显示了第 3 行和第 1 至第 6 列。

这就是我想要实现的目标:

在此处输入图片描述

我想要一个使用 bmatrix 环境的解决方案。

答案1

出于一致性考虑,我不建议使用常规的 TikZ 矩阵,而是坚持使用amsmath/ amsmathtools。这将使手头的矩阵具有与文档中其他矩阵相同的外观和感觉。然而,阴影和标记任务正是 TikZ 的用武之地。

我定义了两个\newcommand;第一个用于计算阴影部分的坐标,第二个用于执行阴影,如下所示:

\newcommand{\DoTikzmark}[1]{%
  \tikz[remember picture] \coordinate[shift={(0,.7ex)}](#1);%
}

\newcommand{\colrow}[3][]{%
  \tikz[overlay,remember picture, line width=10pt]
    \draw[shorten >=-.1em, shorten <=-.1em, #1] (#2)--(#3);
}

完整代码如下:

\documentclass{article}
\usepackage{mathtools}
\usepackage{tikz}

\newcommand{\DoTikzmark}[1]{%
  \tikz[remember picture] \coordinate[shift={(0,.7ex)}](#1);%
}
\newcommand{\colrow}[3][]{%
  \tikz[overlay,remember picture, line width=10pt]
    \draw[shorten >=-.1em, shorten <=-.1em, #1] (#2)--(#3);
}

\begin{document}
\[
\begin{bmatrix*}[r]
    3 & 1 & \DoTikzmark{num-3}{-}3 & 0 & {4}\DoTikzmark{num4} & 1 \\
    0 & 1 & -1 & 2 & -2 & 5 \\
   \DoTikzmark{num-2}{-}2 & -3 & 1  & 1 & 0&{1}\DoTikzmark{num1} \\
\end{bmatrix*}
\]
\colrow[blue ,opacity=.5]{num-3}{num4}
\colrow[green,opacity=.5]{num-2}{num1}
\end{document}

在此处输入图片描述

重要备注

正如我们在上面的代码中看到的,矩阵项-3和分别-2以相当奇怪的方式写成{-}3{-}2。这里直观的问题是:这些额外的括号有什么用?好吧,减号默认是二元运​​算符,会有额外的间距,但这取决于相邻的原子。因此,例如,${}-2$将增加空间,但$-2$-假设为前缀一元减和)不会有任何额外的空间。

如果您想要用作-普通符号,您需要一个\mathord-或者最简单的方法是使用{-},其中额外的括号组足以强制\mathord行为。

编辑:另一种看起来更优雅的替代方法是用一对括号将整个负数括起来,如@PeterGrill 在评论中所建议的那样。因此,我们可以分别将其写成和而不是{-}2和。这样,符号就不会被视为二元运算符,而是具有正确间距的符号。{-}3{-2}{-3}-\mathord

答案2

我在 (bmatrix) 的文档中找不到任何amsmath可以帮助突出显示的内容。恐怕这是不可能的。

但是,您可以使用常规矩阵,使用 Tikz,这样引用节点更容易,因为 Tikz 矩阵具有自动命名功能。如果矩阵名为m,则为m-1-1第一个单元格,m-1-6为第一行中的第六个单元格。

输出

图1

代码

\documentclass{article}
\usepackage{tikz}
\usepackage{amsmath,mathtools}
\usetikzlibrary{matrix, fit, backgrounds}

\newcommand{\hl}[2]{
\begin{scope}[on background layer]
    \node [fit={#1}, fill=#2,inner sep=-1pt] {};
\end{scope}}

\begin{document}

In the following matrix, I've highlighted the row 1 and columns 3 through 5 in blue. Also, I've highlighted row 3 and columns 1 through 6 in green.

\begin{figure}[!h]
\centering
\begin{tikzpicture}
        \matrix [matrix of math nodes,left delimiter={[},right delimiter={]}] (m)
        {
             3 & 1 & -3 & 0 & 4 & 1 \\
             0 & 1 & -1 & 2 & -2 & 5 \\
             -2 & -3 & 1 & 1 & 0 & 1 \\
        };  
%
\hl{(m-1-3) (m-1-5)}{blue!30} 
\hl{(m-3-1) (m-3-6)}{green!30} 
\end{tikzpicture}
\end{figure}  
\end{document}

相关内容