
Ich habe also eine sehr einfache Tabelle, die ich zum Laufen bringen möchte. Die Idee ist, dass die Trennlinien für die erste, zweite und letzte Spalte/Zeile dick und in einem Grünton gefärbt sind, während die erste Spalte und die erste Zeile einen hellgelben Hintergrund haben. Gleichzeitig brauche ich immer noch normale Spalten-/Zeilentrennlinien.
Meine ersten Versuche, dieses Ergebnis zu erzielen, stießen jedoch auf mehrere kleinere Probleme. Das größte Problem ist, dass die Trennlinien der ersten und zweiten Spalte unter den unteren Rand der Tabelle reichen. Zweitens überzieht die normale \hline die vertikalen Linien, obwohl ich letztere bevorzugen würde. Drittens werden beim Ändern der Zellenfarbe Teile der Trennlinien überzogen, sodass sie an bestimmten Stellen dünner erscheinen. Viertens werden die normalen vertikalen Linien nicht konsistent angezeigt, wenn sie von farbigen Zellen umrandet sind.
Hier ist mein minimales funktionierendes Beispiel. Ich habe das xcolor-Paket verwendet, um die Farben zu definieren, und colortbl, um Farben zu \hrule in den neuen Befehlen und Farbe zu \newcolumntypes hinzuzufügen.
\documentclass[10pt]{article}
\usepackage{xcolor}
\usepackage{colortbl}
\definecolor{forestgreen}{RGB}{ 39, 159, 39}
\definecolor{paleyellow}{RGB}{ 255, 255, 212}
\newcommand{\ywl}{\cellcolor{paleyellow}}
\newcommand{\grline}{\noalign{\color{forestgreen}\hrule height 1.6pt}}
\newcolumntype{(}{@{\color{forestgreen}\vrule width 1.6pt\hskip\tabcolsep}}
\newcolumntype{"}{@{\hskip\tabcolsep\color{forestgreen}\vrule width 1.6pt\hskip\tabcolsep}}
\newcolumntype{)}{@{\hskip\tabcolsep\color{forestgreen}\vrule width 1.6pt}}
\begin{document}
\begin{tabular}{(c"c|c|c|c)}
\grline
\ywl &\ywl 0 &\ywl a &\ywl b &\ywl c \\
\grline
\ywl 0 & 0 & 0 & 0 & 0 \\
\hline
\ywl a & 0 & a & b & c \\
\hline
\ywl b & 0 & 0 & 0 & 0 \\
\hline
\ywl c & 0 & a & b & c \\
\grline
\end{tabular}
\end{document}
Antwort1
Hier ist eine Version mit einem tikz matrix
:
Da Sie nur über \hline
die farbigen vertikalen Linien geschrieben haben, beachten Sie bitte, dass mit dem folgenden Code alle farbigen Linien über den schwarzen Linien gezeichnet werden. Dies gilt für die vertikale farbige Linie, die über den kreuzenden schwarzen Linien gezeichnet wird, aber auch für die horizontale farbige Linie.
\documentclass{article}
\usepackage{xcolor}
\definecolor{forestgreen}{RGB}{ 39, 159, 39}
\definecolor{paleyellow}{RGB}{ 255, 255, 212}
\usepackage{tikz}
\usetikzlibrary{matrix}
\begin{document}
\begin{tikzpicture}[cell/.style={rectangle,draw=black}, nodes in empty cells]
\matrix(table)[
matrix of nodes,
row sep =-\pgflinewidth,
column sep = -\pgflinewidth,
nodes={anchor=center,text height=2ex,text depth=0.25ex, minimum width=2em, draw=black},
column 1/.style = {nodes={fill=paleyellow}},
row 1/.style={nodes={fill=paleyellow}},
]
{
& 0 & a & b & c \\
0 & 0 & 0 & 0 & 0 \\
a & 0 & a & b & c \\
b & 0 & 0 & 0 & 0 \\
c & 0 & a & b & c \\
};
\draw[line width=1.6pt, forestgreen](table-1-1.north west)--(table-1-5.north east) -- (table-5-5.south east) -- (table-5-1.south west) -- cycle;
\draw[line width=1.6pt, forestgreen](table-1-1.north east)--(table-5-1.south east) ;
\draw[line width=1.6pt, forestgreen](table-1-1.south west)--(table-1-5.south east) ;
\end{tikzpicture}
\end{document}
Aktualisieren mit \mymatcols
und\mymatrows
von hier: Mit den zuvor genannten Befehlen wird die maximale Anzahl von Spalten und Zeilen in der Matrix automatisch bestimmt. Beim Ändern der Anzahl von Spalten/Zeilen in der Matrix werden auch die grün gefärbten Linien automatisch angepasst.
\documentclass{article}
\usepackage{xcolor}
\definecolor{forestgreen}{RGB}{ 39, 159, 39}
\definecolor{paleyellow}{RGB}{ 255, 255, 212}
\usepackage{tikz}
\usetikzlibrary{matrix}
\makeatletter
\tikzset{store number of columns in/.style={execute at end matrix={
\xdef#1{\the\pgf@matrix@numberofcolumns}}},
store number of rows in/.style={execute at end matrix={
\xdef#1{\the\pgfmatrixcurrentrow}}}}
\makeatother
\begin{document}
\begin{tikzpicture}[cell/.style={rectangle,draw=black}, nodes in empty cells]
\matrix(table)[
matrix of nodes,
row sep =-\pgflinewidth,
column sep = -\pgflinewidth,
nodes={anchor=center,text height=2ex,text depth=0.25ex, minimum width=2em, draw=black},
column 1/.style = {nodes={fill=paleyellow}},
row 1/.style={nodes={fill=paleyellow}},
store number of columns in=\mymatcols,
store number of rows in=\mymatrows
]
{
& 0 & a & b & c \\
0 & 0 & 0 & 0 & 0 \\
a & 0 & a & b & c \\
b & 0 & 0 & 0 & 0 \\
c & 0 & a & b & c \\
};
\draw[line width=1.6pt, forestgreen](table-1-1.north west)--(table-1-\mymatcols.north east) -- (table-\mymatcols-\mymatrows.south east) -- (table-\mymatrows-1.south west) -- cycle;
\draw[line width=1.6pt, forestgreen](table-1-1.north east)--(table-\mymatrows-1.south east) ;
\draw[line width=1.6pt, forestgreen](table-1-1.south west)--(table-1-\mymatcols.south east) ;
\end{tikzpicture}
\end{document}
Antwort2
Zum Einfärben der Spaltentrenner
\documentclass{article}
\usepackage{hhline,colortbl}
\begin{document}
\arrayrulecolor{green}
\arrayrulewidth=2mm
\begin{tabular}{
!{\color{red}\vrule width 2pt}
l
|
c
!{\color{blue}\vrule width 2pt}
c
||
}
one & two & three\\
\hline
1 & 2 & 3\\%
\noalign{
\color{yellow}
\hrule height 5pt
}%
4&5&6\\
\hline
\end{tabular}
\end{document}
Zum Einfärben der Zellen/Inhalte
\documentclass{article}
\usepackage[svgnames,table]{xcolor}% note the table option
\usepackage{booktabs}
\renewcommand{\arraystretch}{2}
\makeatletter
\newcommand*{\minuscellcolor}{}
\def\minuscellcolor\ignorespaces{%
% \ignorespaces not really needed, because \@ifnextchar gobbles spaces
\@ifnextchar{T}{\cellcolor{green!40}}{}%
}
\newcolumntype{C}{>{\minuscellcolor}c}
\makeatother
\begin{document}
\begin{center}
\begin{tabular}{*{8}C} \toprule\rowcolor{gray!30}
p & q & p & $\vee$ & [$\neg$ & (p & $\wedge$ & q)] \\
T & T & T & T & F & T & T & T \\
T & F & T & T & T & T & F & F \\
F & T & F & T & T & F & F & T \\
F & F & F & T & T & F & F & F \\ \bottomrule
\end{tabular}
\end{center}
\end{document}
Antwort3
Folgendes können Sie mit {NiceTabular}
tun nicematrix
.
Der Schlüssel hvlines
zum {NiceTabular}
Zeichnen aller Regeln (in Schwarz).
nicematrix
Dann verwende ich Tikz, um die grünen Regeln zu zeichnen, indem ich die unter den Zellen, Zeilen und Spalten erstellten PGF/Tiks-Knoten verwende .
Der Code ist unabhängig von der Anzahl der Zeilen und Spalten in der Tabelle.
\documentclass[10pt]{article}
\usepackage{xcolor}
\usepackage{nicematrix,tikz}
\definecolor{forestgreen}{RGB}{ 39, 159, 39}
\definecolor{paleyellow}{RGB}{ 255, 255, 212}
\begin{document}
\begin{NiceTabular}{ccccc}[hvlines]
\CodeBefore
\rowcolor{paleyellow}{1}
\columncolor{paleyellow}{1}
\Body
& 0 & a & b & c \\
0 & 0 & 0 & 0 & 0 \\
a & 0 & a & b & c \\
b & 0 & 0 & 0 & 0 \\
c & 0 & a & b & c \\
\CodeAfter
\tikz [forestgreen, line width = 1pt]
\draw (1-|1) rectangle (last-|last)
(1-|2) -- (last-|2)
(2-|1) -- (2-|last) ;
\end{NiceTabular}
\end{document}
Sie benötigen mehrere Kompilierungen (aufgrund der PGF/Tikz-Knoten)