如何在宏创建的表中添加 \hline

如何在宏创建的表中添加 \hline

我正在尝试通过向表中添加行来动态地创建表。

这个想法是,在使用宏添加行之前必须使用/创建表。我修改了描述的方法这里为了使用辅助文件,以便我可以在创建表后使用附加宏。

我目前拥有的代码如下:

\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使用此代码,如果修订次数与上次运行发现的修订次数不同,您将收到警告。

相关内容