以多列开头的输入文件

以多列开头的输入文件

我构建了一个表(带有tabularx环境的表),它将输入文件作为输入。

当我使用命令开始此输入文件时,\multicolumn编译失败并给出错误

"./floats/tab_represent_SWE.tex:2: Misplaced \omit. [\multicolumn{3}{l}{\emph{By XXX}}]"

但是,一旦我\\在 \multicolumn 前面插入一个,一切都会正常工作。

有什么想法吗?

编辑(作者:touhami,tabularx标签被移除,mwe 被tabular添加)

平均能量损失

\documentclass{article}

\begin{document}
\begin{tabular}{|l|l|}
\hline 
\input{foo.tex}
\hline 
1 & a \\ 
\hline 
2 & b \\ 
\hline  
\end{tabular} 
\end{document}

foo.tex

\multicolumn{2}{c}{\emph{By XXX}}\\

答案1

在 LaTeX 中重新定义了TeX 原语\input来检查文件是否存在,以便生成更用户友好的错误消息。但是,这不能以可扩展的方式完成,这\multicolumn需要。

解决方法\@@input

一种解决方法是使用原始的\input,存储\@@input在 LaTeX 中。由于 的类别代码@,表格需要包装在\makeatletter和 中,\makeatother或者\csname可用于生成命令序列:

\documentclass{article}

\begin{document}
\begin{tabular}{|l|l|}
\hline
\csname @@input\endcsname foo.tex
\hline
1 & a \\
\hline
2 & b \\
\hline
\end{tabular}
\end{document}

结果

当然,如果foo.tex不存在,错误行为就不如 LaTeX 的版本好。

通过包解决方法catchfile

包提供了另一种解决方法catchfile。在这里,可以在宏中读取文件内容,然后在表中使用该宏:

\documentclass{article}
\usepackage{catchfile}

\begin{document}

\CatchFileDef\MyFooRows{foo.tex}

\begin{tabular}{|l|l|}
\hline
\MyFooRows
\hline
1 & a \\
\hline
2 & b \\
\hline
\end{tabular}
\end{document}

相关内容