我正在尝试制作一个表格,其中正值和负值在同一行中上下排列。我遇到的问题是,当将newtxtext
和newtxmath
包作为字体与 TeXLive 2022 一起使用时,对齐消失了(它与 <=2021 版本配合使用效果很好)。负数相对于正数发生了偏移,请参阅:
没有newtxtext
和newtxmath
包,我得到了所需的对齐(它仍然不完美,但足够好):
梅威瑟:
\documentclass[10pt]{article}
\usepackage[utf8]{inputenc}
\usepackage{siunitx, booktabs}
% \usepackage{newtxtext, newtxmath}
\begin{document}
\renewcommand{\arraystretch}{1.2}
\sisetup{round-mode=places, round-precision=3, retain-explicit-plus}
\begin{tabular}{c S S @{\,}S @{\,}S}
\toprule
\multicolumn{1}{c}{One} & \multicolumn{1}{c}{Two} & \multicolumn{1}{c}{Three} & \multicolumn{1}{c}{$\pm 1\sigma$} & \multicolumn{1}{c}{$\pm 2\sigma$} \\
\midrule
1400 & 0.2469 & 0.2494 & \(^{\num{+0.1462}}_{\num{-0.2217}}\) & \(^{\num{+0.7946}}_{\num{-0.7372}}\) \\
2200 & 0.1433 & 0.1449 & \(^{\num{+0.3306}}_{\num{-0.2372}}\) & \(^{\num{+0.5893}}_{\num{-0.6317}}\) \\
3400 & 0.3360 & 0.3396 & \(^{\num{+0.2250}}_{\num{-0.5221}}\) & \(^{\num{+0.8784}}_{\num{-0.8279}}\) \\
\bottomrule
\end{tabular}
\end{document}
期望的输出将是这样的:
答案1
加号的宽度比减号的宽度小,这似乎是 NewTX 中的一个严重缺陷。
您可以通过+
在数学模式中重新定义来修复它,以便它使用与减号一样宽的框。
\documentclass[10pt]{article}
\usepackage{siunitx, booktabs}
\usepackage{newtxtext, newtxmath}
\makeatletter
\newcommand{\wellsizedplus}{\mathbin{\mathpalette\wellsizedplus@\relax}}
\mathchardef\standardplus=\mathcode`+
\newcommand{\wellsizedplus@}[2]{%
\begingroup
\sbox\z@{$\m@th#1-$}%
\makebox[\wd\z@]{$\m@th#1\standardplus$}%
\endgroup
}
\begingroup\lccode`~=`+ \lowercase{\endgroup\protected\def~}{\wellsizedplus}
\AtBeginDocument{\mathcode`+="8000 }
\begin{document}
\renewcommand{\arraystretch}{1.2}
\sisetup{round-mode=places, round-precision=3, retain-explicit-plus}
\begin{tabular}{
c
S[table-format=1.3]
S[table-format=1.3]
r
r
}
\toprule
One & {Two} & {Three} &
\multicolumn{1}{c}{$\pm 1\sigma$} &
\multicolumn{1}{c}{$\pm 2\sigma$} \\
\midrule
1400 & 0.2469 & 0.2494 & \(^{\num{+0.1462}}_{\num{-0.2217}}\) & \(^{\num{+0.7946}}_{\num{-0.7372}}\) \\
2200 & 0.1433 & 0.1449 & \(^{\num{+0.3306}}_{\num{-0.2372}}\) & \(^{\num{+0.5893}}_{\num{-0.6317}}\) \\
3400 & 0.3360 & 0.3396 & \(^{\num{+0.2250}}_{\num{-0.5221}}\) & \(^{\num{+0.8784}}_{\num{-0.8279}}\) \\
\bottomrule
\end{tabular}
\end{document}
请注意table-format
选项以及最后两列不是 S
类型。
答案2
编辑:
现在,编辑后的问题就一目了然了。显示表格(仅前两行),您可以通过以下方式重现:
\documentclass[10pt]{article}
\usepackage{booktabs,
siunitx}
\begin{document}
\setlength\extrarowheight{2pt}
\sisetup{retain-explicit-plus}
\begin{tabular}{S[table-format=4.0]
*{2}{S[round-mode=places,
round-precision=3,
table-format=1.3]}
*{2}{S[round-mode=places,
round-precision=3,
table-format=-1.3]}}
\toprule
{One} & {Two} & {Three} & {$\pm 1\sigma$} & {$\pm 2\sigma$} \\
\midrule
4100 & 0.0667 & 0.0493 & $^{\num{+0.0807}}_{\num{-0.104}}$ & $^{\num{+0.6094}}_{\num{-0.504}}$ \\
\addlinespace
5100 & 0.0334 & 0.0453 & $^{\num{+0.0662}}_{\num{-0.204}}$ & $^{\num{+0.0662}}_{\num{-0.403}}$ \\
\bottomrule
\end{tabular}
\end{document}
附录:
使用该tabularray
包后,行之间的垂直空间更好,表体代码也更短一些:
\documentclass{article}
\usepackage{tabularray}
\UseTblrLibrary{booktabs, siunitx, varwidth}
\begin{document}
\sisetup{ round-mode=places,
round-precision=3,
retain-explicit-plus}
\begin{tblr}{colspec = { S[table-format=4.0,
round-mode=none,
round-precision=0]
*{2}{S[table-format=1.3]}
*{2}{Q[c, si={table-format=-1.3}, mode=math]}
},
row{1} = {guard},
measure=vbox}
\toprule
One & Two & Three & \pm 1\sigma & \pm 2\sigma \\
\midrule
4100 & 0.0667 & 0.0493 & ^{\num{+0.0807}}_{\num{-0.104}} & ^{\num{+0.6094}}_{\num{-0.504}} \\
5100 & 0.0334 & 0.0453 & ^{\num{+0.0662}}_{\num{-0.204}} & ^{\num{+0.0662}}_{\num{-0.403}} \\
4100 & 0.0667 & 0.0493 & ^{\num{+0.0807}}_{\num{-0.104}} & ^{\num{+0.6094}}_{\num{-0.504}} \\
5100 & 0.0334 & 0.0453 & ^{\num{+0.0662}}_{\num{-0.204}} & ^{\num{+0.0662}}_{\num{-0.403}} \\
\bottomrule
\end{tblr}
\end{document}