创建分离表

创建分离表

我希望能够预先收集好一堆内容,然后将它们放入表格中。如下所示,我保存一个变量,其中包含最终将插入文档的内容。这种技术似乎工作正常,直到我开始添加表格内容,如“&”和“\”。

\documentclass{article}

\def\mytable{}
\newcommand{\myitem}[2]{
  \edef\mytable{\mytable #1 & #2 \\ }
}

\begin{document}

\myitem{foo}{bar}
\myitem{foo}{bar}

\begin{tabular}{cc}
  \mytable
\end{tabular}

\end{document}

我收到此错误

! Undefined control sequence.
\\  ->\let \reserved@e 
                       \relax \let \reserved@f \relax \@ifstar {\let \reserv...
l.10 \myitem{foo}{bar}

? 

答案1

不要使用\edef它:许多 LaTeX 命令都无法存活。相反

\makeatletter
\newcommand{\myitem}{%
  \g@addto@macro\mytable{#1 & #2 \\}%
}
\makeatother

如果您不希望添加是全局的,还有其他几种技术\g@addto@macro

\usepackage{etoolbox}

\newcommand{\myitem}[2]{%
  \appto\mytable{#1 & #2 \\}%
}

将按照标准作用域规则进行加法。

答案2

这似乎有效,尽管使用\g@addto@macro似乎更合理。

\documentclass{article}

\def\mytable{}
\makeatletter
\newcommand{\myitem}[2]{%
  \protected@edef\mytable{\mytable #1 & #2 \\}%
}
\makeatother

\begin{document}

\myitem{\textbf{foo}}{bar}
\myitem{one}{two}
\begin{tabular}{cc}
  \mytable
\end{tabular}

\end{document}

相关内容