如何使用 \input 为多个文件制作表格“包装器”

如何使用 \input 为多个文件制作表格“包装器”

我有多个表格需要完全相同的格式。标题等需要更新,但我认为我可以处理。我遇到的问题是 \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

相关内容