
Итак, у меня есть очень простая таблица, которую я пытаюсь заставить работать. Идея в том, чтобы первый, второй и последний разделители столбцов/строк были толстыми и окрашенными в оттенок зеленого, а первый столбец и первая строка имели фон бледно-желтого цвета. В то же время мне все еще нужны обычные разделители столбцов/строк.
Однако мои первые попытки достичь этого результата столкнулись с тем, что я считаю несколькими небольшими проблемами. Если перечислить их, то самая главная проблема заключается в том, что разделители первого и второго столбцов выходят за пределы нижней части таблицы. Во-вторых, обычная \hline рисуется поверх вертикальных линий, хотя я бы предпочел последнее. В-третьих, изменение цвета ячеек рисует поверх частей разделителей, делая их тоньше в определенных местах. В-четвертых, обычные вертикальные линии не отображаются последовательно, если они окружены цветными ячейками.
Вот мой минимальный рабочий пример. Я использовал пакет xcolor для определения цветов и colortbl для добавления цветов в \hrule в newcommands и цвета в \newcolumntypes.
\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}
решение1
Вот версия с использованием tikz matrix
:
Поскольку вы написали только о \hline
и цветных вертикальных линиях, пожалуйста, имейте в виду, что с кодом ниже все цветные линии рисуются поверх черных линий. Это относится к вертикальной цветной линии, которая рисуется поверх черных линий, но также относится и к горизонтальной цветной линии.
\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}
Обновление с помощью \mymatcols
и\mymatrows
отсюда: С помощью вышеупомянутых команд максимальное количество столбцов и строк в этой матрице определяется автоматически. При изменении количества столбцов/строк в матрице зеленые линии также автоматически корректируются.
\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}
решение2
Для окраски разделителей столбцов
\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}
Для раскрашивания ячеек/контента
\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}
решение3
Вот что вы можете сделать {NiceTabular}
с nicematrix
.
Ключ hvlines
рисует {NiceTabular}
все правила (черным цветом).
Затем я использую Tikz для рисования зеленых линий, используя узлы PGF/Tiks, созданные nicematrix
под ячейками, строками и столбцами.
Код не зависит от количества строк и столбцов в таблице.
\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}
Вам нужно несколько компиляций (из-за узлов PGF/Tikz)