![将 S 列类型与 makecell \thead 相结合](https://linux22.com/image/430601/%E5%B0%86%20S%20%E5%88%97%E7%B1%BB%E5%9E%8B%E4%B8%8E%20makecell%20%5Cthead%20%E7%9B%B8%E7%BB%93%E5%90%88.png)
我试图在表格中对齐数值(与潜在的空单元格或文本一起),并使用\thead
表格标题来描述多行列。当我尝试以下操作时,我遇到了两个标题问题(但表格主体是完美的):
*
似乎加在列名前面- 列名称居中溢出表(可能由 1 引起)
\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
,该选项可识别值center
、left
和right
(表 39)。
最后,由于所有列都包含不同类型的数字,因此我对所有 4 列使用了单独的table-format
和table-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}