错误拦截

错误拦截

MWE 中的代码允许通过设置适当的可选项\myMacro来处理tokenlistinteger或。我一开始的问题是:floating point item#2 parameter

(1) 是否expl3提供了一种方法来拦截错误、跳过有问题的语句、采取补救措施并继续编译,例如类似于Try...Catch...Finallyin 的VB.Net方法?如果是的话,人们可以编写一些非常整洁的宏模板,这些模板可以接受与类型无关的输入参数......只是做梦!

(2)现在更紧迫的问题是:为什么调用5: \myMacro{13a5}[int]6: \myMacro{3.14159}[int]以下会产生这样的结果而不是编译错误?

顺便说一句,我也不确定 MWE 中的缩进是怎么回事。

\documentclass{article}

\usepackage[check-declarations]{expl3}
\usepackage{xparse}
\ExplSyntaxOn
%   VARIABLE DECLARATIONS:
\tl_new:N \l_aux_rn_tl
\int_new:N \l_aux_rn_int
\fp_new:N \l_aux_rn_fp
\NewDocumentCommand\myMacro{m O{tok}}
    {
        \str_case:nnTF {#2} 
                    {
                        {tok}
                        {token:~
                        \tl_set:Nn \l_aux_rn_tl {#1}
                        \l_aux_rn_tl
                        }                   
                        {int}
                        {integer:~
                        \int_set:Nn \l_aux_rn_int {#1}
                        \int_use:N \l_aux_rn_int
                        }                       
                        {fp}
                        {float:~
                        \fp_set:Nn \l_aux_rn_fp {#1}
                        \fp_use:N \l_aux_rn_fp
                        }
                    }
                    {}
                    {invalid~2nd~param}                     
    }   %   end \myMacro

\ExplSyntaxOff
\begin{document}
1: \verb+\myMacro{342561}+ \\
\myMacro{342561}\\
2: \verb+\myMacro{342561}[tok]+ \\
\myMacro{342561}[tok]\\
3: \verb+\myMacro{342561}[int]+ \\
\myMacro{342561}[int]\\
4: \verb+\myMacro{3.14159}[fp]+ \\
\myMacro{3.14159}[fp]\\
5: \verb+\myMacro{13a5}[int]+ \\
\myMacro{13a5}[int]\\
6: \verb+\myMacro{3.14159}[int]+ \\
\myMacro{3.14159}[int]\\
\end{document} 

相关内容