我正在尝试为 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
为第一行中的第六个单元格。
输出
代码
\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}