
He llegado a aprender cómo hacer una regla horizontal de ancho variable con\hlinedel compañero LaTeX y con\clinadeRegla horizontal con altura ajustable que se comporta como \cline{nm}. Pero el problema con la horizontal.\clinaes que la regla se entromete en los textos de las celdas debajo del\clina. Sin embargo,\hlineNo parece tener este problema de intrusión. El ejemplo de trabajo mínimo a continuación muestra las diferencias.
\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}
Otro problema con el uso\clinaen la definición de la regla horizontal gruesa (línea blancaarriba) es que un\cellcolorEl comando borrará la parte de la regla horizontal que está encima de la celda, sin importar qué tan gruesa haya definido lalínea blancaser. Usando\hlineen la definición delínea blancano causa este problema con el uso de colores en una celda.
Sospecho que la posición vertical, comenzando debajo de la cual está el territorio de una celda, por ejemplo\hliney para\clinadifiere. Para\hline, una celda comienza debajo del límite inferior de la regla horizontal, mientras que para\clina, ¿una celda comienza debajo del límite superior de la regla? ¡Alguien que me ilumine por favor!
NOTA: Quiero usar ancho variable\clina(ya sea grueso o delgado como se muestra en el ejemplo), pero quiero evitar estos problemas molestos.
Respuesta1
Ambos problemas están relacionados. \cline
tiene que soportar varios \cline
s seguidos, por ejemplo:
\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}
Por lo tanto, \cline
no puede moverse hacia abajo como \hline
, la definición de \cline
es ( 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}}
En el último paso \cline
vuelve a la posición vertical original.
Pero el espacio vertical para la línea se puede agregar después de la \cline
s, por ejemplo:
\cline{...}\cline{...}\noalign{\vskip\arrayrulewidth}
Aplicado a su ejemplo, se puede agregar a macro \whline
. Esto también soluciona el problema con \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}
Respuesta2
Aquí está el ejemplo de Heiko usando cals
el paquete como alternativa:
\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}
Respuesta3
Una solución alternativa con tblr
entorno detabularray
paquete:
\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}
Respuesta4
El paquete nicematrix
proporciona un entorno {NiceTabular}
y, en este entorno, el comando \cline
se ha redefinido para cambiar ese comportamiento.
Entonces, su código funciona como se esperaba en {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}
Necesita varias compilaciones (porque nicematrix
usa nodos PGF/Tikz).