我有一个测试 L3 包(目前没有任何用处),其中一个键用于设置 lua 变量:
\NeedsTeXFormat{LaTeX2e}
\ProvidesExplPackage
{package} {} {} {}
\keys_define:nn {MWE} {
MWEkey .code:n = \lua_now:e { luaVar = "\lua_escape:n {#1}" }
}
\ProcessKeyOptions[MWE]
但是,如果我设置一个文档
\documentclass{standalone}
\usepackage[MWEkey={\essai}]{package}
\begin{document}
\end{document}
\essai
在到达包代码之前,我收到了与 有关的未定义命令错误。
如果我说
\def\essai{t}
\usepackage[MWEkey={\essai}]{package}
然后luaVar
设置为\essai
。这很好,因为我们实际上不会\essai
在 lua 代码中将其解释为 TeX 命令。
我读到这比没有扩展问题\ProcessKeyOptions
更好,但是在这里我很困惑为什么没有定义会导致问题。\ProcessKeysOptions
\essai
有没有什么办法可以解决这种情况?
答案1
分开密钥处理更安全
\documentclass{standalone}
\usepackage{package}
\MWEsetup{MWEkey={\essai}}
\directlua{texio.write('luaVar=' .. luaVar)}
\begin{document}
\end{document}
\NeedsTeXFormat{LaTeX2e}
\ProvidesExplPackage
{package} {} {} {}
\keys_define:nn {MWE} {
MWEkey .code:n = \lua_now:e { luaVar = "\lua_escape:n {#1}" }
}
\ProcessKeyOptions[MWE]
\newcommand\MWEsetup[1]{\SetKeys[MWE]{#1}}
生产
luaVar=\essai
在终端上。
可以通过包选项设置“安全”键,但不能通过这个。