我已经看到过这两个问题:
使用 pgfplotstable 创建列联表和 十进制九月对齐和\多列不兼容?
但我仍然无法完成我想要做的事情。我很少使用tex
,有时我需要制作表格/图形,但我还不习惯。
我有 14 列(目前,我会尝试减少)并且我想将它们与多列分组。
前两列不应该分组,其余 12 列应该按对分组,因此第 3 列和第 4 列应该形成多列,第 5 列和第 6 列也应该形成多列,依此类推。每对列都应该命名,第一列的名称为“时间平均值”,第二列的名称为“质量平均值”。
如何设置多列的起始位置或应将哪些列分组?我只能看到列号参数,但从未指定多列将对哪些列进行分组。
我现在拥有的愚蠢代码是:
\documentclass{standalone}
\usepackage{pgfplotstable}
\usepackage{pgfplots}
\usepackage{booktabs}
\usepackage[paperwidth=50cm,paperheight=\maxdimen]{geometry}
\usepackage{tikz}
\begin{document}
\pgfplotstabletypeset[
every head row/.style={%
before row={\toprule
& \multicolumn{2}{c}{Data} \\
& \multicolumn{2}{c}{32-2 LS} \\
& \multicolumn{2}{c}{128-4 LS} \\
& \multicolumn{2}{c}{256-8 LS} \\
& \multicolumn{2}{c}{32-4} \\
& \multicolumn{2}{c}{128-4} \\
& \multicolumn{2}{c}{256-8}},
after row=\midrule},
every last row/.style={after row=\bottomrule},
string type,
]
{
%sample data
bur26a 26 94.6513 0.9995 145.6622 0.9999 202.7375 1.0000 1.4381 0.9707 2.0208 0.9770 2.9439 0.9786
chr25a 25 84.5684 0.8296 131.5305 0.8881 183.0491 0.9012 1.4192 0.3110 1.9670 0.3369 2.8968 0.3530
}
\end{document}
不用说,它根本就达不到我想要的效果。我甚至尝试将前两列与多列配对,但没有成功。
编辑:
经过阅读(更像是一遍又一遍地尝试)更多内容后,我得到了我想要的东西,使用“&”进行破解,但表格需要一些改进,例如使第二行的列具有相同的名称。
\documentclass{article}
\usepackage[paperwidth=25cm]{geometry}
\usepackage{booktabs}
\usepackage{pgfplotstable}
\begin{document}
\noindent\pgfplotstabletypeset[
every head row/.style={
before row={\toprule
&
&\multicolumn{2}{c}{32-2 LS}
&\multicolumn{2}{c}{128-4 LS}
&\multicolumn{2}{c}{256-8 LS}
&\multicolumn{2}{c}{32-4}
&\multicolumn{2}{c}{128-4}
&\multicolumn{2}{c}{256-8}
&},
},
every last row/.style={after row=\bottomrule},
string type,
]
{
Inst n qavg tavg qavg2 tavg2 qavg3 tavg3 qavg4 tavg4 qavg5 tavg5 qavg6 tavg6
bur26a 26 94.6513 0.9995 145.6622 0.9999 202.7375 1.0000 1.4381 0.9707 2.0208 0.9770 2.9439 0.9786
chr25a 25 84.5684 0.8296 131.5305 0.8881 183.0491 0.9012 1.4192 0.3110 1.9670 0.3369 2.8968 0.3530
}
\end{document}
给我这个:
答案1
也许这会让你更接近你想要的。
该命令的一般语法\multicolumn
是
\multicolumn{<number of columns to span>}{<alignment>}{<content>}
您无需指定它跨越哪些列,只需指定数字跨越的列数。因此,跨越的列数和以其他方式使用的列数需要在整个 中保持一致table
。因此,因为您需要14
列,所以您需要所有2
s 和其他列加起来达到 14。
请注意,下面的代码会导致非常大的Overfull hbox
并且超出页面范围 - 有几种不好看的方法可以解决这个问题,比如改变字体大小,或者把它放在一个resizebox
,但最好的办法可能是把table
分成两部分;当然,这取决于你。
\documentclass{article}
\usepackage{geometry}
\usepackage{booktabs}
\usepackage{pgfplotstable}
\begin{document}
\noindent\pgfplotstabletypeset[
every head row/.style={%
before row={\toprule%
NM & NM
&\multicolumn{2}{c}{32-2 LS}
&\multicolumn{2}{c}{128-4 LS}
&\multicolumn{2}{c}{256-8 LS}
&\multicolumn{2}{c}{32-4}
&\multicolumn{2}{c}{128-4}
&\multicolumn{2}{c}{256-8}\\\midrule},
},
every last row/.style={after row=\bottomrule},
string type,
]
{
%sample data
bur26a 26 94.6513 0.9995 145.6622 0.9999 202.7375 1.0000 1.4381 0.9707 2.0208 0.9770 2.9439 0.9786
chr25a 25 84.5684 0.8296 131.5305 0.8881 183.0491 0.9012 1.4192 0.3110 1.9670 0.3369 2.8968 0.3530
}
\end{document}
关注评论,并在评论中更新 MWE
\documentclass{article}
\usepackage{pgfplotstable}
\usepackage{booktabs}
\usepackage[paperwidth=50cm,paperheight=5cm]{geometry}
\begin{document}
\noindent\pgfplotstabletypeset[
every head row/.style={%
before row={\toprule%
&
& \multicolumn{2}{c}{time avg}
& \multicolumn{2}{c}{quality avg}
& \multicolumn{2}{c}{quality avg}
& \multicolumn{2}{c}{quality avg}
& \multicolumn{2}{c}{quality avg}
& \multicolumn{2}{c}{quality avg}\\
NM & NM
&\multicolumn{2}{c}{32-2 LS}
&\multicolumn{2}{c}{128-4 LS}
&\multicolumn{2}{c}{256-8 LS}
&\multicolumn{2}{c}{32-4}
&\multicolumn{2}{c}{128-4}
&\multicolumn{2}{c}{256-8}\\\midrule},
},
every last row/.style={after row=\bottomrule},
string type,
]
{
%sample data
bur26a 26 94.6513 0.9995 145.6622 0.9999 202.7375 1.0000 1.4381 0.9707 2.0208 0.9770 2.9439 0.9786
chr25a 25 84.5684 0.8296 131.5305 0.8881 183.0491 0.9012 1.4192 0.3110 1.9670 0.3369 2.8968 0.3530
}
\end{document}