我不确定我是否使用了正确的术语来描述我想要做的事情,所以标题可能不准确。
我希望能够使用自定义命令(例如),\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
。但有些似乎意味着别的或不存在,所以可能是错的。)command
data
register