更改表格中几个单元格的边框

更改表格中几个单元格的边框

假设我有一张 4 列 8 行的表格。最上面一行是下面每行的标签。假设我希望第 4 行和第 5 行的单元格边框比表格中其他单元格的边框更粗。有没有办法在 LaTeX 中实现这一点?

\begin{table*}[ht]
{\normalsize
\hfill{}
\large
\begin{tabular}{|c|c|c|c|c|}
\hline \bf ID & \bf Raw Score & \bf Num & \bf Total Hits & \bf Avg \\ 
\hline 217842950 & 8282 & 9 & 10059 & 0.176658 \\ 
\hline 264307945 & 7700 & 13 & 11076 & 0.304803 \\ 
\hline 111824111 & 6170 & 16 & 9467 & 0.348262 \\ 
\hline 331180650 & 1705 & 31 & 2668 & 0.360945 \\ 
\hline 436114131 & 1540 & 6 & 1773 & 0.131416 \\ 
\hline 546694115 & 1460 & 6 & 1685 & 0.133531 \\ 
\hline 467026458 & 1058 & 36 & 1237 & 0.144705 \\ 
\hline 
\end{tabular} }
\hfill{}
\caption{Scores for the top-7 IDs .}
\label{tb:tablename}
\end{table*}

上面是我的表格。我不确定如何更改任何行(或单元格)周围的边框

答案1

这里有一个简单的例子;我们的想法是使用\noalign{\hrule height <length>}而不是\hline来获得由 给出的厚度的水平规则<length>;对于垂直规则,不跨越整个表格,我们的想法是使用 \multicolumn 并在第二个参数中使用!{\vrule width <length>}而不是来获得该单元格|厚度的​​垂直规则(最后一个构造需要该包):<length>array

\documentclass{article}
\usepackage{array}

\begin{document} 

\begin{tabular}{|c|c|}
\hline
column1a & column2a \\
\noalign{\hrule height 2pt}
\multicolumn{1}{!{\vrule width 2pt}c!{\vrule width 1pt}}{column1b} & 
  \multicolumn{1}{!{\vrule width 1pt}c!{\vrule width 2pt}}{column2b} \\
\noalign{\hrule height 2pt}
column1c & column2c \\
\hline
\end{tabular}

\end{document}

enter image description here

下面是您的表格的一个示例:

\documentclass{article}
\usepackage{array}

\begin{document} 

\begin{table*}
{\normalsize
\hfill{}
\large
\begin{tabular}{|c|c|c|c|c|}
\hline \bf ID & \bf Raw Score & \bf Num & \bf Total Hits & \bf Avg \\ 
\hline 217842950 & 8282 & 9 & 10059 & 0.176658 \\ 
\hline 264307945 & 7700 & 13 & 11076 & 0.304803 \\ 
\noalign{\hrule height 2pt}
\multicolumn{1}{!{\vrule width 2pt}c!{\vrule width 1pt}}{111824111} & 
  \multicolumn{1}{!{\vrule width 1pt}c!{\vrule width 1pt}}{6170} & 
  \multicolumn{1}{!{\vrule width 1pt}c!{\vrule width 1pt}}{16} & 
  \multicolumn{1}{!{\vrule width 1pt}c!{\vrule width 1pt}}{9467} & 
  \multicolumn{1}{!{\vrule width 1pt}c!{\vrule width 2pt}}{0.348262} \\ 
\noalign{\hrule height 2pt}
\multicolumn{1}{!{\vrule width 2pt}c!{\vrule width 1pt}}{331180650} & 
  \multicolumn{1}{!{\vrule width 1pt}c!{\vrule width 1pt}}{1705} & 
  \multicolumn{1}{!{\vrule width 1pt}c!{\vrule width 1pt}}{31} & 
  \multicolumn{1}{!{\vrule width 1pt}c!{\vrule width 1pt}}{2668} & 
  \multicolumn{1}{!{\vrule width 1pt}c!{\vrule width 2pt}}{0.360945} \\ 
\noalign{\hrule height 2pt}
 436114131 & 1540 & 6 & 1773 & 0.131416 \\ 
\hline 546694115 & 1460 & 6 & 1685 & 0.133531 \\ 
\hline 467026458 & 1058 & 36 & 1237 & 0.144705 \\ 
\hline 
\end{tabular} }
\hfill{}
\caption{Scores for the top-7 IDs .}
\label{tb:tablename}
\end{table*}

