![使用 siunitx 时,tabu 和 tabularx 之间发生冲突](https://linux22.com/image/245590/%E4%BD%BF%E7%94%A8%20siunitx%20%E6%97%B6%EF%BC%8Ctabu%20%E5%92%8C%20tabularx%20%E4%B9%8B%E9%97%B4%E5%8F%91%E7%94%9F%E5%86%B2%E7%AA%81.png)
我设置了许多表格,{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
似乎可以使您的示例起作用。