我正在尝试定义一个新环境,将一个tabularx
环境封闭在另一个环境中以提供某种格式(例如center
将整个环境居中)。以下是我的尝试,但它会产生熟悉的! File ended while scanning use of \TX@get@body
错误。但是,我已经\tabularx
在定义中使用了该命令,这通常是此错误的修复方法。
以下是我的“MWE”尝试,但失败了:
\documentclass{article}
\usepackage{tabularx}
\newenvironment{CT}{%
\begin{center}\tabularx{200pt}{XX}}{%
\endtabularx\end{center}}
\begin{document}
\begin{CT}
One & Two
\end{CT}
\end{document}
如果我删除\begin{center}
然后\end{center}
它运行,而以下内容完全没问题:
\documentclass{article}
\usepackage{tabularx}
\begin{document}
\begin{center}
\begin{tabularx}{200pt}{XX}
One & Two
\end{tabularx}
\end{center}
\end{document}
我猜想问题在于\tabularx
内部行为方式\newenvironment
和如何寻找匹配的一些微妙之处\endtabularx
。
答案1
首先\tabularx
要做的事情是
\edef\TX@{\@currenvir}%
即它将当前环境名称保存在名称下\TX@
;然后设置目标宽度,然后继续抓取组成表格的标记。我不会在这里发布代码,但关键问题是扫描机制基本上会不断收集标记,直到找到。\end{current_environment}
使用您的代码
\newenvironment{CT}
{%
\begin{center}%
\tabularx{200pt}{XX}
}
{%
\endtabularx
\end{center}%
}
\begin{CT}
在 中的某个点扩展结果\begin{center}
,将其设置\@currenvir
为center
。然后\tabularx
启动,设置\TX@
为center
,并收集标记(不扩展它们),直到找到\end{center}
。但是,您的代码确实不是包含\end{center}
而是\end{CT}
。收集机制不知道 隐藏\end{center}
在 中\end{CT}
,因此它会继续收集内容,直到到达文件末尾。
解决方案,正如 egreg 已经提到的在评论中,就是使用\center
和\endcenter
\newenvironment{CT}
{%
\center
\tabularx{200pt}{XX}
}
{%
\endtabularx
\endcenter
}