我正在尝试通过向表中添加行来动态地创建表。
这个想法是,在使用宏添加行之前必须使用/创建表。我修改了描述的方法这里为了使用辅助文件,以便我可以在创建表后使用附加宏。
我目前拥有的代码如下:
\documentclass[12pt]{article}
\usepackage[table]{xcolor}
\usepackage[english]{babel}
\usepackage{booktabs,tabularx}
\def\tmprevisionrows{}
\def\revisionrows{}
\makeatletter
\def\appendrevision#1{\g@addto@macro\tmprevisionrows{ #1}}
\newcommand\addrevision[4]{%
\appendrevision{#1 & #2 & #3 & #4 \\[10pt]}
}
\makeatother
\newcommand{\revisions}{
\begin{center}
\setlength{\extrarowheight}{10pt}
\begin{tabularx}{\textwidth}{| X | X | X | X |}
\hline
VERSION & MODIFICATION & DATE & AUTHOR \\[10pt]
\hline
\revisionrows
\hline
\end{tabularx}
\end{center}
}
\begin{document}
\makeatletter
\@starttoc{xyz}
\makeatother
\revisions
% Notice that we are appending after using the \revisions macro
\addrevision{0.1}{Document Creation}{01/01/2020}{Author Name}
\addrevision{0.2}{Document Modified}{02/01/2020}{Author Name}
\addtocontents{xyz}{\gdef\protect\revisionrows{\tmprevisionrows}}
\end{document}
结果如下(如你所见,\hline
表格中没有添加任何内容):
当我尝试在任何地方添加时,\hline
我收到编译错误。如何\hline
使用我的宏向附加的每一行添加(或替代)?
答案1
将您的宏更改\addrevision
为
\newcommand\addrevision[4]{%
\appendrevision{#1 & #2 & #3 & #4 \\[10pt] \protect\hline}
}
\hline
并删除定义中的尾部\revisions
\newcommand{\revisions}{
\begin{center}
\setlength{\extrarowheight}{10pt}
\begin{tabularx}{\textwidth}{| l | X | l | l |}
\hline
VERSION & MODIFICATION & DATE & AUTHOR \\[10pt]
\hline
\revisionrows
\end{tabularx}
\end{center}
}
X
对于可能包含长数据的列,我将使用单列。
您可以使用该.aux
文件,而不是.xyz
:
\documentclass[12pt]{article}
\usepackage[table]{xcolor}
\usepackage[english]{babel}
\usepackage{booktabs,tabularx}
\makeatletter
\newcommand\revisionrows{}
\newcounter{revisions}
\newcommand\addrevision[4]{%
\immediate\write\@auxout{%
\unexpanded{\add@revision{#1 & #2 & #3 & #4 \\[10pt] \hline}}%
}%
\stepcounter{revisions}%
}
\newcommand{\add@revision}[1]{%
\g@addto@macro\revisionrows{#1}%
}
\AtEndDocument{\refstepcounter{revisions}\label{count@revisions}}
\makeatother
\newcommand{\revisions}{%
\begin{center}
\setlength{\extrarowheight}{10pt}
\begin{tabularx}{\textwidth}{| l | X | l | l |}
\hline
VERSION & MODIFICATION & DATE & AUTHOR \\[10pt]
\hline
\revisionrows
\end{tabularx}
\end{center}
}
\begin{document}
\revisions
% Notice that we are appending after using the \revisions macro
\addrevision{0.1}{Document Creation}{01/01/2020}{Author Name}
\addrevision{0.2}{Document Modified}{02/01/2020}{Author Name}
\end{document}
Label(s) may have changed
使用此代码,如果修订次数与上次运行发现的修订次数不同,您将收到警告。