¿Cómo crear una tabla con valores, tanto en fuente normal como en cursiva, alineados con el punto decimal?

¿Cómo crear una tabla con valores, tanto en fuente normal como en cursiva, alineados con el punto decimal?

Mi pregunta está relacionada conesta preguntaytambién este. Yo quieroalinear los valores perfectamente con respecto al punto decimal. Yo también quieroajustar el contenido con el ancho de columna óptimopara que no se desperdicie espacio.

La solución al problema actual se utilizará para preparar tablas más grandes (con >10 columnas y >20 filas).

Formato de salida esperado:El problema actual es crear una tabla que tenga el formato como se muestra en la imagen a continuación (hecha en MS Word), con una alineación perfecta con respecto al punto decimal:

ingrese la descripción de la imagen aquí

El valor entre paréntesis representa elt-stat para la estimación del parámetro.

EDITAR: Puedo abordar los problemas de alineación con respecto al punto decimal. Sin embargo, ahora me enfrento a otros problemas de alineación que se muestran en la figura siguiente: ingrese la descripción de la imagen aquí

Yo quiero:

  1. reducir los espacios mostrados por las flechas verdes
  2. eliminar los huecos mostrados por las flechas rojas

El MWE se proporciona a continuación:

\documentclass{article}
\usepackage{amsmath,booktabs,multirow,multicol,tabularx,siunitx}
\usepackage[table, dvipsnames]{xcolor}
\sisetup{
    output-exponent-marker = \text{\hspace{1pt}e},
    exponent-product={},
    retain-explicit-plus,
    input-open-uncertainty  = ,
    input-close-uncertainty = ,
    table-align-text-pre    = false,
    table-align-text-post = false,
    round-mode=places,
    round-precision=3,
    table-space-text-pre    = (,
    table-space-text-post   = )
}
\newcommand{\cellvalItal}[1]{\begin{tabular}[l]{S[round-precision=2,math-rm=\mathit]}#1\end{tabular}}
\newcommand{\cellval}[2]{\begin{tabular}[l]{S}#1\\\cellvalItal{#2}\end{tabular}}

\newcommand{\Shifted}[1]{\begin{tabular}[l]{@{\phantom{~~~}}l@{}}#1\end{tabular}}
\newcommand{\ShiftedWithBaseCase}[2]{\begin{tabular}[l]{@{\phantom{~~~}}l}#1 \\ {[}\emph{#2}{]}\end{tabular}}

\begin{document}
\begin{table}
\begin{tabular}{l@{}S@{}S}
\toprule
\multirow{2.3}{*}{\textbf{Parameter}}  
    &   \multicolumn{2}{@{}c}{\textbf{Estimate}} \\
    \cmidrule(lr){2-3}
    & {\centering\textbf{Model~M1}} & {\centering\textbf{Model~M2}}\\
    \cmidrule(lr){1-1}
    \cmidrule(lr){2-2}
    \cmidrule(lr){3-3}
{Constant} & 
    \cellval{-1.316e-2}{(-23.153)} & 
    \cellval{-58.510}{(-4.26)}\\ % User defined functions to shorten the code length
\addlinespace
\textbf{\emph{Category}} & & \\
\ShiftedWithBaseCase{Male members}{Base case: Female members} & \cellval{0.112}{(2.04)}&
{---}\\
\bottomrule
\end{tabular}
\end{table}
\end{document}

¿Alguien puede ayudar?

Respuesta1

Probablemente esta no sea la solución más elegante y tal vez necesite algunos ajustes más, pero aún así, con suerte, se acercará más al resultado deseado. Los cambios relevantes en comparación con el ejemplo original se resaltan mediante el uso, % <---seguido de una breve explicación del cambio correspondiente.

ingrese la descripción de la imagen aquí

\documentclass{article}
\usepackage{amsmath,booktabs,multirow,multicol,tabularx,siunitx}
\usepackage[table, dvipsnames]{xcolor}
\sisetup{
    output-exponent-marker = \text{\hspace{1pt}e},
    exponent-product={},
    retain-explicit-plus,
    input-open-uncertainty  = ,
    input-close-uncertainty = ,
    table-align-text-pre    = false,
    table-align-text-post = false,
    round-mode=places,
    round-precision=3,
    table-space-text-pre    = (,
    table-space-text-post   = )
}
\newcommand{\cellvalItal}[1]{\begin{tabular}[l]{S[round-precision=2,math-rm=\mathit]}#1\end{tabular}}
\newcommand{\cellvalleft}[2]{\begin{tabular}[l]{@{}S[table-format=-2.3e-1]@{}}#1\\\cellvalItal{#2}\end{tabular}} % <--- added @{} to either side of the S column specifier to remove extro horizontal space in the columns
\newcommand{\cellvalright}[2]{\begin{tabular}[l]{@{}S[table-format=-2.3]@{}}#1\\\cellvalItal{#2}\end{tabular}} % <--- added @{} to either side of the S column specifier to remove extro horizontal space in the columns, added appropriate table-format option, needed to be different than the table-format of the second cell, hence the second command.

%\newcommand{\Shifted}[1]{\begin{tabular}[l]{@{\phantom{~~~}}l@{}}#1\end{tabular}}
\newcommand{\ShiftedWithBaseCase}[2]{\begin{tabular}[l]{@{\phantom{~~~}}l}#1 \\ {[}\emph{#2}{]}\end{tabular}}

\renewcommand{\cmidrulekern}{0.25em} % <--- added do decrease space etween adjacent \cmidrule commands

\begin{document}
\begin{table}
\begin{tabular}{@{}l@{}S@{}S@{}} % <---- added @{} here to left align text with the left edge of the table
\toprule
\multirow{2.3}{*}{\textbf{Parameter}}  
    &   \multicolumn{2}{c}{\textbf{Estimate}} \\
    \cmidrule(l){2-3} % <--- removed r here in order to make sure the cmirdlue reaches the right "border" of the table
    & {\textbf{Model~M1}} & {\textbf{Model~M2}}\\ % <--- removed \centering here. Text in {} is by default centered in S type columns.
    \cmidrule(r){1-1} % <--- removed l here to make line left aligned with left endge of table
    \cmidrule(lr){2-2}
    \cmidrule(l){3-3} % <--- removed r here in order to make sure the cmirdlue reaches the right "border" of the table
{Constant} & 
    \cellvalleft{-1.316e-2}{(-23.153)} & 
    \cellvalright{-58.510}{(-4.26)}\\ % User defined functions to shorten the code length
\addlinespace
\textbf{\emph{Category}} & & \\
\ShiftedWithBaseCase{Male members}{Base case: Female members} & \cellvalleft{0.112}{(2.04)}&
{---}\\
\bottomrule
\end{tabular}
\end{table}
\end{document}

información relacionada