将 S 列类型与 makecell \thead 相结合

将 S 列类型与 makecell \thead 相结合

我试图在表格中对齐数值(与潜在的空单元格或文本一起),并使用\thead表格标题来描述多行列。当我尝试以下操作时,我遇到了两个标题问题(但表格主体是完美的):

  1. *似乎加在列名前面
  2. 列名称居中溢出表(可能由 1 引起)

S 列标题问题

\documentclass{book}
\usepackage[utf8]{inputenc}

\usepackage{booktabs}
\usepackage{siunitx}

\usepackage{makecell}
\renewcommand\theadalign{bc}
\renewcommand\theadfont{\bfseries}


\begin{document}

\begin{table}[hb]
\sisetup{detect-weight,
         mode=text,
         table-format=4.3,
         table-space-text-post={*}
         }
\centering
\begin{tabular}{lSSSS}
\toprule
  & \thead{multi\\(level)} & \thead{columns} & \thead{here} & \thead{centered} \\ \midrule
A & 12.444 &  & 0.03* & 213.2 \\
B & ns & 0.025* & 0.005** & 12.26 \\
C & 0.23 & ns & 9156.6 & 4563.22 \\\bottomrule
\end{tabular}
\end{table}

\end{document}

有很多“缺少 $ 插入”错误,因此我认为列标题被解释为数学列,即使事实并非如此。我该如何改进?最好采用renewcommand或类似的方法,这样我就不必手动更改每个预先存在的太多内容。

答案1

将所有\thead命令括在一组{}结果中,形成可编译的 MWE 和以下输出。我还在{}表列中的所有其他非数字条目周围添加了一组。

来自siunitx手册:

单元格内容不是数字的一部分,可以使用括号进行保护,如图所示。不包含任何数值数据的单元格使用选项指定的设置进行对齐table-text-alignment,该选项可识别值centerleftright(表 39)。

最后,由于所有列都包含不同类型的数字,因此我对所有 4 列使用了单独的table-formattable-space-text-post选项:

在此处输入图片描述

\documentclass{book}
\usepackage[utf8]{inputenc}

\usepackage{booktabs}
\usepackage{siunitx}

\usepackage{makecell}
\renewcommand\theadalign{bc}
\renewcommand\theadfont{\bfseries}


\begin{document}

\begin{table}[hb]
\centering
\begin{tabular}{l
                S[table-format=2.3]
                S[table-format=1.3, table-space-text-post={*}]
                S[table-format=4.3, table-space-text-post={**}]
                S[table-format=4.2]
                }
\toprule
  & {\thead{multi\\(level)}} & {\thead{columns}} & {\thead{here}} & {\thead{centered}} \\ \midrule
A & 12.444 &  & 0.03* & 213.2              \\
B & {ns}   & 0.025*   & 0.005** & 12.26    \\
C & 0.23   & {ns}     & 9156.6  & 4563.22  \\ \bottomrule
\end{tabular}
\end{table}

\end{document}

相关内容