如何使用 dcolumn 表格格式和彩色值进行处理?

如何使用 dcolumn 表格格式和彩色值进行处理?

我发现这里此技巧用于格式化文本着色,以便与 d​​column 包一起使用。但是,它似乎粗略地重新定义了\DC@endright语句,并对具有多个字符的值给出了两个错误的行为:

1)垂直对齐不良

\rowcolor2)使用命令填充行颜色不正确

在此处输入图片描述

\documentclass{article}

\usepackage[table]{xcolor}
\usepackage{dcolumn}

\makeatletter
\def\DC@endright{$\hfil\egroup\@dcolcolor\box\z@\box\tw@\dcolreset}
\def\dcolcolor#1{\gdef\@dcolcolor{\color{#1}}}
\def\dcolreset{\dcolcolor{black}}
\dcolcolor{black}
\makeatother

\begin{document}

\begin{tabular}{|*{3}{D{.}{,}{1}|}}
\rowcolor{gray!20}  1 & 2 & 3 \\
\rowcolor{gray!50}  -1 & 2 & 3 \\
\rowcolor{gray!20}  1 & 22 & 3 \\
\rowcolor{gray!50}  1 & 2 & \dcolcolor{red}3.3 \\
\end{tabular}

\end{document}

正如您所测试的,如果您注释掉技巧行,这些问题就会消失。不过,我想修补它们,以便为单元格中的值着色。

笔记:垂直规则只是为了控制发生的事情。

答案1

dcolumn我建议你不要使用包,而是使用siunitx包。siunitx包提供了许多其他功能,其中包括S列类型,它允许在(隐式或显式)小数标记上对齐数字。

在此处输入图片描述

\documentclass{article}

\usepackage[spanish]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern,dcolumn}
\usepackage[table,svgnames]{xcolor}

%% New:
\usepackage{siunitx}
\sisetup{output-decimal-marker={,}}
\usepackage{etoolbox} % for "\robustify" macro
\robustify{\cellcolor}

\begin{document}

\begin{tabular}{|*{3}{D{.}{,}{1}|}}
\rowcolor{gray!20}  1 & 2 & 3 \\
\rowcolor{gray!50}  -1 & 2 & 3 \\
\rowcolor{gray!20}  1 & 22 & 3 \\
%\rowcolor{gray!20} 1 & 2 & \dcolcolor{red}3.3 \\
\rowcolor{gray!20}  1 & 2 & 3.3 \\
\end{tabular}

\smallskip vs.\par\smallskip
\begin{tabular}{|S[table-format=-1.0]
                 S[table-format=2.0]
                 S[table-format=1.1]|}
\rowcolor{gray!20}  1 &  2 & 3   \\
\rowcolor{gray!50} -1 &  2 & 3   \\
\rowcolor{gray!20}  1 & 22 & 3   \\
\rowcolor{gray!20}  1 &  2 & \cellcolor{pink}3.3 \\
\rowcolor{gray!20}  1 &  2 & 3.3 \\
\end{tabular}

\end{document}

答案2

自 v1.03dcolumn包开始添加新的符号D{.}{.}{n.m},其中 n,m 分别是小数点分隔符左边和右边的位数。

它解决了上述对齐问题,似乎是最简单的解决方案。因此,该siunitx包不是必需的。

此外,与前面引用的命令dcolumn兼容。datatool\excolloop

以下代码展示了不同的方法:

\documentclass{article}

\usepackage[table]{xcolor}
\usepackage{siunitx,dcolumn,datatool}

% first example configuration
\sisetup{output-decimal-marker = {,}} % optional for countries with a decimal comma

% needed in second example
\makeatletter
\def\DC@endright{$\hfil\egroup\@dcolcolor\box\z@\box\tw@\dcolreset}
\def\dcolcolor#1{\gdef\@dcolcolor{\color{#1}}}
\def\dcolreset{\dcolcolor{black}}
\dcolcolor{black}
\makeatother

% data for the third example
\begin{filecontents*}{datos.csv}
1,2,3
-1,2,3
1,22,3
1,2,3.3
\end{filecontents*}

\begin{document}

% first example
\begin{tabular}{|*{3}{S[table-format=2.1]|}}
\rowcolor{gray!20}  1 & 2 & 3 \\
\rowcolor{gray!50}  -1 & 2 & 3 \\
\rowcolor{gray!20}  1 & 22 & 3 \\
\rowcolor{gray!50}  1 & 2 & \color{red}3.3 \\
\end{tabular}

\bigskip

% second example
\begin{tabular}{|*{3}{D{.}{,}{2.1}|}}
\rowcolor{gray!20}  1 & 2 & 3 \\
\rowcolor{gray!50}  -1 & 2 & 3 \\
\rowcolor{gray!20}  1 & 22 & 3 \\
\rowcolor{gray!50}  1 & 2 & \dcolcolor{red}3.3 \\
\end{tabular}

\bigskip

% third example
\DTLloaddb[noheader]{tabla}{datos.csv}
\begin{tabular}{|*{3}{D{.}{,}{2.1}|}}
\rowcolor{gray!20}
\DTLforeach*{tabla}{\one=Column1,\two=Column2,\three=Column3}{%
    \one & \two & \DTLifeq{\three}{3.3}{\dcolcolor{red}}{}\three%
    \DTLiflastrow{}{\\ \DTLifoddrow{\rowcolor{gray!50}}{\rowcolor{gray!20}}}%   
    }\\
\end{tabular}

\end{document}

在此处输入图片描述

相关内容