更改表格的第一个单元格

更改表格的第一个单元格

我有一张由 matlab 脚本生成的表的代码:

\begin{tabular}{|>{\columncolor{red!20}}l|c|c|c|c|c|c|c|}
\hline
\rowcolor{blue!20} P \textbackslash I& \textbf{Net10}&\textbf{Net11}&\textbf{Net12}&\textbf{Net13}&\textbf{Net14}&\textbf{Net15}&\textbf{all-to-all}\\\hline
\textbf{Net10}&\cellcolor{green}68.82&47.31&24.02&20.87&12.84&12.37&30.94\\\hline
\textbf{Net11}&31.06&\cellcolor{green}32.67&17.48&14.13&8.72&8.25&21.19\\\hline
\textbf{Net12}&15.06&12.76&\cellcolor{green}10.49&5.89&5.86&5.76&8.85\\\hline
\textbf{Net13}&9.45&7.08&4.94&\cellcolor{green}4.49&3.72&3.53&5.01\\\hline
\textbf{Net14}&6.56&4.95&3.80&3.27&\cellcolor{green}3.01&2.83&3.86\\\hline
\textbf{Net15}&5.59&4.20&3.34&2.90&2.69&\cellcolor{green}2.50&3.72\\\hline
\textbf{all-to-all}&2.70&2.40&1.86&1.79&1.84&1.74&\cellcolor{green}2.04\\\hline
\end{tabular}

如何更新此代码以更改第一个单元格,如下图所示 在此处输入图片描述

答案1

如果我正确理解了您的目标,那么您希望(a)引入一条长对角线“斜线”和(b)在左上角单元格的三角形两半使用不同的颜色。

诊断框软件包——最近创建的软件包的后继者slashbox,由于软件许可证不明确,TeXlive 和 MikTeX 发行版中不再包含该软件包——它的\diagbox宏将帮助您在“单元格”中绘制斜线。不幸的是,我认为它不允许\diagbox您使用诸如\cellcolor填充整个三角形区域的命令。

我写下这个答案的主要原因如下:除了营造一种华丽甚至狂欢节般的印象之外,您还想通过为标题行、最左侧的列和对角线上的元素使用颜色(为什么是红色、蓝色和绿色?),同时赋予表格强烈的“牢房”外观,实现什么目的?(光是看着这些垂直和水平条就让我感到幽闭恐惧……)就您的表格而言,读者很有可能会因为它华丽的牢房外观而记住它,无论这是否是有意为之。但他们会记住表格的内容吗?如果后者是您的目标之一,我建议您少花点时间(甚至不花点时间)处理颜色问题,而是为标题材料提供更结构化的布局,将数字与小数点对齐,使用更少的行,并为所有七个数据列提供相同的宽度。 (截至目前,最右侧的列比其他列宽很多;这是故意的还是无意的?)

以下屏幕截图使用该tabularx包创建了七个等宽的数据列,使用该siunitx包将数字与小数点对齐,并使用该booktabs包绘制了少量但间距适当的水平线,并为标题材料提供了一些视觉结构。请善待您的读者,并更清楚地说明“P”和“I”代表什么。最后,请注意(故意的!)没有颜色或粗体;如果您真的认为突出显示几个对角线单元格很重要,您当然可以自由地这样做。

在此处输入图片描述

