收集信息以供稍后渲染

收集信息以供稍后渲染

我不确定我是否使用了正确的术语来描述我想要做的事情,所以标题可能不准确。

我希望能够使用自定义命令(例如),\PersonalData{Name}{Some Name}但不立即渲染它。相反,我希望\PersonalData多次使用,存储数据,然后在稍后的某个时间点(或者如果可能的话,在文档中的任何地方)使用另一个命令\RenderPersonalData(例如)并渲染所有存储的条目。

这样的事情真的能轻易实现吗?

如果我能以某种方式迭代所有条目并知道有多少个条目,那么我就可以定义下面的垂直空间(最后一个条目除外),这也将非常棒。或者让偶数和奇数条目以不同的背景颜色呈现。

现在我只有一个如下所示的自定义命令:

\RequirePackage{ifthen}
\RequirePackage[dvipsnames]{xcolor}%  This is inside a `.cls` document class.

\newcommand{\DataLabel}[1]{\bfseries{#1}}

\newlength{\labelColumnWidth}
\setlength{\labelColumnWidth}{35mm}

\newlength{\columnSeparatorWidth}
\setlength{\columnSeparatorWidth}{5mm}
\newcommand{\columnSeparator}{\hspace*{\columnSeparatorWidth}}

\newcounter{PersonalDetailsCounter}
\setcounter{PersonalDetailsCounter}{0}

\definecolor{EvenRowBackgroundColor}{rgb}{0,0.96,0.96}
\definecolor{OddRowBackgroundColor}{rgb}{1,0,1}

\newcommand\PersonalDetailsEntry[2]{%
  \ifthenelse
      {\isodd{\value{PersonalDetailsCounter}}}
      {\colorlet{RowColor}{OddRowBackgroundColor}}
      {\colorlet{RowColor}{EvenRowBackgroundColor}}%
  \colorbox
      {RowColor}
      {%
        \parbox[t]{\labelColumnWidth}{\DataLabel{#1}:}
        \columnSeparator
        \parbox[t]
               {\dimexpr\linewidth-\labelColumnWidth-\columnSeparatorWidth}% TODO: calculate exactly and correctly
               {#2}}%
  \smallskip
  % Increase counter for personal details.
  \stepcounter{PersonalDetailsCounter}}

但至少存在一个问题:我不知道最后一个条目是什么时候,\smallskip最后会有一个不必要的条目。如果我知道有多少个条目并且可以检查我是否处于最后一个条目,那么这将不是问题。这让我想到也许我可以以某种方式存储它们,然后对它们进行迭代以呈现它们。

(抱歉,我甚至不知道该给这个问题分配什么标签。我考虑过的事情:,,,define。但有些似乎意味着别的或不存在,所以可能是错的。)commanddataregister

相关内容