构建之间的持久计数器

构建之间的持久计数器

我需要管理需求列表,并使用计数器保存其创建后的值。我该怎么做?

例子:

  • 步骤 1:创建文档,其中包含两个要求,alpha 和 beta,构建后分别获得编号 1 和 2:

    1 alpha
    2 beta
    
  • 步骤 2:创建第三个需求。再次构建:

    1 alpha
    2 beta
    3 gamma
    
  • 步骤 3:有人想在文档开头添加另一个要求,但旧的引用必须保持不变。因此,第五个是第四个,即使介于一和二之间:

    1 alpha
    4 delta
    2 beta
    3 gamma
    

我认为它需要一个生成的文件来记住使用过的引用,但我不知道如何实现这一点。

答案1

您可以使用etoolbox包来执行此操作,该包定义了列表操作、布尔值和字符串比较(以及其他内容)。下面的 MWE 生成一个文件,stored.txt其中的需求按连续运行的顺序存储。对于新运行,现有项目按此列表的顺序编号,新项目添加到末尾。请注意 @Christian Hupfer 的评论。

\documentclass{article}
\usepackage{etoolbox}

\newcommand{\persistent}{} % create initially empty list

\newcounter{Current}       % existing position in list
\newcounter{MaxSeq}        % highest position in list
\newtoggle{FoundInList}    % boolean test if item is found

\newcommand{\cmphandler}[2]{%
    \stepcounter{Current}%      % increase position in list
    \ifstrequal{#1}{#2}%        % if the current item is the item to print
    {\toggletrue{FoundInList}\listbreak}{}%    % then set to found and exit loop
}

% write full list to file after adding items 
\newcommand{\writeall}[1]{\write\listfile{\noexpand\listgadd{\noexpand\persistent}{#1}\noexpand\stepcounter{MaxSeq}}}

% print the current item in the document
\newcommand{\printpersistent}[1]{%
\setcounter{Current}{0}%
\togglefalse{FoundInList}%
\forlistloop{\cmphandler{#1}}{\persistent}% % find position in list
\iftoggle{FoundInList}%                     % if item is found
{\arabic{Current} #1}%                      % print position and item
{\listgadd{\persistent}{#1}\stepcounter{MaxSeq}\arabic{MaxSeq} #1}%     % else add to end of list and print item
\par                                        % start new paragraph
}

\begin{document}
% load existing list if available
\InputIfFileExists{stored.txt}{}{}

% print all items
\printpersistent{alpha $(\alpha)$}
\printpersistent{delta $(\delta)$}
\printpersistent{beta $(\beta)$}
\printpersistent{gamma $(\gamma)$}

% print full list to file
\newwrite\listfile
\openout\listfile=stored.txt
\forlistloop{\writeall}{\persistent}
\closeout\listfile
\end{document}

三次运行后的结果:

在此处输入图片描述

相关内容