带有特殊标题的表格存在问题:加粗的数字与其余数字对齐不良

带有特殊标题的表格存在问题:加粗的数字与其余数字对齐不良

我正在尝试制作包含特殊标题的 LaTeX 表格。表格代码如下所示:

\begin{table}[ht]
\centering
\scalebox{0.70}{
\begin{tabular}{lddcdd}
\toprule
 &\multicolumn{2}{c}{M1} & 
 & \multicolumn{2}{c}{M2} \\
\cmidrule{2-3} \cmidrule{5-6}
 & \multicolumn{1}{c}{1-2} 
 & \multicolumn{1}{c}{7-8} & 
 & \multicolumn{1}{c}{1-2} 
 & \multicolumn{1}{c}{7-8} \\ 
\midrule
A &   \textbf{0.0021} & \textbf{0.0033} & & -2.37 & 0.00 \\ 
B & \textbf{0.0052} & \textbf{0.0042} & & -1.23 & 0.67 \\ 
C & \textbf{0.0082} & \textbf{0.0057} & & -0.21 & 1.08 \\ 
D & 0.0107 & 0.0097 & &  0.74 & 1.41 \\ 
E & \textbf{0.0080} & 0.0088 & &  5.05 & 5.05 \\ 
F & 0.0140 & 0.0148 & & -2.37 & 0.00 \\ 
G & 0.0128 & 0.0176 & & -1.23 & 0.67 \\ 
H & 0.0157 & 0.0164 & & -0.62 & 1.10 \\ 
I & 0.0145 & 0.0155 & & -0.21 & 1.08 \\ 
K & 0.0236 & 0.0225 & &  5.05 & 5.05 \\ 
\bottomrule
\end{tabular}}
\smallskip
\caption{My Caption}
\label{tab:table1}
\end{table}

它会创建一个如下表:

在此处输入图片描述

但我希望加粗的数字与未加粗的数字很好地对齐...我怎样才能使加粗的数字以正确的方式与其他数字对齐?谢谢,

答案1

使用S列(在siunitx包中定义)和强大的命令用粗体数字标记单元格:

\documentclass{article}
\usepackage[skip=1ex]{caption}  % <---
\usepackage{booktabs}

\usepackage{siunitx}  % <---
\usepackage{etoolbox} % <--- 
\newrobustcmd\B{%
\DeclareFontSeriesDefault[rm]{bf}{b}\bfseries} % <===
\begin{document}
    \begin{table}[ht]
\sisetup{detect-weight, 
         mode=text, % <===
         table-format=1.4}
    \centering
\begin{tabular}{l SS S[table-format=-1.2]S[table-format=1.2]}
    \toprule
    &   \multicolumn{2}{c}{M1}  &   \multicolumn{2}{c}{M2}  \\
    \cmidrule(r){2-3}
    \cmidrule(l){4-5}
    &   {1-2}   &   {7-8}       &   {1-2}   &   {7-8}       \\
    \midrule
A   &\B 0.0021  &\B 0.0033      & -2.37     &  0.00         \\
B   &\B 0.0052  &\B 0.0042      & -1.23     &  0.67         \\
C   &\B 0.0082  &\B 0.0057      & -0.21     &  1.08         \\
D   &   0.0107  &   0.0097      &  0.74     &  1.41         \\
E   &\B 0.0080  &   0.0088      &  5.05     &  5.05         \\
F   &   0.0140  &   0.0148      & -2.37     &  0.00         \\
G   &   0.0128  &   0.0176      & -1.23     &  0.67         \\
H   &   0.0157  &   0.0164      & -0.62     &  1.10         \\
I   &   0.0145  &   0.0155      & -0.21     &  1.08         \\
K   &   0.0236  &   0.0225      &  5.05     &  5.05         \\
    \bottomrule
\end{tabular}
    \caption{My Caption}
\label{tab:table1}
    \end{table}
\end{document} 

在此处输入图片描述

笔记:

  • 不要使用\scalebox,它也会缩放表格中的字体(你无法控制它们的大小)

  • 确定 5 列并用 和 标记组就足够\cmidrule(r){2-3}\cmidrule(l){4-5}

编辑:

在定义中

\newrobustcmd\B{\DeclareFontSeriesDefault[rm]{bf}{b}\bfseries}

表示{b}“非扩展粗体”。这就是为什么用 标记的文本\B与常规粗细文本占用相同宽度的原因。此属性——正如@Mico 评论中指出的那样——正是在表格设置中显示数字所需要的。它可以被利用siunitx,它必须在 中text-mode

答案2

解决方案在这里找到--https://tex.stackexchange.com/a/318416/197451

我没有使用d列,而是使用S列来指定第二列中的数字

在此处输入图片描述

\documentclass[preview,border=1pt]{standalone}
\usepackage{booktabs}
\usepackage{siunitx}

\usepackage{etoolbox}   % <-- new
\usepackage{xparse}     % <-- new
\NewExpandableDocumentCommand\mc{O{1}m} % <--
    {\multicolumn{#1}{c}{#2}}

\begin{document}
    \begin{table}
        \sisetup{ input-open-uncertainty= ,  % <-- new
            input-close-uncertainty= , % <-- new
            table-space-text-pre=(,    % <-- new
            table-space-text-post=),   % <-- new
            table-align-text-pre=false,% <-- new
            detect-weight,
            mode=text,                 % <-- new
            table-format=1.4}
\renewcommand{\bfseries}{\fontseries{b}\selectfont} % <-- new
\newrobustcmd{\B}{\bfseries}                        % <-- changed
    \caption{My Caption}
    \centering
\begin{tabular}{ l S}        % <--- changed
    \toprule[2pt]
\mc[2]{Panel A}       \\
    \midrule
 &\mc{M1}\\
\midrule
B  & 0.0140\\
\addlinespace
C  &\B 0.0140 \\
\bottomrule
\end{tabular}
    \end{table}
\end{document} 

相关内容