S
我有一张包含包的许多列的表格,siunitx
其中包含平均值和误差。当平均值和误差输入一行时,表格对于页面宽度来说太宽了。不过,在符号后换行是+-
可行的,但也应该有小数对齐。
是否可以为包S
的列定义固定长度,从而获得像该列siunitx
中的换行符?p
编辑:平均值可以采用以下形式;;和xx.x
。误差可以采用以下形式;;和。x.x
x
xx
xx.x
x.x
x
xx
梅威瑟:
\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}