生成未知密钥的错误消息

生成未知密钥的错误消息

下面的代码输出:

错误:程序包 Foo 错误:未知密钥,\l_keys_key_tl

为什么\l_keys_key_tl在钩子 1 处展开,而不是在钩子 2 处展开?

\documentclass{report}
\usepackage{xparse}

\ExplSyntaxOn

  \msg_new:nnn
  {Foo}
  {generic}
  {#1}

  \keys_define:nn { \__erw_foo_options }
  {
    key .value_required:n = true,

    unknown .code:n =
    {
      { Unknown~key,~\l_keys_key_tl}  % Hook 1

      \msg_error:nnn
      { Foo }
      { generic }
      { Unknown~key,~\l_keys_key_tl} % Hook 2
    }
  }

  \NewDocumentCommand{\FooOptions}
  {m}
  {
   \keys_set:nn { \__erw_foo_options } {#1}
  }

 \NewDocumentCommand{\FooTest}
 {}
 {

   \FooOptions{bar}

 }


  \ExplSyntaxOff

  \begin{document}

\FooTest

  \end{document}

答案1

等的扩展行为\msg_error:nnn是严格定义的:它们传递第三个(第四个等)参数而不改变。因此,您需要使用 来扩展变量\msg_error:nnx。相反,只需“转储文本”即可tl在排版时将 转换为其扩展:这是标记列表的记录行为。

相关内容