siunitx 表中的 uline 和 table-format 问题

siunitx 表中的 uline 和 table-format 问题

我之前问过一个问题,关于在使用 siunitx 列定义时在表中给数据加下划线的问题S(请参阅表格中下划线和 siunitx 的使用)。给出的建议很完美,直到我添加了\sisetup{table-format=2.1}以减少数字占用的空间量。我现在已经设法将我的表格完美地分开,所以我真的不想删除\sisetup,但这行意味着表格中任何带下划线的值现在都没有按小数点对齐。

有什么方法可以将下划线与此结合起来吗\sisetup

梅威瑟:

\documentclass{article}
\usepackage{etoolbox,siunitx,booktabs,threeparttable,multirow,array,graphicx}
\usepackage[normalem]{ulem}
\robustify\bfseries
\robustify\uline
\sisetup{detect-weight        = true,
         detect-inline-weight = math,
         tight-spacing        = true,
         table-format         = 2.1,
         }

\begin{document}
    \begin{table}
    \caption{Insert caption here}
    \centering
    \begin{threeparttable}[b]
        \begin{tabular}{SS}
        \toprule
            {Column 1} & {Column 2}\\
        \midrule
            7.1 & 4.2\\
            \uline{8.7} & 6.5\\
            9.3 & \uline{1.0}\\
        \bottomrule
        \end{tabular}
    \end{threeparttable}
    \end{table}
\end{document} 

答案1

在这里,我只是巧妙地使用了\llap,并将其合并到 中Uline。不确定它是否能处理所有情况,但我愿意根据需要进一步调整。第一个版本最简单,但如果表格数据不符合 ,可能会造成混淆table-format

\documentclass{article}
\usepackage{etoolbox,siunitx,booktabs,threeparttable,multirow,array,graphicx}
\usepackage[normalem]{ulem}
\robustify\bfseries
\robustify\uline
\sisetup{detect-weight        = true,
         detect-inline-weight = math,
         tight-spacing        = true,
         table-format         = 2.1,
         }
\def\Uline#1{#1\llap{\uline{\phantom{#1}}}}
\begin{document}
    \begin{table}
    \caption{Insert caption here}
    \centering
    \begin{threeparttable}[b]
        \begin{tabular}{SS}
        \toprule
            {Column 1} & {Column 2}\\
        \midrule
            7.1 & 4.2\\
            \Uline{8.7} & 6.5\\
            9.3 & \Uline{11.0}\\
        \bottomrule
        \end{tabular}
    \end{threeparttable}
    \end{table}
\end{document}

在此处输入图片描述


如果数据条目不符合,则此替代版本更为强大。但是,必须根据设置table-format的定义。以下是一些相应的值:\Decimaltable-format

table-format = 2.0 ---> \def\Decimal{}

table-format = 2.1 ---> \def\Decimal{.0}

table-format = 2.2 ---> \def\Decimal{.00}

已编辑以处理 的情况\Uline{11.},自动在小数点后添加零。已重新编辑以将光标置于数据输入的末尾,这样,例如,\Uline{11.2}345行为符合预期,带有11.2下划线,而 则345不然。

\documentclass{article}
\usepackage{etoolbox,siunitx,booktabs,threeparttable,multirow,array,graphicx}
\usepackage[normalem]{ulem}
\robustify\bfseries
\robustify\uline
\sisetup{detect-weight        = true,
         detect-inline-weight = math,
         tight-spacing        = true,
         table-format         = 2.2,
         }
\def\Decimal{.00}% This structure should corresponds to the ".2" of "table-format"
\def\Uline#1{\Ulinehelp#1 }
\def\Ulinehelp#1.#2 {%
  #1.#2\setbox0=\hbox{#1\Decimal}\hspace{-\wd0}{\if\relax#2\relax%
    \uline{\phantom{#1.0}}\else\uline{\phantom{#1.#2}}\fi}%
    }
\begin{document}
    \begin{table}
    \caption{Insert caption here}
    \centering
    \begin{threeparttable}[b]
        \begin{tabular}{SS}
        \toprule
            {Column 1} & {Column 2}\\
        \midrule
            \Uline{7.10} & \Uline{544.2123}\\
            \Uline{8.777} & 6.5\\
            9.3 & \Uline{11.}\\
        \bottomrule
        \end{tabular}
    \end{threeparttable}
    \end{table}
\end{document}

在此处输入图片描述

相关内容