我有多个表格需要完全相同的格式。标题等需要更新,但我认为我可以处理。我遇到的问题是 \input 无法按我想要的方式工作。这是我的主文件 MWE:
\documentclass[]{article}
\usepackage{tabularx}
\usepackage{multicol}
\begin{document}
\section{}
\input{tablebegin}
\input{tableend}
\end{document}
这是我的 tablebegin.tex 文件:
\begin{table}[ht]
\centering
% \begin{threeparttable}
\caption{Table Caption}
\scriptsize% to fit on page
\begin{tabularx}{5in}{ cccccccccccc }
\multicolumn{12}{ c }{\textbf{Table Title}}\\ \hline
&1&2&3&4&56&7&8&9&10&11&12\\
这是表格结束文件:
\end{tabularx}
\end{table}
在 TexStudio 中我收到以下错误:
扫描 \TX@get@body 的使用时文件结束。 \input{tablebegin}
这可能是一个不好的做法,但我试图将表格格式与表格分开。我的目标是有大约 20 个 tablemid 文件,这些文件将由 tablebegin 和 tableend 封装。这样,如果我想调整表格格式,我可以在一处完成。我可能完全错误地处理这个问题,所以我愿意接受任何建议。
答案1
您可以将文件内容扫描到宏中,然后使用此宏。
\def\scanfile#1\to#2{%
\everyeof={\eof!}%
\expandafter\scanfileA\input{#1}%
\everyeof={}%
\let#2=\filecontent
}
\long\def\scanfileA#1\eof!{\def\filecontent{#1}}
现在,您可以执行以下操作:
\scanfile{tableA.tex}\to\macroA
\scanfile{tableB.tex}\to\macroB
etc.
最后,如果文件只是表的一部分,那么您可以执行以下操作:
\caption{Table Caption}
\begin{tabularx}{5in}{ cccccccccccc }
\macroA
\end{tabularx}
注意:如果您使用的是 LaTeX,则必须在宏\@@input
中使用原始宏\scanfile
,而不是\input
宏。因此,适当的行是:
\expandafter\scanfileA\@@input{#1}%
@
并且在读取宏体时必须将catcode设置为11。
答案2
NBur 的建议是这个问题的正确答案。这里有一个比我回复他的更好的例子,它适合我的情况:https://stackoverflow.com/questions/1390064/how-to-create-a-selfdefined-table-environment-with-the-caption-at-the-end-of-the