xparse 扩展的问题

xparse 扩展的问题

我正在尝试使用函数这个答案

\documentclass{article}

\usepackage{xparse}

\ExplSyntaxOn
    \NewExpandableDocumentCommand{\switchcondition}{ O{string} m m m }
     {
      \use:c { fraiman_#1_switch:nnn } { #2 } { #3 } { #4 }
     }

    \cs_new:Nn \fraiman_string_switch:nnn
     {
      \str_case:nnF { #1 } { #2 } { #3 }
     }
    \cs_new:Nn \fraiman_token_switch:nnn
     {
      \tl_case:nnF { #1 } { #2 } { #3 }
     }
    \cs_new:Nn \fraiman_integer_switch:nnn
     {
      \int_case:nnF { #1 } { #2 } { #3 }
     }
    \cs_new:Nn \fraiman_dimen_switch:nnn
     {
      \dim_case:nnF { #1 } { #2 } { #3 }
     }
\ExplSyntaxOff

\begin{document}

    \newcommand{\Hello}{A4}

    \switchcondition{\Hello}{
        {A4}{It is A4}
        {A5}{It is A5}
    }{Oops!}

\end{document}

问题是,无论我如何定义\Hello,我总是会得到“哎呀!”。

然而,

    \switchcondition{A5}{
        {A4}{It is A4}
        {A5}{It is A5}
    }{Oops!}

作品。

答案1

如果您希望第一个参数\str_case:nnF完全展开,则必须使用\str_case_e:nnF

\documentclass{article}

\usepackage{xparse}

\ExplSyntaxOn
    \NewExpandableDocumentCommand{\switchcondition}{ O{string} m m m }
     {
      \use:c { fraiman_#1_switch:nnn } { #2 } { #3 } { #4 }
     }

    \cs_new:Nn \fraiman_string_switch:nnn
     {
      \str_case_e:nnF { #1 } { #2 } { #3 }
     }
    \cs_new:Nn \fraiman_token_switch:nnn
     {
      \tl_case:nnF { #1 } { #2 } { #3 }
     }
    \cs_new:Nn \fraiman_integer_switch:nnn
     {
      \int_case:nnF { #1 } { #2 } { #3 }
     }
    \cs_new:Nn \fraiman_dimen_switch:nnn
     {
      \dim_case:nnF { #1 } { #2 } { #3 }
     }
\ExplSyntaxOff

\begin{document}

    \newcommand{\Hello}{A4}

    \switchcondition{\Hello}{
        {A4}{It is A4}
        {A5}{It is A5}
    }{Oops!}

\end{document}

在此处输入图片描述

相关内容