为什么空的 tabularx 会引发错误?

为什么空的 tabularx 会引发错误?

为什么空会tabularx引发错误?(空的意思是只有空格,没有换行符)

梅威瑟:

\documentclass{article}
\usepackage{tabularx}

\begin{document}

\begin{tabular}{|c | c|}
\end{tabular}                                        % <-- Works

\begin{tabular}{|c | c|}\end{tabular}                % <-- Works

\begin{tabularx}{\textwidth}{|c | c|}
\end{tabularx}                                        % <-- Works

\begin{tabularx}{\textwidth}{|c | c|}\end{tabularx}   % <-- Does not work

\end{document}

(这尤其令人沮丧\ExplSyntaxOn

答案1

“为什么”可能是因为我没想过要测试这个并捕获它。

追溯所有原因,是因为

\begin{tabularx}{\textwidth}{|c | c|}\end{tabularx}

整个主体(tabularx需要作为宏参数抓取)是,{|c | c|}并且 tex 会默默地删除围绕整个分隔参数的括号组,因此这被传递给tabularxas

\begin{tabularx}{\textwidth}|c | c|\end{tabularx}

事情就出错了。

如果你正在生成它并且有可能它是空的,你可以使用可选参数

\begin{tabularx}{\textwidth}[c]{|c | c|}\end{tabularx}   % <-- Does not work

例如作品。

我可能在将来的版本中能够发现这一点。


可能的修复

\documentclass{article}
\usepackage{tabularx}

\makeatletter
\def\foo#1{%
\def\tabularx##1{%
\edef\TX@{\@currenvir}%
  {\ifnum0=`}\fi
  \setlength\TX@target{##1}%
  \TX@typeout{Target width: ##1 = \the\TX@target}%
  \toks@{}\TX@get@body#1}}
\foo{ }
\makeatother
\begin{document}


\begin{tabularx}{\textwidth}{|c | c|}\end{tabularx}   % <-- Does not work

\end{document}

相关内容