我构建了一个表(带有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}