在解决群友的疑问中自己的遇到的问题
为何下面的基于siunitx的S列中的选项S[table-number-alignment=center]未能生效
如上图所示,我希望实现 下方整个红框整体相对向左平移 ,使红框处于第一列的大格子的中心。即:同时实现这一列的内部按照小数点对齐,同时这一列的所有数字,整体关于这一列居中。
以下是mwe
\documentclass[12pt]{ctexart}
\usepackage{graphicx}
\usepackage{amsmath}
\usepackage{booktabs}
\usepackage{siunitx}
\usepackage{zhlipsum}
\begin{document}
\renewcommand\arraystretch{1.5} %修改行距
\begin{table}
\centering
\caption{Table I}
\scalebox{0.8}{
%奇哉怪也,为何此处S列的option table-number-alignment=center 没派上用场...
\begin{tabular}{c*{4}{|S[table-number-alignment=center]}|}
\toprule \toprule
& \multicolumn{2}{c}{v-V} & \multicolumn{2}{c}{p-V} \\
\cmidrule(lr){2-3} \cmidrule(lr){4-5}
steps & \multicolumn{1}{c}{$x_n$} & \multicolumn{1}{c}{$v_n$} & \multicolumn{1}{c}{$y_n$} & \multicolumn{1}{c}{$\omega_n$} \\
\hline
1 & -4.3e-9 & -2.2e-9 & -2.2e-9 & 4.2e-9 \\
\hline
2 & 4.3e-9 & -2.2e-9 & -2.2e-9 & 4.2e-9 \\
\hline
3 & 4.3e-9 & -2.2e-9 & 92.2e-9 & 4.2e-9 \\
\hline
4 & 114.3e8 & -2.2e-9 & -2.2e-9 & 4.2e-9 \\
\hline
5 & -4.3e-9 & 4.2e-9 & -2.2e-9 & 4.2e-9 \\
\hline
6 & -4.63e-9 & 12.2e-9 & -2.2e-9 & -2.2e-9 \\
\bottomrule \bottomrule
\end{tabular}
}
\label{vVpV}
\end{table}
\end{document}
我翻阅了一下 table-format = <x.yez>这一个选项,实际上是手动指定了对齐符号的space,并不是真正意义上的居中。
![image.png image.png](https://pics.latexstudio.net/uploads/20240722/6ed54ea2f5d76befbaca83fac68e6045.png)
如@u38442 所言,指定 table-format=3.2e1可以保证实现上述的效果,我测试了一下使用 table-format=2.0e3可以实现更好的效果,但是也存在一些小问题,假定本列数据的宽度“错落有致”,上述的操作不仅要手动指定每一列各个类型数字宽度,而且指定的宽度也不够准确,例如下例:
希望下图红框能更准确地位于蓝框的中心位置
新的mwe如下
我个人理解算是居中了,如果你是希望整个数居中后再对齐小数点与乘号,那么它是先对齐小数点和乘号(就是将空缺位补足)再视作一个整体后居中,这与你所希望的效果一致。如果仅希望居中和对齐小数点不对齐乘号可以参考
另外,对于假定本列数据的宽度“错落有致”,这个情况是很极端的。同一列数据很少有在格式上的大变化(如前两行是 1位.2位×10² 而后又有 5位.6位×10²)这是不合理的,遇到这种情况建议重新考虑制表上的排版(是否另起一行或拆分为两个表格),若一定要如此表示,也建议不使用该宏包而使用 tabualrray。