为什么在出现“l3keys.choice 的选择未知”的情况下我没有收到自定义错误消息?

为什么在出现“l3keys.choice 的选择未知”的情况下我没有收到自定义错误消息?

我正在尝试在出现未知选择的情况下发出自定义错误消息l3keys .choice。在以下 MCE 中:

  • 我创建了一条自定义消息Unknown~key~choice
  • 我定义了一个key具有以下.choice属性的键,
  • 我使用了特殊unknown选择,该选择应根据我的自定义发出错误消息Unknown~key~choice消息发出错误消息。

如果提供的密钥是有效值之一(事实上,在这个 MCE 中是唯一的一个),则key=foo)一切都按预期工作。但是,否则(例如key=bar),发出的消息不是我的自定义消息,而是expl3以下情况下的默认消息:

! LaTeX 错误:键“mymodule/key”仅接受一组固定的选择。

如需立即帮助,请输入 H...

l.21 }

? H

键“mymodule/key”仅接受预定义值,而“bar”不是其中之一。

\documentclass{article}
\begin{document}
\ExplSyntaxOn
\msg_new:nnn{mymodule}{Unknown~key~choice}{
  The~ supplied~ value~ `#1`~ for~ `key` isn't~ one~ of~ the~ valid~ ones~ (`foo`).
}
\keys_define:nn { mymodule }
{
  key .choices:nn  = {
    foo ,
    unknown .code:n = {
      \msg_error:nnx {mymodule} {Unknown~key~choice} {\exp_not:n {#1}}
    }
  }{
    You~ have~ chosen~ “\l_keys_choice_tl”!
  }
}
\keys_set:nn { mymodule } {
  % key=foo
  key=bar
}
\ExplSyntaxOff
\end{document}

我错过了什么?

答案1

自行定义未知的选择:

\documentclass{article}
\begin{document}
\ExplSyntaxOn
\msg_new:nnn{mymodule}{Unknown~key~choice}{
  The~ supplied~ value~ `#1`~ for~ `key` isn't~ one~ of~ the~ valid~ ones~ (`foo`).
} 

\keys_define:nn { mymodule } 
  { 
   key .choices:nn  = {
     foo ,
    }
    {
      You~ have~ chosen~ “\l_keys_choice_tl”!
    },  
   key / unknown     .code:n = {
      \msg_error:nnx {mymodule} {Unknown~key~choice} {\exp_not:n {#1}}
   } 
  } 

\keys_set:nn { mymodule } { 
  % key=foo
  key=bar
}
\ExplSyntaxOff
\end{document}

相关内容