我试图突出显示数组中某一行的一部分,其中某些部分“双重”突出显示,因此显得更暗。
根据上一个问题,我尝试了以下操作:
\usepackage{tikz}
\usetikzlibrary{fit}
\tikzset{%
highlight/.style={rectangle,rounded corners,fill=blue!15,draw,fill opacity=0.5,
inner sep=0pt}
}
\newcommand{\tikzmark}[2]{\tikz[overlay,remember picture,baseline=(#1.base)]
\node (#1) {#2};}
%
\newcommand{\Highlight}[1][submatrix]{%
\tikz[overlay,remember picture]{
\node[highlight,fit=(left.north west) (right.south east)] (#1) {};}
}
\begin{document}
$\begin{array}{ *{5}{c} }
a &0 &0 &0 &0 \\
b & c &0 &0 &0 \\
d & e &f &0 &0 \\
\tikzmark{left}{\tikzmark{left}{\tikzmark{left}{\tikzmark{right}{$g$}}\Highlight[first]}} & \tikzmark{right}{$h$} \Highlight[second]&\tikzmark{right}{$i$} \Highlight[third]&j&0 \\
k & l & m & n &o
\end{array}$
\end{document}
这里的目标是让 g 突出显示 3 次,h 突出显示 2 次,i 突出显示 1 次,所有突出显示都重叠并跨列。我最终得到的是一个如下所示的数组:
显然,这存在很多问题,包括最后一行之前的间隙很大,以及突出显示不以值为中心。此外,如果使用矩阵或类似的东西更容易,则不需要使用数组。
提前致谢!
答案1
您的解决方案不太可行,因为具有相同名称的节点会相互覆盖。而且您的构造看起来非常复杂。这稍微简单一些:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{fit}
\tikzset{%
highlight/.style={
rectangle,
rounded corners,
fill=blue!15,
draw,fill opacity=0.5,
inner sep=0pt,
}
}
\newcommand{\tikzmark}[2]{%
\tikz[overlay,remember picture,baseline=(#1.base)]\node (#1) {#2};%
}
%
\newcommand{\Highlight}[1]{%
\tikz[overlay,remember picture] \node[highlight,fit=#1] {};%
}
\begin{document}
\[
\begin{array}{ *{5}{c} }
a & 0 & 0 & 0 & 0 \\
b & c & 0 & 0 & 0 \\
d & e & f & 0 & 0 \\
\tikzmark{left}{$g$} & \tikzmark{first}{$h$} & \tikzmark{second}{$i$} & j & 0 \\
k & l & m & n & o \\
\end{array}
\Highlight{(left)}
\Highlight{(left)(first)}
\Highlight{(left)(second)}
\]
\end{document}
或者更好的是,使用 TikZ 矩阵并将高光放在背景中。
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{backgrounds,matrix}
\begin{document}
\[
\begin{tikzpicture}[
highlight/.style={
rounded corners,
fill=blue!15,
fill opacity=0.5,
}]
\matrix[matrix of math nodes,execute at begin cell=\mathstrut] (m)
{
a & 0 & 0 & 0 & 0 \\
b & c & 0 & 0 & 0 \\
d & e & f & 0 & 0 \\
g & h & i & j & 0 \\
k & l & m & n & o \\
};
\begin{scope}[on background layer]
\filldraw[highlight] (m-4-1.north west) rectangle (m-4-1.south east);
\filldraw[highlight] (m-4-1.north west) rectangle (m-4-2.south east);
\filldraw[highlight] (m-4-1.north west) rectangle (m-4-3.south east);
\end{scope}
\end{tikzpicture}
\]
\end{document}