在表格内执行 \input 时无法使用 \toprule——为什么?

在表格内执行 \input 时无法使用 \toprule——为什么?

\input在环境内部使用tabular似乎并不总是有效,但我不知道为什么。

下面的 MWE 给出了以下错误消息:

! Misplaced \noalign.
\toprule ->\noalign 
                    {\ifnum 0=`}\fi \@aboverulesep =\abovetopsep \global \@b...
l.1 \toprule

文件main.tex

\documentclass{standalone}
\usepackage{booktabs}

\begin{document}
  \begin{tabular}{ll}
  \input{inp}
  \end{tabular}
\end{document}

文件inp.tex

\toprule
a & b \\
c & d \\
\bottomrule

inp.tex如果将 的内容粘贴到环境中,文档将正确编译tabular。这里发生了什么?

\documentclass{standalone}
\usepackage{booktabs}

\begin{document}
  \begin{tabular}{ll}
  \toprule
  a & b \\
  c & d \\
  \bottomrule
  \end{tabular}
\end{document}

编译结果

编辑:以下问题相关:为什么 \input 不可扩展?

答案1

\input正在尝试变得智能,而这似乎扰乱了 LaTeX 挑剔的表格定义。

但是您可以从 TeX 访问原始\input原语,此时危险性较小。

定义后

\makeatletter
\newcommand\primitiveinput[1]
{\@@input #1 }
\makeatother

\primitiveinput在表格内部使用应该可以。

答案2

有些命令(例如\toprule\hline或 )\multicolumn必须直接位于单元格的开头。 之前不能有任何内容,这包括 之类的命令\input

相关内容