如何不重复行中每个 tabularx 单元格的信息?

如何不重复行中每个 tabularx 单元格的信息?

这将生成一个 2x2 表格,其第一行是蓝色,带有白色文本,第二行是白色,带有黑色文本。虽然它可以正常工作,但它会\textcolor{white}在行的每个单元格中重复出现白色文本。有没有办法指定第一行的文本应该是白色的,而不必为该行的每个单元格重复指定它?在这个小例子中,这还不算太糟,但我担心在更大的表格上它会变得令人厌烦。

\documentclass{article}
\usepackage{tabularx}
\usepackage{ragged2e}        
\usepackage{colortbl}
\newcolumntype{L}{>{\raggedright\arraybackslash}X} 
\begin{document}
\begin{center}\Large
\noindent\begin{tabularx}{1\textwidth}{|L|L|}
\hline
% NEXT LINE REPEATS WHITE FOR EACH CELL
\rowcolor{blue}\textcolor{white}{Jan}&\textcolor{white}{Feb}\\ 
Mar&Apr\\ 
\hline
\end{tabularx}
\end{center}
\end{document}

编辑:这个问题已经被回答并被接受,答案直接针对tabularx问题示例代码中的环境,但从那时起我发现该tabu包可以做到这一点。

由于这涉及使用与原始问题中提供的包不同的包,因此我不会将其作为答案,而只是添加以下如何使用来实现此目的的示例,tabu以防有人对另一种方法感兴趣。

\documentclass{article}
\usepackage{tabu}
\usepackage{colortbl}
\begin{document}
\begin{center}\Large
\noindent\begin{tabu} to \textwidth{|X[l,m]|X[l,m]|}
\tabucline-
\rowfont{\color{white}}\rowcolor{blue}Jan&Feb\\ 
Mar&Apr\\ 
\tabucline-
\end{tabu}
\end{center}
\end{document}

答案1

\noalign不是受支持的 Latex 命令,但是......

\documentclass{article}
\usepackage{tabularx}
\usepackage{ragged2e}        
\usepackage{colortbl}
%\newcolumntype{L}{>{\rtcolor\raggedright\arraybackslash}X}
\newcolumntype{L}{>{\raggedright\arraybackslash\leavevmode\rtcolor\ignorespaces}X}
\def\rowtextcolor#1{\noalign{\gdef\rtcolor{\color{#1}}}}
\global\let\rtcolor\relax
\begin{document}
\begin{center}\Large
\noindent
\begin{tabularx}{1\textwidth}{|L|L|}
\hline
% NEXT LINE REPEATS WHITE FOR EACH CELL
\rowcolor{blue}\rowtextcolor{white}
Jan&Feb\\ 
\rowtextcolor{black}
Mar&Apr\\ 
\hline
\end{tabularx}
\end{center}
\end{document}

笔记:

第一个(注释掉的)版本将其放在列\color的隐式 parbox 的开头X。如颜色包文档中所述,这可能会对间距产生一些不良影响(但如果条目以垂直材料开头(例如 vspace 或显示列表),则这是最好的做法)。

如果条目只是文本,则第二个版本更好,它会在插入颜色命令之前开始段落,\leavevmode因此间距不受影响。

这些间距问题是 LaTeX 处理颜色方式所固有的,与表格代码无关。

相关内容