我想排版一个表格,其中某些数字将显示为红色。为了实现正确的对齐,我使用了 dcolumn 包。问题是 dcolumn 所做的解析会阻止正确应用颜色。
在以下示例中,在第三行中,只有“1”显示为红色。点和“32”显示为黑色。使用\textcolor
会导致语法错误。
我尝试使用 siunitx,但不幸的是,由于我以编程方式生成数百个表,编译时间增加太多(超过一分钟)
所以问题是,你如何为属于 dcolumn 的数字着色?
\documentclass[]{article}
\usepackage{xcolor}
\usepackage{tabu}
\usepackage{dcolumn}
\newcolumntype{d}[1]{D{.}{.}{#1}}
\begin{document}
\begin{tabu}{cd{2}}
note & 1.32\\
\color{red}note & 1.32 \\
\color{red}note & \color{red}1.32 \\
% note & 1.32\\
% \textcolor{red}{note} & 1.32 \\
% \textcolor{red}{note} & \textcolor{red}{1.32} \\ % results in a compilation error.
\end{tabu}
\end{document}
答案1
我可以通过重新定义输出的内部定义来提供一种方法。
内容dcolumn
保存在两个框中,因此您必须在输出之前设置颜色。此外,您必须重置颜色。
下面的示例提供了一个新命令\dcolcolor
来设置由 定义的单元格的颜色dcolumn
。用法很简单(\dcolcolor
有一个强制参数):
\dcolcolor{<color>}
这里是例子:
\documentclass[]{article}
\usepackage{xcolor}
\usepackage{tabu}
\usepackage{dcolumn}
\newcolumntype{d}[1]{D{.}{.}{#1}}
\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{tabu}{cd{2}}
note & 1.32\\
\color{red}note & 1.32 \\
note &\dcolcolor{red} 1.32 \\
note & 1.32\\
note & \dcolcolor{red}1.32\\
\textcolor{red}{note} & 1.32 \\
\end{tabu}
\end{document}
答案2
您可能还想查看希尼奇包。该包提供了许多其他功能,其中包括标记为的列类型S
。加载此包而不是后dcolumn
,您的 MWE 将如下所示:
\documentclass[]{article}
\usepackage{xcolor}
\usepackage{tabu}
\usepackage{siunitx}
\begin{document}
\begin{tabu}{cS[table-format=1.2]}
note & 1.32\\
\color{red}note & 1.32 \\
\color{red}note & \color{red}1.32 \\
\textcolor{red}{note} & 1.32 \\
\textcolor{red}{note} & \textcolor{red}{1.32} \\
\end{tabu}
\end{document}
观察发现包及其列类型对于或S
都没有问题。\color
\textcolor