\newenvironment 中嵌套的 tabularx

\newenvironment 中嵌套的 tabularx

我想tabularx在自己的环境中使用,但嵌套在table环境内。

请参阅下面的 MWE:我首先在没有自定义环境的情况下产生了所需的结果。然后我尝试用我自己的环境完成相同的输出。可惜这不起作用:

当我从 切换tabular*到 时tabularx,出现编译错误File ended while scanning use of \TX@get@body.。如果我继续使用tabular*,但将最后一列描述符从 切换cX,会出现另一个编译错误:Extra alignment tab has been changed to \cr. a & b &

在回答问题时\newenvironment 中的 tabularx,有人建议使用\tabularx和,但这在我嵌套在环境内的\ endtabularx情况下不起作用。tabularxtable

我究竟做错了什么?

\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}将当前环境的名称更改为tabletabularx尝试查找所有内容\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
}

相关内容