将 tabularx 保存在框中

将 tabularx 保存在框中

正如标题所述,我想将 a 保存tabularx在一个框中。通常我会使用这种方法将其保存在框中,然后进行排版。但问题是要在环境中使用它。

tabular因此,适用于,但不起作用的简单方法tabularx是:

\documentclass{article}
\usepackage{xparse}
\usepackage{tabularx}

\newsavebox{\mybox}
\ExplSyntaxOn
\NewDocumentEnvironment{strange}{}
    {
        \begin{lrbox}{\mybox}
        \tabularx{\textwidth}{|l|ll|}
    }
    {
        \endtabularx
        \end{lrbox}
    }
\ExplSyntaxOff

\begin{document}

\begin{strange}
x & y & z\\\hline
\end{strange}

\end{document}

问题:是否有可能将 tabularx 保存到盒子里?如果可以,如何保存?

我正在添加标记在这里,因为这个环境将在 expl3 上下文中定义。因此,任何使用 l3box 的解决方案都值得赞赏。

答案1

在此处输入图片描述

\documentclass{article}
\usepackage{xparse}
\usepackage{tabularx}

\newsavebox{\mybox}
\NewDocumentEnvironment{strange}{}
    {%
        \lrbox\mybox
        \tabularx{\textwidth}{|X|ll|}%
    }
    {%
        \endtabularx
        \endlrbox
    }

\begin{document}

\begin{strange}
x & y & z\\\hline
\end{strange}


\hrule

\begin{center}
\usebox\mybox
\end{center}

\end{document}

\tabularx需要知道哪个环境名称将出现在\end{....}源文件中,以便它可以抓取环境主体,如果嵌套,\begin{lrbox}那么它想要查看\end{lrbox}但不存在。

答案2

为了使用,新环境定义的“开始”部分tabularx必须没有\begin。另一方面,使用\lrbox而不是\begin{lrbox}不建议https://tex.stackexchange.com/a/125954/4427

如果您不打算嵌套strange环境,最简单的解决方法是使用environ

\documentclass{article}
\usepackage{environ}
\usepackage{tabularx}

\newsavebox{\mybox}

\NewEnviron{strange}[\textwidth]{%
  \begin{lrbox}{\mybox}%
  \begin{tabularx}{#1}{|l|ll|}\BODY\end{tabularx}%
  \end{lrbox}%
}

\begin{document}

\begin{strange}
x & y & z\\\hline
\end{strange}

\end{document}

您也可以拨打电话\begin{strange}[10cm](或任何其他长度)。

相关内容