我想在具有列颜色但没有规则的表格中添加数字列 - 这意味着,似乎我无法使用\hline
。
如果我使用\cline{2-4}
规则,彩色列就会丢失。
我需要做什么?
暗示:当然,TikZ、nicematrix 等也有解决方案。但我想用尽可能基本的表格工具来实现这一点。
\documentclass[]{article}
\usepackage{colortbl}
\usepackage{xcolor}
\begin{document}
\definecolor{mygreen}{HTML}{B9D5A5}
\setlength\arrayrulewidth{0.8125pt} % seems to be needed...
\setlength\tabcolsep{1pt}% seems to be needed...
\newcolumntype{P}{>{\centering\arraybackslash}p{3mm}}
\newcolumntype{Q}{>{\columncolor{mygreen}}P}
\def\x{$\scriptstyle\times$}
\newcommand\No[1]{\footnotesize\texttt{#1}}
\newcommand\n[1]{\multicolumn{1}{r|}{\No{#1}}}
\begin{tabular}{r | P | P | Q |}
\multicolumn{1}{c}{}
& \multicolumn{1}{c}{\No{1.}}
& \multicolumn{1}{c}{\No{2.}}
& \multicolumn{1}{c}{\No{3.}} \\ \hline
\n{1} & & & \x \\ \hline % Problem here
\n{2} & & &\x \\ \cline{2-4}
\n{3} & & &\x \\ \cline{2-4}
\n{4} & & &\x \\ \cline{2-4}
\n{5} & & &\x \\ \cline{2-4}
\n{6} & & &\x \\ \cline{2-4}
\n{7} & & &\x \\ \cline{2-4}
\end{tabular}
\end{document}
答案1
您可以使用\hhline
(参见https://tex.stackexchange.com/a/252071/4427)。
\documentclass[]{article}
\usepackage{colortbl,hhline}
\usepackage{xcolor}
\definecolor{mygreen}{HTML}{B9D5A5}
\begin{document}
\begin{center} % will also keep settings local
\setlength\arrayrulewidth{0.8125pt} % seems to be needed...
\setlength\tabcolsep{1pt}% seems to be needed...
\newcolumntype{P}{w{c}{3mm}}% <--- THIS IS GOOD, p{3mm} isn't
\newcolumntype{Q}{>{\columncolor{mygreen}}P}
\newcommand{\x}{$\scriptstyle\times$}
\newcommand\No[1]{\footnotesize\texttt{#1}}
\begin{tabular}{r | P | P | Q |}
\multicolumn{1}{c}{}
& \multicolumn{1}{c}{\No{1.}}
& \multicolumn{1}{c}{\No{2.}}
& \multicolumn{1}{c}{\No{3.}} \\ \hhline{~|---}
\No{1} & & & \x \\ \hhline{~|---}
\No{2} & & & \x \\ \hhline{~|---}
\No{3} & & & \x \\ \hhline{~|---}
\No{4} & & & \x \\ \hhline{~|---}
\No{5} & & & \x \\ \hhline{~|---}
\No{6} & & & \x \\ \hhline{~|---}
\No{7} & & & \x \\ \hhline{~|---}
\end{tabular}
\end{center}
\end{document}
hhline
是任何发行版中必需的标准 LaTeX 软件包之一- 不要使用
\def
w{c}{3mm}
比>{\centering\arraybackslash}p{3mm}
- 我看不出有什么理由
\n
。
如果你将 的定义替换\x
为
\newcommand{\x}{$\vcenter{\hbox{$\scriptstyle\times$}}$}
答案2
使用{NiceTabular}
,nicematrix
您可以使用 键first-row
和first-col
,然后 键hvlines
要求绘制除所谓的“第一行”和“第一列”之外的所有规则。
\documentclass[]{article}
\usepackage{nicematrix}
\begin{document}
\definecolor{mygreen}{HTML}{B9D5A5}
\newcommand{\x}{$\scriptstyle \times$}
\setlength{\tabcolsep}{2pt}
\NiceMatrixOptions{code-for-first-col = \scriptsize}
\begin{NiceTabular}{cc>{\columncolor{mygreen}}c}[first-col,first-row,hvlines,color-inside]
& 1. & 2. & 3. \\
1 & & & \x \\
2 & & & \x \\
3 & & & \x \\
4 & & & \x \\
5 & & & \x \\
6 & & & \x \\
7 & & & \x \\
\end{NiceTabular}
\end{document}
您需要进行多次编译(因为nicematrix
在后台使用了 PGF/TikZ 节点)。
事实上,也可以通过输入\arabic{iRow}
的值来自动对行进行编号code-for-first-col
。
\documentclass[]{article}
\usepackage{nicematrix}
\begin{document}
\definecolor{mygreen}{HTML}{B9D5A5}
\newcommand{\x}{$\scriptstyle \times$}
\setlength{\tabcolsep}{2pt}
\NiceMatrixOptions{code-for-first-col = \scriptsize \arabic{iRow}}
\newcommand{\RowNumber}{\arabic{}}
\begin{NiceTabular}{cc>{\columncolor{mygreen}}c}[first-col,first-row,hvlines,color-inside]
& 1. & 2. & 3. \\
& & & \x \\
& & & \x \\
& & & \x \\
& & & \x \\
& & & \x \\
& & & \x \\
& & & \x \\
\end{NiceTabular}
\end{document}
输出是一样的。
答案3
您tabularray
可以自动化单元格内容(参见preto
选项):
\documentclass{article}
\usepackage{xcolor}
\definecolor{mygreen}{HTML}{B9D5A5}
\newcommand{\x}{$\scriptstyle\times$}
\usepackage{tabularray}
\UseTblrLibrary{counter}
\newcounter{mycountr}
\newcommand{\myr}{\stepcounter{mycountr}\arabic{mycountr}}
\newcounter{mycountc}
\newcommand{\myc}{\stepcounter{mycountc}\arabic{mycountc}}
\begin{document}
\begin{tblr}{
columns={.5cm, colsep=0pt},
rows={.5cm, rowsep=0pt},
cells={c,m},stretch=0,
hline{2-Z}={2-Z}{wd=0.8125pt},
vline{2-Z}={2-Z}{wd=0.8125pt},
cell{1}{2-4}={preto={\myr .}, font=\footnotesize\ttfamily},
cell{2-Z}{1}={preto={\myc}, font=\footnotesize\ttfamily},
cell{2-Z}{4}={preto={\x}, bg=mygreen},
}
& & & \\
& & & \\
& & & \\
& & & \\
& & & \\
& & & \\
& & & \\
& & & \\
\end{tblr}
\end{document}