如何制作一个由“X”和“S”组合而成的列说明符?

如何制作一个由“X”和“S”组合而成的列说明符?

如何将 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}

相关内容