是否可以处理 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}