\documentclass{article}
\usepackage[table]{xcolor} % not really needed in what follows
\usepackage{tabularx,siunitx,booktabs}
\newcolumntype{C}{>{\centering\arraybackslash}X} % centered version of 'X' column type
\newcommand\mc[1]{\multicolumn{1}{C}{#1}} % handy shortcut macro

\begin{document}
\noindent
\begin{tabularx}{\textwidth}{@{} l *{7}{S[table-format=2.2]} }
\toprule
P & \multicolumn{7}{c@{}}{I} \\  
\cmidrule(l){2-8}
& \mc{Net10}&\mc{Net11}&\mc{Net12}&\mc{Net13}&\mc{Net14}
& \mc{Net15}&\mc{\mbox{all-to-all}}\\
\midrule
Net10&68.82&47.31&24.02&20.87&12.84&12.37&30.94\\
Net11&31.06&32.67&17.48&14.13&8.72&8.25&21.19\\
Net12&15.06&12.76&10.49&5.89&5.86&5.76&8.85\\
Net13&9.45&7.08&4.94&4.49&3.72&3.53&5.01\\
Net14&6.56&4.95&3.80&3.27&3.01&2.83&3.86\\
Net15&5.59&4.20&3.34&2.90&2.69&2.50&3.72\\
all-to-all&2.70&2.40&1.86&1.79&1.84&1.74&2.04\\
\bottomrule
\end{tabularx}
\end{document} 

答案2

\documentclass{article}
\usepackage{xcolor}
\usepackage{colortbl}
\usepackage{diagbox} %<-- added
\begin{document}

\begin{tabular}{|>{\columncolor{red!20}}l|c|c|c|c|c|c|c|}
    \hline
    \rowcolor{blue!20} \diagbox[width=2cm]{\ }{\ } & \textbf{Net10}&\textbf{Net11}&\textbf{Net12}&\textbf{Net13}&\textbf{Net14}&\textbf{Net15}&\textbf{all-to-all}\\\hline %<--- new line
    % \rowcolor{blue!20} P \textbackslash I& \textbf{Net10}&\textbf{Net11}&\textbf{Net12}&\textbf{Net13}&\textbf{Net14}&\textbf{Net15}&\textbf{all-to-all}\\\hline %<--- old line
    \textbf{Net10}&\cellcolor{green}68.82&47.31&24.02&20.87&12.84&12.37&30.94\\\hline
    \textbf{Net11}&31.06&\cellcolor{green}32.67&17.48&14.13&8.72&8.25&21.19\\\hline
    \textbf{Net12}&15.06&12.76&\cellcolor{green}10.49&5.89&5.86&5.76&8.85\\\hline
    \textbf{Net13}&9.45&7.08&4.94&\cellcolor{green}4.49&3.72&3.53&5.01\\\hline
    \textbf{Net14}&6.56&4.95&3.80&3.27&\cellcolor{green}3.01&2.83&3.86\\\hline
    \textbf{Net15}&5.59&4.20&3.34&2.90&2.69&\cellcolor{green}2.50&3.72\\\hline
    \textbf{all-to-all}&2.70&2.40&1.86&1.79&1.84&1.74&\cellcolor{green}2.04\\\hline
\end{tabular}


\end{document} 

在此处输入图片描述

答案3

如果您确实想在第一个单元格中填充两个三角形区域,则可以使用{NiceTabular}nicematrixTikZ。

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

\begin{document}

\begin{NiceTabular}{>{\bfseries}lccccccc}[hvlines]
\CodeBefore
  \cellcolor{green!15}{2-2,3-3,4-4,5-5,6-6,7-7,8-8}  
  \rectanglecolor{blue!15}{1-2}{1-8}
  \rectanglecolor{red!15}{2-1}{8-1}
  \begin{tikzpicture}
    \fill [blue!15] (1-|1) -- (2-|2) -- (1-|2) -- cycle ; 
    \fill [red!15] (1-|1) -- (2-|1) -- (2-|2) -- cycle ; 
    \draw (1-|1) -- (2-|2) ; 
  \end{tikzpicture}
\Body
\RowStyle{\bfseries}
\rule[-3mm]{0pt}{1cm}
            &Net10&Net11&Net12&Net13&Net14&Net15&all-to-all\\
  Net10     &68.82&47.31&24.02&20.87&12.84&12.37&30.94     \\
  Net11     &31.06&32.67&17.48&14.13& 8.72& 8.25&21.19     \\
  Net12     &15.06&12.76&10.49& 5.89& 5.86& 5.76& 8.85     \\
  Net13     & 9.45& 7.08& 4.94& 4.49& 3.72& 3.53& 5.01     \\
  Net14     & 6.56& 4.95& 3.80& 3.27& 3.01& 2.83& 3.86     \\
  Net15     & 5.59& 4.20& 3.34& 2.90& 2.69& 2.50& 3.72     \\
  all-to-all& 2.70& 2.40& 1.86& 1.79& 1.84& 1.74& 2.04     \\
\end{NiceTabular}

\end{document} 

您需要多次编译。

上述代码的输出

答案4

到目前为止,我已经实现了一半的目标。方法:在 TikZ 中绘制两个彩色三角形……听起来很简单?

问题是\tabcolsep在第一列中抑制了 s,而在其他列中没有。就像让绘图触及边框一样。虽然一些垂直间距随着 而消失\smash,但我仍然在努力解决剩余的麻烦,所以请大家帮帮我。哦,@{}破坏了颜色,使单元格边缘出现白色条纹。

\documentclass{article}

\usepackage{amsmath} % to redefine \smash
\usepackage{colortbl}
\usepackage{tikz}

\newcommand{\mybox}[2]{\mbox{\smash[b]{\begin{tikzpicture}[xscale=#1, yscale=#2] %
\fill[fill=red!20] (0,0) -- (0,1) -- (1,0) -- cycle; %
\fill[fill=blue!20] (1,1) -- (0,1) -- (1,0) -- cycle; %
\node[text width=12pt] at (0.15,0.3) {A}; %
\node[text width=12pt] at (0.85,0.7) {B}; %
\end{tikzpicture}}} %
}

\setlength{\tabcolsep}{5pt}

\begin{document}

\begin{tabular}{>{\columncolor{red!20}}l|c|c|c|c|c|c|c}
    \hline
    \rowcolor{blue!20} \mybox{1.5}{0.6} & \textbf{Net10}&\textbf{Net11}&\textbf{Net12}&\textbf{Net13}&\textbf{Net14}&\textbf{Net15}&\textbf{all-to-all}\\\hline
    \textbf{Net10}&\cellcolor{green}68.82&47.31&24.02&20.87&12.84&12.37&30.94\\\hline
    \textbf{Net11}&31.06&\cellcolor{green}32.67&17.48&14.13&8.72&8.25&21.19\\\hline
\end{tabular}
\end{document}

在此处输入图片描述

那么...胜利的气息已经临近。我该如何压制这些,同时又不破坏色彩@{}呢?

相关内容