如何使用“tabularx”和“\NewDocumentEnvironment”包含规则?

如何使用“tabularx”和“\NewDocumentEnvironment”包含规则?

以下 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

也许您可以使用+b参数类型:

\documentclass{article}

\usepackage{etoolbox}
\usepackage{booktabs}
\usepackage{tabularx}

\NewDocumentEnvironment{mytabular}{+b}{%
  \begin{tabularx}{\linewidth}{XX}
    #1
  \bottomrule
  \end{tabularx}
}{}

\begin{document}

\noindent \begin{mytabular}
a & b\\
\end{mytabular}

\end{document}

在此处输入图片描述

答案2

有关信息,您可以尝试具有自己的列系统的{NiceTabular}。使用以下代码,您可以直接获得预期的行为。nicematrixX

\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)来完成的。当然,主要缺点是它需要多次编译。

相关内容