在 tabularx 环境中仅为文本着色

在 tabularx 环境中仅为文本着色

编辑:这个问题与这个问题相关:如何使用 numprint 仅改变数字(而不是单位)的颜色?

我尝试了给出的解决方案这里,但它会放大表格的行距,如下面的屏幕截图中的第二个示例所示。

capture

\documentclass{article}
\usepackage{amsmath,numprint,tabularx,xcolor}

\begin{document}

Tabularx table \textbf{without} any color: \textbf{the spacing is normal.}


\begin{tabularx}{5cm}{|*{11}{X|}}
\hline
\multicolumn{2}{|c|}{$\rm m^2$} & 
\multicolumn{2}{c|}{$\rm dm^2$} & 
\multicolumn{2}{c|}{$\rm cm^2$} & 
\multicolumn{2}{c|}{$\rm mm^2$} \\
\hline
&&&4,&&&& \\
&&&4&0&0&0& 0,\\
&0,&0&4&&&& \\
\hline
\end{tabularx}
\bigskip

Tabularx table \textbf{with} colors: \textbf{the line spacing is enlarged.}

\begin{tabularx}{5cm}{|*{11}{>{\color{blue}}X|}}
\hline
\multicolumn{2}{|c|}{$\rm m^2$} & 
\multicolumn{2}{c|}{$\rm dm^2$} & 
\multicolumn{2}{c|}{$\rm cm^2$} & 
\multicolumn{2}{c|}{$\rm mm^2$} \\
\hline
&&&4,&&&& \\
&&&4&0&0&0& 0,\\
&0,&0&4&&&& \\
\hline
\end{tabularx}
\bigskip


Table with individually placed colours. \textbf{No problem at all.}

\begin{tabularx}{5cm}{|*{11}{X|}}
\hline
\multicolumn{2}{|c|}{$\rm m^2$} & 
\multicolumn{2}{c|}{$\rm dm^2$} & 
\multicolumn{2}{c|}{$\rm cm^2$} & 
\multicolumn{2}{c|}{$\rm mm^2$} \\
\hline
&&&\textcolor{blue}{4,}&&&& \\
&&&\textcolor{blue}{4}&\textcolor{blue}{0}&\textcolor{blue}{0}&\textcolor{blue}{0}& \textcolor{blue}{0},\\
&\textcolor{blue}{0,}&\textcolor{blue}{0}&\textcolor{blue}{4}&&&& \\
\hline
\end{tabularx}

\end{document}

如何只给文本着色而不给表格的其余部分着色?

答案1

正如解释的那样表格中单元格高度的颜色变化使用 p 选项时,Xcolor 会破坏表格单元格对齐\color命令可以在段落之间使用,因此不会切换 TeX 所处的模式。这意味着在表中,命令\colour被添加到垂直列表中,并且颜色实际上从包含单元格内容的段落“之前”开始,并留下一些垂直空间。

\leavevmode如果在命令前添加,\color则会强制 TeX 退出垂直模式,并使颜色从单元格内容的段落开头开始。由于垂直列表为空,因此不会插入垂直空间。

\documentclass{article}
\usepackage{xcolor}
\usepackage{tabularx}
\usepackage{siunitx}

\begin{document}
Tabularx table \textbf{with} colors and \texttt{\string\leavevmode}: \textbf{normal again.}

\begin{tabularx}{5cm}{|*{11}{>{\leavevmode\color{blue}}X|}}
\hline
\multicolumn{2}{|c|}{\si{\metre\squared}} & 
\multicolumn{2}{c|}{\si{\deci\metre\squared}} & 
\multicolumn{2}{c|}{\si{\centi\metre\squared}} & 
\multicolumn{2}{c|}{\si{\milli\metre\squared}} \\
\hline
&&&4,&&&& \\
&&&4&0&0&0& 0,\\
&0,&0&4&&&& \\
\hline
\end{tabularx}
\end{document}

喜欢克里斯蒂安·胡普弗他的回答我建议siunitx至少使用单位(如果只是为了摆脱双字母字体命令\rm,请参阅双字母字体样式命令 (\bf,\it,...) 会在 LaTeX 中复活吗?)。

答案2

初步解决的办法是,使用siunitx和正则tabular代替tabularx并应用S-columntype。

-columntypeS的优点是可以对齐小数,并且可以采用适当的数字格式。

number-color=选项仅对数字进行着色,为了防止单位幂也被着色,请使用power-font=unit,为了将逗号保留为小数标记,请使用copy-decimal-marker

请注意|,即垂直线在表格的设计和可读性方面是有争议的,但我将它们保留在里面。

\documentclass{article}
\usepackage{amsmath,xcolor}

\usepackage{siunitx}

\sisetup{number-color=blue,power-font=unit,copy-decimal-marker}

\begin{document}

Tabularx table \textbf{without} any color: \textbf{the spacing is normal.}


\begin{tabular}{|*{8}{S|}}
\hline
\multicolumn{2}{|c|}{\si{\metre\squared}} & 
\multicolumn{2}{c|}{\si{\deci\metre\squared}} & 
\multicolumn{2}{c|}{\si{\centi\metre\squared}} & 
\multicolumn{2}{c|}{\si{\milli\metre\squared}} \tabularnewline
\hline
&&&4,&&&& \tabularnewline
&&&4&0&0&0& 0,\tabularnewline
&0&0&4&&&& \tabularnewline
\hline
\end{tabular}
\bigskip
\end{document}

enter image description here

相关内容