![使用 luatex 执行命令后 xkeyval 键不会重置](https://linux22.com/image/466437/%E4%BD%BF%E7%94%A8%20luatex%20%E6%89%A7%E8%A1%8C%E5%91%BD%E4%BB%A4%E5%90%8E%20xkeyval%20%E9%94%AE%E4%B8%8D%E4%BC%9A%E9%87%8D%E7%BD%AE.png)
以下 tex 文档是使用 LuaLaTeX 引擎编译的。
\documentclass{article}
\usepackage{luakeytest}
\begin{document}
\myAddFunction[c=30,d=40]{10.1}{20}
\myAddFunction{1}{2}
\end{document}
此输出至
100.1
73
第二个结果出乎意料。我期望结果为10
和因为和的1 + 2 + 3 + 4 = 10
默认键值为和。因此,该命令似乎没有采用默认键值,而是保留了上次执行的和的值。代码中有什么问题吗?如何更正代码?以下是“luakeytest.sty”文件中的代码。c
d
3
4
c
d
\ProvidesPackage{luakeytest}
\RequirePackage{xkeyval}
\RequirePackage{luacode}
\begin{luacode*}
function test(a,b,c,d)
local c = c or 3
local d = d or 4
return a + b + c + d
end
\end{luacode*}
% ========= KEY DEFINITIONS =========
\define@key{someop}{c}{\def\mop@third{#1}}
\define@key{someop}{d}{\def\mop@fourth{#1}}
% ========= KEY DEFAULTS =========
\setkeys{someop}{c=3,d=4}%
% ========= Defining Command =========
\newcommand{\myAddFunction}[3][]{%
\setkeys{someop}{#1}%
\directlua{tex.sprint(test(#2,#3,\mop@third,\mop@fourth))}%
}%
\endinput
答案1
你需要(例如)
\newcommand{\myAddFunction}[3][]{{%
\setkeys{someop}{#1}%
\directlua{tex.sprint(test(#2,#3,\mop@third,\mop@fourth))}%
}}%
因此按键分配是在一个组内。