获取包选项作为 lua 字符串,并允许任意包选项

获取包选项作为 lua 字符串,并允许任意包选项

我正在制作一个基于 lualatex 的类,它将是 lua 库的薄包装器。我想使用该luakeys包来处理 lua 中的选项,并希望避免声明选项。我的问题有两个方面:

  1. 我可以允许我正在编写的包接受任意选项吗?
  2. 我如何在 lua 中以字符串形式检索选项?

梅威瑟:

\ProvidesPackage{MWE}

\RequirePackage{luapackageloader}
\RequirePackage{luacode}

\DeclareOption*{} % I think this is sufficient to allow arbitrary options.. 
\ProcessOptions\relax

\begin{luacode*}
    texio.write_nl('VVVVVVVVVVVVVVVV')
    texio.write_nl(token.get_macro('@nameuse{[email protected]}'))  -- isn't this
    texio.write_nl(token.get_macro('@classoptionslist'))       -- isnt this

    local luakeys = require('luakeys')
    local kv = luakeys.parse(token.get_macro('???')) --is there a command, or way I can get the raw options
                                                                   --  that were passed to this package as a str ?
    texio.write_nl('VVVVVVVVVVVVVVVV')
    luakeys.print(kv)
\end{luacode*}

答案1

您想要访问的原始选项的宏是\@raw@opt@<file>.<ext>。为了防止 LaTeX 对未知选项抛出错误,您应该执行\let\@unprocessedoptions\relax

这就是你想要的:

\ProvidesPackage{MWE}

\RequirePackage{luapackageloader}
\RequirePackage{luacode}

\begin{luacode*}
  local luakeys = require('luakeys')
  local kv= luakeys.parse(token.get_macro('@raw@[email protected]'))
  luakeys.print(kv)
\end{luacode*}
\AtEndOfPackage{\let\@unprocessedoptions\relax}% don't throw errors for option

\endinput

并使用此驱动程序文件:

\RequirePackage[my=opt, opt=key]{MWE}
\stop

您将在终端输出中看到以下内容:

{
  ['opt'] = 'key',
  ['my'] = 'opt',
}

\edef警告:由于 LaTeX 历史上处理选项的方式,你的选项仍然需要在一次任务中存活下来而不会被破坏。

相关内容