正如标题所述,我想将 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 保存到盒子里?如果可以,如何保存?
我正在添加解释3标记在这里,因为这个环境将在 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]
(或任何其他长度)。