我尝试了第一步siunitx
,但是在下面的最小示例中,我无法实现以下目标:
1)将第一列中的条目按小数点对齐
2)在第二列中添加粗体条目
3)使第二列中的条目按小数点对齐。
由于\rowcolor
命令,代码目前未运行。我根据手册进行了修改siunitx.pdf
,为什么它不起作用?
\documentclass{article}
\usepackage{siunitx, tabularx, etoolbox, xcolor}
\begin{document}
\begin{table}
\robustify\bfseries% see 7.15 in siunitx.pdf
\centering
\begin{tabular}{lS[table-format=2.3]S[table-format=1.4]}
\multicolumn{1}{c}{$a\ (b)$}&\multicolumn{1}{c}{col 1}&\multicolumn{1}{c}{col 2}\\\hline
0.05\ (0.1)&\SI{20.64}{s}&\rowcolor[gray]\bfseries\SI{3.0601}{s}\\
0.1\ \phantom{5}(0.2)&\SI{16.82}{s}&\SI{1.59}{s}\\
0.3\ \phantom{5}(0.4)&\SI{22.48}{s$^\ast$}&\SI{0.64}{s}\\
0.4\ \phantom{5}(0.5)&\multicolumn{1}{c}{$-$}&\SI{0.52}{s}\\
\end{tabular}
\end{table}
\end{document}
更新 在约瑟夫提出第一个建议后,我把表格改成这样:
\documentclass{article}
\usepackage{siunitx, tabularx, etoolbox, xcolor, booktabs}
\begin{document}
\begin{table}
\robustify\bfseries
\centering
\begin{tabular}{ScS[table-format=2.2]lS[table-format=1.4, detect-weight]}
\toprule
$a$ & $(b)$ & \multicolumn{2}{c}{col 1, unit} & {col 2/\si{\s}}\\
\midrule
0.05 & (0.123) & 20.64 & s & \bfseries 3.0601\\
0.1 & 0.2 & 16.82 & s2 & 1.59\\
0.3 & 0.4 & 22.48 & s$^\ast$ & 0.64\\
0.4 & 0.5 & {--} & kg & 0.52\\
\bottomrule
\end{tabular}
\end{table}
\end{document}
我剩下的问题是:
1)当其中一个条目带有括号时,如何对齐第二列的条目?[ (0.123)
]
2) 将单位放在不同的列中会导致单位和数字之间的间距过大(尤其是当某些数字有更多位数时,例如2.3 kg
vs )。 是否有一种解决方案可以根据小数点1.232525 kg
对齐条目,但允许通过指定条目以获得数字和单位之间的适当间距?col 1
\SI{}{}
3)\rowcolor
仍然不起作用,我收到Undefined control sequence
错误。我需要额外的软件包吗?
答案1
列的内容S
应该是数字,而不是\SI
或\num
命令。然后,您应该将单位移动到列标题(按分栏)或使用单独的列。仅当单位在列中变化时才建议使用后一种方法,但这里不是这种情况。您也不需要命令,\multicolumn
因为siunitx
命令会自动处理S
列中的括号内容:
\documentclass{article}
\usepackage{siunitx, tabularx, etoolbox, xcolor,booktabs}
\begin{document}
\begin{table}
\robustify\bfseries% see 7.15 in siunitx.pdf
\centering
\begin{tabular}{lS[table-format=2.2,table-space-text-post={*}]
S[table-format=1.4,detect-weight]}
\toprule
\multicolumn{1}{c}{$a\ (b)$}
&{col 1/\si{\s}}
&{col 2/\si{\s}}\\
\midrule
0.05\ (0.1)&20.64 & \bfseries 3.0601\\
0.1\ \phantom{5}(0.2)&16.82&1.59\\
0.3\ \phantom{5}(0.4)&22.48*&0.64\\
0.4\ \phantom{5}(0.5)&{--}&0.52\\
\bottomrule
\end{tabular}
\end{table}
\end{document}
请注意,我使用了booktabs
包在表中绘制适当的规则:这些规则优于 LaTeX 内核的\hline
。
添加其他要求将使我得到类似
\documentclass{article}
\usepackage{siunitx,tabularx, etoolbox, xcolor, booktabs}
\begin{document}
\begin{table}
\robustify\bfseries
\centering
\begin{tabular}
{
S
S[table-format = 2.4,input-open-uncertainty=,input-close-uncertainty=,
input-symbols=()]
S[table-format=2.2,table-number-alignment = right]
@{\,}
s[table-alignment=left]
S[table-format=1.4, detect-weight]
}
\toprule
$a$ & {$(b)$} & \multicolumn{2}{c}{col 1, unit} & {col 2/\si{\s}}\\
\midrule
0.05 & (0.123) & 20.64 & \s & \bfseries 3.0601\\
0.1 & 0.2 & 16.82 & \s\squared & 1.59\\
0.3 & 0.4 & 22.48 & \s$^\ast$ & 0.64\\
0.4 & 0.5 & {--} & \kg & 0.52\\
\bottomrule
\end{tabular}
\end{table}
\end{document}
为了将(
...)
包含为数字的一部分,我更改了设置,这样两个标记就不会被读取为不确定部分,而是被读取为符号。我还从 的角度将这些额外的标记视为“数字”,从而为它们保留了空间table-format
。
为了处理单位的间距,我使用了一个s
列(用于解析单位),并@{\,}
删除了正常的 LaTeX 列间距,而改用\,
(一个细空格)。然后我改变了对齐方式,以便将数量的两个部分推到一起。