我有一个spreadtab
相当复杂的页眉和页脚,在文档的几个地方使用。实际内容仅包含几行简单的内容。我想定义一个新环境(或宏),这样我就不必为每个表重复页眉和页脚。
我发现的唯一可行的方法如下,基于https://tex.stackexchange.com/a/312860/102921和https://tex.stackexchange.com/a/207313/102921。
\documentclass{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[main=english]{babel}
\usepackage{array, environ, spreadtab, xpatch}
\makeatletter
\def\spreadtab@ii{\IfSubStr\ST@tab{\noexpand\input}{\expandafter\spreadtab@iii\ST@tab\@nil}\relax}
\def\spreadtab@iii#1\input#2#3\@nil{%
\long\def\spreadtab@iv##1\spreadtab@iv{\endgroup\def\ST@tab{#1##1#3}\spreadtab@ii}%
\begingroup
\everyeof{\spreadtab@iv\noexpand}%
\expandafter\spreadtab@iv\@@input#2
}
\xpretocmd\spreadtab@i\spreadtab@ii{}{}
\makeatother
\newwrite\mytabularwrite
\NewEnviron{mytable}{%
\immediate\openout\mytabularwrite=mytabularfile.tex%
\immediate\write\mytabularwrite{\unexpanded\expandafter{\BODY}}%
\immediate\closeout\mytabularwrite
\begin{spreadtab}{{tabular}{|l|ccc|}}
\hline
& @Heading 1 & @Heading 1 & @Heading 1 \\\hline % here is a complex header
\input{mytabularfile}
@ Total & \STcopy{>}{sum(b2:[0,-1])} & & \\\hline % end a complex footer
\end{spreadtab}
}
\begin{document}
\begin{mytable}
@ Label 1 & 1000 & 500 & 800 \\\hline
@ Label 2 & 2000 & 1500 & 1800 \\\hline
% At most 10 of such lines per table
\end{mytable}
\end{document}
有没有不使用临时文件的方法?因为最终文档将有大约 100 个这样的表,所以我有点担心速度。