使用 siunitx 的 newcolumntype 后使用自定义间距

使用 siunitx 的 newcolumntype 后使用自定义间距

我似乎找不到一种方法来使用类似@{blah blah}自定义列类型的东西,这些自定义列类型涉及带有参数siunitxS列类型[…]。(问题似乎>{}也发生在,但这不是我现在需要的。)下面是一个可以让这一切更清楚的例子。前五个表格工作正常,而第六个表格导致“非法前置标记”错误,尽管在我看来,最后一个表格显然是前几个表格的后续……

\documentclass{report}

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}

\usepackage{siunitx}

\begin{document}

\newcommand{\stuff}{\hspace{2\tabcolsep}}

\begin{tabular}{c @{\stuff} c}
    1 & 1 \\
\end{tabular}

\newcolumntype{C}{c}
\begin{tabular}{C @{\stuff} C}
    2 & 2 \\
\end{tabular}

\begin{tabular}{S @{\stuff} S}
    3 & 3 \\
\end{tabular}

\newcolumntype{t}{S}
\begin{tabular}{t @{\stuff} t}
    4 & 4 \\
\end{tabular}

\begin{tabular}{S[table-format = 1] @{\stuff} S[table-format = 1]}
    5 & 5 \\
\end{tabular}

\newcolumntype{T}{{S[table-format = 1]}}
\begin{tabular}{T @{\stuff} T}
    6 & 6 \\
\end{tabular}

\end{document}

S[…]因此,和\newcolumntype的组合@{…}似乎是问题的根源。我想我在这里忽略了一些愚蠢的东西……希望你能帮忙。谢谢!

顺便说一下,在我的真实的文档中,自定义列类型如下:

\newcolumntype{e}[3]{%
    {S[
        table-format        = #1.#2e-#3,
        exponent-base       = e,
        exponent-product    = {\,}
    ]}%
}

(周围的额外括号S[…]似乎是必要的,因为\newcolumntype似乎以一种奇怪的方式解析东西。)

在我找到更好的解决方案之前,我想我会\sisetup在我的环境开始时使用一个table或类似的...不是很漂亮。o(+_+)o

编辑:使用提供的解决方案,我的真实列类型现在如下所示:

\newcolumntype{e}[3]{%
    S[{
        table-format        = #1.#2e-#3,
        exponent-base       = e,
        exponent-product    = {\,}
    }]%
}

并且可以像这样使用:\begin{tabular}{e121 @{\hspace{2\tabcolsep}} e121},等等。

答案1

\newcolumntype{T}{S[table-format = 1]}

不是

\newcolumntype{T}{{S[table-format = 1]}}

或者对于出现在参数中的字母,用内部保护参数{}

\newcolumntype{e}{S[{table-format = 1}]}

相关内容