为“tabularx”的“newenvironment”包装器传递参数

为“tabularx”的“newenvironment”包装器传递参数

我正在尝试构建一个tabularx使用 调整行距的环境包装器\newenvironment。这是我的代码:

\documentclass{article}

\usepackage{tabularx}

\newenvironment{tabularxe}[2]{
    \renewcommand{\arraystretch}{1.2}
    \begin{tabularx}{#1}{#2}
}{
    \end{tabularx}
    \renewcommand{\arraystretch}{1}
}


\begin{document}
    
% intended code
\renewcommand{\arraystretch}{1.5}
\begin{tabularx}{\textwidth}{>{\hsize=0.25\hsize}r|X}
test & text\\
test & text
\end{tabularx}
\renewcommand{\arraystretch}{1}

% erroneous code
\begin{tabularxe}{\textwidth}{>{\hsize=0.25\hsize}r|X}
test & text\\
test & text
\end{tabularxe}

\end{document}

但是此代码会引发错误:

TeX capacity exceeded, sorry [grouping levels=255]. ...larx}{\textwidth}{>{\hsize=0.25\hsize}r|X}

这段代码有什么问题?

答案1

由于tabularx需要吸收环境的全部内容,因此需要一种特殊的技术来基于它来定义环境,即使用\tabularx\endtabularx,而不是\begin{tabularx}\end{tabularx}

注意\arraystretch不需要重置,因为 的效果\renewcommand{\arraystretch}{1.2}将与 一起结束\end{tabularxe}

\hsize此外,在列中设置r根本不起作用。

\documentclass{article}
\usepackage{tabularx}

\usepackage{lipsum} % to better show the effect

\newenvironment{tabularxe}[2]{%
    \renewcommand{\arraystretch}{1.2}%
    \tabularx{#1}{#2}%
}{%
    \endtabularx
}


\begin{document}

\noindent    
\begin{tabularxe}{\textwidth}{r|X}
text & \lipsum[1][2-5]\\
text & \lipsum[2][2-5]
\end{tabularxe}

\bigskip

\noindent    
\begin{tabularx}{\textwidth}{r|X}
text & \lipsum[1][2-5]\\
text & \lipsum[2][2-5]
\end{tabularx}

\end{document}

在此处输入图片描述

差别很小,但很明显。

相关内容