我想将数据排版在多列中,一列排在另一列之下。问题是,如果我要为相对较少的参数排版大量数据,我想将内容排版在直立的 A4 页面上。因此,我想将后面的列堆叠在前面的列下。\pgfplotstypeset
当然可以使用几个命令,但是,对齐和精确格式怎么办?所以这个问题是关于尝试使用一个命令进行排版,如果可能的话。我相信你们中的一些人可能会觉得这很简单,但我以前从未使用过,pgfplotstable
所以我有点困惑。
具体来说,我提供了一些虚假的数据文件data.txt
,我想将其排版在一个有 7 列的表格中。
排版表格应具有1标题行。它应该有一个第一列,我想自己在其中填充内容(每五行应该是 AA、BB、CC……)。然后是列Word
-- ColHeadAA5
。到此为止的内容应该放在顶部。其余列 ColHead1BB-ColHead5BB 中的数据应放在其下方。放在下面的列不应包括其列标题,而应仅包括数据。它们当然应该放在第 3-7 列,而不是前两列。
值得注意的是,这当然是一个抽象的例子——人们可以将其扩展为更多列“转换”为堆叠的“行”。如果我要使用它,我还打算实现一些 booktabs 格式。
这可能吗?
小额外内容:我想在堆叠的集合之间插入一些额外的垂直空间,大致相当于\addlinespace[3pt]
booktabs 包。
应排版的示例图
平均能量损失
\documentclass{scrartcl}
\usepackage{pgfplotstable}
\begin{filecontents}{data.txt}
Word,ColHeadAA1,ColHeadAA2,ColHeadAA3,ColHeadAA4,ColHeadAA5,ColHeadBB1,ColHeadBB2,ColHeadBB3,ColHeadBB4,ColHeadBB5
A,17,19,15,17,3,8,14,7,8,14
B,10,8,11,15,10,8,6,13,13,10
C,20,5,16,12,8,5,16,7,14,17
D,14,4,10,14,16,14,5,10,5,11
\end{filecontents}
\pgfplotstableread[col sep=comma]{data.txt}{\mydata}
\begin{document}
\begin{center}
\pgfplotstabletypeset[columns/Word/.style={string type}]{\mydata}
\end{center}
\end{document}
答案1
\pgfplotstablesave
创建原始表的两个部分并\pgfplotstablevertcat
垂直连接这两个部分并不困难。
您可以在我的代码的注释中找到详细信息:
\documentclass{scrartcl}
\usepackage{siunitx}
\usepackage{booktabs}
\usepackage{pgfplotstable}
\pgfplotstableset{
% create aliases for correct merging
alias/ColHeadAA1/.initial=ColHeadBB1,
alias/ColHeadAA2/.initial=ColHeadBB2,
alias/ColHeadAA3/.initial=ColHeadBB3,
alias/ColHeadAA4/.initial=ColHeadBB4,
alias/ColHeadAA5/.initial=ColHeadBB5,
% create first column with AA, BB, etc.
create on use/Something/.style={
create col/set list={AA,,,,BB,,,,}},
columns/Something/.style={string type}
}
\begin{filecontents}{data.txt}
Word,ColHeadAA1,ColHeadAA2,ColHeadAA3,ColHeadAA4,ColHeadAA5,ColHeadBB1,ColHeadBB2,ColHeadBB3,ColHeadBB4,ColHeadBB5
A,17,19,15,17,3,8,14,7,8,14
B,10,8,11,15,10,8,6,13,13,10
C,20,5,16,12,8,5,16,7,14,17
D,14,4,10,14,16,14,5,10,5,11
\end{filecontents}
\begin{document}
% Read your table
\pgfplotstableread[
col sep=comma,
]{data.txt}{\tableall}
% create table A with the fist 5 columns (and Word)
\pgfplotstablesave[
columns={Word,ColHeadAA1,ColHeadAA2,ColHeadAA3,ColHeadAA4,ColHeadAA5},
]{\tableall}{tableA.out}
% create table B with the last 5 columns (and Word)
\pgfplotstablesave[
columns={Word,ColHeadBB1,ColHeadBB2,ColHeadBB3,ColHeadBB4,ColHeadBB5}
]{\tableall}{tableB.out}
% load table A in a new table tablevertcat
\pgfplotstableread{tableA.out}{\tablevertcat}
% append the contents of table B to table A (tablevertcat)
\pgfplotstablevertcat{\tablevertcat}{tableB.out}
% and this is the final result
\begin{center}
\pgfplotstabletypeset[
columns={Something,Word,ColHeadAA1,ColHeadAA2,ColHeadAA3,ColHeadAA4,ColHeadAA5},
% add a little space every 4 rows
every nth row={4}{before row=\addlinespace[4pt]},
% booktabs rules
every head row/.style={
before row=\toprule,
after row=\midrule
},
every last row/.style={
after row=\bottomrule
},
columns/Word/.style={string type},
% correct column numbers alignment
multicolumn names,
columns/ColHeadAA1/.style={string type,column type={S[table-format=2]}},
columns/ColHeadAA2/.style={string type,column type={S[table-format=2]}},
columns/ColHeadAA3/.style={string type,column type={S[table-format=2]}},
columns/ColHeadAA4/.style={string type,column type={S[table-format=2]}},
columns/ColHeadAA5/.style={string type,column type={S[table-format=2]}},
]{\tablevertcat}
\end{center}
\end{document}