我想将 tabularx 表格对齐。假设我有以下两个表格:
使用以下代码:
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{booktabs}
\usepackage{tabularx}
\usepackage{array}
\begin{document}
\begin{table}[h]
\centering
\begin{tabularx}{\textwidth}{XX}
\toprule
{Test Nr.} & Timestamp \\
\midrule
1 & 2019-01-15 05:22:10.024094 \\
2 & 2019-01-15 05:35:30.024133 \\
3 & 2019-01-23 14:32:17.868884 \\
\bottomrule
\end{tabularx}
\end{table}
\begin{table}[h]
\begin{tabularx}{\textwidth}{XXXXXXX}
\toprule
{Test Nr.} & a & b & c & d & e \\
\midrule
1 & 123 & -123 & 123.33 & 12 & 123 \\
2 & 123 & -123 & 123.98 & 123 & 5 \\
3 & 123 & -123 & -0.0123 & 123 & - \\
\bottomrule
\end{tabularx}
\end{table}
\end{document}
现在我想要将 -0.0123 和 123.98 的小数点垂直对齐。
我找到了以下解决方案:
\usepackage{booktabs, makecell}
\usepackage{siunitx, tabularx}
\usepackage{array}
\begingroup
% Allow `_` and `:` in macro names (LaTeX3 style)
\catcode`\_=11
\catcode`\:=11
% Internal code of `S`
\gdef\tabularxcolumn#1{%
>{\__siunitx_table_collect_begin:Nn S{} }%
p{#1}% <- this is different (is `c` in normal `S`)
<{\__siunitx_table_print:}%
}
\endgroup
这些点按需要排列,但它把其他一切都搞乱了,特别是时间戳,并且它删除了 e 列中的最后一个“-”。
说实话我真的不明白 \begingroup 命令。
我怎样才能让它正常工作?
答案1
由于在第二个环境的六列中的任何一列中显然不需要自动换行tabularx
,因此我能想到的tabularx
在这里使用环境的仅有的一个有效理由是:确保六列的宽度完全相同。
了解了这一点之后,我建议您加载该sunitx
包并使用其S
列类型将每列中的数字对齐到其各自的显式或隐式小数标记上。然后,使用C
列类型(下面定义为列类型的居中版本X
)来格式化五个数据列的标题。
tabular*
话虽如此,我认为如果使用环境而不是环境,手头的表格看起来会更好[!] tabularx
。对于tabular*
环境,将C
第一列的列类型更改为c
,同时保留T
五个数据列的列类型。主要的视觉差异在于列间空格的宽度:使用tabular*
,所有列的列间空格都相等。
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{booktabs}
\usepackage{tabularx}
\newcolumntype{C}{>{\centering\arraybackslash}X}
%% \usepackage{array} % is loaded automatically by tabularx
\usepackage{siunitx}
\newcolumntype{T}[1]{S[table-format=#1]}
\newcommand{\mC}[1]{\multicolumn{1}{C}{#1}} % handy utility macro
\begin{document}
\begin{table}[h]
\begin{tabularx}{\textwidth}{%
C T{3.0} T{-3.0} T{3.4} T{3.0} T{3.0} }
\toprule
Test Nr. & \mC{a} & \mC{b} & \mC{c} & \mC{d} & \mC{e} \\
\midrule
1 & 123 & -123 & 123.33 & 12 & 123 \\
2 & 123 & -123 & 123.98 & 123 & 5 \\
3 & 123 & -123 & -0.0123 & 123 & {--} \\
\bottomrule
\end{tabularx}
\vspace{5mm} % create some vertical separation
\setlength\tabcolsep{0pt} % let LaTeX figure out intercol. whitespace amounts
\begin{tabular*}{\textwidth}{@{\extracolsep{\fill}}
c T{3.0} T{-3.0} T{3.4} T{3.0} T{3.0} }
\toprule
Test Nr. & {a} & {b} & {c} & {d} & {e} \\
\midrule
1 & 123 & -123 & 123.33 & 12 & 123 \\
2 & 123 & -123 & 123.98 & 123 & 5 \\
3 & 123 & -123 & -0.0123 & 123 & {--} \\
\bottomrule
\end{tabular*}
\end{table}
\end{document}