
Ich habe gelernt, wie man eine horizontale Linie mit variabler Breite erstellt mit\hlineaus dem LaTeX-Begleiter und mit\clineausHorizontales Lineal mit einstellbarer Höhe, das sich wie \cline{nm} verhältAber das Problem mit der horizontalen\clineist, dass die Regel in die Texte in den Zellen unter dem\cline. Jedoch,\hlinescheint dieses störende Problem nicht zu haben. Das minimale funktionierende Beispiel unten zeigt die Unterschiede.
\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}
Ein weiteres Problem bei der Verwendung\clinein der Definition der dicken horizontalen Linie (wolfgangoben) ist, dass ein\ZellenfarbeBefehl löscht den Teil der horizontalen Linie, der über der Zelle liegt, unabhängig davon, wie dick ich die Linie definiert habe.wolfgangzu sein. Verwenden\hlinein der Definition vonwolfgangDieses Problem tritt nicht auf, wenn in einer Zelle Farben verwendet werden.
Ich vermute, dass die vertikale Position, unterhalb derer sich das Territorium einer Zelle befindet, für\hlineund für\clineunterscheidet sich. Für\hlinebeginnt eine Zelle unterhalb der unteren Grenze der horizontalen Linie, während für\cline, eine Zelle beginnt unterhalb der oberen Grenze der Regel? Kann mich bitte jemand aufklären?
NOTIZ: Ich möchte variable Breite verwenden\cline(entweder dick oder dünn, wie im Beispiel gezeigt), aber ich möchte diese störenden Probleme vermeiden.
Antwort1
Beide Probleme hängen zusammen. \cline
muss mehrere \cline
s hintereinander unterstützen, zB:
\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}
Daher \cline
kann sich nicht wie nach unten bewegen \hline
, die Definition von \cline
ist ( 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}}
Im letzten Schritt \cline
kehrt man in die vertikale Ausgangsposition zurück.
Der vertikale Abstand für die Zeile kann jedoch nach dem \cline
„s“ hinzugefügt werden, zB:
\cline{...}\cline{...}\noalign{\vskip\arrayrulewidth}
Auf Ihr Beispiel angewendet, kann es zu Makro hinzugefügt werden \whline
. Dies behebt auch das Problem mit \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}
Antwort2
Hier ist Heikos Beispiel, in dem cals
als Alternative das Paket verwendet wird:
\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}
Antwort3
Eine alternative Lösung mit tblr
Umgebung vontabularray
Paket:
\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}
Antwort4
Das Paket nicematrix
stellt eine Umgebung bereit {NiceTabular}
, und in dieser Umgebung \cline
wurde der Befehl neu definiert, um dieses Verhalten zu ändern.
Ihr Code funktioniert also wie erwartet in {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}
Sie benötigen mehrere Kompilierungen (da nicematrix
PGF/Tikz-Knoten verwendet werden).