为什么空会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 会默默地删除围绕整个分隔参数的括号组,因此这被传递给tabularx
as
\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}