多行表格表头

多行表格表头

是否可以排版表格并将\pgfplotstabletypeset1 列标题的样式更改为多行?

此代码不起作用,无法编译:

...
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}

我已经为第二列标题使用了top 对齐,以使每个标题的前几行垂直对齐。您可以指定其他对齐格式,包括不同的水平对齐。请参阅\makecellmakecell文档了解更多信息。

或者,您可以自己编写标题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都已使用 删除@{}..@{}

相关内容