带有彩色单元格和虚线的表格

带有彩色单元格和虚线的表格

我想绘制一个带有一些彩色单元格和虚线水平线的表格。这是我第一次使用该colortbl包和arydshln包的尝试:

\documentclass[12pt]{article}
\usepackage{colortbl}
\usepackage{arydshln}
\begin{document}
\begin{tabular}[t]{|l|c|c|c|c|c|}
\cline{1-4} \cdashline{5-5} \cline{6-6}
& $b_1$ & $b_2$ & $b_3$ & \hspace{0.4in} & $b_n$\\
\cline{1-4} \cdashline{5-5} \cline{6-6}
$a_1$ & \cellcolor[gray]{0.85} & & & &\\
\cline{1-4} \cdashline{5-5} \cline{6-6}
$a_2$ & & \cellcolor[gray]{0.85} & & &\\
\cline{1-4} \cdashline{5-5} \cline{6-6}
$a_3$ & & & \cellcolor[gray]{0.85}  & &\\
\cline{1-4} \cdashline{5-5} \cline{6-6}
\multicolumn{1}{:c:}{} & \multicolumn{1}{c:}{} & \multicolumn{1}{c:}{} & \multicolumn{1}{c:}{} & \multicolumn{1}{c:}{} & \multicolumn{1}{c:}{}\\
\multicolumn{1}{:c:}{} & \multicolumn{1}{c:}{} & \multicolumn{1}{c:}{} & \multicolumn{1}{c:}{} & \multicolumn{1}{c:}{} & \multicolumn{1}{c:}{}\\
\cline{1-4} \cdashline{5-5} \cline{6-6}
$a_n$ & & & & & \cellcolor[gray]{0.85}\\
\cline{1-4} \cdashline{5-5} \cline{6-6}
\end{tabular}
\end{document}

在此处输入图片描述

问题是彩色单元格上方的线条消失了,正如这里其他问题中已经注意到的那样。我从这些问题的答案中了解到我应该使用该hhline软件包,所以这是我的第二次尝试:

\documentclass[12pt]{article}
\usepackage{colortbl}
\usepackage{arydshln}
\usepackage{hhline}
\begin{document}
\begin{tabular}[t]{|l|c|c|c|c|c|}
\cdashline{5-5} \hhline{----~-}
& $b_1$ & $b_2$ & $b_3$ & \hspace{0.4in} & $b_n$\\
\cdashline{5-5} \hhline{----~-}
$a_1$ & \cellcolor[gray]{0.85} & & & &\\
\cdashline{5-5} \hhline{----~-}
$a_2$ & & \cellcolor[gray]{0.85} & & &\\
\cdashline{5-5} \hhline{----~-}
$a_3$ & & & \cellcolor[gray]{0.85} & &\\
\cdashline{5-5} \hhline{----~-}
\multicolumn{1}{:c:}{} & \multicolumn{1}{c:}{} & \multicolumn{1}{c:}{} & \multicolumn{1}{c:}{} & \multicolumn{1}{c:}{} & \multicolumn{1}{c:}{}\\
\multicolumn{1}{:c:}{} & \multicolumn{1}{c:}{} & \multicolumn{1}{c:}{} & \multicolumn{1}{c:}{} & \multicolumn{1}{c:}{} & \multicolumn{1}{c:}{}\\
\cdashline{5-5} \hhline{----~-}
$a_n$ & & & & & \cellcolor[gray]{0.85}\\
\cdashline{5-5} \hhline{----~-}
\end{tabular}
\end{document}

在此处输入图片描述

因此,我成功地在彩色单元格上方添加了线条,但现在最上行的垂直线变短了。(似乎每行的垂直尺寸都增加了一点,但垂直线在连接到最底线时保持不变;您可以通过比较两个版本中垂直虚线的外观来看到这一点。)通过谷歌搜索,我发现了软件包arydshlnhhline软件包不兼容的信息。有人知道解决方法吗?

答案1

我只是忍不住提出一个基于 TikZ 的解决方案:

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{matrix}

\begin{document}

\tikzset{ 
table/.style={
  matrix of math nodes,
  row sep=-\pgflinewidth,
  column sep=-\pgflinewidth,
  nodes={rectangle,draw,text width=2em,align=center},
  text depth=1ex,
  text height=2.2ex,
  nodes in empty cells,
},
column 5/.style={nodes={draw=none}},
row 5/.style={nodes={draw=none}},
}

\begin{tikzpicture}

\matrix (mat) [table]
{
& b_1 & b_2 & b_3 & & [1.5cm,between origins] b_n \\
a_1 & |[fill=gray!30]| & & & & \\
a_2 & & |[fill=gray!30]| & & & \\
a_3 & & & |[fill=gray!30]| & & \\
 & & & & & & \\[1.5cm,between origins]
a_n & & & & & |[fill=gray!30]| \\
};
\foreach \i in {1,...,6}
  \draw[dashed] ([xshift=0.5*\pgflinewidth]mat-4-\i.south west) -- ([xshift=0.5*\pgflinewidth]mat-6-\i.north west); 
