如何将表格中的数字与短划线对齐?

如何将表格中的数字与短划线对齐?

dcolumnsiunitx包可用于将表格中的数字与小数点对齐。如何--在表格中将范围值(使用短划线分隔)与短划线“--”对齐?因此它们看起来像这样:

A        1--2 
B       10--50 
C      500--1000 
D    0.001--0.5 

我使用以下代码来生成表格:

\begin{table}
\centering
\begin{tabular}[!hb]{@{}lc@{}}
\toprule
AA & BB \\
\midrule 
A & 1--2 \\
B & 10--50 \\
C & 500--1000 \\
D & 0.001--0.5 \\
\bottomrule
\end{tabular}
\end{table}

答案1

一个有的解决方案和一个没有的解决方案siunitx

代码

\documentclass[varwidth]{standalone}
\usepackage{booktabs,siunitx,calc}
\newcommand*{\alignUnderEnDash}[1]{%
  \multicolumn{1}{r@{}}{\llap{\makebox[\widthof{--}][c]{#1}}}}
\begin{document}
\begin{tabular}{@{}lr@{--}l@{}}
    \toprule
    AA &    \multicolumn{2}{c}{BB}     \\ \midrule
    A  &                      1 & 2    \\
    B  &                     10 & 50   \\
    C  &                    500 & 1000 \\
    D  &                  0.001 & 0.5  \\
    E  & \alignUnderEnDash{10} &  \\ \bottomrule
\end{tabular}\qquad
\begin{tabular}{@{}   l
                      S[table-format=3.3]
                @{--} S[table-format=4.1]
                @{}}
    \toprule
    AA &    \multicolumn{2}{c}{BB}    \\ \midrule
    A  & 1                     & 2    \\
    B  & 10                    & 50   \\
    C  & 500                   & 1000 \\
    D  & 0.001                 & 0.5  \\
    E  & \alignUnderEnDash{10} &  \\ \bottomrule
\end{tabular}
\end{document}

输出

在此处输入图片描述

答案2

以下示例可能不是最优雅的变体。但它将列标题BB置于短划线上。它为数字和短划线使用单独的列:

\documentclass{article}
\usepackage{booktabs}
\usepackage{array}

\begin{document}
  \begin{tabular}[!hb]{lr@{}>{--}c@{}l}
    \toprule
    AA & & \multicolumn{1}{@{}c@{}}{\makebox[0pt]{BB}} &\\
    \midrule
    A & 1&&2 \\
    B & 10&&50 \\
    C & 500&&1000 \\
    D & 0.001&&0.5 \\
    \bottomrule
  \end{tabular}
\end{document}

结果

评论:

  • 由于列标题“BB”的宽度被忽略\makebox(0pt){...},因此如果条目太大,TeX 不会发出警告。
  • 我在表格的左侧和右侧添加了列分隔空间,因为在我看来,使用水平线看起来更好。

支持更长的列标题

以下示例解决了上一个解决方案中未将列标题的宽度计入列宽的问题。该示例测量了列标题的宽度,并在三列的第一列和第三列中为数字范围预留了空间。

\documentclass{article}
\usepackage{booktabs}
\usepackage{array}

\newdimen\tempwidthBB

\begin{document}
  \begin{tabular}[!hb]{lr@{}>{--}c@{}l}
    \toprule
    AA &
      \sbox0{B tattarrattat B}%
      \sbox2{--}%
      \global\tempwidthBB=\wd0 %
      \global\advance\tempwidthBB by -\wd2 %
      \rlap{\copy0 }%
      \kern.5\tempwidthBB
    & \multicolumn{2}{@{}l}{%
        \hphantom{--}\kern.5\tempwidthBB
      }\\
    \midrule
    A & 1&&2 \\
    B & 10&&50 \\
    C & 500&&1000 \\
    D & 0.001&&0.5 \\
    \bottomrule
  \end{tabular}
\end{document} 

具有较长列标题的结果

答案3

可能有点滥用dcolumn,但你可以这样做:

\usepackage[T1]{fontenc}
\usepackage[latin9]{inputenc}
\usepackage{dcolumn,booktabs}
\usepackage{preview}
\begin{document}
\newcolumntype{d}[1]{D{-}{\mbox{--}}{#1}}
\begin{table}
    \centering
    \begin{tabular}{ld{-1}}
        \toprule
        AA & \multicolumn{1}{c}{BB} \\
        \midrule 
        A & 1-2 \\
        B & 10-50 \\
        C & 500-1000 \\
        D & 0.001-0.5 \\
        \bottomrule
    \end{tabular}
\end{table}
\end{document}

我们利用 dcolumn 允许输入分隔符与输出分隔符不同的事实,避免在数学模式下拾取 endash(dcolumn 在数学模式下工作)。

示例输出

根据 Heiko Oberdiek 的意见进行编辑 - 谢谢

相关内容