tabularx的命令形式(编译问题)

tabularx的命令形式(编译问题)

我想从环境形式更改tabularx为命令形式,但无法编译。我需要命令形式,因为我tabularx稍后想在自定义环境中使用。

\documentclass[]{article}
\usepackage{tabularx}
\begin{document}

% working
\begin{tabularx}{\textwidth}{l|l}
my & table
\end{tabularx}

% not working (does not compile)
\tabularx{\textwidth}{l|l}
my & table
\endtabularx

\end{document}

答案1

tabularx查找表格的结尾,预期以\end(通常为\end{tabularx}:) 开头。但是,命令形式可在另一个环境中使用:

\documentclass[]{article}
\usepackage{tabularx}
\begin{document}

\noindent
\begin{tabularx}{\textwidth}{l|X}
my & table
\end{tabularx}

\newenvironment{myenv}{%
  \tabularx{\textwidth}{l|X}%
}{%
  \endtabularx
}

\noindent
\begin{myenv}
my & table
\end{myenv}

\end{document}

结果

答案2

一般来说,在文档主体中使用\env和是错误的,因为和的作用远不止执行内部命令。\endenv\begin{env}\end{env}

举一个简单的例子,以下文档

\documentclass{article}
\usepackage{lipsum}

\begin{document}

\lipsum[2]

\quote
\lipsum[3]
\endquote

\lipsum[4]

\end{document}

生产

在此处输入图片描述

这显然不是预期的结果。同样,

\documentclass{article}
\usepackage{lipsum}

\begin{document}

\lipsum[2]
\center
Centered text
\endcenter
\lipsum[3]

\end{document}

产生以下不需要的输出:

在此处输入图片描述

有时使用内部命令在定义中另一个环境,比如

\newenvironment{myenum}
  {\enumerate\setlength{\itemsep}{20pt}}
  {\endenumerate}

myenum因为当未正确关闭时,这可以提供更好的错误限制。

这通常是可选的,但它变得强制的对于某些特殊环境,如tabularxalign,因为这些环境在行动之前会吸收其内容。因此,如果你想定义一个固定tabularx样本,你应该这样做

\newenvironment{sptabx}
  {\par\nopagebreak\medskip\noindent\tabularx{\textwidth}{lX}}
  {\endtabularx\par\medskip}

因此\begin{sptabx},在 的定义中使用特殊代码\tabularx,“知道”它应该寻找\end{sptabx}作为终止符并吸收其间的所有内容,以便将其传递给 进行排版\endtabularx

请注意,调用\sptabx...\endsptabx不是查找\end{sptabx},因此稍后的某个地方会出现神秘错误。 当然 也是如此\tabularx

特定环境必须绝不被内部命令调用:它lrbox应该始终用作

\begin{lrbox}{<box bin>}
...
\end{lrbox}

在环境定义中使用时亦如此。

相关内容