在数据库中使用计数器

在数据库中使用计数器

我尝试在数据库中添加一个计数器值。但如果要打印数据库内容,该值始终是最大值。我有一个简单的代码示例

\documentclass[11pt,titlepage,a4paper]{article}
\usepackage{datatool}

\DTLnewdb{testDB}
\newcounter{couter1}

\begin{document}

    %first row
    \setcounter{couter1}{1}
    \DTLnewrow{testDB}%
    \DTLnewdbentry{testDB}{Field1}{cnt: \arabic{couter1}}%
    \stepcounter{couter1}
    \DTLnewdbentry{testDB}{Field2}{cnt: \arabic{couter1}}%

    %second row
    \stepcounter{couter1}
    \DTLnewrow{testDB}%
    \DTLnewdbentry{testDB}{Field1}{cnt: \arabic{couter1}}%
    \stepcounter{couter1}
    \DTLnewdbentry{testDB}{Field2}{cnt: \arabic{couter1}}%


    %display content of the database
    \DTLdisplaydb{testDB}

\end{document}

结果应该如下所示:

1 | 2
3 | 4

谁能帮我?

答案1

第 5.1 节解释说,作为 的参数给出的值\DTLnewdbentry不会被扩展,因此在所有情况下都会得到cnt: \arabic{couter1}。但手册还建议了一种解决方法,即使用\dtlexpandnewvalue\dtlnoexpandnewvalue

\documentclass[11pt,titlepage,a4paper]{article}
\usepackage{datatool}

\DTLnewdb{testDB}
\newcounter{couter1}

\begin{document}

%first row
\setcounter{couter1}{1}
% we want to expand values
\dtlexpandnewvalue
\DTLnewrow{testDB}%
\DTLnewdbentry{testDB}{Field1}{cnt: \arabic{couter1}}%
\stepcounter{couter1}
\DTLnewdbentry{testDB}{Field2}{cnt: \arabic{couter1}}%

%second row
\stepcounter{couter1}
\DTLnewrow{testDB}%
\DTLnewdbentry{testDB}{Field1}{cnt: \arabic{couter1}}%
\stepcounter{couter1}
\DTLnewdbentry{testDB}{Field2}{cnt: \arabic{couter1}}%
% revert to the default
\dtlnoexpandnewvalue

%display content of the database
\DTLdisplaydb{testDB}

\end{document}

在此处输入图片描述

请注意,这样所有内容都会完全展开,有时这并不是我们想要的。单个控制序列(例如)\textbf可能会破坏这种上下文,但只需在它前面加上\noexpand即可;可以将更长的(与括号平衡的)不展开标记列表作为参数传递给\unexpanded

相关内容