我想定义一个带有关键参数的命令,该命令在包 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
}
现在输出是正确的: