我有一张由 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}
和nicematrix
TikZ。
\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}
那么...胜利的气息已经临近。我该如何压制这些,同时又不破坏色彩@{}
呢?