我想创建一个siunitx
将数值点对齐的列类型。这些值可以用括号括起来,也可以不用。如果有括号,则它们应该紧密地打印在数字周围;而不是对齐。
在 的最新版本中siunitx
,table-align-text-pre
和table-align-text-post
已被弃用,取而代之的是table-align-text-before
和table-align-text-after
函数。
在以前的版本中,我可以编译这个文档:
\documentclass{article}
\usepackage{siunitx}
\newcolumntype{d}{S[
input-open-uncertainty=,
input-close-uncertainty=,
table-align-text-pre=false,
table-align-text-post=false
]}
\begin{document}
\begin{tabular}{d}
-10.10048\\
(2.123)
\end{tabular}
\end{document}
并得到以下表格结果:
使用 的最新版本siunitx
,无论我使用pre/before
或 ,我都会得到这个结果post/after
:
两个问题:
- 如何创建一个在数字周围紧密显示括号的列类型(第一张图片)?
- 有没有一种方法可以实现与版本无关的结果
siunitx
?(或者适用于最近几年发布的版本。)
要求:
- 一种不依赖于 的解决方案
parse-numbers=false
。 - 一种不需要我事先指定每列宽度的解决方案
我读手册的“9.7 回归表”部分,但作者仍然使用table-align-text-pre
,并且我上面粘贴的最小文档并未产生预期的结果。
答案1
如果您替换所有四个当前选项,您遇到的问题将自动消失,即,
input-open-uncertainty=,
input-close-uncertainty=,
table-align-text-pre=false,
table-align-text-post=false
单一选项
input-symbols = ()
\documentclass{article}
\usepackage{siunitx}
\newcolumntype{d}{S[input-symbols = ()]}
\begin{document}
\begin{tabular}{d}
-10.10048\\
(2.123)
\end{tabular}
\end{document}
答案2
将括号合并到table-format
:
\documentclass{article}
\usepackage{siunitx}
\newcolumntype{d}{S[
input-open-uncertainty=,
input-close-uncertainty=,
table-align-text-pre=false,
table-align-text-post=false, table-format=(-2.5)
]}
\begin{document}
\begin{tabular}{d}
-10.10048\\
(2.123)
\end{tabular}
\end{document}
答案3
这是一个错误,siunitx
将在即将推出的 v3.0.25 中修复。可以使用以下方法将更改应用为补丁程序
\cs_gset_protected:Npn \__siunitx_table_center_marker:
{
\hbox_set:Nn \l__siunitx_table_tmp_box
{ \ensuremath { \mathord { \l_siunitx_number_output_decimal_tl } } }
\dim_compare:nNnTF
{ \box_wd:N \l__siunitx_table_integer_box }
>
{
\box_wd:N \l__siunitx_table_decimal_box
- \box_wd:N \l__siunitx_table_tmp_box
}
{
\bool_if:NTF \l__siunitx_table_align_after_bool
{
\__siunitx_table_center_marker_aux:Nnnn \l__siunitx_table_decimal_box
{
\box_wd:N \l__siunitx_table_integer_box
+ \box_wd:N \l__siunitx_table_tmp_box
}
}
{
\__siunitx_table_center_marker_aux:Nnnn \l__siunitx_table_after_box
{
\box_wd:N \l__siunitx_table_after_box
+ \box_wd:N \l__siunitx_table_integer_box
- \box_wd:N \l__siunitx_table_decimal_box
+ \box_wd:N \l__siunitx_table_tmp_box
}
}
{ } { \__siunitx_table_fil: }
}
{
\bool_if:NTF \l__siunitx_table_align_before_bool
{
\__siunitx_table_center_marker_aux:Nnnn \l__siunitx_table_integer_box
{
\box_wd:N \l__siunitx_table_decimal_box
- \box_wd:N \l__siunitx_table_tmp_box
}
}
{
\__siunitx_table_center_marker_aux:Nnnn \l__siunitx_table_before_box
{
\box_wd:N \l__siunitx_table_before_box
+ \box_wd:N \l__siunitx_table_decimal_box
- \box_wd:N \l__siunitx_table_integer_box
- \box_wd:N \l__siunitx_table_tmp_box
}
}
{ \__siunitx_table_fil: } { }
}
}
\cs_new_protected:Npn \__siunitx_table_center_marker_aux:Nnnn #1#2#3#4
{
\hbox_set_to_wd:Nnn #1 {#2}
{
#3
\hbox_unpack:N #1
#4
}
}
\cs_gset_protected:Npn \__siunitx_table_direct_marker_end:
{
\c_math_toggle_token
\hbox_set_end:
\bool_set_true:N \l__siunitx_table_align_before_bool
\bool_set_true:N \l__siunitx_table_align_after_bool
\__siunitx_table_center_marker:
\use:c { __siunitx_table_align_ \l__siunitx_table_align_text_tl :n }
{
\box_use_drop:N \l__siunitx_table_integer_box
\box_use_drop:N \l__siunitx_table_decimal_box
}
}