我认为numprint.sty
它不起作用。至少手册上说无法用红色打印负数。只有减号用红色打印。这个错误是什么时候引入的? 一些早期的sx
解决方案是基于对减号的吞噬,而不是通过宏传播的。然而,对tikz
(如在如何测试一个数字是否为负数) 有效。
\documentclass{scrartcl}
\usepackage{tikz}
\newbox\boxcca
\newcommand\ifPositif[3]{
\begingroup
\pgfmathsetmacro{\var}{#1}
\pgfmathparse{ifthenelse(\var>=0,1,0)}
\ifdim\pgfmathresult pt= 1 pt
\color{blue}{#2}
\else
\color{red}{#3}
\fi
\endgroup
}
\newcommand{\cnum}[1]{\ifPositif{#1}{#1}{#1}}
\begin{document}
\cnum{1.0} %% works
\cnum{-3} %% works
\newcommand{\useinmacro}[1]{\cnum{#1}} %% works
\useinmacro{22} %% works
\useinmacro{-23} %% works
\begin{lrbox}{\boxcca} -123.2 \end{lrbox} %% works
\end{document}
不幸的是,我无法在我的表格中使用这个
\newcolumntype{R}{>{\begin{lrbox}{\boxcca}} r <{\end{lrbox}\cnum{\boxcca}}}
\begin{tabular}{R R}
-1 & 2 \\
3 & -4 \\
\end{tabular}
\end{document}
我尝试了许多变化,我想我的错误在专家眼中是显而易见的,而且很容易修复。建议(一如既往)表示感谢。
问候,
PS:在我看来,til tantau 是个天才。他到底是怎么把 tikz 编码到 tex 中的??刚才,我还发现了 christian feuersaenger 的 pgfplotstable 和 marco 的答案根据大小自动着色数字。这也可能具有适应性。除了其较长的名称外,pgfplotstable 看起来非常棒---它能够将空格或“|”作为表格分隔符!哇。我猜想 pgfplotstable 意味着放弃 booktabs、数组和其他一些我喜欢的表格增强功能,但这似乎是值得的。当然,如果我这样做,上述问题可能就过时了。
答案1
collcell
有了这个包裹,一切都变得简单。
简单定义
\newcolumntype{R}{>{\collectcell\cnum}r<{\endcollectcell}}
还要注意,\cnum
可以简单定义为
\newcommand\cnum[1]{%
\pgfmathsetmacro{\var}{#1}%
\pgfmathparse{ifthenelse(\var>=0,1,0)}%
\ifdim\pgfmathresult pt= 1 pt%
\textcolor{blue}{#1}%
\else%
\textcolor{red}{#1}%
\fi%
}
平均能量损失
\documentclass{scrartcl}
\usepackage{tikz}
\usepackage{collcell}
\newcommand\cnum[1]{%
\pgfmathsetmacro{\var}{#1}%
\pgfmathparse{ifthenelse(\var>=0,1,0)}%
\ifdim\pgfmathresult pt= 1 pt%
\textcolor{blue}{#1}%
\else%
\textcolor{red}{#1}%
\fi%
}
\newcolumntype{R}{>{\collectcell\cnum}r<{\endcollectcell}}
\begin{document}
\begin{tabular}{RR}
1.0 & 2 \\
3 & -4 \\
\end{tabular}
\end{document}
输出
如果要在数学模式下排版数字,请将列定义为
\newcolumntype{R}{>{$\collectcell\cnum}r<{\endcollectcell$}}
结果是
答案2
这也是可能的。它提供了可以与列类型一起使用的siunitx
选项。优点是包含文档中数字的许多格式选项。negative-color = <color>
S
siunitx
\documentclass{scrartcl}
\usepackage{siunitx}
\usepackage{xcolor}
\sisetup{negative-color = red}
\newcolumntype{R}{S[color=blue,negative-color = red]}
\begin{document}
\begin{tabular}{RR}
1.0 & 2 \\
3 & -4 \\
\end{tabular}
\num{-15673}
\end{document}
正如 Mico 所建议的,你可以定义
\newcolumntype{R}[1]{S[color=blue,table-format=#1]}
这样对齐选项就可以与R
列一起使用:
\documentclass{scrartcl}
\usepackage{siunitx}
\usepackage{xcolor}
\sisetup{negative-color = red}
\newcolumntype{R}[1]{S[color=blue,table-format=#1]}
\begin{document}
\begin{tabular}{R{1.1}R{-1.0}}
1.0 & 2 \\
3 & -4 \\
\end{tabular}
\num{-15673}
\end{document}
答案3
这一个使用pgfplotstable
提供fonts by sign={<TeX code for positive>}{<TeX code for negative>}
示例代码:
\documentclass{scrartcl}
\usepackage{pgfplotstable}
\pgfplotsset{compat=1.11}
\usepackage{xcolor}
\begin{document}
\pgfplotstabletypeset[
col sep=&,row sep=\\,
columns/one/.style={fonts by sign={\color{blue}}{\color{red}}},
columns/two/.style={fonts by sign={\color{blue}}{\color{red}}},
]{
one & two \\
1.0 & 2 \\
3 & -4 \\
}
\end{document}
答案4
如果以减号开头则为红色,如果以不同的 catcode 12 个字符开头则为蓝色,否则为黑色。
\documentclass{article}
\usepackage{tabularx,xcolor}
\def\testnext#1#2{#1\ifx-#2\color{red}\else\ifcat#20\color{blue}\else\fi\fi#2}
\begin{document}
\newcolumntype{R}{>{\testnext}r<{}}
\begin{tabular}{R R}
one & two \\
-1 & 2 \\
3 & -4 \\
\end{tabular}
\end{document}
\end{document}