突出显示表格单元格

突出显示表格单元格

我有一张大型 (13x13) 表格,需要在其中突出显示单元格子集。我知道我可以使用colortbl或为这些单元格设置背景颜色xcolor。但我需要在不使用颜色的情况下突出显示表格(这是一篇科学论文,表格应该传达其目的,而无需假设读者可以使用彩色打印机)。有办法吗?例如在单元格周围画一个圆圈?

答案1

总体而言,我同意 lockstep 的观点,即圈出可能不是突出显示文本的最佳方式。除了他的建议之外,您还可以尝试使用浅灰色背景。

话虽如此,这里有一种使用 TikZ 圈出文本的方法:

\documentclass{article}

\usepackage{tikz}
\usetikzlibrary{fit,shapes.geometric}

\newcounter{nodemarkers}
\newcommand\circletext[1]{%
    \tikz[overlay,remember picture] 
        \node (marker-\arabic{nodemarkers}-a) at (0,1.5ex) {};%
    #1%
    \tikz[overlay,remember picture]
        \node (marker-\arabic{nodemarkers}-b) at (0,0){};%
    \tikz[overlay,remember picture,inner sep=2pt]
        \node[draw,ellipse,fit=(marker-\arabic{nodemarkers}-a.center) (marker-\arabic{nodemarkers}-b.center)] {};%
    \stepcounter{nodemarkers}%
}

\begin{document}

\begin{tabular}{*6{c}}\hline
    Col 1 & Col 2 & Col 3 & Col 4 & Col 5 & Col 6 \\\hline
    bla   & bla   & \circletext{bla}   & bla   & bla   & bla \\
    bla   & bla   & bla   & bla   & bla   & bla \\ 
    ble   & ble   & ble   & bla   & \circletext{bla}   & bla \\ 
    bla   & bla   & bla   & bla   & bla   & bla \\ \hline
\end{tabular}

\end{document}

例子

\circletext命令在文本的左侧和右侧定义一个节点,然后在它们周围放置一个椭圆。当然,可以制作更奇特的图形,这是一个相当基本的示例(因为我不知道您的表格是什么样子)。需要运行两次 LaTeX 才能让所有内容显示在正确的位置。


编辑:下面是如何标记任意块的示例。椭圆形与大块不相配,因此改用圆角矩形:

\documentclass{article}

\usepackage{tikz}
\usetikzlibrary{fit,shapes.misc}

\newcommand\marktopleft[1]{%
    \tikz[overlay,remember picture] 
        \node (marker-#1-a) at (0,1.5ex) {};%
}
\newcommand\markbottomright[1]{%
    \tikz[overlay,remember picture] 
        \node (marker-#1-b) at (0,0) {};%
    \tikz[overlay,remember picture,thick,dashed,inner sep=3pt]
        \node[draw,rounded rectangle,fit=(marker-#1-a.center) (marker-#1-b.center)] {};%
}

\begin{document}

\begin{tabular}{*6{c}}\hline
    Col 1 & Col 2 & Col 3 & Col 4 & Col 5 & Col 6 \\\hline
    bla   & bla   & \marktopleft{c1}bla   & bla   & bla   & bla \\
    bla   & bla   & bla   & bla   & bla   & bla \\ 
    ble   & ble   & ble   & bla   & bla\markbottomright{c1}   & bla \\ 
    bla   & bla   & bla   & bla   & bla   & bla \\ 
    bla   & \marktopleft{c2}bla   & bla   & bla   & bla\markbottomright{c2}   & bla \\ \hline
\end{tabular}

\end{document}

例子

答案2

我无法提供“技术”答案,只能提供印刷方面的建议:在一个大表格中,围绕单元格子集的圆圈可能看起来像与表格无关的叠加图形 - 换句话说,它可能非常令人困惑。相反,我会尝试以下方法之一:

  • 在特定的单元格周围画一个矩形(可能仍然看起来不太好看);

  • 使用栅格作为背景;

  • 将单元格内容设置为粗体或斜体。

答案3

我认为用 TiKZ 矩阵替换矩阵可以让你适应细胞组周围的路径。

答案4

除了在表格单元格周围添加框架外,您可能还需要添加颜色和/或音符编号至少,这是我的情况。

我从@Caramdir 的答案中的代码开始,并对其进行了扩展。以下是我的命令:

  • \mtl{<note number>}-- 标记左上角
  • \mbr[<optional fill color>]{<note number>}-- 标记右下角

如果单元格中有较长的文本(见注释 2),框架可能会越过它。为了避免这种情况,请使用间距宏如注释4()所述\quad\mbr...

带有颜色和注释编号的表格框架

\documentclass{article}

\usepackage{tikz}
\usetikzlibrary{calc,fit,shapes.misc}

% Mark top left
\newcommand\mtl[2][none]{%
    \tikz[overlay,remember picture] 
        \node (marker-#2-a) at (0,0.9ex) {};%
}

% Mark bottom right
\newcommand\mbr[2][none]{%
    \tikz[overlay,remember picture] 
        \node (marker-#2-b) at (0.2ex,0.3ex) {};%
    \tikz[overlay,remember picture,thick,inner sep=5pt]
        \node[draw,
              blend mode=darken,
              rectangle,
              rounded corners,
              fill=#1,
              fit=(marker-#2-a.center) (marker-#2-b.center)] {};%
    \tikz[overlay,remember picture] 
    \path 
        let
          \p{mtl} = (marker-#2-a), \p{mbr} = (marker-#2-b)
        in
          % Tweak xshift and yshift values to change note number position
          [x=\x{mbr}, y=\y{mtl}, xshift=1em, yshift=0.5em]
          node[rounded corners,inner sep=2pt,fill=white,opacity=0.8,text opacity=1] at (1, 1) {\footnotesize{\textbf{#2}}};%
}

\begin{document}

\begin{tabular}{*5{c}}\hline
       Col 1 & Col 2 & Col 3 & Col 4 & Col 5 \\\hline
       bla  & bla        & bla              & bla  & \mtl{2}blabla \\
\mtl{1}bla  & bla        & bla              & bla  & bla\mbr{2} \\ 
       ble  & ble\mbr{1} & bla              & bla  & bla \\ 
       bla  & bla        & bla              & bla  & \mtl{4}blabla \\ 
\mtl{3}bla  & bla        & bla\mbr[cyan]{3} & bla  & bla\quad\mbr{4} \\ \hline
\end{tabular}

\end{document}

相关内容