
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:
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:
Yo quiero:
- reducir los espacios mostrados por las flechas verdes
- 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.
\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}