如何创建一个带有值、常规字体以及斜体、与小数点对齐的表格?

如何创建一个带有值、常规字体以及斜体、与小数点对齐的表格?

我的问题与这个问题还有这个。 我想要将数值与小数点完美对齐。 我也想以最佳列宽适应内容这样就不会浪费空间。

当前问题的解决方案将用于准备更大的表格(列数超过 10 列,行数超过 20 行)。

预期输出格式:当前的问题是创建一个格式如下图所示的表格(在 MS Word 中制作),并与小数点完美对齐:

在此处输入图片描述

括号中的值代表-stat 用于参数估计。

编辑: 我可以解决小数点对齐问题。但是,我现在面临下图所示的其他对齐问题: 在此处输入图片描述

我想要:

  1. 减少绿色箭头所示的间隙
  2. 消除红色箭头所示的间隙

MWE 如下:

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

有人可以帮忙吗?

答案1

这可能不是最优雅的解决方案,可能需要进行更多调整,但无论如何,希望它更接近所需的输出。与原始示例相比,相关更改使用突出显示, % <---然后是相应更改的简短说明。

在此处输入图片描述

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

相关内容