Como criar uma tabela com valores, fonte regular e também em itálico, alinhados à vírgula decimal?

Como criar uma tabela com valores, fonte regular e também em itálico, alinhados à vírgula decimal?

Minha pergunta está relacionadaessa questãoetambém este. Eu queroalinhe os valores perfeitamente em relação à vírgula decimal. eu também queroajuste o conteúdo com largura de coluna idealpara que o espaço não seja desperdiçado.

A solução para o problema atual será utilizada para preparar tabelas maiores (com >10 colunas e >20 linhas).

Formatação de saída esperada:O problema atual é criar uma tabela formatada como mostra a imagem abaixo (feita em MS Word), com alinhamento perfeito em relação à vírgula decimal:

insira a descrição da imagem aqui

O valor entre parênteses representa ot-stat para a estimativa do parâmetro.

EDITAR: Sou capaz de resolver os problemas de alinhamento em relação à vírgula decimal. No entanto, agora estou enfrentando alguns outros problemas de alinhamento mostrados na figura abaixo: insira a descrição da imagem aqui

Eu quero:

  1. reduzir as lacunas mostradas pelas setas verdes
  2. elimine as lacunas mostradas pelas setas vermelhas

O MWE é fornecido abaixo:

\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}

Alguém pode ajudar?

Responder1

Esta provavelmente não é a solução mais elegante e talvez precise de mais alguns ajustes, mas ainda assim, esperançosamente, mais próxima do resultado desejado. As alterações relevantes em comparação com o exemplo original são destacadas, % <---seguidas por uma breve explicação da alteração correspondente.

insira a descrição da imagem aqui

\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}

informação relacionada