使用 siunitx 时,tabu 和 tabularx 之间发生冲突

使用 siunitx 时,tabu 和 tabularx 之间发生冲突

我设置了许多表格,{tabularx}但对于其中一些表格,似乎更容易使用。但如果我同时使用这两个包,并在{tabu}最后一列中给出一个可选参数,它就会崩溃。X{longtabu}S

因此,我可以“卸载”tabularx以使其工作,这是没有选择的,或者使用另一个表格前言,但这不是很好......

\documentclass{article}

\usepackage{tabu,longtable}
\usepackage{tabularx}% comment this out to make it work
\usepackage{siunitx}
\sisetup{locale=DE}

\begin{document}
%\begin{longtabu} to \textwidth{llX[-0.5,l]{S}X[-0.5,l]{S}X[-0.5,l]{S}}
% works with this preamble even when tabularx is loaded:
\begin{longtabu} to \textwidth{llX[-0.5,l]{S}X[-0.5,l]{S}X{S}}
    2&  1400&   2,5 &   1,0 &2,3\\
\end{longtabu}
\end{document}

我发现如何将 siunitx 和 tabularx 一起使用?但没有帮助。

答案1

tabularx正在重新定义\arraybackslash(甚至在文档中说这是一个 hack:

\arraybackslash \\ hack.
                 \def\arraybackslash{\let\\\@arraycr}

tabu不喜欢这个定义。它期望\arraybackslash具有来自的含义array.sty。所以现在\\给出错误。您可以\arraybackslash在本地返回标准定义:

 \begingroup
 \def\arraybackslash{\let\\\tabularnewline}
 \begin{longtabu}
  ....
 \end{longtabu}
 \endgroup

答案2

我不确定tabu这里在做什么(在此之前我没有安装它)但它看起来像是某些东西在本地定义,\\所以它不再结束表行。改为使用\tabularnewline似乎可以使您的示例起作用。

相关内容