自动为负数和正数着色

自动为负数和正数着色

我认为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>Ssiunitx

\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}

在此处输入图片描述

相关内容