Alineación horizontal de columnas en un entorno tabularx

Alineación horizontal de columnas en un entorno tabularx

¿Cómo podría centrar las columnas de la siguiente tabla usando tabularx en función de los números y no de todos los símbolos de una celda? Ahora mismo está centrado teniendo en cuenta las estrellas, pero a mí me gustaría centrar sólo en base a números.

\documentclass{article}
\usepackage[flushleft]{threeparttable}
\usepackage{tabularx}

\newcolumntype{Y}{>{\centering\arraybackslash}X}

\begin{document}

\begin{table}[!htb]
\caption{Example table}
\footnotesize
\centering
\begin{threeparttable}
\begin{tabularx}{\linewidth}{lYYY} \hline \hline
& & & \\
& (1) & (2) & (3) \\
& & & \\
& \multicolumn{3}{c}{Example Panel} \\ \cline{2-4}
Coefficient             &  -10     &   -211** &   260*** \\
Standard Error          & (414)    &   (110)  &   (90)   \\
Observations            &  123,370 &  32,268  &  73,102  \\
Variation               &  0.08    &  0.08    &  0.06    \\
Statistics              &  13,115  &  12,826  & 14,031   \\
& & & \\
\hline \hline
\end{tabularx}
\begin{tablenotes}
\fontsize{9pt}{9pt}\selectfont
\item
\textit{Notes:}
Some table notes
\end{tablenotes}
\end{threeparttable}
\end{table}

\end{document}

Respuesta1

Aquí estás con tabular*en lugar de tabularx.

Calculé a simple vista que el ancho de *** es aproximadamente un cuádruple. Los asteriscos están escritos en un cuadro de ancho cero.

Se utiliza un truco sucio para conseguir que el signo menos sea correcto (las entradas están escritas como matemáticas) y que la coma sea un símbolo matemático ordinario.

Tenga en cuenta también el uso de captionun espacio adecuado entre el título y la tabla; el valor predeterminado articlees colocar subtítulosabajomesas.

\documentclass{article}
\usepackage[flushleft]{threeparttable}
\usepackage{booktabs,array,caption}

