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