Siunitx S 列带换行符

Siunitx S 列带换行符

S我有一张包含包的许多列的表格,siunitx其中包含平均值和误差。当平均值和误差输入一行时,表格对于页面宽度来说太宽了。不过,在符号后换行是+-可行的,但也应该有小数对齐。

是否可以为包S的列定义固定长度,从而获得像该列siunitx中的换行符?p

编辑:平均值可以采用以下形式;;和xx.x。误差可以采用以下形式;;和。x.xxxxxx.xx.xxxx

梅威瑟:

\documentclass[10pt]{article}
\usepackage{siunitx,multirow,booktabs}

\begin{document}

\begin{table}[tbp]
    \centering
    \sisetup{ table-number-alignment=center,
    table-figures-uncertainty=1,
          separate-uncertainty=true,
          table-figures-integer = 2,
          table-figures-decimal = 1}
    \caption{Caption}
            \begin{tabular}{*{2}{c} *{8}{S}}
            \toprule
                  \multicolumn{1}{l}{\textbf{C1}}               & \multicolumn{1}{l}{\textbf{C2}}
                    & \multicolumn{1}{c}{C3}
                    & \multicolumn{1}{c}{C4}
                    & \multicolumn{1}{c}{C5}
                    & \multicolumn{1}{c}{C6}    
                    & \multicolumn{1}{c}{C7}
                    & \multicolumn{1}{c}{C8}
                    & \multicolumn{1}{c}{C9}
                    & \multicolumn{1}{c}{C10}       \\
                \midrule
                    \multirow{2}{*}{Z1} & XY & 10.2 \pm 0.4 & 20.2 \pm 12.4 & 1.2 \pm 2.4 & 1.2 \pm 2.4 & 1.2 \pm 22.4 & 1.2 \pm 2.4 & 1.2 \pm 2.4 & 1.2 \pm 2.4         \\
                                                             & YZ & 1.2 \pm 2.4 & 1.2 \pm 2.4 & 1.2 \pm 2.4 & 1.2 \pm 2.4 & 1.2 \pm 2.4 & 1.2 \pm 2.4 & 1.2 \pm 2.4 & 1.2 \pm 12.4       \\
                    \cmidrule(lr){3-10}
                    \multirow{2}{*}{Z2} & XY & 1.2 \pm 2.4 & 30.2 \pm 2.4 & 1.2 \pm 2.4 & 1.2 \pm 2.4 & 1.2 \pm 2.4 & 1.2 \pm 2.4 & 1.2 \pm 2.4 & 1.2 \pm 2.4        \\
                                                             & YZ & 1.2 \pm 2.4 & 1.2 \pm 2.4 & 1.2 \pm 2.4 & 1.2 \pm 2.4 & 1.2 \pm 2.4 & 1.2 \pm 2.4 & 1.2 \pm 2.4 & 1.2 \pm 2.4        \\
                \bottomrule
            \end{tabular}
\end{table}

\end{document}

答案1

这有点像 hack,当然不适合一般用途,并且依赖于所有错误都采用相同形式的事实(在这种情况下,x.x(其他情况在最后讨论))。我提出了两种变体,在第二行中使用,在第一行中\pm使用。\pm

它通过重新定义\pm创建堆栈来实现其目标。 中的参数数量\pmhelp应为 1 加上错误项中的位数(包括作为数字的点)。

\documentclass[10pt]{article}
\let\svpm\pm
\usepackage{siunitx,multirow,booktabs,stackengine}
\stackMath
\def\pm{\pmhelp}
% \pm on 2nd line
\def\pmhelp#1#2#3#4{\def\stackalignment{r}\llap{\stackunder[1pt]{}{{}\svpm #1#2#3#4\strut}}}
% \pm on 1st line
\def\altpmhelp#1#2#3#4{\def\stackalignment{r}\llap{\stackunder[1pt]{}{#1#2#3#4\strut}}\svpm{}\kern-8pt}
\begin{document}

\def\mktb{%
\begin{table}[tbp]
    \centering
    \sisetup{ table-number-alignment=center,
    table-figures-uncertainty=1,
          separate-uncertainty=true,
          table-figures-integer = 2,
          table-figures-decimal = 1}
    \caption{Caption}
            \begin{tabular}{*{2}{c} *{8}{S}}
            \toprule
                  \multicolumn{1}{l}{\textbf{C1}}               & \multicolumn{1}{l}{\textbf{C2}}
                    & \multicolumn{1}{c}{C3}
                    & \multicolumn{1}{c}{C4}
                    & \multicolumn{1}{c}{C5}
                    & \multicolumn{1}{c}{C6}    
                    & \multicolumn{1}{c}{C7}
                    & \multicolumn{1}{c}{C8}
                    & \multicolumn{1}{c}{C9}
                    & \multicolumn{1}{c}{C10}       \\
                \midrule
                    \multirow{2}{*}{Z1} & XY & 10.2 \pm 0.4 & 20.2 \pm 2.4 & 1.2 \pm 2.4 & 1.2 \pm 2.4 & 1.2 \pm 2.4 & 1.2 \pm 2.4 & 1.2 \pm 2.4 & 1.2 \pm 2.4       \\
                                                             & YZ & 1.2 \pm 2.4 & 1.2 \pm 2.4 & 1.2 \pm 2.4 & 1.2 \pm 2.4 & 1.2 \pm 2.4 & 1.2 \pm 2.4 & 1.2 \pm 2.4 & 1.2 \pm 2.4        \\
                    \cmidrule(lr){3-10}
                    \multirow{2}{*}{Z2} & XY & 1.2 \pm 2.4 & 30.2 \pm 2.4 & 1.2 \pm 2.4 & 1.2 \pm 2.4 & 1.2 \pm 2.4 & 1.2 \pm 2.4 & 1.2 \pm 2.4 & 1.2 \pm 2.4        \\
                                                             & YZ & 1.2 \pm 2.4 & 1.2 \pm 2.4 & 1.2 \pm 2.4 & 1.2 \pm 2.4 & 1.2 \pm 2.4 & 1.2 \pm 2.4 & 1.2 \pm 2.4 & 1.2 \pm 2.4        \\
                \bottomrule
            \end{tabular}
\end{table}}
\mktb
\let\pmhelp\altpmhelp
\mktb
\let\pm\svpm
\end{document}

