使用 luatex 执行命令后 xkeyval 键不会重置

使用 luatex 执行命令后 xkeyval 键不会重置

以下 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”文件中的代码。cd34cd

\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))}%
}}%

因此按键分配是在一个组内。

相关内容