我已经学会了如何使用\hline来自 LaTeX 伴侣和\克莱恩从高度可调的水平线,行为类似 \cline{nm}.但水平方向的问题\克莱恩规则侵入了\克莱恩。 然而,\hline似乎没有这个烦人的问题。下面的最小工作示例显示了差异。
\documentclass{article}
\usepackage{array}
\begin{document}
\newcolumntype{I}{!{\vrule width 3pt}}
\newlength\savedwidth
\newcommand\whline{\noalign{\global\savedwidth\arrayrulewidth\global\arrayrulewidth 6pt}%
\hline
\noalign{\global\arrayrulewidth\savedwidth}}
\begin{tabular}{|cIc|c|}\hline
A & B & C \\ \hline
X & Y & Z \\ \whline
100 & 10 & 1 \\ \hline
\end{tabular}
\renewcommand\whline[1]{\noalign{\global\savedwidth\arrayrulewidth\global\arrayrulewidth 6pt}%
\cline{#1}
\noalign{\global\arrayrulewidth\savedwidth}}
\begin{tabular}{|cIc|c|}\hline
A & B & C \\ \hline
X & Y & Z \\ \whline{1-3}
100 & 10 & 1 \\ \hline
\end{tabular}
\end{document}
使用的另一个问题\克莱恩在粗水平线的定义中(惠林以上)是\单元格颜色命令将清除单元格上方的水平线部分,无论我将惠林是。使用\hline在定义中惠林在单元格中使用颜色不会导致此问题。
我怀疑垂直位置,从细胞的领土开始,对于\hline以及\克莱恩不同。对于\hline,单元格从水平线的底部边界以下开始,而对于\克莱恩单元格从规则顶部边界以下开始?有人能告诉我吗?
笔记:我确实想使用可变宽度\克莱恩(像例子所示的那样厚或薄),但我想避免这些侵入问题。
答案1
这两个问题是相关的。\cline
必须\cline
连续支持几个,例如:
\documentclass{article}
\begin{document}
\begin{tabular}{*{5}{c}}
1 & 2 & 3 & 4 & 5\\
\cline{1-1}\cline{3-3}\cline{5-5}
A & B & C & D & E
\end{tabular}
\end{document}
因此\cline
不能像 那样向下移动\hline
, 的定义\cline
是 ( latex.ltx
):
\def\cline#1{\@cline#1\@nil}
\def\@cline#1-#2\@nil{%
\omit
\@multicnt#1%
\advance\@multispan\m@ne
\ifnum\@multicnt=\@ne\@firstofone{&\omit}\fi
\@multicnt#2%
\advance\@multicnt-#1%
\advance\@multispan\@ne
\leaders\hrule\@height\arrayrulewidth\hfill
\cr
\noalign{\vskip-\arrayrulewidth}}
最后一步\cline
回到原来的垂直位置。
但是可以在 s 后添加行的垂直空间\cline
,例如:
\cline{...}\cline{...}\noalign{\vskip\arrayrulewidth}
应用于您的示例,可以将其添加到宏中\whline
。这也解决了以下问题\cellcolor
:
\documentclass{article}
\usepackage{array}
\usepackage{colortbl}
\begin{document}
\newcolumntype{I}{!{\vrule width 3pt}}
\newlength\savedwidth
\newcommand\whline[1]{%
\noalign{%
\global\savedwidth\arrayrulewidth\global\arrayrulewidth 6pt%
}%
\cline{#1}%
\noalign{\vskip\arrayrulewidth}%
\noalign{\global\arrayrulewidth\savedwidth}%
}
\begin{tabular}{|cIc|c|}\hline
A & B & C \\ \hline
X & \cellcolor{red}Y & Z \\ \whline{1-3}
\cellcolor{green}100 & 10 & 1 \\ \hline
\end{tabular}
\end{document}
答案2
以下是 Heiko 使用cals
包作为替代的示例:
\documentclass{article}
\usepackage{xcolor}
\usepackage{cals}
\begin{document}
\begin{calstable}
\colwidths{{10mm}{10mm}{10mm}}
\makeatletter
\brow
\cell{A}
\def\cals@borderL{2pt}\cell{B}\let\cals@borderL=\relax
\cell{C}
\erow
\brow
\def\cals@borderB{3pt}
\cell{X}
\def\cals@borderL{2pt}\def\cals@bgcolor{red}
\cell{Y}\let\cals@borderL=\relax\def\cals@bgcolor{}
\cell{Z}
\erow
\let\cals@borderB=\relax
\brow
\def\cals@bgcolor{green}\cell{100}\def\cals@bgcolor{}
\def\cals@borderL{2pt}\cell{10}\let\cals@borderL=\relax
\cell{1}
\erow
\end{calstable}
\end{document}
答案3
tblr
环境的替代解决方案tabularray
包裹:
\documentclass{article}
\usepackage{tabularray}
\begin{document}
\begin{tblr}{|c|[3pt]c|c|}
\hline
A & B & C \\
\cline[3pt]{1-2}
X & Y & Z \\
\hline[6pt]
100 & 10 & 1 \\
\hline
\end{tblr}
\end{document}
答案4
该包nicematrix
提供了一个环境{NiceTabular}
,并且在这个环境中,命令\cline
已被重新定义以改变该行为。
因此,您的代码可以按预期工作{NiceTabular}
。
\documentclass{article}
\usepackage{nicematrix}
\begin{document}
\newcolumntype{I}{!{\vrule width 3pt}}
\newlength\savedwidth
\newcommand\whline[1]
{\noalign{\global\savedwidth\arrayrulewidth\global\arrayrulewidth 6pt}%
\cline{#1}
\noalign{\global\arrayrulewidth\savedwidth}}
\begin{NiceTabular}{|cIc|c|}
\hline
A & B & C \\ \hline
X & Y & Z \\ \whline{1-3}
100 & 10 & 1 \\ \hline
\end{NiceTabular}
\end{document}
您需要多次编译(因为nicematrix
使用 PGF/Tikz 节点)。