datatool + keyval 的难度

datatool + keyval 的难度

我想定义一个带有关键参数的命令,该命令在包 datatool 的帮助下将某些内容存储在表中。我的尝试是:

\documentclass[12pt]{scrartcl}
\usepackage{keycommand}
\RequirePackage{datatool}
\begin{document}
  % declare a new table
\DTLnewdb{table}
  % define the command
\newkeycommand{\myCom}[op=1]{%
\DTLnewrow{table}
\DTLnewdbentry{table}{option}{\commandkey{op}}
}
%call 4 times the command
\myCom[op=2] 
\myCom[op=3]
\myCom[op=4]
\myCom[op=5]
% display the content of the table
\DTLdisplaydb{table}

我期望得到“2 3 4 5”,但得到的却是“5 5 5 5”。这实际上是我经常在使用数据工具时遇到的一个常见问题(不知何故“只考虑最后一个操作”),这可能表明我仍然不知道如何正确使用它...我在这里做错了什么?

答案1

我查看了datatool手册,发现以下关于\DTLnewdbentry(第 32 页)的注释:

默认情况下,该值不会展开,但您可以使用声明来更改它:\dtlexpandnewvalue。可以通过将其放在组中来进行本地化,或者您可以使用以下方式切换回来:\dtlnoexpandnewvalue

我只是重写了\myCom

\newkeycommand{\myCom}[op=1]{%
\DTLnewrow{table}
\dtlexpandnewvalue
\DTLnewdbentry{table}{option}{\commandkey{op}}%
\dtlnoexpandnewvalue
}

现在输出是正确的:

数据工具输出

相关内容