如何嵌套突出显示数组中某一行的部分内容?

如何嵌套突出显示数组中某一行的部分内容?

我试图突出显示数组中某一行的一部分,其中某些部分“双重”突出显示,因此显得更暗。

根据上一个问题,我尝试了以下操作:

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

在此处输入图片描述

相关内容