具有部分彩色单元格的表格

具有部分彩色单元格的表格

我说服我的女朋友用 Latex 写论文,所以现在每当她遇到困难时,我都是她的首选。遗憾的是,她向我提出了一些我也不知道的要求。她需要一张表格,其中的一些单元格是彩色的,如下图所示。在此处输入图片描述

我使用画图创建了此图,但显然我更愿意使用正确的方法。我找到了如何将对角线放入单元格以及如何获得彩色单元格的示例,但我无法将两者结合起来。

有人知道这个问题的解决办法吗?我想到另一种方法是使用 latex 创建表格,转换为 pdf,将其加载到 inkscape 中,添加线条和颜色,然后再次将其作为图形包含。但这意味着每次表格更改时我都需要重做。我希望可以以更优雅的方式完成!

答案1

这是一个使用的解决matrix of nodes方案TikZ:

代码

\documentclass[parskip]{scrartcl}
\usepackage[margin=15mm]{geometry}
\usepackage{tikz}
\usetikzlibrary{matrix}

\begin{document}

\pgfdeclarelayer{background}
\pgfsetlayers{background,main}

\tikzset{limon/.style={fill=lime}}

\begin{tikzpicture}
    \matrix (magic) [matrix of nodes,nodes={minimum width=3cm,minimum height=1cm,draw,very thin},draw,inner sep=0]
    {   8 & 1 & 6 \\
        3 & |[limon]| 5 & |[limon]| 7 \\
        4 & 9 & 2 \\
    };
    \begin{pgfonlayer}{background}
        \fill[lime,draw=black] (magic-2-1.north east) -- (magic-2-1.west) -- (magic-2-1.south east) -- cycle;
    \end{pgfonlayer}

\end{tikzpicture}

\end{document}

输出

在此处输入图片描述

答案2

以下是提到的过度 TikZ 解决方案之一彼得·格里尔。我使用了修改版this solution表格中某个单元格的渐变颜色

\documentclass{article}
\usepackage[table]{xcolor}
\usepackage{tikz}

\usetikzlibrary{calc,shadings}

% Andrew Stacey's code from
% https://tex.stackexchange.com/a/50054/3954
\makeatletter
\tikzset{%
  remember picture with id/.style={%
    remember picture,
    overlay,
    save picture id=#1,
  },
  save picture id/.code={%
    \edef\pgf@temp{#1}%
    \immediate\write\pgfutil@auxout{%
      \noexpand\savepointas{\pgf@temp}{\pgfpictureid}}%
  },
  if picture id/.code args={#1#2#3}{%
    \@ifundefined{save@pt@#1}{%
      \pgfkeysalso{#3}%
    }{
      \pgfkeysalso{#2}%
    }
  }
}

\def\savepointas#1#2{%
  \expandafter\gdef\csname save@pt@#1\endcsname{#2}%
}

\def\tmk@labeldef#1,#2\@nil{%
  \def\tmk@label{#1}%
  \def\tmk@def{#2}%
}

\tikzdeclarecoordinatesystem{pic}{%
  \pgfutil@in@,{#1}%
  \ifpgfutil@in@%
    \tmk@labeldef#1\@nil
  \else
    \tmk@labeldef#1,(0pt,0pt)\@nil
  \fi
  \@ifundefined{save@pt@\tmk@label}{%
    \tikz@scan@one@point\pgfutil@firstofone\tmk@def
  }{%
  \pgfsys@getposition{\csname save@pt@\tmk@label\endcsname}\save@orig@pic%
  \pgfsys@getposition{\pgfpictureid}\save@this@pic%
  \pgf@process{\pgfpointorigin\save@this@pic}%
  \pgf@xa=\pgf@x
  \pgf@ya=\pgf@y
  \pgf@process{\pgfpointorigin\save@orig@pic}%
  \advance\pgf@x by -\pgf@xa
  \advance\pgf@y by -\pgf@ya
  }%
}

\colorlet{mycolor}{green!60!orange}

\newcommand\tikzmark[2][]{%
\tikz[remember picture with id=#2] {#1;}}

\newcommand\TriCell[2]{%
  \begin{tikzpicture}[overlay,remember picture]%
    \fill[mycolor] ( $ (pic cs:#1) + (0pt,0.5ex) $ ) --  ( $ (pic cs:#2) + (0pt,1.9ex) $ ) -- ( $ (pic cs:#2) + (0pt,-0.8ex) $ ) --cycle ;
  \end{tikzpicture}%
}%

\begin{document}

\TriCell{start1}{end1}
\begin{tabular}{|c|c|c|c|}
\hline
some text & some text & some text & some text \\
\hline
\multicolumn{1}{!{\vrule\tikzmark{start1}} c !{\vrule\tikzmark{end1}}}{some text} & \cellcolor{mycolor}some text & \cellcolor{mycolor}some text & \cellcolor{mycolor}some text \\
\hline
some text & some text & some text & some text \\
\hline
\end{tabular}

\end{document}

在此处输入图片描述

答案3

这是一个{NiceTabular}使用 的解决方案nicematrix

{tabular}该环境与类似,但会在数组的单元格、行和列下创建 PGF/Tikz 节点。在构造数组之前,array可以使用 中的这些节点使用Tikz 绘制任何您想要的内容。\CodeBefore

\documentclass{article}
\usepackage{xcolor}
\usepackage{nicematrix,tikz}

\begin{document}

\begin{NiceTabular}[hvlines,columns-width=3cm]
  {>{\rule[-6mm]{0mm}{15mm}}ccc}
\CodeBefore
  \begin{tikzpicture}
  \fill [lime] (2.5-|1) -- (3-|2) -- (3-|last) -- (2-|last) -- (2-|2) -- cycle ;
  \draw [line join = bevel] (2-|2) -- (2.5-|1) -- (3-|2) ;
  \end{tikzpicture}
\Body
  8 & 1 & 6 \\
  3 & 5 & 7 \\
  4 & 9 & 2 
\end{NiceTabular}

\end{document}

您需要多次编译(因为nicematrix使用 PGF/Tikz 节点)。

上述代码的输出

相关内容