表格单元格的颜色由单元格内容决定

表格单元格的颜色由单元格内容决定

我正在使用该colortbl包为表格的单元格着色。我希望能够根据单元格中的值为单元格着色。在我的具体情况下,我想输入一个介于 30 和 90 之间的数字,并将单元格涂成灰色。我使用该fp包创建了一个命令,该命令在彩色单元格中显示参数的值,如下面的 MWE 所示。

\documentclass{article}
\usepackage{colortbl}
\usepackage{fp}

\newcommand{\colorcell}[1]{%
\FPeval{grayshade}{1.171-0.00857*#1}%
\cellcolor[gray]{\grayshade}#1}

\begin{document}

\begin{tabular}{ccc}
\cellcolor[gray]{.4}85 & \cellcolor[gray]{.8}85\\
\colorcell{73} & 0
\end{tabular}
\end{document}

但是,这给了我一个错误,即\grayshade未定义的控制序列。我可以重写代码以知道它\grayshade已定义;但出于某种原因,它似乎colortbl并不喜欢它。

我该如何修复我的代码以使其正常工作?

pgf可能存在使用类似/ 的解决方案Tikz,我对此持开放态度,但我也想看看它应该如何工作。

答案1

的定义\grayshade在传递给时不会扩展\cellcolor,并且在应用单元格颜色时不再可用。为了确保其可用性,我们可以创建一个全局的扩展定义\xdef\tempa{\grayshade}来保存 FP 计算的值。

\documentclass{article}
\usepackage{colortbl}
\usepackage{fp}

\newcommand{\colorcell}[1]{%
  \FPeval{\grayshade}{1.171-0.00857*#1}%
  \xdef\tempa{\grayshade}%
  \cellcolor[gray]{\tempa}#1%
}

\begin{document}

\begin{tabular}{ccc}
\cellcolor[gray]{.4}85 & \cellcolor[gray]{.8}85\\
\colorcell{73} & 0
\end{tabular}
\end{document}

4 种灰色

答案2

\cellcolor宏不扩展其颜色参数。下面我使用 对其进行了扩展,\edef\x{\noexpand\cellcolor...}\x以确保将其\graycolor扩展为通过 计算的值\FPeval

在此处输入图片描述

\documentclass{article}
\usepackage{colortbl}
\usepackage[nomessages]{fp}

\newcommand{\colorcell}[1]{%
  \FPeval\grayshade{1.171-0.00857*#1}%
  \edef\x{\noexpand\cellcolor[gray]{\grayshade}}\x #1}

\begin{document}

\begin{tabular}{ccc}
  \cellcolor[gray]{.4}85 & \cellcolor[gray]{.8}85 \\
  \colorcell{73} & 0
\end{tabular}

\end{document}

相关内容