我正在尝试使用包构建一些表格siunitx
。正如您在下面的示例中看到的,列中的数字D
在前三行(标题后)中对齐得很好。但是,最后一行中的最后一个数字(46.57%)不再对齐。我猜这与使用有关\itshape
(我遵循了给出的建议这里)。
您知道如何使用斜体字体形状正确对齐最后一行的数字吗?
梅威瑟:
\documentclass[a4paper,11pt]{scrbook}
\usepackage[utf8]{inputenc}
\usepackage{booktabs}
\usepackage{siunitx}
\sisetup{
group-digits=true,
group-minimum-digits=4,
add-integer-zero=false,
}
\begin{document}
\begin{table}[htbp]
\begin{center}
\caption{Some Table}
\begin{tabular}{c
c
S[table-format = 2.0]
S[table-format = 2.2]}
\toprule
A & B & {C} & {D} \\ \midrule
1 & 24 & 12 & 50.00\% \\
2 & 22 & 4 & 18.18\% \\
3 & 85 & 45 & 52.94\% \\ \midrule
\emph{Total} & \emph{131} & {\itshape 61} & {\itshape 46.57\%}\\
\bottomrule
\end{tabular}
\end{center}
\end{table}
\end{document}
编辑:
根据评论和答案得出的新 MWE:
\documentclass{article}
\usepackage{booktabs}
\usepackage{etoolbox}
\robustify\itshape
\usepackage{siunitx}
\sisetup{
group-digits=true,
group-minimum-digits=4,
add-integer-zero=false,
}
\begin{document}
\begin{table}
\centering
\sisetup{detect-all = true, table-space-text-post = \%}
\begin{tabular}{@{}
c
c
S[table-format = 2.0]
S[table-format = 2.2]
@{}}
\toprule
A & B & {C} & {D} \\ \midrule
1 & 24 & 12 & 50.00\% \\
2 & 22 & 4 & 18.18\% \\
3 & 85 & 45 & 52.94\% \\ \midrule
\emph{Total} & \itshape 131 & \itshape 61 & \itshape 46.57\% \\
\bottomrule
\end{tabular}
\end{table}
\end{document}
我想我在这里遗漏了一些重要的东西。但是,这个表格(特别是 C 列和 D 列)看起来不对。C 列中的数字向左移动。此外,百分号仍然太靠近右列边框。有什么建议吗?(抱歉,这些问题很详细,听起来很愚蠢。但是,这个表格开始让我失去理智。)
答案1
该方法与siunitx:粗体单个数字单元格:使其\itshape
更加强大,允许siunitx
在单元格的开始处找到它,允许siunitx
选择合适的字体。
版本 3
对于 v3(当前版本),您需要的代码是
\documentclass{article}
\usepackage{booktabs}
\usepackage{etoolbox}
\robustify\itshape
\usepackage{siunitx}
\sisetup{
group-digits=all,
group-minimum-digits=4
}
\begin{document}
\begin{table}
\centering
\sisetup{mode = text, reset-text-shape = false}
\begin{tabular}{@{}
c
c
S[table-format = 2.0]
S[table-format = 2.2]
@{}}
\toprule
A & B & {C} & {D/\%} \\ \midrule
1 & 24 & 12 & 50.00 \\
2 & 22 & 4 & 18.18 \\
3 & 85 & 45 & 52.94 \\ \midrule
\emph{Total} & \itshape 131 & \itshape 61 & \itshape 46.57\\
\bottomrule
\end{tabular}
\end{table}
\end{document}
如果您希望每行都有单位(虽然通常这样做,但一般不建议这样做),那么您需要在相应的列中留出空间:
\documentclass{article}
\usepackage{booktabs}
\usepackage{etoolbox}
\robustify\itshape
\usepackage{siunitx}
\sisetup{
group-digits=true,
group-minimum-digits=4,
}
\begin{document}
\begin{table}
\centering
\sisetup{mode = text, reset-text-shape = false}
\begin{tabular}{@{}
c
c
S[table-format = 2.0]
S[table-format = 2.2\,\%]
@{}}
\toprule
A & B & {C} & {D} \\ \midrule
1 & 24 & 12 & 50.00\,\% \\
2 & 22 & 4 & 18.18\,\% \\
3 & 85 & 45 & 52.94\,\% \\ \midrule
\emph{Total} & \itshape 131 & \itshape 61 & \itshape 46.57\,\%\\
\bottomrule
\end{tabular}
\end{table}
\end{document}
版本 2
使用旧版本 2(如果您愿意,可以使用 进行测试\usepackage{siunitx}[=v2]}
,例如
\documentclass{article}
\usepackage{booktabs}
\usepackage{etoolbox}
\robustify\itshape
\usepackage{siunitx}
\sisetup{
group-digits=true,
group-minimum-digits=4,
add-integer-zero=false,
}
\begin{document}
\begin{table}
\centering
\sisetup{detect-all = true}
\begin{tabular}{@{}
c
c
S[table-format = 2.0]
S[table-format = 2.2]
@{}}
\toprule
A & B & {C} & {D/\%} \\ \midrule
1 & 24 & 12 & 50.00 \\
2 & 22 & 4 & 18.18 \\
3 & 85 & 45 & 52.94 \\ \midrule
\emph{Total} & \itshape 131 & \itshape 61 & \itshape 46.57\\
\bottomrule
\end{tabular}
\end{table}
\end{document}
您可以对每行单位使用类似的方法,但是您需要这样做,S[table-format = 2.2, table-space-text-post = \,\%]
因为 v2 无法从中提取后数字部分table-format
。
答案2
对于任何遇到此问题的人:当我尝试约瑟夫的回答我只是没有看到任何斜体显示,字体都是直立的。但是,使用命令时不会发生这种情况\bfseries
,只有\itshape
使用命令时才会发生这种情况。
为我解决这个问题的方法是将其更改\usepackage{siunitx}
为\usepackage{siunitx-v2}
。根据日志,这从 v3.0.37 更改为 v2.8e。这有点麻烦,因为例如,这个旧版本的 siunitx 显然无法处理科学计数法值(即2.3e4
),而我不得不更改它们。
有siunitx 跟踪器中已关闭的问题关于类似的问题,但应该已经修复。我会尝试报告此问题。