在分配元素之前显示由宏定义的表

在分配元素之前显示由宏定义的表

我想使用宏向表中添加行(如下面的最小示例所示)。因此,我使用命令\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}

相关内容