情况
我必须为文档制作封面模板。在页面末尾,我必须添加修订号以及其他有用信息,例如以下示例:
\begin{tabular}{lccl}
Revision 0 & 06-11-2014 & Initial Release & John Smith \\
Revision 1 & 06-12-2014 & Changed something & Joe Blow \\
...
\end{tabular}
客观的
在 TEX 文档中,用户必须添加其修订,如下所示:
\AddRevision{06-11-2014}{Initial Release}{John Smith}
\AddRevision{06-12-2014}{Changed something}{Joe Blow}
...
\createFrontPage
生成 PDF 时,这应该会自动生成上面的表格。请注意,每次 AddRevision 时修订编号都会自动增加 1。
我尝试过
我不熟悉 Latex 宏,所以目前我所拥有的就是这样。我只是不知道我是否接近解决方案,或者我是否完全做错了。这是我的 CLS 文件中的代码:
\newCounter{RowCounter}
\def\AddRev#1,#2,#3{\RevDate{#1}, \RevDesc{#2}, \RevAuthor{#3} \stepCounter{RowCounter}}
\newCounter{i}
\newcommand{\RevisionRows}
{
\forloop{i}{0}{\value{i} < \value{RowCounter}}
{
Revision \arabic{i} & \RevDate & \RevDesc & \RevAuthor \\
}
}
\newcommand{\createFrontPage}
{
% some stuff
\begin{tabular}{lccl}
\RevisionRows
\end{tabular}
}
问题
我的目标可以实现吗?如果可以,我做错了什么?最好的、最干净的解决方案是什么?欢迎提出任何建议。
非常感谢你的帮助。
答案1
以下是一种方法:
笔记:
我建议你将第一个之前的所有内容\AddRevision
放在单独的包中,并让用户添加修订前 \begin{document}
。
参考:
代码:
\documentclass{article}
%% https://tex.stackexchange.com/questions/175568/build-tabular-content-via-foreach
\newcommand*{\MyTempTableTokens}{}%
\makeatletter
\newtoks\@tabtoks
%%% assignments to \@tabtoks must be global, because they are done in \foreach
\newcommand\AddTableTokens[1]{\global\@tabtoks\expandafter{\the\@tabtoks#1}}
\newcommand\eAddTableTokens[1]{%
\protected@edef\MyTempTableTokens{#1}%
\expandafter\AddTableTokens\expandafter{\MyTempTableTokens}%
}
%%% variable should always be operated on always locally or always globally
\newcommand*\ResetTableTokens{\global\@tabtoks{}}
\newcommand*\PrintTableTokens{\the\@tabtoks}
\makeatother
\newcounter{RowCounter}
\newcommand{\AddRevision}[3]{%
\stepcounter{RowCounter}%
\eAddTableTokens{Revision \arabic{RowCounter} & #1 & #2 & #3 \\}%
}%
\newcommand{\createFrontPage}{%
% some stuff
\begin{tabular}{lccl}
\PrintTableTokens
\end{tabular}%
\clearpage
}
\AtBeginDocument{%
\createFrontPage%
}%
%-----------------------------------------------------------
\AddRevision{06-11-2014}{Initial Release}{John Smith}
\AddRevision{06-12-2014}{Changed something}{Joe Blow}
\begin{document}
main document here
\end{document}