如果单元格输入 = 1,则显示颜色框

如果单元格输入 = 1,则显示颜色框

我想知道如何将等于 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 表输入的表的内容。

结果是

在此处输入图片描述

相关内容