假设我们有一张包含正数和负数条目的表。
我的问题很简单:我们如何才能使数字对齐从实际数字开始而不是负数(-)符号?
我先介绍一个简单的例子:
\documentclass[12pt,a4paper]{article}
\usepackage[utf8x]{inputenc}
\usepackage{ucs}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{makeidx}
\usepackage{graphicx}
\usepackage{threeparttablex, booktabs}
\usepackage{longtable}
\begin{document}
\begin{center}
\begin{table}[htbp!]
{\footnotesize
\begin{tabular}{@{} llll @{} } \toprule
& a & b & c \\ \midrule
\textit{something} &&& \\ \midrule
something & -0.888 & 0.888 & 0.888 \\
something & 0.888** & 0.888* & 0.888*** \\
something & -0.888*** & -0.888*** & -0.888*** \\
something & 0.888* & 0.037 & 0.888 \\ \midrule
\bottomrule
\end{tabular}
}
\end{table}
\end{center}
\end{document}
答案1
这是一个使用该dcolumn
包实现小数点对齐的解决方案。要确定小数点前后显示的“位数”,请包含减号和星号等对象。对于当前示例,列规范效果d{2.6}
很好。
我进一步修改了你的代码,以(a)省略加载所有不需要的包,(b)使用\centering
指令里面环境table
,以及 (c) 跳过将\footnotesize
指令括在一对花括号中,因为指令的范围以环境结束table
。
\documentclass[12pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage{booktabs}
\usepackage{dcolumn}
\newcolumntype{d}[1]{D{.}{.}{#1}} % define "d" column type
\newcommand\mc[1]{\multicolumn{1}{c}{#1}} % handy shortcut macro
\begin{document}
\begin{table}[htbp!]
\centering
\footnotesize
\begin{tabular}{@{} l *3{d{2.6}} @{} } \toprule
& \mc{a} & \mc{b} & \mc{c} \\ \midrule
\textit{something} \\ \midrule
something & -0.888 & 0.888 & 0.888 \\
something & 0.888*** & 0.888* & 0.888*** \\
something & -0.888*** & -0.888*** & -0.888*** \\
something & 0.888* & 0.037 & 0.888 \\
\bottomrule
\end{tabular}
\end{table}
\end{document}
附录beamer
:当使用而不是文档类时,同一张表如下所示article
:
\documentclass{beamer}
\usepackage[utf8]{inputenc}
\usepackage{booktabs}
\usepackage{dcolumn}
\newcolumntype{d}[1]{D{.}{.}{#1}} % define "d" column type
\newcommand\mc[1]{\multicolumn{1}{c}{#1}} % handy shortcut macro
\begin{document}
\begin{frame}
\begin{table}
\centering
\footnotesize
\begin{tabular}{@{} l *3{d{2.6}} @{} } \toprule
& \mc{a} & \mc{b} & \mc{c} \\ \midrule
\textit{something} \\ \midrule
something & -0.888 & 0.888 & 0.888 \\
something & 0.888*** & 0.888* & 0.888*** \\
something & -0.888*** & -0.888*** & -0.888*** \\
something & 0.888* & 0.037 & 0.888 \\
\bottomrule
\end{tabular}
\end{table}
\end{frame}
\end{document}
答案2
我建议使用siunitx
包来排版列。选项用于\sisetup
适当设置列的宽度(小数点左边一位,小数点右边三位,加上符号空间)。请注意,我从这个 MWE 中删除了几个不必要的包,并删除了不必要的环境center
,将其更改为命令。还请注意、和列标题周围的\centering
花括号,以确保它们设置为文本,而不是由 解析。{}
a
b
c
siunitx
\documentclass[12pt,a4paper]{article}
\usepackage{booktabs}
\usepackage{siunitx}
\sisetup{table-format=-1.3, table-space-text-post={***}}
\begin{document}
{\footnotesize
\begin{table}[htbp!]
\centering
\begin{tabular}{@{} lSSS @{} } \toprule
& {a} & {b} & {c} \\ \midrule
\textit{something} &&& \\ \midrule
something & -0.888 & 0.888 & 0.888 \\
something & 0.888** & 0.888* & 0.888*** \\
something & -0.888*** & -0.888*** & -0.888*** \\
something & 0.888* & 0.037 & 0.888 \\ \midrule
\bottomrule
\end{tabular}
\end{table}
}
\end{document}
答案3
您至少有三个选择:
使用
l
左对齐列并引入\phantom{-}
正数:\documentclass{article} \usepackage{booktabs,amsmath} \begin{document} \begin{tabular}{@{} llll @{}} \toprule & a & b & c \\ \midrule \textit{something} &&& \\ \midrule something & $-0.888$ & $\phantom{-}0.888$ & $\phantom{-}0.888$ \\ something & $\phantom{-}0.888^{\text{**}}$ & $\phantom{-}0.888^{\text{*}}$ & $\phantom{-}0.888^{\text{***}}$ \\ something & $-0.888^{\text{***}}$ & $-0.888^{\text{***}}$ & $-0.888^{\text{***}}$ \\ something & $\phantom{-}0.888^{\text{*}}$ & $\phantom{-}0.037$ & $\phantom{-}0.888$ \\ \bottomrule \end{tabular} \end{document}
使用
r
右对齐的列并引入\phantom
没有任何“调整”的数字:\documentclass{article} \usepackage{booktabs,amsmath} \begin{document} \begin{tabular}{@{} rrrr @{}} \toprule & a & b & c \\ \midrule \textit{something} &&& \\ \midrule something & $-0.888\phantom{{}^{\text{***}}}$ & $0.888\phantom{{}^{\text{***}}}$ & $0.888\phantom{{}^{\text{***}}}$ \\ something & $0.888^{\text{**\phantom{*}}}$ & $0.888^{\text{*\phantom{**}}}$ & $0.888^{\text{***}}$ \\ something & $-0.888^{\text{***}}$ & $-0.888^{\text{***}}$ & $-0.888^{\text{***}}$ \\ something & $0.888^{\text{*\phantom{**}}}$ & $0.037\phantom{{}^{\text{***}}}$ & $0.888\phantom{{}^{\text{***}}}$ \\ \bottomrule \end{tabular} \end{document}
答案4
我做了两件事:我替换了我定义的“-”符号\phanm
;并且我增加了\tabcolsep
一点来为幻影留出一些空间。
通过将减号变成\llap
ed 字符,可以避免“a”、“b”和“c”与减号对齐而产生的(我认为的)丑陋外观。
注意:您的原始解决方案在数学模式中没有减号。
已编辑,以采纳 Mico 的好建议,我在 OP 的 MWE 中对此进行了掩盖。
\documentclass[12pt,a4paper]{article}
\usepackage[utf8x]{inputenc}
\usepackage{ucs}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{makeidx}
\usepackage{graphicx}
\usepackage{threeparttablex, booktabs}
\usepackage{longtable}
\begin{document}
\def\phanm{\llap{$-$}}
\tabcolsep=\dimexpr\tabcolsep+1ex\relax
\begin{table}[htbp!]
\centering{\footnotesize
\begin{tabular}{@{} llll @{} } \toprule
& a & b & c \\ \midrule
\textit{something} &&& \\ \midrule
something & \phanm0.888 & 0.888 & 0.888 \\
something & 0.888** & 0.888* & 0.888*** \\
something & \phanm0.888*** & \phanm0.888*** & \phanm0.888*** \\
something & 0.888* & 0.037 & 0.888 \\ \midrule
\bottomrule
\end{tabular}
}
\end{table}
\end{document}