我想使用宏向表中添加行(如下面的最小示例所示)。因此,我使用命令\addtotable
。如果我将表放置在所有行都已分配之后,代码将正常工作。但是,我想将包含所有已分配行的表放置在文档开头,即在分配任何(或某些)行之前(比较下面示例中的“部分表”和“完整表”)。如何做到这一点?
下面给出了一个最小的例子(另见使用命令/宏不断向表中添加命令)
\documentclass{article}
\newcommand\foo{%
\begin{table}[htp]
\centering
\begin{tabular}{ |c|c|c|c| }
\hline
Header 1 & Header 2 & Header 3 & Header 4 \\ \hline % Header row
\foorows
\hline
\end{tabular}
\end{table}}
\newcommand\foorows{}
\makeatletter
\newcommand\addtotable[1]{%
\g@addto@macro\foorows{\@gobble}%
\@for\tmp:=#1\do{%
\expandafter\g@addto@macro\expandafter\foorows
\expandafter{\expandafter&\tmp}%
}%
\g@addto@macro\foorows{\\}%
}
\makeatother
\begin{document}
Partial table:
\addtotable{A,A,A,A}
\foo
Full table:
\addtotable{B,B,B,B}
\foo
\end{document}
答案1
这需要两次乳胶运行
\documentclass{article}
\newcommand\foorows{}
\makeatletter
\newcommand\addtotable[1]{%
\immediate\write\@auxout{\unexpanded{\g@addto@macro\foorows{#1\\}}}}
\makeatother
\begin{document}
full table
\begin{tabular}{ |c|c|c|c| }
\hline
Header 1 & Header 2 & Header 3 & Header 4 \\ \hline % Header row
\foorows
\hline
\end{tabular}
add line one
\addtotable{A&A&A&A}
add line two
\addtotable{B&B&B&B}
\end{document}