我正在用程序生成表格,但必须穿插样式和内容信息,这有点不方便。例如,在下面的注释中说明如何在数据中穿插。如果在下面的代码中的点或点处\cellcolor{red}
有一个或多个语句,表明在第 3 列、第 3-4 行中单元格应为红色,那么生成会更容易。这可以实现吗?%% A
%% B
\documentclass{article}
\usepackage{colortbl}
\usepackage[table]{xcolor}
\usepackage{tabu}
\begin{document}
\begin{center}
%% A
\begin{tabu}{XXXX}
%% B
1 & 2 & 3 & 4 \\
5 & 6 & 7 & 8 \\
9 & 10 & \cellcolor{red} 11 & 12 \\
13 & 14 & \cellcolor{red} 15 & 16 \\
17 & 18 & 19 & 20 \\
\end{tabu}
\end{center}
\end{document}
输出:
顺便说一句,我已经看过了这个问题这也是关于分离样式和内容,但据我所知,它并没有真正提供此处请求的上述示例的解决方案类型。
编辑:如果不清楚,这里是所需的代码类型:
\documentclass{article}
\usepackage{colortbl}
\usepackage[table]{xcolor}
\usepackage{tabu}
\begin{document}
\begin{center}
\begin{tabu}{XXXX}
\preCell{3}{3}{\cellcolor{red}} % specifies that row 3 col 3 is red
\preCell{4}{3}{\cellcolor{red}} % specifies that row 4 col 3 is red
1 & 2 & 3 & 4 \\
5 & 6 & 7 & 8 \\
9 & 10 & 11 & 12 \\
13 & 14 & 15 & 16 \\
17 & 18 & 19 & 20 \\
\end{tabu}
\end{center}
\end{document}
答案1
\multicolum
您可以做这样的事情,但一旦涉及它可能会中断:
\documentclass{article}
\usepackage{colortbl}
\usepackage[table]{xcolor}
\usepackage{tabu}
\begin{document}
\makeatletter
\newcommand\preCell[3]{\@namedef{tabstyle-#1-#2}{#3}}
\makeatother
\newcounter{rowcounter}
\newcounter{columncounter}
\begin{center}
\setcounter{rowcounter}{0}
\setcounter{columncounter}{0}
\preCell{3}{3}{\cellcolor{red}} % specifies that row 3 col 3 is red
\preCell{4}{3}{\cellcolor{red}} % specifies that row 4 col 3 is red
\begin{tabu}{>{\stepcounter{rowcounter}%
\setcounter{columncounter}{0}\stepcounter{columncounter}%
\csname tabstyle-\therowcounter-\thecolumncounter\endcsname}X
>{\stepcounter{columncounter}%
\csname tabstyle-\therowcounter-\thecolumncounter\endcsname}X
>{\stepcounter{columncounter}%
\csname tabstyle-\therowcounter-\thecolumncounter\endcsname}X
>{\stepcounter{columncounter}%
\csname tabstyle-\therowcounter-\thecolumncounter\endcsname}X}
1 & 2 & 3 & 4 \\
5 & 6 & 7 & 8 \\
9 & 10 & 11 & 12 \\
13 & 14 & 15 & 16 \\
17 & 18 & 19 & 20 \\
\end{tabu}
\end{center}
\end{document}
答案2
1. 所有细胞:
如果希望特定列中的所有单元格具有相同的格式,则可以使用这collcell
它允许您将每列的条目传递给命令以进行进一步处理:
或者你也可以使用这array
,并定义:
\newcolumntype{R}{>{\cellcolor{red}}X<{}}
2. 选择单元格:
如果您仅希望对选定数量的单元格进行着色,那么您可以使用其他命令,例如根据\ActivateColorCell
需要启用单元格着色和\DectivateColorCell
禁用单元格着色:
笔记:
- 我用了这
etoolbox
提供切换开关来测试是否启用了颜色,但如果需要,可以使用以下解决方案轻松调整它,不需要该包LaTeX 条件表达式。
代码:(collcell
所有单元格):
\documentclass{article}
\usepackage{collcell}
\usepackage{colortbl}
\usepackage[table]{xcolor}
\usepackage{tabu}
\newcommand{\ColorCellRed}[1]{\cellcolor{red}{#1}}
\newcolumntype{R}{>{\collectcell\ColorCellRed}X<{\endcollectcell}}
\begin{document}
\begin{center}
\begin{tabu}{XXRX}
1 & 2 & 3 & 4 \\
5 & 6 & 7 & 8 \\
9 & 10 & 11 & 12 \\
13 & 14 & 15 & 16 \\
17 & 18 & 19 & 20 \\
\end{tabu}
\end{center}
\end{document}
代码:(array
所有单元格):
\documentclass{article}
\usepackage{array}
\usepackage{colortbl}
\usepackage[table]{xcolor}
\usepackage{tabu}
\newcolumntype{R}{>{\cellcolor{red}}X<{}}
\begin{document}
\begin{center}
\begin{tabu}{XXRX}
1 & 2 & 3 & 4 \\
5 & 6 & 7 & 8 \\
9 & 10 & 11 & 12 \\
13 & 14 & 15 & 16 \\
17 & 18 & 19 & 20 \\
\end{tabu}
\end{center}
\end{document}
代码:(collcell
部分单元格):
\documentclass{article}
\usepackage{collcell}
\usepackage{colortbl}
\usepackage[table]{xcolor}
\usepackage{tabu}
\usepackage{etoolbox}
\newtoggle{EnableColorCell}
\togglefalse{EnableColorCell}
\newcommand*{\ActivateColorCell}{\global\toggletrue{EnableColorCell}}
\newcommand*{\DectivateColorCell}{\global\togglefalse{EnableColorCell}}
\newcommand{\ColorCellRed}[1]{%
\iftoggle{EnableColorCell}{%
\cellcolor{red}{#1}%
}{%
#1% no cell color as it is disabled
}%
}
\newcolumntype{R}{>{\collectcell\ColorCellRed}X<{\endcollectcell}}
\begin{document}
\begin{center}
\begin{tabu}{XXRX}
1 & 2 & 3 & 4 \\
5 & 6 & 7 & 8 \\\ActivateColorCell
9 & 10 & 11 & 12 \\
13 & 14 & 15 & 16 \\\DectivateColorCell
17 & 18 & 19 & 20 \\
\end{tabu}
\end{center}
\end{document}
代码:(array
部分单元格):
\documentclass{article}
\usepackage{array}
\usepackage{colortbl}
\usepackage[table]{xcolor}
\usepackage{tabu}
\usepackage{etoolbox}
\newtoggle{EnableColorCell}
\togglefalse{EnableColorCell}
\newcommand*{\ActivateColorCell}{\global\toggletrue{EnableColorCell}}
\newcommand*{\DectivateColorCell}{\global\togglefalse{EnableColorCell}}
\newcolumntype{R}{>{\iftoggle{EnableColorCell}{\cellcolor{red}}{}}X<{}}
\begin{document}
\begin{center}
\begin{tabu}{XXRX}
1 & 2 & 3 & 4 \\
5 & 6 & 7 & 8 \\\ActivateColorCell
9 & 10 & 11 & 12 \\
13 & 14 & 15 & 16 \\\DectivateColorCell
17 & 18 & 19 & 20 \\
\end{tabu}
\end{center}
\end{document}