![siunitx:在表格中按小数点对齐数字不适用于粗体或斜体数字](https://linux22.com/image/232104/siunitx%EF%BC%9A%E5%9C%A8%E8%A1%A8%E6%A0%BC%E4%B8%AD%E6%8C%89%E5%B0%8F%E6%95%B0%E7%82%B9%E5%AF%B9%E9%BD%90%E6%95%B0%E5%AD%97%E4%B8%8D%E9%80%82%E7%94%A8%E4%BA%8E%E7%B2%97%E4%BD%93%E6%88%96%E6%96%9C%E4%BD%93%E6%95%B0%E5%AD%97.png)
用户 lockstep 提供了此解决方案:
\usepackage{siunitx}
\begin{document}
\begin{tabular}{S[table-format=3.2]}
555 \\
7.77 \\
99.9
\end{tabular}
接受的答案有效;但我随后发现,如果表格中的数字是粗体(即在内),则无效\textbf{}
。在这种情况下,所有内容都向左对齐。在我的例子中,我确实需要使用粗体(以将用户的视线引向较大表格中的特定列)。
举个例子,下面是一个测试表和输出。
\begin{table}
\begin{tabular}{@{}l S[table-format=3.2] S[table-format=3.2]@{}}
\toprule
\textbf{Foo} & \textbf{Normal} & \textbf{Bold} \\
\midrule
foo1 & 111 & \textbf{111}\\
foo2 & 222.2 & \textbf{222.2}\\
foo3 & 3.33 & \textbf{3.33}\\
foo4 & 4 & \textbf{4}\\
foo5 & 5.5 & \textbf{5.5}\\
\bottomrule
\end{tabular}
\end{table}
输出:
我检查了手动的但没有找到任何相关信息。我猜想标记的存在会使解析器误以为单元格不是数字,但这只是猜测,我可能是错的。
提前感谢您的建议。
答案1
您必须使用detect-all
包选项并添加\bfseries
到列声明中,而不是\textbf
对每个单元格都使用。(抱歉之前没有回答 - 我错误地认为您想要一个粗体单元格。)
\documentclass{article}
\usepackage{booktabs}
\usepackage[detect-all]{siunitx}
\begin{document}
\begin{table}
\begin{tabular}{@{}lS[table-format=3.2]>{\bfseries}S[table-format=3.2]@{}}
\toprule
\textbf{Foo} & \textbf{Normal} & \textbf{Bold} \\
\midrule
foo1 & 111 & 111 \\
foo2 & 222.2 & 222.2 \\
foo3 & 3.33 & 3.33 \\
foo4 & 4 & 4 \\
foo5 & 5.5 & 5.5 \\
\bottomrule
\end{tabular}
\end{table}
\end{document}
答案2
最近在另一个论坛上出现了这个问题,Joseph 想出了一个解决方案。我附上了他的答案。关键是使用包etoolbox
和\robustify\bfseries
好吧,格式化的工作方式
siunitx
有点复杂,因为它必须选择要扩展哪些宏,哪些不扩展。由于需要 e-TeX,我采取的态度是“不扩展”的东西可以是 e-TeX\protected
。对于手头的情况,因此您需要使“bfseries”变得健壮。类似\documentclass{文章} \usepackage{colortbl,etoolbox,siunitx,xcolor} \robustify\bfseries \sisetup{ 检测权重 = true ,语言环境 = DE ,} \开始{文档} \开始{表格} \sisetup{ 组分隔符 = .,表格格式 = 5.0, 表号对齐方式 = 右,} \begin{表格}{S[表格格式 = 8.0, 表号对齐方式 = 右]SlSS} \rowcolor[gray]{0.9} \bfseries 1234567 & \bfseries 12345 & \bfseries 测试 & \bfseries 12345 & \bfseries 12345 \\ 1234567 & 12345 & 测试 &12345 &12345 \\ \end{表格} \茶几} \结束{文档}应该可以完成这项工作。我需要修复 siunitx 的一个错误,所以我会在文档中添加一条注释。如果上述方法对您有用,请告诉我。