使用 ltablex 时自身环境出现错误

使用 ltablex 时自身环境出现错误

我正在尝试ltablex使用以下基于的代码来工作这个答案

\documentclass{article}
\usepackage{ltablex}
\usepackage{blindtext}
\keepXColumns

\newenvironment{test}
    {%
     \tabularx{\textwidth}{lX}
    }
    {%
     \endtabularx
    }

\begin{document}

\begin{test}
    row 1 & \blindtext[2] \\
    row 2 & \blindtext \\
    row 3 & \blindtext[2] \\
\end{test}

\end{document}

不幸的是,抛出了以下错误:

!LaTeX 错误:\begin{test} 在输入第 16 行以 \end{tabularx} 结束。

请参阅 LaTeX 手册或 LaTeX Companion 了解解释。输入 H 可立即获得帮助。...

l.20 \end{测试}

我该如何修复这个问题才能获得跨越多页的表格和X列类型?

答案1

不知道为什么测试不起作用(可能需要@DavidCarlisle 来解释)。这是一个可行的替代方案,使用environ

\documentclass{article}
\usepackage{ltablex}
\usepackage{blindtext,environ}
\keepXColumns

% \newenvironment{test}
% {%
%   \begin{tabularx}{\textwidth}{lX}
%     }
%     {%
%   \end{tabularx}
% }


\NewEnviron{test}{
  \begin{tabularx}{\textwidth}{lX}
    \BODY
  \end{tabularx}
}



\begin{document}

\begin{test}
    row 1 & \blindtext[2] \\
    row 2 & \blindtext \\
    row 3 & \blindtext[2] \\
\end{test}

 \end{document}

答案2

您可以尝试重新插入 tabularx 用于测试此类内部的代码\endtabularx。它适用于您的示例,但我没有尝试真正理解代码,因此不知道两个补丁是否都是必要的(它也仅适用于第二个补丁)以及它是否会破坏其他内容。

\documentclass{article}
\usepackage{ltablex}
\usepackage{blindtext}
\keepXColumns
\usepackage{etoolbox}
\makeatletter
\pretocmd\TX@endtabularx{%
     \expandafter\expandafter\expandafter
     \TX@find@endtabularxa\csname end\TX@\endcsname
     \endtabularx\TX@\endtabularx\TX@find@endtabularxa
     }{}{\fail}

\patchcmd\TX@endtabularx{\end{tabularx}}{%
   \expandafter\expandafter\expandafter
   \TX@find@endtabularxbb
    \expandafter\end\expandafter{\TX@}%
    \endtabularx\TX@\endtabularx\TX@find@endtabularxb
    }{}{\fail}

\makeatother     


\newenvironment{test}
    {%
     \tabularx{\textwidth}{lX}
    }
    {%
     \endtabularx
    }

\begin{document}

\begin{test}
    row 1 & \blindtext[2] \\
    row 2 & \blindtext \\
    row 3 & \blindtext[2] \\
\end{test}

\end{document}

相关内容