以下 MWE 给出了一个Misplaced \noalign.
错误:
\documentclass{article}
\usepackage{booktabs}
\usepackage{tabularx}
\NewDocumentEnvironment{mytabular}{}{\tabularx{\linewidth}{XX}}{\bottomrule\endtabularx}
%\newenvironment{mytabular}{\tabularx{\linewidth}{XX}}{\bottomrule\endtabularx} % this does not throw an error
\begin{document}
\noindent \begin{mytabular}
a & b\\
\end{mytabular}
\end{document}
\NewDocumentEnvironment
用替换\newenvironment
或删除\bottomrule
可以消除错误,但我想在实际(未最小化)代码中使用改进的参数语法,而不必每次都包含\bottomrule
。我猜问题在于如何tabularx
捕获表体,但有没有办法让它工作?
答案1
答案2
有关信息,您可以尝试具有自己的列系统的{NiceTabular}
。使用以下代码,您可以直接获得预期的行为。nicematrix
X
\documentclass{article}
\usepackage{booktabs}
\usepackage{nicematrix}
\NewDocumentEnvironment{mytabular}{}{\begin{NiceTabular}{XX}}{\bottomrule\end{NiceTabular}}
\begin{document}
\noindent
\begin{mytabular}
a & b\\
\end{mytabular}
\end{document}
原因是它{NiceTabular}
不能将其主体作为 TeX 参数捕获,因为表格的连续组合(为了计算列的宽度X
)是通过连续编译整个文档(以及写入文件的信息aux
)来完成的。当然,主要缺点是它需要多次编译。