如何在 \msg_new 中执行 \clist_set?

如何在 \msg_new 中执行 \clist_set?

是否可以处理 LaTeX3 错误消息中的逗号分隔列表?

例如,我想为某个.choice键定义一条未知值的消息,如下例所示。我用它\test来生成错误,而在实际文档中,它当然是键定义的一部分。

\documentclass{article}

\usepackage{expl3}
\ExplSyntaxOn

\msg_new:nnn { test } { unknown-choice } {
   The~value~'#2'~is~not~allowed~for~key~'#1'! \\
   \clist_set:Nn \l_tmpa_clist { #3 }
   Allowed~values:~\clist_use:Nnnn \l_tmpa_clist { ,~ } { ,~ } { ,~or~ }.
}

\newcommand{\test}{
   \msg_error:nnnnn { test } { unknown-choice }
      { test-key }
      { wrong-value }
      { value-1, value-2, value-3}
}
\ExplSyntaxOff

\begin{document}
Test Document \test
\end{document}

但这给了我这样的信息:

 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 !
 ! test error: "unknown-choice"
 ! 
 ! The value 'wrong-value' is not allowed for key 'test-key'!
 ! \clist_set:Nn {value-1,value-2,value-3}Allowed values: .
 ! 
 ! See the test documentation for further information.
 ! 
 ! Type <return> to continue.
 !..........................................…..

正如您所见,\clist_set它是逐字打印的,而不是扩展的。

答案1

\l_tmpa_clist我找到了一种方法:在调用错误消息之前设置,但这感觉“不对”……

\documentclass{article}

\usepackage{expl3}
\ExplSyntaxOn

\msg_new:nnn { test } { unknown-choice } {
   The~value~'#2'~is~not~allowed~for~key~'#1'! \\
   Allowed~values:~\clist_use:Nnnn \l_tmpa_clist { ,~ } { ,~ } { ,~or~ }.
}

\newcommand{\test}{
   \clist_set:Nn \l_tmpa_clist { value-1, value-2, value-3 }
   \msg_error:nnnn { test } { unknown-choice }
      { test-key }
      { wrong-value }
}
\ExplSyntaxOff

\begin{document}
Test Document \test
\end{document}

相关内容