对齐表格中的小数点

对齐表格中的小数点

我想将两个不同行中的两个数字的小数点对齐。

我确实在这里看到了相关链接: 按表格列中的小数点对齐数字

但是,我不知道如何将其合并到我的代码中。以下是我的代码的简化版本。

\documentclass[12pt,english]{article}
\usepackage{longtable}
\usepackage{fullpage}
\usepackage{times}
\usepackage[flushleft]{threeparttable}
\usepackage[font=large,labelfont=bf,tableposition=top,textfont=bf]{caption}
\usepackage{tabularx}
\usepackage{booktabs}
\newcolumntype{C}{>{\centering\arraybackslash}X}

\begin{document}

\clearpage \newpage
\begin{table}[!ht]
\caption{Table Title}
\def\arraystretch{1.05}
\vspace{-0.2cm}
\begin{threeparttable}
\small
\begin{tabularx}{\textwidth}{l*{10}{C}}
\hline \hline \addlinespace
& (1)  \\  
Variable Name & 0.1234566  \\
& (0.1234566) \\
\hline \hline \addlinespace
 \end{tabularx}
\begin{tablenotes}
\vspace{0.1cm}
\footnotesize{

\item \noindent \hspace{-1.8mm} Notes: 

 \noindent Sources: 
 }
\end{tablenotes}
\end{threeparttable}
\end{table}

\end{document}

答案1

除了尝试dcolumn@DavidCarlisle 提到的包,你可能还想看看siunitx包,具体来说,它的S列类型。我简化了你的(不完全是最小)工作示例到下面的示例代码中,以便重点关注此列类型的操作:

\documentclass[12pt]{article}
\usepackage{booktabs,mathptmx,siunitx}
\sisetup{input-symbols = {()},  % do not treat "(" and ")" in any special way
         group-digits  = false} % no grouping of digits
\begin{document}
\begin{table}
  \begin{tabular}{@{}l S[table-format=2.7] S[table-format=4.2] @{}}
    \toprule
    & \multicolumn{1}{c}{(1)} & \multicolumn{1}{c@{}}{(2)}  \\  
    \midrule
    Variable Name & 98.1234567 & 1234.56  \\
    & (0.6789) & (54.3)\\
    \bottomrule
  \end{tabular}
\end{table}
\end{document}

在此处输入图片描述

答案2

看起来你tabularx根本不想要,只需使用一个tabular带有D列的普通列作为你的数字列,也许定义为

\newcolumntype{.}{D{.}{.}{-1}}

使用该dcolumn包。

为了完整性,完整的例子:

\documentclass[12pt]{article}
\usepackage{booktabs,dcolumn}

\begin{document}
\begin{table}
  \begin{tabular}{@{}l*{2}{D{.}{.}{7}}@{}}
    \toprule
    & (1) & (2)  \\  
    \midrule
    Variable Name & 98.1234567 & 1234.56  \\
    & (0.6789) & (54.3)\\
    \bottomrule
  \end{tabular}
\end{table}
\end{document}

在此处输入图片描述

答案3

我想添加我的答案,因为它不使用任何其他包(尽管我认为使用dcolumn是最简单的解决方案)。您可以做的是将每个数字列分成两列,一列用于横坐标(小数点左侧),一列用于纵坐标(右侧)。然后,右对齐第一列,左对齐第二列,并用挤压它们之间的空间@{}

具体来说,这是您链接的问题中的选项 1。

我认为适当的最小解决方案是

\documentclass{article}
\begin{document}
\begin{table}
\begin{tabular}{lr@{}lr@{}l}
\hline
& \multicolumn{2}{c}{(1)} & \multicolumn{2}{c}{(2)}  \\  
\hline
Variable Name & 98 & .1234567 & 1234 & .56  \\
              & (0 & .6789)   &  (54 & .3)  \\
\hline
\end{tabular}
\end{table}
\end{document}

答案4

如果您没有太多条目(或者您不介意自动将一段文本替换到每一行),一个简单的解决方法是使用 padding \phantom{}(其效果是占用其参数所占用的空间,但不会显示任何内容)。例如:

\documentclass{article}
\usepackage{booktabs}
\begin{document}
\begin{tabular}{rrr}
& (1) & (2) \\  
\midrule
Variable Name & 98.1234567           & 1234.56 \\
              & (0.6789)\phantom{67} &  (54.3) \\
\bottomrule
\end{tabular}
\end{document}

相关内容