fp_eval 不会抛出错误消息

fp_eval 不会抛出错误消息

我正在编写一些对传递给函数的值的错误检查,如果值不正确,则在将它们传递给之前引发错误\fp_eval。据我所知,对的调用\fp_eval弄乱了错误消息,我无法显示它们。

这是我想要实现的 MWE。这是一个非常复杂的代码的净化版本,但我缩小了它的范围,如果它看起来没有什么意义,我深表歉意。

\documentclass{article}

\ExplSyntaxOn
\msg_new:nnn { module } { invalid-option }{ Value~'#2'~invalid~for~"#1"~#3.}

\cs_new:Npn \__module_Function:n #1
{
    \str_case_e:nnF {#1}
    {
        { N } { 0.2 }
        { A } { 0.3 }
    }
    { \msg_error:nnxxx { module } { invalid-option } { Function } {#1} {\msg_line_context:} }
}

\cs_new:Npn \__module_OtherFunction:n #1
{
    \fp_eval:n {2 * (\__module_Function:n {#1})}
}

\NewExpandableDocumentCommand \test { m }{%
    \__module_Function:n {#1}
}

\NewExpandableDocumentCommand \otherTest { m }{%
    \__module_OtherFunction:n {#1}
}

\ExplSyntaxOff

\begin{document}
    
    \test{A}
    \test{N}
%   \test{X} %PRINT --> Package module Error: Value 'X' invalid for "Function" on line 37.
    
    \otherTest{A}
    \otherTest{N}
    \otherTest{X} % Cannot print this error
\end{document}

使用错误值对的调用\test会引发正确的错误,但是对的调用\otherTest却给出了此错误:

! You can't use `\edef' after \the.
<argument> \cs_set_nopar:Npx 

我该如何避免这个问题才能正确引发我的错误?

相关内容