我正在尝试在出现未知选择的情况下发出自定义错误消息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}