如何将 siunitx 和 tabularx 一起使用?X
如果您希望每列都由 解释,那么这种方法非常有效siunitx
,但是,如果我只想对几个表进行解释,该怎么办?那么,是否可以使S[opt]
列行为具有自动宽度?
我正在努力解决该列的可选参数部分S
,到目前为止这就是我所得到的。
平均能量损失
\documentclass{article}
\usepackage{array,tabularx,siunitx,booktabs}
\usepackage[utf8]{inputenc}
% Allow `_` and `:` in macro names (LaTeX3 style)
\catcode`\_=11
\catcode`\:=11
% Internal code of `S`
\newcolumntype{Y}[1]{% << mandatory argument (how to make it optional?)
>{\__siunitx_table_collect_begin:Nn S{#1} }%
X%
<{\__siunitx_table_print:}%
}
\catcode`\_=8
\catcode`\:=12
\begin{document}
\begin{table}[h]
\centering
\caption{Some table}
\begin{tabularx}{\textwidth}{Y{}Y{}Y{}}
\toprule
{Tempo (min)} & {Fase A (\%v/v)} & {Fase B (\%v/v)} \\
\midrule
0,01 & 100 & 0\\
15 & 80 & 20\\
25 & 80 & 20\\
30 & 100 & 0\\
\bottomrule
\end{tabularx}
\end{table}
\end{document}
如果答案是“不,那是不可能的”,那也没关系,但如果它能完美运行就更好了。:D
有人会问为什么要使用tabularx
数字列,简单的解释:疯狂的顾问要求。如果这取决于我……:)
答案1
如果你确实喜欢 tabularx:
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{booktabs,tabularx}
\newcommand\mcx[1]{\multicolumn{1}{>{\centering\arraybackslash}X}{#1}}
\usepackage{siunitx}
\begin{document}
\begin{table}[htp]%never just [h]
\centering
\caption{Some table}
\begin{tabularx}{\textwidth}{*{3}{S[table-format=3.2]}}
\toprule
\mcx{Tempo (min)} & \mcx{Fase A (\%v/v)} & \mcx{Fase B (\%v/v)} \\
\midrule
0,01 & 100 & 0\\
15 & 80 & 20\\
25 & 80 & 20\\
30 & 100 & 0\\
\bottomrule
\end{tabularx}
\end{table}
\end{document}
但结果(在我看来)比其他答案差很多。如果减小表格宽度,情况可能会略有改善,但如果可以自动完成,为什么还要这么复杂呢tabularx
?
答案2
你想要的是tabular*
,而不是tabularx
。但结果无论如何都是错误的,正如你从下图中清楚看到的那样。
\documentclass{article}
\usepackage{array,siunitx,booktabs}
\usepackage[utf8]{inputenc}
\begin{document}
\begin{table}[htp]
\centering
\caption{Some table}\label{label}
\begin{tabular*}{\textwidth}{@{\extracolsep{\fill}}SSS@{}}
\toprule
{Tempo (\si{min})} & {Fase A ($\%v/v$)} & {Fase B ($\%v/v$)} \\
\midrule
0,01 & 100 & 0\\
15 & 80 & 20\\
25 & 80 & 20\\
30 & 100 & 0\\
\bottomrule
\end{tabular*}
\end{table}
\begin{table}[htp]
\centering
\caption{Some table}\label{label2}
\begin{tabular}{@{}SSS@{}}
\toprule
{Tempo (\si{min})} & {Fase A ($\%v/v$)} & {Fase B ($\%v/v$)} \\
\midrule
0,01 & 100 & 0\\
15 & 80 & 20\\
25 & 80 & 20\\
30 & 100 & 0\\
\bottomrule
\end{tabular}
\end{table}
\end{document}
答案3
tabular*
您不需要将列扩展至文本宽度tabularx
,但这实际上不是一个目标,因为它只会使表格更难阅读。
这也使得使用 S 可选参数作为可选参数变得容易
\documentclass{article}
\usepackage{array,tabularx,siunitx,booktabs}
\usepackage[utf8]{inputenc}
\begin{document}
\begin{table}[htp]%never just [h]
\centering
\caption{Some table}
\begin{tabular*}{\textwidth}{@{\extracolsep{\fill}}SSS@{}}
\toprule
{Tempo (min)} & {Fase A (\%v/v)} & {Fase B (\%v/v)} \\
\midrule
0,01 & 100 & 0\\
15 & 80 & 20\\
25 & 80 & 20\\
30 & 100 & 0\\
\bottomrule
\end{tabular*}
\end{table}
\end{document}