使用未定义的控制序列作为 ProcessKeyOptions 的值

使用未定义的控制序列作为 ProcessKeyOptions 的值

我有一个测试 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 

在终端上。

可以通过包选项设置“安全”键,但不能通过这个。

相关内容