MWE 中的代码允许通过设置适当的可选项\myMacro
来处理tokenlist
、integer
或。我一开始的问题是:floating point item
#2 parameter
(1) 是否expl3
提供了一种方法来拦截错误、跳过有问题的语句、采取补救措施并继续编译,例如类似于Try...Catch...Finally
in 的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}