在表格中,如何左对齐而忽略减号?

在表格中,如何左对齐而忽略减号?

我想创建一个左对齐的表格,但忽略减号。例如,下面给出了一个正常的左对齐表格

  \begin{tabular}{llll}
      & a        & b        & c \\
    A & -0.62645 & -0.82047 &  1.51178  \\
    B &  0.18364 &  0.48743 &  0.38984  \\
    C & -0.83563 &  0.73832 & -0.62124 \\
  \end{tabular}

普通的

而以下代码返回的是我真正想要的

  \begin{tabular}{llll}
      & { }a        & { }b        & { }c \\
    A &   -0.62645 &    -0.82047 &  { }1.51178  \\
    B & { }0.18364 &  { }0.48743 &  { }0.38984  \\
    C &   -0.83563 &  { }0.73832 &    -0.62124 \\
  \end{tabular}

期望

问:有没有更聪明的方法来做到这一点?

答案1

我会用dcolumn包定义一种新的列类型,其小数点对齐方式为“左边两位,右边五位”(在这种情况下,将自动获得标题所需的对齐方式):

\documentclass{article}
\usepackage{dcolumn}

\newcolumntype{L}{D{.}{.}{2,5}}

\begin{document}

\begin{tabular}{lLLL}
    &  $a$ & $b$ & $c$ \\
    A & -0.62645 & -0.82047 &  1.51178  \\
    B &  0.18364 &  0.48743 &  0.38984  \\
    C & -0.83563 &  0.73832 & -0.62124 \\
  \end{tabular}

\end{document}

在此处输入图片描述

答案2

除了该dcolumn包之外,还有一个siunitx包,它提供了一个名为的列类型S,允许在小数点标记上对齐。

以下 MWE 使用此列类型。请注意,S列中的数字数据会自动进入数学模式——因此正确使用了“数学减号”符号。还请注意,标题行中的单元格使用专用的列类型(名为“ N”)排版,其作用类似于文本模式l列,只是条目会自动向右移动(不可见的)数学减号符号的量。

\documentclass{article}
\usepackage{siunitx,array}
\sisetup{table-format=-1.5, group-digits=false}
\newcolumntype{L}{>{\phantom{$-$}}l}       % prefix some whitespace
\newcommand\mcL[1]{\multicolumn{1}{L}{#1}} % handy shortcut macro
\let\familydefault\sfdefault % optional: switch to a sans-serif font
\begin{document}
  \begin{tabular}{lSSS}
      & \mcL{a}  & \mcL{b}  & \mcL{c}   \\
    A & -0.62645 & -0.82047 &  1.51178  \\
    B &  0.18364 &  0.48743 &  0.38984  \\
    C & -0.83563 &  0.73832 & -0.62124  \\
  \end{tabular}
\end{document}

生产:

在此处输入图片描述

答案3

忽略减号左对齐的一种方法是使用包裹collcell处理表条目如下:

  • 如果数字为负数,则将数字置于数学模式
  • 如果数字是正数,则添加\phantom{-}并将数字置于数学模式
  • 否则只需添加\phantom{-}。这是为了跳过列标题

通过这个我定义了一个新的列类型L,这样你就不必为实际表格中的任何格式而烦恼了。所以,你只需写(这里手动留出空格只是为了方便阅读):

\begin{tabular}{lLLL}
      &  a       &  b       &  c       \\
    A & -0.62645 & -0.82047 &  1.51178 \\
    B &  0.18364 &  0.48743 &  0.38984 \\
    C & -0.83563 &  0.73832 & -0.62124
\end{tabular}

你会得到:

在此处输入图片描述

下面我已经使用了包裹xstring解析内容,但可能有纯 TeX 方式可以做到这一点。我更喜欢它,xstring因为它更容易阅读。

\documentclass{standalone}
\usepackage{xstring}
\usepackage{collcell}

\newcommand{\AddPhantomMinusIfNeeded}[1]{%
\IfDecimal{#1}{% Is a decimal, so if not negative add a \phantom{-}%
    \IfBeginWith{#1}{-}{\ensuremath{#1}}{\ensuremath{\phantom{-}#1}}%
    }{%
        \ensuremath{\phantom{-}}#1% Not a decimal number so just leave it alone
    }%
}%

\newcolumntype{L}{>{\collectcell\AddPhantomMinusIfNeeded}{l}<{\endcollectcell}}

\begin{document}
\begin{tabular}{lLLL}
      & a        & b        &  c       \\
    A & -0.62645 & -0.82047 &  1.51178 \\
    B &  0.18364 &  0.48743 &  0.38984 \\
    C & -0.83563 &  0.73832 & -0.62124
\end{tabular}
\end{document}

需要注意的是,如果所有单元格条目的位数相同,此解决方案将产生良好的结果。此处的其他解决方案更适合小数对齐的一般情况。

答案4

我认为没有多少更聪明有很多方法可以做到这一点,因为这取决于范围(您有多少个这样的表,或者它们有多大,以及您希望在多大程度上自动化这个过程)和一些美学。然而,有很多其他做法:

在此处输入图片描述

\documentclass{article}
\begin{document}
\begin{tabular}{lrrr}
      & \multicolumn{1}{l}{$\phantom{-}$a} & 
        \multicolumn{1}{l}{$\phantom{-}$b} & 
        \multicolumn{1}{l}{$\phantom{-}$c} \\
    A & $-0.62645$ & $-0.82047$ & $ 1.51178$ \\
    B & $ 0.18364$ & $ 0.48743$ & $ 0.38984$ \\
    C & $-0.83563$ & $ 0.73832$ & $-0.62124$ \\
\end{tabular}
\end{document}

以上使用数学模式排​​版您的数字tabular。或者,您也可以在环境中排版整个表格array,并仅在需要时切换到文本模式(例如,对于列/行索引)。为此,amsmath提供\text{<stuff>},其中<stuff>可以包含空格。

r此外,上述建议的目的是对包含数字的列使用右对齐,并l仅对列索引(第 1 行)切换为左对齐。这样,您只需要担心“标题”中的减号。此外,减号的对齐调整是通过 完成的,\phantom{<stuff>}这样可以留出相当于 的空间,而<stuff>无需实际排版。这在一般情况下很有用,在这种情况下,您希望为减号以外的其他内容留出空间,并且间距由字体和文本模式调整。

以下是另一种利用零宽度列分隔@{}来消除连续列之间间隙的替代方法:

\documentclass{article}
\begin{document}
\begin{tabular}{l*{3}{r@{}l}}
      & &a & &b & &c \\
    A & $-$&$0.62645$ & $-$&$0.82047$ &    &$1.51178$ \\
    B &    &$0.18364$ &    &$0.48743$ &    &$0.38984$ \\
    C & $-$&$0.83563$ &    &$0.73832$ & $-$&$0.62124$ \\
\end{tabular}
\end{document}

相关内容