将 colcell 与输入相结合

将 colcell 与输入相结合

下面的代码可以完美运行:

\documentclass[12pt]{article}
\usepackage{tikz}
\usepackage{collcell}

 %The min, mid and max values
\newcommand*{\MinNumber}{0.0}%
\newcommand*{\MidNumber}{0.5} %
\newcommand*{\MaxNumber}{1.0}%

%Apply the gradient macro
\newcommand{\ApplyGradient}[1]{%
        \ifdim #1 pt > \MidNumber pt
            \pgfmathsetmacro{\PercentColor}{max(min(100.0*(#1 - \MidNumber)/(\MaxNumber-\MidNumber),100.0),0.00)} %
            \hspace{-0.33em}\colorbox{green!\PercentColor!yellow}{#1}
        \else
            \pgfmathsetmacro{\PercentColor}{max(min(100.0*(\MidNumber - #1)/(\MidNumber-\MinNumber),100.0),0.00)} %
            \hspace{-0.33em}\colorbox{red!\PercentColor!yellow}{#1}
        \fi
}

\newcolumntype{R}{>{\collectcell\ApplyGradient}c<{\endcollectcell}}
\renewcommand{\arraystretch}{0}
\setlength{\fboxsep}{3mm} % box size
\setlength{\tabcolsep}{0pt}

\begin{document}
\begin{table}[ht]
\begin{center}
\begin{tabular}{*{10}{R}}
              0.03 & 0.34 & 0.41 & 0.25 & 0.89 & 0.49 & 0.79 & 0.83 & 0.82 & 0.94 \\    
\end{tabular}
\end{center}
\end{table}
\end{document}

当我编辑上面的代码以从文件而不是直接在代码中提取数据时,却不行!

    . . . 
    \begin{table}[ht]
    \begin{center}
    \begin{tabular}{*{10}{R}}
    \input{"data.tex"}  
    \end{tabular}
    \end{center}
    \end{table}
    . . . 

如果我将列类型从 R 更改为 c,它会编译而不会出现错误,但当数据位于单独的文件中时,宏中的某些内容不起作用。 data.tex 文件的内容如下:

  0.03 & 0.34 & 0.41 & 0.25 & 0.89 & 0.49 & 0.79 & 0.83 & 0.82 & 0.94 \\

我怎样才能找到解决这个问题的方法?

答案1

问题是不可\input扩展,这会阻止在collcell,因此输入文件中的所有内容基本上都会出现在第一列中,这当然是行不通的。参见为什么 \input 不可扩展?了解更多信息。

使用 的可扩展版本\input,即 LaTeX 在 中保存的原语\@@input

\begin{filecontents*}{\jobname.dat}
0.03 & 0.34 & 0.41 & 0.25 & 0.89 & 0.49 & 0.79 & 0.83 & 0.82 & 0.94 \\
\end{filecontents*}

\documentclass[12pt]{article}
\usepackage{tikz}
\usepackage{collcell}

 %The min, mid and max values
\newcommand*{\MinNumber}{0.0}%
\newcommand*{\MidNumber}{0.5} %
\newcommand*{\MaxNumber}{1.0}%

%Apply the gradient macro
\newcommand{\ApplyGradient}[1]{%
  \ifdim #1 pt > \MidNumber pt
    \pgfmathsetmacro{\PercentColor}{%
      max(min(100.0*(#1 - \MidNumber)/(\MaxNumber-\MidNumber),100.0),0.00)
     }%<---- fixed
    \hspace{-0.33em}\colorbox{green!\PercentColor!yellow}{#1}%<---- fixed
  \else
    \pgfmathsetmacro{\PercentColor}{
      max(min(100.0*(\MidNumber - #1)/(\MidNumber-\MinNumber),100.0),0.00)
    }%<---- fixed
    \hspace{-0.33em}\colorbox{red!\PercentColor!yellow}{#1}%<---- fixed
  \fi
}

\newcolumntype{R}{>{\collectcell\ApplyGradient}c<{\endcollectcell}}
\renewcommand{\arraystretch}{0}
\setlength{\fboxsep}{3mm} % box size
\setlength{\tabcolsep}{0pt}

\makeatletter
\newcommand{\xinput}[1]{\@@input #1 }
\makeatother

\begin{document}
\begin{table}[ht]
\begin{center}
\begin{tabular}{*{10}{R}}
0.03 & 0.34 & 0.41 & 0.25 & 0.89 & 0.49 & 0.79 & 0.83 & 0.82 & 0.94 \\    

\xinput{\jobname.dat}
\end{tabular}
\end{center}
\end{table}
\end{document}

我使用filecontents只是\jobname.dat为了不破坏我的文件,你可以传递你想要的任何文件名。

我还修复了代码中的一些虚假空格。

在此处输入图片描述

相关内容