使用 siunitx 将列对齐到小数点,其中每个单元格包含上标表格注释

使用 siunitx 将列对齐到小数点,其中每个单元格包含上标表格注释

我正在使用该threeparttable包排版带有一些脚注的表格。

我想使用 提供的功能对齐每个数字列中的条目siunitx。但是,当表格条目有脚注标签时,它会弄乱列对齐。

SIunitx 对齐的表格问题

在第一个数字列中领导tnote 标签,对齐不会发生。在第二个数字列中尾随tnote 标签,对齐工作正常,但 tnote 上标标签不接近数字。

我需要的是领导tnote 版本,其中列在小数点对齐,并且上标标签与\thinspace列中的每个数字保持接近(可能最多带有)。

如何实现?如有必要,我很乐意使用dcolumn或打包,而不是。pgftablessiunitx

以下是生成上表的代码

\documentclass[a4paper,12pt]{article}
\usepackage[english]{babel}
\usepackage[utf8x]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[a4paper,top=3cm,bottom=2cm,left=3cm,right=3cm,marginparwidth=1.75cm]{geometry}
\usepackage{threeparttable}
\usepackage{booktabs}
\usepackage{siunitx}

\begin{document}

\begin{table}[htb]
    \caption{The best table ever}
    \label{tbl:importanttable}
    \centering
    \begin{threeparttable}
        \begin{tabular}{@{} l S[table-format=4.2] S[table-format=4.2]}  % Works with tnote
            \toprule
            \multicolumn{1}{@{} l}{Description} & \multicolumn{1}{c}{Experiment 1} & \multicolumn{1}{c}{Experiment 2} \\
            \midrule

            First thing,  & \tnote{a} 1791 & 2427 \tnote{b} \\
            Second thing & \tnote{a} 272.8 & 90.2 \tnote{c} \\
            third thing & \tnote{d} 82.28 & 43.72 \tnote{d}\\
            Fourth thing & \tnote{d} 3 & 130 \tnote{e}\\
            \bottomrule
        \end{tabular}
        \begin{tablenotes}[para,flushleft]
        \item[a] blah
        \item[b] more blah
        \item[c] stuff
        \item[d] assumed
        \item[e] given
        \end{tablenotes}

    \end{threeparttable}
\end{table}

\end{document}

更新

使用makebox*{00}[l]\tnote{a}用户 Bernard 的回答中的技术需要手动调整文本宽度,这对于大于几个单元格的任何内容都是有问题的。例如,这对下表不起作用。

    Thing1  & {\tnote{a}}0.31   \\
    Thing2  & {\tnote{b}}2.40   \\
    Thing3  & {\tnote{d}}6.50   \\
    Thing4  & {\tnote{c}}6.00   \\
    Thing5  & {\tnote{e}}8.94   \\
    Thing6  & {\tnote{f}}26.82  \\
    Thing7  & {\tnote{e}}13.41  \\
    Thing8  & {\tnote{f}}1.20   \\
    Thing9  & {\tnote{g}}0.75   \\
    Thing10 & {\tnote{c}}150.60 \\
    Thing11 & {\tnote{f}}0.01   \\
    Thing12 & {\tnote{g}}0.00   \\

答案1

您需要“告诉”siunitx命令不要展开:最简单的方法是使用etoolbox及其\robustify命令。然后您需要保留一点空间,使用table-space-text-pre(这将在即将推出的 v3 版软件包中简化)。对于\tnote,还有一个额外的问题,因为定义本身会进行一些间距处理,这会混淆中的方法siunitx。因此,我们也需要一个修改过的命令:

