我想tabularx
在自己的环境中使用,但嵌套在table
环境内。
请参阅下面的 MWE:我首先在没有自定义环境的情况下产生了所需的结果。然后我尝试用我自己的环境完成相同的输出。可惜这不起作用:
当我从 切换tabular*
到 时tabularx
,出现编译错误File ended while scanning use of \TX@get@body.
。如果我继续使用tabular*
,但将最后一列描述符从 切换c
到X
,会出现另一个编译错误:Extra alignment tab has been changed to \cr. a & b &
。
在回答问题时\newenvironment 中的 tabularx,有人建议使用\tabularx
和,但这在我嵌套在环境内的\ endtabularx
情况下不起作用。tabularx
table
我究竟做错了什么?
\documentclass{article}
\usepackage{tabularx}
\begin{document}
\begin{table}[!h]
\begin{tabularx}{\textwidth}{|c|c|X|}\hline
a & b & tabularx \\\hline
\end{tabularx}
\end{table}
\newenvironment{MyTabular}{
\begin{table}[!h]
\begin{tabular*}{\textwidth}{|c|c|c|}\hline
}{%
\hline
\end{tabular*}
\end{table}
}
\begin{MyTabular}
a & b & MyTabular \\
\end{MyTabular}
\end{document}
答案1
tabularx
收集下一个之前的所有内容,当前环境的名称由设置。因此,如果您只执行\end{⟨current environment⟩}
\begin{...}
\newenvironment{MyTabular}{
\begin{table}[!h]
\tabularx{\textwidth}{|X|X|X|}\hline
}{%
\hline
\endtabularx
\end{table}
}
然后\begin{MyTabular}
将首先保存MyTabular
为当前环境名称,但随后\begin{table}
将当前环境的名称更改为table
;tabularx
尝试查找所有内容\end{table}
,但找不到,因此出现错误。
你应该也\table
使用\endtable
\documentclass{article}
\usepackage{tabularx}
\newenvironment{MyTabular}[1][tbp]{% use !h as default only if you like pain
\table[#1]
\tabularx{\textwidth}{|X|X|X|}
\hline
}{%
\\% <-- I'd put this here, so you don't have to close every tabular with \\
\hline
\endtabularx
\endtable
}
\begin{document}
\begin{MyTabular}
a & b & MyTabular
\end{MyTabular}
\end{document}
编辑在 egreg 的评论之后,我意识到你可能想将表格放置在代码中写的位置,但你不需要标题。在这种情况下,不需要环境table
,你可以直接使用center
(这会在上方和下方添加一些空间)。
\newenvironment{MyTabular}{%
\center
\tabularx{\textwidth}{|X|X|X|}
\hline
}{%
\\% <-- I'd put this here, so you don't have to close every tabular with \\
\hline
\endtabularx
\endcenter
}