\draw[dashed] ([xshift=-0.5*\pgflinewidth]mat-4-6.south east) -- ([xshift=-0.5*\pgflinewidth]mat-6-6.north east); 
\foreach \i in {1,...,6}
  \draw[dashed] ([yshift=-0.5*\pgflinewidth]mat-\i-5.north west) -- ([yshift=-0.5*\pgflinewidth]mat-\i-6.north west); 
\draw[dashed] ([yshift=0.5*\pgflinewidth]mat-6-5.south west) -- ([yshift=0.5*\pgflinewidth]mat-6-6.south west); 
\end{tikzpicture}

\end{document}

在此处输入图片描述

答案2

由于问题仅仅出在第一行,一个不太好的解决方法可能是创建第一个幻影行:

\vspace{12pt} & & & & & \\[-12pt]

在此处输入图片描述

完整代码:

\documentclass[12pt]{article}
\usepackage{colortbl}
\usepackage{arydshln}
\usepackage{booktabs}
\usepackage{hhline}
\begin{document}
\begin{tabular}[t]{|l|c|c|c|c|c|}%
\vspace{12pt} & & & & & \\[-12pt]
\cdashline{5-5}\hhline{----~-}
& $b_1$ & $b_2$ & $b_3$ & \hspace{0.4in} & $b_n$\\
\cdashline{5-5} \hhline{|----~-|}
$a_1$ & \cellcolor[gray]{0.85} & & & &\\
\cdashline{5-5} \hhline{|----~-|}
$a_2$ & & \cellcolor[gray]{0.85} & & &\\
\cdashline{5-5} \hhline{|----~-|}
$a_3$ & & & \cellcolor[gray]{0.85} & &\\
\cdashline{5-5} \hhline{|----~-|}
\multicolumn{1}{:c:}{} & \multicolumn{1}{c:}{} & \multicolumn{1}{c:}{} & \multicolumn{1}{c:}{} & \multicolumn{1}{c:}{} & \multicolumn{1}{c:}{}\\
\multicolumn{1}{:c:}{} & \multicolumn{1}{c:}{} & \multicolumn{1}{c:}{} & \multicolumn{1}{c:}{} & \multicolumn{1}{c:}{} & \multicolumn{1}{c:}{}\\
\cdashline{5-5} \hhline{|----~-|}
$a_n$ & & & & & \cellcolor[gray]{0.85}\\
\cdashline{5-5} \hhline{|----~-|}
\end{tabular}
\end{document}

答案3

使用新的 LaTeX3 包很容易tabularray制作虚线段和单元格颜色:

\documentclass[12pt]{article}
\usepackage{tabularray}
\usepackage{xcolor}
\begin{document}

$\begin{tblr}{
  hlines = {1-4,6}{solid}, hlines = {5}{dashed},  
  vlines = {1-4,6}{solid}, vlines = {5}{dashed},
  row{5} = {0.4in}, column{5} = {0.4in},
  cell{2}{2} = {gray}, cell{3}{3} = {gray},
  cell{4}{4} = {gray}, cell{6}{6} = {gray},
}
    & b_1 & b_2 & b_3 &  & b_n \\
a_1 &     &     &     &  &     \\
a_2 &     &     &     &  &     \\
a_3 &     &     &     &  &     \\
    &     &     &     &  &     \\
a_n &     &     &     &  &     \\
\end{tblr}$

\end{document}

在此处输入图片描述

答案4

使用{NiceTabular}nicematrixTikz。

\documentclass{article}
\usepackage{nicematrix,tikz}

\begin{document}

\begin{NiceTabular}{ccccw{c}{1cm}c}[colortbl-like]
\Block[hvlines]{4-4}{}
    & $b_1$ & $b_2$ & $b_3$ & & \Block[hvlines]{4-1}{} $b_n$ \\
$a_1$ & \cellcolor{gray} \\
$a_2$ & & \cellcolor{gray} \\
$a_3$ & & & \cellcolor{gray} \\
\\[8mm]
\Block[hvlines]{1-4}{}
$a_n$ & & & & & \Block[hvlines]{}{} \cellcolor{gray}
\CodeAfter
  \begin{tikzpicture} [dashed]
   \foreach \i in {1,...,7}
     { 
       \draw (\i-|5) -- (\i-|6) ; 
       \draw (5-|\i) -- (6-|\i) ; 
     }
  \end{tikzpicture}
\end{NiceTabular}

\end{document}

您需要多次编译。

上述代码的输出

相关内容