\end{document}

enter image description here

当然,你可以定义宏,例如:

\newcommand\Thickvrule[1]{%
  \multicolumn{1}{!{\vrule width 2pt}c!{\vrule width 1pt}}{#1}%
}

然后使用

\Thickvrule{6170}

在您的文档中。

对于某些细胞,\cline可以定义具有所需厚度的变体:

\documentclass{article}
\usepackage{array}

\newlength\Origarrayrulewidth
\newcommand{\Cline}[1]{%
  \noalign{\global\setlength\Origarrayrulewidth{\arrayrulewidth}}%
  \noalign{\global\setlength\arrayrulewidth{2pt}}\cline{#1}%
  \noalign{\global\setlength\arrayrulewidth{\Origarrayrulewidth}}%
}

\newcommand\Thickvrule[1]{%
  \multicolumn{1}{!{\vrule width 2pt}c!{\vrule width 2pt}}{#1}%
}

\begin{document} 

\begin{table*}
\setlength\extrarowheight{3pt}
\large
\centering
\begin{tabular}{|c|c|c|c|c|}
\hline \bf ID & \bf Raw Score & \bf Num & \bf Total Hits & \bf Avg \\ 
\hline 217842950 & 8282 & 9 & 10059 & 0.176658 \\ 
\Cline{1-1}\cline{2-5} 
\Thickvrule{264307945} & 7700 & 13 & 11076 & 0.304803 \\ 
\Cline{1-1}\cline{2-4}\Cline{4-4}\cline{4-5}
111824111 & 6170 & 16 & \Thickvrule{9467} & 0.348262 \\ 
\cline{1-4}\Cline{4-4}\cline{4-5}
331180650 & 1705 & 31 & 2668 & 0.360945 \\ 
\hline 436114131 & 1540 & 6 & 1773 & 0.131416 \\ 
\cline{1-2}\Cline{2-2}\cline{3-5}
546694115 & \Thickvrule{1460} & 6 & 1685 & 0.133531 \\ 
\cline{1-2}\Cline{2-2}\cline{3-5}
467026458 & 1058 & 36 & 1237 & 0.144705 \\ 
\hline 
\end{tabular}
\caption{Scores for the top-7 IDs .}
\label{tb:tablename}
\end{table*}

\end{document}

enter image description here 还有一些针对多个单元格的情况的宏:

\documentclass{article}
\usepackage{array}

\newlength\Origarrayrulewidth

% horizontal rule equivalent to \cline but with 2pt width
\newcommand{\Cline}[1]{%
 \noalign{\global\setlength\Origarrayrulewidth{\arrayrulewidth}}%
 \noalign{\global\setlength\arrayrulewidth{2pt}}\cline{#1}%
 \noalign{\global\setlength\arrayrulewidth{\Origarrayrulewidth}}%
}

% draw a vertical rule of width 2pt on both sides of a cell
\newcommand\Thickvrule[1]{%
  \multicolumn{1}{!{\vrule width 2pt}c!{\vrule width 2pt}}{#1}%
}

% draw a vertical rule of width 2pt on the left side of a cell
\newcommand\Thickvrulel[1]{%
  \multicolumn{1}{!{\vrule width 2pt}c|}{#1}%
}

% draw a vertical rule of width 2pt on the right side of a cell
\newcommand\Thickvruler[1]{%
  \multicolumn{1}{|c!{\vrule width 2pt}}{#1}%
}

\begin{document} 

\begin{table*}
\setlength\extrarowheight{3pt}
\centering
\large
\begin{tabular}{|c|c|c|c|c|}
\hline \bf ID & \bf Raw Score & \bf Num & \bf Total Hits & \bf Avg \\ 
\hline 217842950 & 8282 & 9 & 10059 & 0.176658 \\ 
\Cline{1-1}\cline{2-5} 
\Thickvrule{264307945} & 7700 & 13 & 11076 & 0.304803 \\ 
\Cline{1-1}\cline{2-4}\Cline{4-4}\cline{4-5}
111824111 & 6170 & 16 & \Thickvrule{9467} & 0.348262 \\ 
\cline{1-4}\Cline{4-4}\cline{4-5}
331180650 & 1705 & 31 & 2668 & 0.360945 \\ 
\cline{1-2}\Cline{2-2}\cline{3-5}
436114131 & \Thickvrule{1540} & 6 & 1773 & 0.131416 \\ 
\cline{1-2}\Cline{2-2}\cline{3-5}
546694115 & 1460 & 6 & 1685 & 0.133531 \\
\Cline{1-5} 
\Thickvrulel{467026458} & 1058 & 36 & 1237 & \Thickvruler{0.144705} \\ 
\Cline{1-5} 
\end{tabular}
\caption{Scores for the top-7 IDs .}
\label{tb:tablename}
\end{table*}

\end{document}

enter image description here

最后,附注一下,您应该考虑不要在表格中使用垂直线(当然,这只是一个建议);借助booktabs包您可以轻松制作漂亮的表格。

答案2

这更像是一种咆哮,而不是一种回答。

我确实希望 LaTeX 有一个将内容与显示分开的表格机制。例如,这是在 ConTeXt 中实现相同效果的方法:

\startsetups table:highlight
  \setupTABLE[each][each][align=middle,loffset=2pt, roffset=2pt]
  \setupTABLE[row][first][style=bold]
  \setupTABLE[row][3,4]  [rulethickness=2pt]
\stopsetups

\starttext
\startTABLE[setups=table:highlight]
  \NC ID        \NC Raw Score \NC Num \NC Total Hits \NC    Avg   \NC \NR
  \NC 217842950 \NC 8282      \NC   9 \NC      10059 \NC 0.176658 \NC \NR 
  \NC 264307945 \NC 7700      \NC  13 \NC      11076 \NC 0.304803 \NC \NR
  \NC 436114131 \NC 1540      \NC   6 \NC       1773 \NC 0.131416 \NC \NR 
  \NC 546694115 \NC 1460      \NC   6 \NC       1685 \NC 0.133531 \NC \NR 
  \NC 467026458 \NC 1058      \NC  36 \NC       1237 \NC 0.144705 \NC \NR
\stopTABLE
\stoptext

enter image description here

在幕后,ConTeXt 正在做一些与 Gonzalo Medina 的解决方案类似的事。但它提供了一个不错的键值驱动界面,可以向用户隐藏详细信息。

答案3

使用该包nicematrix,您可以定义以下新命令\Frame

\NewDocumentCommand{\Frame}{}{\Block[draw , line-width=2pt]{1-1}{}}

然后在环境内的单元中使用它NiceTabular

\Frame{cell content}

答案4

{NiceTabular}在的环境下nicematrix

在该环境中,内置命令\Block用于合并单元格并格式化生成的矩形。但是,也可以将其用于单个单元格。

这就是我们使用其键 所做的tikz。每次使用该键时,单元格的矩形都会在 Tikz 中使用作为 参数提供的键tikz

使用tikz=clip,我们剪切到单元格的矩形。

使用tikz={draw,line width=2pt},我们绘制框架。

\Frame我们已经编写了一个完成该工作的命令。

内置命令\RowStyle(的nicematrix) 将其参数应用于行的每个单元格。

\documentclass{article}
\usepackage{nicematrix,tikz}

\begin{document}

\NewDocumentCommand{\Frame}{}{\Block[tikz={draw,offset=0.5pt,line width= 1pt}]{1-1}{}}

\begin{NiceTabular}{ccccc}[hvlines]
\RowStyle{\bfseries}
ID & Raw Score & Num & Total Hits & Avg \\ 
217842950 & 8282 & 9 & 10059 & 0.176658 \\ 
\Frame 264307945 & 7700 & 13 & 11076 & 0.304803 \\ 
111824111 & 6170 & 16 & 9467 & 0.348262 \\ 
331180650 & 1705 & 31 & 2668 & 0.360945 \\ 
\RowStyle{\Frame}
436114131 & 1540 & 6 & 1773 & 0.131416 \\ 
546694115 & 1460 & 6 & 1685 & 0.133531 \\ 
467026458 & 1058 & 36 & 1237 & 0.144705 \\ 
\end{NiceTabular} 

\end{document}

您需要多次编译(因为nicematrix在后台使用 PGF/Tikz 节点)。

Output of the above code

相关内容