在此处输入图片描述


正如评论中提到的,x.xx可以通过对上述内容进行轻微的修改来解决错误形式。

如果table-figures-decimal设置为等于 2,并且所有数据条目都以相同的格式结束:\pm x.xx,那么以下是适用的修订定义:

% \pm on 2nd line 
\def\pmhelp#1#2#3#4#5{\def\stackalignment{r}%
  \llap{\stackunder[1pt]{}{{}\svpm #1#2#3#4#5\strut}}} 
% \pm on 1st line 
\def\altpmhelp#1#2#3#4#5{\def\stackalignment{r}%
  \llap{\stackunder[1pt]{}{#1#2#3#4‌​#5\strut}}\svpm{}\kern-8pt}

结果如下:

在此处输入图片描述


对于错误形式xx.x,这种方法更成问题,原因我不明白。虽然我本来希望table-figures-decimal在这种情况下设置为 1,但使用所采用的堆叠方法只会导致错误。我被迫设置table-figures-decimal为 2,然后手动进行间距校正以进行补偿。很奇怪。但这是为此工作的 MWE:

\documentclass[10pt]{article}
\let\svpm\pm
\usepackage{siunitx,multirow,booktabs,stackengine}
\stackMath
\def\pm{\pmhelp}
% \pm on 2nd line
\def\pmhelp#1#2#3#4#5{\def\stackalignment{r}\llap{\stackunder{}{{}\svpm #1#2#3#4#5\strut\,~}}}
% \pm on 1st line
\def\altpmhelp#1#2#3#4#5{\def\stackalignment{r}\llap{\stackunder[1pt]{}{#1#2#3#4#5\strut\,~}}\kern-5pt\svpm{}}
\begin{document}

\def\mktb{%
\begin{table}[tbp]
    \centering
    \sisetup{ table-number-alignment=center,
    table-figures-uncertainty=1,
          separate-uncertainty=true,
          table-figures-integer = 2,
          table-figures-decimal = 2}
    \caption{Caption}
            \begin{tabular}{*{2}{c} *{8}{S}}
            \toprule
                  \multicolumn{1}{l}{\textbf{C1}}               & \multicolumn{1}{l}{\textbf{C2}}
                    & \multicolumn{1}{c}{C3}
                    & \multicolumn{1}{c}{C4}
                    & \multicolumn{1}{c}{C5}
                    & \multicolumn{1}{c}{C6}    
                    & \multicolumn{1}{c}{C7}
                    & \multicolumn{1}{c}{C8}
                    & \multicolumn{1}{c}{C9}
                    & \multicolumn{1}{c}{C10}       \\
                \midrule
                    \multirow{2}{*}{Z1} & XY & 10.2 \pm 22.4 & 20.2 \pm 22.4 & 31.2 \pm 22.4 & 31.2 \pm 22.4 & 31.2 \pm 22.4 & 31.2 \pm 22.4 & 31.2 \pm 22.4 & 31.2 \pm 22.4       \\
                                                             & YZ & 31.2 \pm 22.4 & 31.2 \pm 22.4 & 31.2 \pm 22.4 & 31.2 \pm 22.4 & 31.2 \pm 22.4 & 31.2 \pm 22.4 & 31.2 \pm 22.4 & 31.2 \pm 22.4        \\
                    \cmidrule(lr){3-10}
                    \multirow{2}{*}{Z2} & XY & 31.2 \pm 22.4 & 30.2 \pm 22.4 & 31.2 \pm 22.4 & 31.2 \pm 22.4 & 31.2 \pm 22.4 & 31.2 \pm 22.4 & 31.2 \pm 22.4 & 31.2 \pm 22.4        \\
                                                             & YZ & 31.2 \pm 22.4 & 31.2 \pm 22.4 & 31.2 \pm 22.4 & 31.2 \pm 22.4 & 31.2 \pm 22.4 & 31.2 \pm 22.4 & 31.2 \pm 22.4 & 31.2 \pm 22.4        \\
                \bottomrule
            \end{tabular}
\end{table}
}
\mktb
\let\pmhelp\altpmhelp
\mktb
\let\pm\svpm
\end{document}

在此处输入图片描述

相关内容