如何使用 dcolumn 包将表格中的数字按小数对齐?

如何使用 dcolumn 包将表格中的数字按小数对齐?

我正在寻找一种方法来按小数对齐表格中的数字。您觉得哪里出了问题吗?

\documentclass[12pt,a4paper]{article}
\usepackage{apacite}
\usepackage[latin1]{inputenc}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{psfrag}
\usepackage{amssymb}
\usepackage[left=2.5cm,right=2.5cm,top=2.5cm,bottom=2.5cm]{geometry}
\usepackage{graphicx}
\usepackage{float}
\usepackage[flushleft]{threeparttable}
\usepackage{enumitem}
\usepackage{hyperref}
\usepackage[english,spanish]{babel} 
\usepackage{mathptmx}
\usepackage{setspace}
\usepackage{dcolumn}
\newcolumntype{d}[1]{D{.}{\cdot}{#1}}
\begin{document}
\begin{tabular}{l*{1}{ccccc}}
    \multicolumn{5}{c}{Cuadro I}\\
    \multicolumn{5}{c}{Estadísticas descriptivas GEIH} \\
    \hline\hline
    &\multicolumn{5}{c}{}                                            \\
    &           Obs&        Media&          Desviación Estándar&         Min&         Máx\\
    \hline
    Ocupados    &   96703         &  .896&    .306&           0&           1\\
    Años de educación         &  96703          &    10.583&    4.331&           0&          26\\
    Soltero     &  96703          &    .281&     .449&           0&           1\\
    Jefe de hogar  &  96703          &    .435&    .496&           0&           1\\
    Edad       &    96703        &    39.301&    13.824&          18&         100\\
    \hline
    Ocupados según nivel de estudio       &      &            &            &            &            \\
    Ninguno     & 586599            &    .546&    .498&           0&           1\\
    Bachiller   &  586599          &    .203&    .402&           0&           1\\
    Técnico    &  586599          &    .161&    .367&           0&           1\\
    Universitario& 586599           &    .065&    .246&           0&           1\\
    Postgrado   &  586599          &    .000&    .007&           0&           1\\
    \hline
\end{tabular}
\end{document}

答案1

您声明了d类型但没有使用它,例如

在此处输入图片描述

\documentclass[12pt,a4paper]{article}

% use utf-8 \usepackage[latin1]{inputenc}
\usepackage{dcolumn}
\newcolumntype{d}[1]{D{.}{\cdot}{#1}}
\begin{document}
% l*{1}{ccccc} is the same as lccccc and doesn't use d!

\begin{center}
\begin{tabular}{@{}l d{6.0} d{2.3} d{2.3} d{2.0} d{3.0} @{}}
    \multicolumn{6}{c}{Cuadro I}\\
    \multicolumn{6}{c}{Estadísticas descriptivas GEIH} \\
    \hline\hline
\\
\multicolumn{1}{c}{Obs}& 
\multicolumn{1}{c}{Media}&
\multicolumn{1}{c}{\begin{tabular}{@{}c@{}}Desviación\\Estándar\end{tabular}}&
\multicolumn{1}{c}{Min}&
\multicolumn{1}{c}{Máx}\\
    \hline
    Ocupados    &   96703         &  .896&    .306&           0&           1\\
    Años de educación         &  96703          &    10.583&    4.331&           0&          26\\
    Soltero     &  96703          &    .281&     .449&           0&           1\\
    Jefe de hogar  &  96703          &    .435&    .496&           0&           1\\
    Edad       &    96703        &    39.301&    13.824&          18&         100\\
    \hline
    \multicolumn{6}{@{}c@{}}{Ocupados según nivel de estudio}\\
    Ninguno     & 586599            &    .546&    .498&           0&           1\\
    Bachiller   &  586599          &    .203&    .402&           0&           1\\
    Técnico    &  586599          &    .161&    .367&           0&           1\\
    Universitario& 586599           &    .065&    .246&           0&           1\\
    Postgrado   &  586599          &    .000&    .007&           0&           1\\
    \hline
\end{tabular}

\end{center}

\end{document}

\midrule但是如果你从 包中使用的话,水平规则看起来会更好booktabs

答案2

以下是我将如何呈现表格,使用siunitx。这有几个优点,例如自动统一小数点分隔符和自动格式化大数字。

数字也应该总是显示整数部分siunitx,如果没有,则自动添加。

\documentclass[12pt,a4paper]{article}
\usepackage[spanish]{babel}
\usepackage{siunitx,booktabs}

\sisetup{output-decimal-marker={,}}

\begin{document}

\begin{table}[htp]
\centering

\caption{Estadísticas descriptivas GEIH}\label{add-here-a-label}

\medskip

\begin{tabular}{
  @{}
  l
  S[table-format=6.0]
  S[table-format=2.3]
  S[table-format=2.3]
  S[table-format=2.0]
  S[table-format=3.0]
  @{}
}
\toprule
& {Obs} & {Media} & {DE} & {Min} & {Máx} \\
\midrule
Ocupados          &  96703 &   .896 &   .306 &  0 &   1 \\
Años de educación &  96703 & 10.583 &  4.331 &  0 &  26 \\
Soltero           &  96703 &   .281 &   .449 &  0 &   1 \\
Jefe de hogar     &  96703 &   .435 &   .496 &  0 &   1 \\
Edad              &  96703 & 39.301 & 13.824 & 18 & 100 \\
\midrule
\multicolumn{6}{@{}l@{}}{\itshape Ocupados según nivel de estudio} \\
Ninguno           & 586599 &   .546 &   .498 &  0 &   1 \\
Bachiller         & 586599 &   .203 &   .402 &  0 &   1 \\
Técnico           & 586599 &   .161 &   .367 &  0 &   1 \\
Universitario     & 586599 &   .065 &   .246 &  0 &   1 \\
Postgrado         & 586599 &   .000 &   .007 &  0 &   1 \\
\bottomrule
\multicolumn{6}{@{}l@{}}{\footnotesize DE: Desviación Estándar} \\
\end{tabular}

\end{table}

\end{document}

在此处输入图片描述

答案3

一些建议和评论(无特定顺序):

  • 您定义了d列类型,但似乎没有在环境的标题中使用它tabular。我建议您替换

    \begin{tabular}{l*{1}{ccccc}}
    

    \begin{tabular}{@{} l d{6.0} d{2.3} d{2.3} d{2.0} d{3.0} @{}}
    
  • 由于五个标题单元格的内容不是数字,因此您需要将它们偷运过去。请参阅下面示例中dcolumn的用法。\mc

  • 如果您想在pdf文件中使用逗号作为小数点分隔符,您也应该更改\newcolumntype{d}[1]{D{.}{\cdot}{#1}}\newcolumntype{d}[1]{D{.}{,}{#1}}

  • 使用table环境,并使用包的机制来自定义标题的外观。这样,您可以通过 LaTeX 的-系统caption交叉引用文档中其他地方的表格。\label\ref

  • 代替

    \usepackage[left=2.5cm,right=2.5cm,top=2.5cm,bottom=2.5cm]{geometry}
    

    \usepackage[margin=2.5cm]{geometry}
    
  • 代替

    Ocupados según nivel de estudio & & & & & \\
    

    \multicolumn{6}{@{}l}{Ocupados según nivel de estudio} \\
    

    使表格看起来更加紧凑。相关地,将其拆分Desviación Estándar为 2 行。

在此处输入图片描述

\documentclass[12pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{mathptmx}
\usepackage[english,spanish]{babel} 
\usepackage[margin=2.5cm]{geometry}

\usepackage{amsmath}
%%%\usepackage{amsfonts} % is loaded automatically by 'amssymb'
\usepackage{psfrag}  % are you sure you need this package?
\usepackage{amssymb}
\usepackage{graphicx}
\usepackage{float}
\usepackage{apacite}
\usepackage[flushleft]{threeparttable}
\usepackage{enumitem}
\usepackage{setspace}

\usepackage{dcolumn}
\newcolumntype{d}[2]{D{.}{,}{#1}}

%% new material:
\usepackage{booktabs}
\usepackage[labelsep=newline,skip=0.333\baselineskip]{caption}
\renewcommand\thetable{\Roman{table}}
\newcommand\mc[2]{\multicolumn{1}{c}{#1}} % handy shortcut macro

\usepackage[colorlinks]{hyperref}
\usepackage[spanish,nameinlink]{cleveref} % optional

\begin{document}
\begin{table}[ht!]
\centering
\caption{Estadísticas descriptivas GEIH} \label{tab:GEIH}
\begin{tabular}{@{} l d{6.0} d{2.3} d{2.3} d{2.0} d{3.0} @{}}
\toprule
    & \mc{Obs}& \mc{Media} & \mc{Desviación}& \mc{Min} & \mc{Máx}\\
    &&& \mc{Estándar}\\
\midrule
    Ocupados          &  96703 &  0.896 &  0.306 &  0 &   1\\
    Años de educación &  96703 & 10.583 &  4.331 &  0 &  26\\
    Soltero           &  96703 &  0.281 &  0.449 &  0 &   1\\
    Jefe de hogar     &  96703 &  0.435 &  0.496 &  0 &   1\\
    Edad              &  96703 & 39.301 & 13.824 & 18 & 100\\
\midrule
    \multicolumn{6}{@{}l}{Ocupados según nivel de estudio} \\
    Ninguno           & 586599 &  0.546 &  0.498 &  0 &   1\\
    Bachiller         & 586599 &  0.203 &  0.402 &  0 &   1\\
    Técnico           & 586599 &  0.161 &  0.367 &  0 &   1\\
    Universitario     & 586599 &  0.065 &  0.246 &  0 &   1\\
    Postgrado         & 586599 &  0.000 &  0.007 &  0 &   1\\
\bottomrule
\end{tabular}
\end{table}

Una referencia cruzada al \cref{tab:GEIH}.
\end{document}

相关内容