对齐列(使用 \dcolumn)在 \multicolumn 中较长的文本下宽度不等

对齐列(使用 \dcolumn)在 \multicolumn 中较长的文本下宽度不等

我有一张包含三列的回归表。一列为名称,一列为估计值,一列为标准误差。显示估计值和标准误差的两列以变量名称为标题。我借助对齐单元格中的数字\dcolumn

问题是,如果表格中有一段较长的文本\multicolumn,表格的最后一列会被拉伸。这个问题是众所周知的,并且已经有解决方案。这里这里

我只是不明白如何将它们应用到具有对齐列的表中。

以下是带有垂直条的 MWE,可以更好地说明宽度:

\documentclass{article}

\usepackage{tabularx}
\usepackage{dcolumn}
\usepackage{booktabs}

\begin{document}
    \begin{table}[t]
        \caption{MWE}
        \centering
        \begin{tabular}{l|D{.}{.}{3}|D{.}{.}{3}}
            \toprule
            & \multicolumn{2}{c}{Long name of dependent variable} \\
            & \multicolumn{1}{c}{$\beta$} & \multicolumn{1}{c}{\textit{SE}} \\
            \midrule
            x1 & 0.020 & (0.009) \\
            x2 & -0.345 & (0.123) \\
            \bottomrule
        \end{tabular}
    \end{table}
\end{document}

该表如下所示: 具有不同列宽的MWE表

我希望看到的是这种对齐方式、相等的列宽和居中的列标题:

具有相等列但没有变量名的 MWE 表

...但变量名称与第一个表相同。

笔记:我不坚持使用\dcolumn或任何其他软件包。所有能用(并且不会与其他基本软件包产生问题)的软件包都可以。

答案1

其中siunitx和 的p{...}列类型为\multicolumn{2}{..}{...}

在此处输入图片描述

\documentclass{article}

\usepackage{siunitx}
\usepackage{booktabs}

\begin{document}
    \begin{table}[t]
    \sisetup{input-symbols = (),
             table-column-width=13mm,
             table-format=-1.3}
        \caption{MWE}
        \centering
        \begin{tabular}{l SS}
            \toprule
                & \multicolumn{2}{>{\centering\arraybackslash}p{\dimexpr26mm+2\tabcolsep}}{Long name of dependent variable} \\
                & {$\beta$} & {\textit{SE}} \\
            \midrule
            x1  & 0.020     & (0.009)       \\
            x2  & -0.345    & (0.123)       \\
            \bottomrule
        \end{tabular}
    \end{table}
\end{document}

答案2

既然你说了任何包,这里有一个使用的解决方案卡路里

\documentclass{article}
\usepackage{cals, caption}

\let\nc=\nullcell                                  % Shortcuts
\let\sc=\spancontent

\begin{document}

\begin{table*}
\caption{MWE}
\footnotesize
\begin{calstable}[c]
% Defining columns relative to each other and relative to the margins
\colwidths{{\dimexpr(\columnwidth)/14\relax}
            {\dimexpr(\columnwidth)/9\relax}
            {\dimexpr(\columnwidth)/9\relax}
            }
% The tabular fills the text area if sum of all columns is 6

% Set up the tabular
\makeatletter
\def\cals@framers@width{0.8pt}   % Outside frame rules, reduce if the rule is too heavy
\def\cals@framecs@width{0pt}
\def\cals@bodyrs@width{0.6pt}
\def\cals@cs@width{0pt}             % Inside rules, reduce if the rule is too heavy
\def\cals@rs@width{0.6pt}
\def\cals@bgcolor{}

\def\bb{\ifx\cals@borderB\relax     % Botton border switch (off-on)
    \def\cals@borderB{0pt}
\else \let\cals@borderB\relax\fi}

\def\lp{\ifdim\cals@paddingL=0.0pt\relax    % Left padding switch (off-on)
    \cals@setpadding{Ag}
\else \setlength{\cals@paddingL}{0pt}\fi}

\def\rp{\ifdim\cals@paddingR=0.0pt\relax    % Right padding switch (off-on)
    \cals@setpadding{Ag}
\else \setlength{\cals@paddingR}{0pt}\fi}

% R1H1
\thead{%
\brow
    \bb\lp\cell{}\lp\bb
    \lp\nc{ltb}\lp
    \lp\rp\nc{rtb}\alignC\sc{Long name of dependent variable}\rp\lp
\erow
%R2H2
\brow
    \alignL\cell{}\lp
    \alignC\cell{\vfil $\beta$}
    \rp\alignC\cell{\vfil\textit{SE}}\rp\bb
\erow
}
\tfoot{\lastrule\strut}
%R3B2
\brow
    \lp\alignL\cell{\vfil X1}\lp
    \alignR\cell{\vfil 0.020}
    \rp\alignR\cell{\vfil (0.009)}\rp
\erow
%R4B3
\brow
    \bb\lp\alignL\cell{\vfil X2}\lp
    \alignR\cell{\vfil $-$0.345}
    \rp\alignR\cell{\vfil (0.123)}\rp\bb
\erow
\makeatletter
\end{calstable}\par
\end{table*}

\end{document}

在此处输入图片描述

相关内容