tabularx 点上的垂直对齐

tabularx 点上的垂直对齐

我想将 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} 

相关内容