如何创建多行红框来突出显示表格结果?

如何创建多行红框来突出显示表格结果?

我正在尝试创建一个覆盖多行和多列的红色框,以突出显示表格的各个部分。

我已经使用@Steven B. Slegetes 创建了一个 MWE回答这个问题。代码为:

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{graphicx}
\usepackage{tabularx}
\usepackage{booktabs}
\usepackage[table]{xcolor}
\usepackage{multirow}

%Create Red Boxes, Thanks Steven
\def\boxit#1{%
  \smash{\color{red}\fboxrule=1pt\relax\fboxsep=2pt\relax%
  \llap{\rlap{\fbox{\vphantom{0}\makebox[#1]{}}}~}}\ignorespaces
}

\begin{document}

\begin{table}[h]
    \caption{Red Box Test}
    \vspace{0.5em}
    \centering
    \begin{tabular}{cccc}
                          & A & B & C \\\toprule
                        I & 1 & 2 & 3 \\
         \boxit{0.4in}  J & 4 & 5 & 6 \\
                        K & 7 & 8 & 9 \\\bottomrule
    \end{tabular}
\end{table}

这将创建下表:

在此处输入图片描述

问题:如何让它覆盖以 K 开头的行带有 J 的行?我认为它一定与多行包有关,因此我将其包括在内。我试过尝试过,但无济于事。

答案1

一种方法是使用tikztikzmark库,它可以在页面上标记任意点,然后根据标记点的坐标绘制图片。例如:

\documentclass{article}
\usepackage{booktabs}
\usepackage{tikz}
\usetikzlibrary{tikzmark}

\begin{document}

\begin{table}[h]
\caption{Red Box Test}
\vspace{0.5em}
\centering
\begin{tabular}{cccc}
  & A & B & C \\\toprule
I & 1 & 2 & 3 \\
\tikzmark{J}J & 4 & 5 & 6 \\
K & 7\tikzmark{7} & 8 & 9 \\\bottomrule
\end{tabular}
\begin{tikzpicture}[overlay,remember picture]
  \draw[red] ([shift={(-1ex,2ex)}]pic cs:J) rectangle ([shift={(1ex,-0.5ex)}]pic cs:7);
\end{tikzpicture}
\end{table}
\end{document}

结果:

在此处输入图片描述

答案2

我有編輯这个答案是因为,从 5.5 版(2020-10-20)开始,人们不再需要\omit\CodeAfter在这里写(现在,\CodeAfter在所有情况下都有效)。


您可以使用{NiceTabular}of来实现这一点nicematrix。此环境在数组的单元格下创建 PGF/Tikz 节点,并且可以在构造数组后使用这些节点。

\documentclass{article}
\usepackage{booktabs}
\usepackage{tikz}
\usetikzlibrary{fit}
\usepackage{nicematrix}

\begin{document}

\begin{table}[h]
\caption{Red Box Test}
\vspace{0.5em}
\centering
\begin{NiceTabular}{cccc}
  & A & B & C \\\toprule
I & 1 & 2 & 3 \\
J & 4 & 5 & 6 \\
K & 7 & 8 & 9 \\\bottomrule
\CodeAfter
\tikz \node [draw=red, fit = (3-1) (4-2)] { } ;
\end{NiceTabular}
\end{table}

\end{document}

上述代码的输出

答案3

@Sergei Golovan 的一个(非常)小的变体回答。从tikzmark库中使用\tikzmarknode宏,根据标记节点的节点绘制框:

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{fit,            % new
                tikzmark}       % new
\tikzset{FIT/.style = {draw=red, thick, inner ysep=2pt, fit=#1}} % new
\usepackage{booktabs}
\usepackage[skip=0.33\lineskip]{caption} % new

\begin{document}
    \begin{table}[ht]
\caption{Red Box Test}
\label{tab:redbox}
    \centering
\begin{tabular}{cccc}
                    & A                 & B & C \\
    \toprule
I                   & 1                 & 2 & 3 \\
\tikzmarknode{J}J   & 4                 & 5 & 6 \\  % <---
K                   & 7\tikzmarknode{7} & 8 & 9 \\  % <---
    \bottomrule
\end{tabular}
\begin{tikzpicture}[overlay,remember picture]
\node[FIT=(J) (7)] {};  % <---
\end{tikzpicture}
    \end{table}
\end{document}

在此处输入图片描述

答案4

一个解决方案pstricks:两个空节点和一个\psframe连接这些节点的节点。

\documentclass[svgnames]{article}
\usepackage{graphicx}
\usepackage{tabularx}
\usepackage{booktabs}
\usepackage[table]{xcolor}
\usepackage{multirow}
\usepackage{pst-node}

\begin{document}

\begin{table}[h]
    \caption{Red Box Test}
    \vspace{0.5em}
    \centering
    \begin{tabular}{cccc}
                          & A & B & C \\\toprule
                      I & 1 & 2 & 3 \\
          \pnode[-1.5ex, 2.5ex]{A}J & 4 & 5 & 6 \\
                        K & 7\pnode[1.5ex, -1ex]{B} & 8 & 9 \\\bottomrule
    \end{tabular}
\psframe[linecolor=Coral](A)(B)
\end{table}

\end{document} 

在此处输入图片描述

相关内容