是否可以排版表格并将\pgfplotstabletypeset
1 列标题的样式更改为多行?
此代码不起作用,无法编译:
...
columns/errorRelC/.style={
column name=Line 1\\Line 2
},
...
答案1
一个简单的方法是使用makecell
包裹。它提供了\makecell[<alignment>]{<tabular stuff>}
您可以用来排版这类换行符的功能。
\usepackage{makecell}% http://ctan.org/pkg/makecell
%...
columns/errorRelC/.style={
column name=\makecell{Line 1\\Line 2}
},
%...
这是一个完整的最小示例pgfplotstable
包裹 文档:
\documentclass{article}
\usepackage{booktabs}% http://ctan.org/pkg/booktabs
\usepackage{pgfplotstable}% http://ctan.org/pkg/pgfplotstable
\usepackage{makecell}% http://ctan.org/pkg/makecell
\begin{document}
\pgfplotstableset{% global config, for example in the preamble
% these columns/<colname>/.style={<options>} things define a style
% which applies to <colname> only.
columns/dof/.style={int detect,column type=r,column name=\makecell[t]{\textsc{Dof}\\Line 2}},
columns/error1/.style={
sci,sci zerofill,sci sep align,precision=1,sci superscript,
column name=$e_1$,
},
columns/error2/.style={
sci,sci zerofill,sci sep align,precision=2,sci 10e,
column name=$e_2$,
},
columns/{grad(log(dof),log(error2))}/.style={
string replace={0}{}, % erase '0'
column name={$\nabla e_2$},
dec sep align,
},
columns/{quot(error1)}/.style={
string replace={0}{}, % erase '0'
column name={$\frac{e_1^{(n)}}{e_1^{(n-1)}}$}
},
empty cells with={--}, % replace empty cells with '--'
every head row/.style={before row=\toprule,after row=\midrule},
every last row/.style={after row=\bottomrule}
}
\pgfplotstabletypeset[ % local config, applies only for this table
1000 sep={\,},
columns/info/.style={
fixed,fixed zerofill,precision=1,showpos,
column type=r,
}
]
{
%# Convergence results
%# fictional source, generated 2008
level dof error1 error2 info grad(log(dof),log(error2)) quot(error1)
1 4 2.50000000e-01 7.57858283e-01 48 0 0
2 16 6.25000000e-02 5.00000000e-01 25 -3.00000000e-01 4
3 64 1.56250000e-02 2.87174589e-01 41 -3.99999999e-01 4
4 256 3.90625000e-03 1.43587294e-01 8 -5.00000003e-01 4
5 1024 9.76562500e-04 4.41941738e-02 22 -8.49999999e-01 4
6 4096 2.44140625e-04 1.69802322e-02 46 -6.90000001e-01 4
7 16384 6.10351562e-05 8.20091159e-03 40 -5.24999999e-01 4
8 65536 1.52587891e-05 3.90625000e-03 48 -5.35000000e-01 3.99999999e+00
9 262144 3.81469727e-06 1.95312500e-03 33 -5.00000000e-01 4.00000001e+00
10 1048576 9.53674316e-07 9.76562500e-04 2 -5.00000000e-01 4.00000001e+00
}
\end{document}
我已经为第二列标题使用了t
op 对齐,以使每个标题的前几行垂直对齐。您可以指定其他对齐格式,包括不同的水平对齐。请参阅\makecell
makecell
文档了解更多信息。
或者,您可以自己编写标题tabular
- 就像\makecell
这样:
\pgfplotstableset{% global config, for example in the preamble
% these columns/<colname>/.style={<options>} things define a style
% which applies to <colname> only.
columns/dof/.style={int detect,column type=r,column name=\begin{tabular}[t]{@{}c@{}}\textsc{Dof}\\Line2\end{tabular}},
%...
最后,你可以将内容装箱,然后将其用作column name
。以下是如何获得与上面的 MWE 等效的布局:
\newsavebox{\mybox}
\savebox{\mybox}{\begin{tabular}[t]{@{}c@{}}\textsc{Dof}\\Line2\end{tabular}}%
\pgfplotstableset{% global config, for example in the preamble
% these columns/<colname>/.style={<options>} things define a style
% which applies to <colname> only.
columns/dof/.style={int detect,column type=r,column name=\usebox{\mybox}},
%...
之所以需要所有这些技巧,是因为内容是按原样插入到表中的。因此,\\
在中间某处插入会终止该行并开始新的一行。因此,您必须将其“包含”到该特定单元格中。使用makecell
允许您在表中执行标题规范,并在需要更改时提供更多自由,并且是干净的(从代码角度来看)。插入tabular
不太干净,但效果一样好,而装箱通常在表的“外部”完成并在“内部”使用 - 稍微麻烦一些。
tabular
在所有情况下,由(以及)引入的水平单元格填充makecell
都已使用 删除@{}..@{}
。