\documentclass[a4paper,12pt]{article}
\usepackage[english]{babel}
\usepackage[utf8x]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[a4paper,top=3cm,bottom=2cm,left=3cm,right=3cm,marginparwidth=1.75cm]{geometry}
\usepackage{threeparttable}
\usepackage{booktabs}
\usepackage{siunitx}
\usepackage{etoolbox}
\newrobustcmd{\Tnote}[1]{\textsuperscript {\TPTtagStyle {#1}}}
\begin{document}

\begin{table}[htb]
    \caption{The best table ever}
    \label{tbl:importanttable}
    \centering
    \begin{threeparttable}
        \begin{tabular}{@{} l S[table-format=4.2,table-space-text-pre=\Tnote{a},table-align-text-pre=false] S[table-format=4.2]}  % Works with tnote
            \toprule
            \multicolumn{1}{@{} l}{Description} & \multicolumn{1}{c}{Experiment 1} & \multicolumn{1}{c}{Experiment 2} \\
            \midrule

            First thing,  & \Tnote{a} 1791 & 2427 \Tnote{b} \\
            Second thing & \Tnote{a} 272.8 & 90.2 \Tnote{c} \\
            third thing & \Tnote{d} 82.28 & 43.72 \Tnote{d}\\
            Fourth thing & \Tnote{d} 3 & 130 \Tnote{e}\\
            \bottomrule
        \end{tabular}
        \begin{tablenotes}[para,flushleft]
        \item[a] blah
        \item[b] more blah
        \item[c] stuff
        \item[d] assumed
        \item[e] given
        \end{tablenotes}

    \end{threeparttable}
\end{table}

\end{document}

在此处输入图片描述

答案2

表格前注释的对齐似乎存在问题(可能是错误?),但我可以解决表格注释的问题数字。这是我能得到的最好的结果,添加了caption包以更好地在标题和表格之间留出空间,并简化了第一行的代码(不需要\multicolumn):

\documentclass[a4paper, 12pt]{article}
\usepackage[english]{babel}
\usepackage[utf8x]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[a4paper ,top=3cm, bottom=2cm, hmargin=3cm, marginparwidth=1.75cm]{geometry}
\usepackage{threeparttable}
\usepackage{booktabs}
\usepackage{siunitx}
\usepackage{caption}

\begin{document}

\begin{table}[htb]
    \caption{The best table ever}
    \label{tbl:importanttable}
    \centering
\sisetup{table-format=4.2, table-number-alignment=center, table-space-text-pre=\textsuperscript{a}, table-space-text-post=\textsuperscript{a}, table-align-text-post=false}
    \begin{threeparttable}
        \begin{tabular}{@{} l SS} % Works with tnote
            \toprule
            Description & {Experiment 1} &{Experiment 2} \\
            \midrule
            First thing, & {\tnote{a}} 1791 & 2427 \tnote{b} \\
            Second thing & {\tnote{a}} 272.8 & 90.2 \tnote{c} \\
            third thing & {\tnote{d}} 82.28 & 43.72 \tnote{d}\\
            Fourth thing & {\tnote{d}} 3 & 130 \tnote{e}\\
            \bottomrule
        \end{tabular}
        \begin{tablenotes}[para,flushleft]
        \item[a] blah
        \item[b] more blah
        \item[c] stuff
        \item[d] assumed
        \item[e] given
        \end{tablenotes}
    \end{threeparttable}
\end{table}

\end{document} 

在此处输入图片描述

编辑

以下是对小包进行修改makebox,使表格注释在第二列靠近数字的位置:

\usepackage{makebox}
....................
   \begin{table}[htb]
        \caption{The best table ever}
        \label{tbl:importanttable}
        \centering
    \sisetup{table-format=4.2, table-number-alignment=center, table-space-text-pre=a, table-align-text-pre=false, table-space-text-post=\textsuperscript{a}, table-align-text-post=false}
        \begin{threeparttable}
            \begin{tabular}{@{} l SS} % Works with tnote\textsuperscript{a}
                \toprule
                Description & {Experiment 1} &{Experiment 2} \\
                \midrule
                First thing, & {\tnote{a}} 1791 & 2427 \tnote{b} \\
                Second thing & {\makebox*{0}[l]{\tnote{a}}} 272.8 & 90.2 \tnote{c} \\
                third thing & {\makebox*{0}[l]{\tnote{d}}} 82.28 & 43.72 \tnote{d} \\
                Fourth thing & {\makebox*{0}[l]{\tnote{d}}} 3 & 130 \tnote{e} \\
                \bottomrule
            \end{tabular}
            \begin{tablenotes}[para,flushleft]
            \item[a] blah
            \item[b] more blah
            \item[c] stuff
            \item[d] assumed
            \item[e] given
            \end{tablenotes}
        \end{threeparttable}
    \end{table}

在此处输入图片描述

相关内容