我一直认为这\input
完全等同于在主 latex 文件中复制粘贴一些代码。但我目前遇到了这种奇怪的行为。这是一个最小的例子。
我的主要文件是:
\documentclass{article}
\begin{document}
\begin{tabular}{lcc}
\input{table_file}
\hline
\end{tabular}
\end{document}
输入的文件为table_file.tex
:
$T$ & 2.3 & 1.3 \\
average & 9.1 & 0.393 \\
编译主 tex 文件会抛出一串错误。以下是日志文件的相关部分:
(./table_file.tex)
! Misplaced \noalign.
\hline ->\noalign
{\ifnum 0=`}\fi \hrule \@height \arrayrulewidth \futurelet...
l.5 \hline
! You can't use `\hrule' here except with leaders.
\hline ->\noalign {\ifnum 0=`}\fi \hrule
\@height \arrayrulewidth \futurelet...
l.5 \hline
! Missing number, treated as zero.
<to be read again>
\futurelet
l.5 \hline
! Illegal unit of measure (pt inserted).
<to be read again>
\futurelet
l.5 \hline
我不确定这里发生了什么...如果我尝试将内容复制粘贴table_file.tex
到主文件中:
\documentclass{article}
\begin{document}
\begin{tabular}{lcc}
$T$ & 2.3 & 1.3 \\
average & 9.1 & 0.393 \\
\hline
\end{tabular}
\end{document}
它现在运行完美(日志中没有错误)。
最后(重要)的事情:如果我在没有的情况下编译主文件\hline
,则不会出现任何问题。
知道发生了什么事以及如何解决这个问题吗?我非常依赖于将表格行输入表格环境,所以我很想了解是什么造成了这种情况!
答案1
您可以使用“原始\input
”:
\begin{filecontents*}{\jobname-table.tex}
$T$ & 2.3 & 1.3 \\
average & 9.1 & 0.393 \\
\end{filecontents*}
\documentclass{article}
\makeatletter
\newcommand\tableinput[1]{\@@input{#1}}
\makeatother
\begin{document}
\begin{tabular}{lcc}
\tableinput{\jobname-table}
\hline
\end{tabular}
\end{document}
您需要一个相当新的 TeX 发行版才能实现此目的。否则
\makeatletter
\newcommand\tableinput[1]{\@@input #1 }
\makeatother
也应该可以工作。