我正在使用该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}
答案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}