以下 LaTeX 文档无法编译。
\documentclass{article}
\usepackage{booktabs}
\usepackage{ltablex}
\usepackage[]{multirow}
\usepackage{lipsum}
\begin{document}
\noindent{}
\begin{tabularx}{\linewidth}{Xl}
\bottomrule{}%
\multicolumn{2}{c}{TESTING}\\*\midrule{}%
\textbf{Left} & \textbf{Right}\\*\toprule{}%
\endfirsthead{}%
%
\toprule{}%
\multicolumn{2}{c}{\emph{continuing}}\\*\midrule{}%
\textbf{Left} & \textbf{Right}\\*\bottomrule{}%
\endhead{}%
%
\lipsum[1][1-2] & first \\\midrule{}%
\lipsum[2][1-2] & second \\\midrule{}%
\lipsum[3][1-2] & third \\\midrule{}%
\lipsum[4][1-2] & third \\\bottomrule{}%
\end{tabularx}
\end{document}
pdflatex 给出错误消息:
! Misplaced \omit.
\multispan ->\omit
\@multispan
l.26 \end{tabularx}
我观察到,如果{}%
从源中删除,它就会编译。
这种行为该如何解释?
我正在处理的实际文档是由 Haskell 程序使用哈特克斯库,用于附加{}
到没有参数的命令。
答案1
之后不会{}
产生\noindent
TeX 错误,但是之后的换行符会强制产生错误的输出,因为段落过早开始了,换行符会在段落开头产生一个不可丢弃的空格,这看起来有点像缩进,但不是固定的缩进,而是\parindent
一个单词空格。
比较以下两段:
\documentclass{article}
\begin{document}
\noindent
AAA
\noindent{}
AAA
\end{document}
\multicolumn
必须是其单元格中的第一个命令(扩展后),任何不可扩展的标记都会导致\multicolumn
生成错误,因为更改单元格模板为时已晚。
因此该示例可以简化为
\documentclass{article}
\begin{document}
\begin{tabular}{c}
a\\
{}\multicolumn{1}{l}{x}
\end{tabular}
\end{document}
从而产生
! Misplaced \omit.
\multispan ->\omit
\@multispan
l.8 {}\multicolumn{1}{l}{x}