\newcommand{\st}[1]{\makebox[0pt][l]{#1}}
\newcommand{\decimalcomma}{\mathcode`,=\inteval{\mathcode`,-"6000}}

\begin{document}

\begin{table}[!htbp]
\centering

\caption{Example table}

\begin{threeparttable}
\begin{tabular*}{\textwidth}{
  @{\extracolsep{\fill}}
  l
  *{3}{>{$\decimalcomma}c<{$}}
  @{\quad}}
\toprule
& \multicolumn{3}{c}{Example Panel} \\
\cmidrule(l){2-4}
& (1) & (2) & (3) \\
\midrule
Coefficient             &  -10     &   -211\st{**} &   260\st{***} \\
Standard Error          & (414)    &   (110)       &   (90)   \\
Observations            &  123,370 &  32,268       &  73,102  \\
Variation               &  0.08    &  0.08         &  0.06    \\
Statistics              &  13,115  &  12,826       &  14,031   \\
\bottomrule
\end{tabular*}
\begin{tablenotes}
\small
\item \textit{Notes:} Some table notes
\end{tablenotes}
\end{threeparttable}

\end{table}

\end{document}

Eliminé reglas dobles y filas vacías. También cambié las dos primeras líneas, porque el "Panel de ejemplo" está en un nivel superior a (1), (2) y (3).

ingrese la descripción de la imagen aquí

Si también desea que el signo menos no participe en el centrado y solo ingrese *en lugar de \st{*}, puede hacerlo. Pero no me culpes si esto no siempre funciona.

\documentclass{article}
\usepackage[flushleft]{threeparttable}
\usepackage{booktabs,array,caption}

\newcommand{\st}[1]{\makebox[0pt][l]{#1}}
\newcommand{\decimalcomma}{\mathcode`,=\inteval{\mathcode`,-"6000}}
\newcommand{\zerowidthminus}{%
  \mathchardef\standardminus=\mathcode`-
  \begingroup\lccode`~=`-\lowercase{\endgroup\def~}{\llap{$\standardminus$}}%
  \mathcode`-="8000
}
\newcommand{\noteasterisk}{%
  \begingroup\lccode`~=`*\lowercase{\endgroup\let~}\zwast
  \mathcode`*="8000
}
\newcommand{\zwast}{\hbox to 0pt\bgroup*\checkast}
\newcommand{\checkast}[1]{*\futurelet\next\checkastaux}
\newcommand{\checkastaux}{%
  \ifx\next*%
    \expandafter\checkast
  \else
    \expandafter\hss\expandafter\egroup
  \fi
}
\newcolumntype{N}{>{$\decimalcomma\zerowidthminus\noteasterisk}c<{$}}

\begin{document}

\begin{table}[!htbp]
\centering

\caption{Example table}

\begin{threeparttable}
\begin{tabular*}{\textwidth}{
  @{\extracolsep{\fill}}
  l
  *{3}{N}
  @{\quad}
}
\toprule
& \multicolumn{3}{c@{\quad}}{Example Panel} \\
\cmidrule(l){2-4}
& (1) & (2) & (3) \\
\midrule
Coefficient             &  -10     &   -211** &   260***\\
Standard Error          & (414)    &   (110)       &   (90)   \\
Observations            &  123,370 &  32,268       &  73,102  \\
Variation               &  0.08    &  0.08         &  0.06    \\
Statistics              &  13,115  &  12,826       &  14,031   \\
\bottomrule
\end{tabular*}
\begin{tablenotes}
\small
\item \textit{Notes:} Some table notes
\end{tablenotes}
\end{threeparttable}

\end{table}

\end{document}

ingrese la descripción de la imagen aquí

La única parte “no automática” es medir el número de asteriscos y su posición en la última columna, para que no sobresalgan de la tabla. Sin @{\quad}ti obtendrías

ingrese la descripción de la imagen aquí

Respuesta2

Si quieres seguir con eltabularxconfiguración, una forma de lograr su objetivo de formato sería usar la \rlapmacro, o su prima en modo matemático \mathrlap(proporcionada por elherramientas matemáticaspaquete) - para encerrar **y ***, respectivamente.

Dado que sólo haces un uso muy rudimentario de las capacidades delmesa de tres partesmaquinaria (por ejemplo, sin \tnotedirectivas), abandonaría el threeparttablemedio ambiente por completo. Y reemplazaría las \hline\hlinedirectivas y varias líneas en blanco con \toprule, \cmidruley\bottomrule instrucciones, que son macros proporcionadas porpestañaspaquete. Finalmente, no es necesario \footnotesizeen el tabularxmaterial.

ingrese la descripción de la imagen aquí

\documentclass{article}
\usepackage{tabularx}  % for 'tabularx' env. and 'X' col. type
\newcolumntype{Y}{>{\centering\arraybackslash}X} % centered version of 'X'
\newcolumntype{Z}{>{$}Y<{$}} % automatic math mode

\usepackage{booktabs}  % for well-spaced horizontal rules
\usepackage{mathtools} % for '\mathrlap' macro
\usepackage{icomma}    % no special treatment of ',' in math mode

\begin{document}

\begin{table}[!htb]
\caption{Example table}

\smallskip
\begin{tabularx}{\linewidth}{@{} l ZZZ @{}}
\toprule
& (1) & (2) & (3) \\[1ex]
& \multicolumn{3}{c@{}}{Example Panel} \\ 
\cmidrule(l){2-4}
Coefficient    &  -10   & -211\mathrlap{^{**}} & 260\mathrlap{^{***}} \\
Standard Error & (414)    &   (110)  &   (90)   \\
Observations   &  123,370 &  32,268  &  73,102  \\
Variation      &  0.08    &  0.08    &  0.06    \\
Statistics     &  13,115  &  12,826  & 14,031   \\
\bottomrule
\end{tabularx}

\smallskip\small
\textit{Notes:} Some stuff \dots 
\end{table}

\end{document}

información relacionada