siunitx 在包含文本和数学的表格中进行对齐

siunitx 在包含文本和数学的表格中进行对齐

我正在尝试制作一个表格,其中最后一列在同一个单元格中混合输入文本和数字,并且我想将它们在小数点处对齐,而不管前面的文本的长度(尽管通常是像 <、> 等这样的符号)。问题是数字与文本重叠。

梅威瑟:

\documentclass{article}
\usepackage{booktabs}
\usepackage{siunitx}
\begin{document}
\begin{table}
\begin{tabular}{@{}l S[table-format=1.4] @{}}
& {p} \\
\midrule
Model & {\textless{}} 0,0001 \\
\hspace{0.5cm}A & {\textless{}} 0,0001 \\
\hspace{0.5cm}B & 0,2980 \\
\hspace{0.5cm}C & 0,0007 \\
\end{tabular}
\end{table} 
\end{document}

结果是:

如果我使用:

\documentclass{article}
\usepackage{booktabs}
\usepackage{siunitx}
\begin{document}
\begin{table}
\begin{tabular}{@{}l S[table-format=1.4] @{}}
& {p} \\
\midrule
Model & {text} {0.0001} \\
\hspace{0.5cm}A & {\textless{}} {0.0001} \\
\hspace{0.5cm}B & 0.2980 \\
\hspace{0.5cm}C & 0.0007 \\
\end{tabular}
\end{table} 
\end{document}

我得到:

“文本”和“0.0001”之间没有空格,并且小数点处的数字没有对齐。

如果我尝试将数字右对齐并将标题居中:

\documentclass{article}
\usepackage{booktabs}
\usepackage{siunitx}
\begin{document}
\begin{table}
\begin{tabular}{@{}l r@{}}
& \multicolumn{1}{c}{p} \\
\midrule
Model & {\textless{}} {0.0001} \\
\hspace{0.5cm}A & {\textless{}} {0.0001} \\
\hspace{0.5cm}B & 0.2980 \\
\hspace{0.5cm}C & 0.0007 \\
\end{tabular}
\end{table} 
\end{document}

结果是:

这仍然是错误的,因为标题没有位于列的中心(它比应有的位置更靠左)。

我也尝试在 siunitx 的序言中声明 mode=text,但仍然无法得到我想要的结果。

有没有办法让单列标题居中,下方是文本,单元格中有一些文本,后面跟着一个空格,然后是小数点处对齐的数字?更接近这个模型的东西:

我正在尝试避免手动调整 \hspace{} 之类的操作。谢谢。

编辑 好的,多亏了@Mico的代码,我才更接近我想要的。我在小数点标记的两边添加了一些数字,以检查数字前后文本的对齐情况。MWE:

\documentclass{article}
\usepackage{booktabs}
\usepackage{siunitx}
\sisetup{
  output-decimal-marker = {,},
  table-number-alignment = center,
  table-align-comparator = false,
  table-align-text-pre = false,
  table-align-text-post = false,
  table-space-text-pre = \, ,
}
\begin{document}

\begin{tabular}{c S[table-format=2.8, table-comparator=true]}
  & {Value} \\
  \midrule
  Model & <9,0001 \\
  A     & >90,001 \\
  B     &  0,29801111 \\
  C     & \sim 0,0007 \\
  D     & \approx 1,030356{\textsuperscript{a}}
\end{tabular}

\end{document}

给出:

现在我只需要找到一种方法来控制前后文本之间的间距。我希望在比较符号和数字之间留一个小空格(如 \,)。这个想法是全局定义它,以避免必须\newcommand{\ssim}{\sim\,}为每个符号(<、>、~、± 等)定义类似的东西。谢谢。

答案1

您可以将选项table-align-text-pre = false和内容添加table-space-text-pre = <到列的规范中S

在此处输入图片描述

\documentclass{article}
\usepackage{booktabs}
\usepackage[output-decimal-marker={,}]{siunitx}
\begin{document}
\begin{tabular}{@{} c S[table-format=1.4,
                        table-align-text-pre = false,
                        table-space-text-pre = <] @{}}
  & $p$ \\
  \midrule
  Model & <0,0001 \\
  A     & <0,0001 \\
  B     &  0,2980 \\
  C     &  0,0007
\end{tabular}
\end{document}

答案2

您是否尝试过该选项table-alignment-mode=marker

就像这样:

\documentclass{article}
\usepackage{booktabs}
\usepackage{siunitx}
\begin{document}
    \begin{tabular}{@{}c S[table-format=1.4,table-alignment-mode = marker] @{}}
        & {p} \\
        \midrule
        Model & {text} 0.0001 \\
        A & < 0.0001 \\
        B & 0.2980 \\
        C & 0.0007 \\
    \end{tabular}
\end{document}

好像:

在此处输入图片描述

请注意,实际文本需要{},而数学运算符(例如>或)则<不需要,因为siunitx知道如何解释它们。

编辑:如果您希望小数点像最初的例子一样是逗号,请随意添加一个额外的output-decimal-marker={,}

答案3

如果有人感兴趣的话,答案就是将比较器添加到序言中:

\usepackage{siunitx}
\sisetup{
  table-align-comparator=false,
  table-align-text-pre=false,
  input-comparators={\textless}
}

然后在表格中的比较器后添加一个空格:

\textless{ } 0,0001

相关内容