siunitx:如何获得粗体、对齐的条目以及如何在单位长度不同时对齐?

siunitx:如何获得粗体、对齐的条目以及如何在单位长度不同时对齐?

我尝试了第一步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 kgvs )。 是否有一种解决方案可以根据小数点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 列间距,而改用\,(一个细空格)。然后我改变了对齐方式,以便将数量的两个部分推到一起。

相关内容