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