![如果单元格输入 = 1,则显示颜色框](https://linux22.com/image/340924/%E5%A6%82%E6%9E%9C%E5%8D%95%E5%85%83%E6%A0%BC%E8%BE%93%E5%85%A5%20%3D%201%EF%BC%8C%E5%88%99%E6%98%BE%E7%A4%BA%E9%A2%9C%E8%89%B2%E6%A1%86.png)
我想知道如何将等于 1 的框涂成蓝色。
代码:
\documentclass[11pt]{book}
\begin{document}
\begin{center}
\begin{tabular}{|c|c|c|c|c|c|c|c|c|c|}
\hline
0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\
\hline
0 & 1 & 1 & 1 & 0 & 0 & 1 & 1 & 1 & 0 \\
\hline
0 & 1 & 1 & 1 & 1 & 1 & 1 & 1 & 1 & 0 \\
\hline
0 & 1 & 1 & 1 & 1 & 1 & 1 & 1 & 1 & 0 \\
\hline
0 & 1 & 1 & 1 & 0 & 0 & 1 & 1 & 1 & 0 \\
\hline
0 & 1 & 1 & 1 & 1 & 1 & 1 & 1 & 1 & 0 \\
\hline
0 & 1 & 1 & 1 & 1 & 1 & 1 & 1 & 1 & 0 \\
\hline
0 & 1 & 1 & 1 & 0 & 1 & 1 & 1 & 1 & 0 \\
\hline
0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 \\
\hline
0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\
\hline
\end{tabular}
\end{center}
\end{document}
答案1
与这里相同:LaTeX 表:单元格值颜色基于其符号/条件单元格颜色。您可以创建新的列来验证单元格的内容,并在满足条件时填充它,在这种情况下,它只查找第一个标记,因此如果您有一个单元格,11
它将被突出显示。
\documentclass[11pt]{book}
\usepackage{array}
\usepackage{colortbl}
\makeatletter
\newcommand*{\minuscellcolor}{}
\def\minuscellcolor\ignorespaces{%
% \ignorespaces not really needed, because \@ifnextchar gobbles spaces
\@ifnextchar1{\cellcolor{red}}{}%
}
\newcolumntype{L}{>{\minuscellcolor}l}
\newcolumntype{C}{>{\minuscellcolor}c}
\newcolumntype{R}{>{\minuscellcolor}r}
\makeatother
\begin{document}
\begin{center}
\begin{tabular}{|C|C|C|C|C|C|C|C|C|C|}
\hline
0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\
\hline
0 & 1 & 1 & 1 & 0 & 0 & 1 & 1 & 1 & 0 \\
\hline
0 & 1 & 1 & 1 & 1 & 1 & 1 & 1 & 1 & 0 \\
\hline
0 & 1 & 1 & 1 & 1 & 1 & 1 & 1 & 1 & 0 \\
\hline
0 & 1 & 1 & 1 & 0 & 0 & 1 & 1 & 1 & 0 \\
\hline
0 & 1 & 1 & 1 & 1 & 1 & 1 & 1 & 1 & 0 \\
\hline
0 & 1 & 1 & 1 & 1 & 1 & 1 & 1 & 1 & 0 \\
\hline
0 & 1 & 1 & 1 & 0 & 1 & 1 & 1 & 1 & 0 \\
\hline
0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 \\
\hline
0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\
\hline
\end{tabular}
\end{center}
\end{document}
结果是:
答案2
这是一个基于 luatex 的解决方案。我使用 ConTeXt,但它可以轻松转换为 LaTeX:
\startluacode
userdata = userdata or {}
local function setcolor(s)
return ("backgroundcolor=" .. s)
end
function userdata.coloredtable( tab, colors)
table.print(tab)
context.bTABLE{"setups=coloredtable"}
for y = 1, #tab do
context.bTR()
local row = tab[y]
table.print(row)
for x = 1, #row do
local content = row[x]
local settings = nil
for match,color in pairs(colors) do
if content == match then
settings = setcolor(color)
end
end
context.bTD{settings}
context(content)
context.eTD()
end
context.eTR()
end
context.eTABLE()
end
\stopluacode
\startsetups coloredtable
\setupTABLE[each][each][frame=off, background=color]
\stopsetups
\define[2]\coloredtable
{\ctxlua{userdata.coloredtable({#2}, {#1})}}
\starttext
\coloredtable{[1] = "red", [2] = "blue"}{ {1,2,3},{3,2,1} }
\stoptext
它创建一个\coloredtable
接受两个参数的宏:第一个是匹配的颜色列表(如果内容为 1,则为红色;如果为 2,则为蓝色,等等);第二个是作为 lua 表输入的表的内容。
结果是