\seq_use:Nn 获取 ! 缺少 = 插入 \ifnum

\seq_use:Nn 获取 ! 缺少 = 插入 \ifnum

我的主要问题是我从 中得到“!缺少 = 插入\ifnum。” \seq_use:Nn。我的第二个问题是我得到了意外的终端读取。我试过注释掉括号并删除 中的\\exists但都没有用。

\documentclass{article}
\usepackage{amsfonts}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{mathtools}
\usepackage{xparse} % loads expl3
%See interface3.pdf

\ExplSyntaxOn

\NewDocumentCommand{\uqualg}{mm}
 {
   \msg_term:n{Enterring~uqualg}
    % Set option defaults
    \bool_if_exist:NTF \style_qual_parens
      {}
      {\bool_gset_false:N \style_qual_parens}
    \bool_if_exist:NTF \style_qual_paren_pairs
      {}
      {\bool_gset_false:N \style_qual_paren_pairs}
    \bool_if_exist:NTF \style_qual_subscript
      {}
      {\bool_gset_false:N \style_qual_subscript}

    \bool_if:NTF \style_qual_subscript
      {
        \seq_set_split:Nnn \l_tmpa_tl {\\} {#1}
        \tl_show:N \l_tmpa_tl
        \bool_if:NTF \style_qual_parens
          {(\exists \sb {\l_tmpa_tl})#2}
          {\exists \sb {\l_tmpa_tl} #2}
      }
      {
      \msg_term:n{No~subscript~for~#1~}
      \tl_set:Nn \l_tmpa_tl {#1}
       \msg_term:n{l_tmpa_tl=\l_tmpa_tl~}
       \msg_term:n{test~paren~pairs~}
       \bool_if:NTF \style_qual_paren_pairs
       {
         % Parens around each qualifier
         \msg_term:n{Pair~of~parens~around~each~item~in~#1~}
         \text{Pair~of~parens~around~each~item~in~#1~}
         \tl_show:N \l_tmpa_tl
         {
           (
           \msg_term:n{open~paren}
           \exists
           \msg_term:n{exists}
           \seq_use:Nn \l_tmpa_tl
           {
             )
             \exists
             (
           }
           \msg_term:n{seq_use}
           )
         }
      {#2}
         \msg_term:n {seq_us~ OK}
       }
       {
         \msg_term:n{No~multiple~parens~}
         \bool_if:NTF \style_qual_parens
           {
             %parens around string of qualifiers
             \msg_term:n{Single~pair~of~parens~for~#1~}
             (
             \tl_map_inline:Nn {#1}
               {
                 \exists {##1}
               }
             ) #2
           }
           {
             % Bare qualifier
             \msg_term:n{no~parens~for~#1~}
             \tl_map_inline:Nn {#1}
               {
                 \msg_term:n{item~##1~}
                 \exists ##1
               }
             {#2}
           }
       }
      }
 }

\ExplSyntaxOff

\begin{document}

\[ \uqualg {{X}} {P(X)} \]

\[ \uqualg{{X}{Y}} {P(X,Y)} \]

\ExplSyntaxOn
\bool_gset_false:N \style_qual_paren_pairs
\bool_gset_true:N \style_qual_parens
\ExplSyntaxOff

\[ \uqualg {{X}} {P(X)} \]

\[ \uqualg{{X}{Y}} {P(X,Y)} \]

\ExplSyntaxOn
\bool_gset_true:N \style_qual_paren_pairs
\bool_gset_false:N \style_qual_parens
\ExplSyntaxOff

\[ \uqualg {{X}} {P(X)} \]

\[ \uqualg{{X}{Y}} {P(X,Y)} \]

\end{document}

注意:expl3文档中没有任何内容\tl_show:N表明终端读取。

\seq_use:Nn错误发生在第 43 行插入字符串的调用中) \exists (

*************************************************
* Enterring uqualg
*************************************************
*************************************************
* No subscript for {X}{Y}
*************************************************
*************************************************
* l_tmpa_tl={X}{Y}
*************************************************
*************************************************
* test paren pairs
*************************************************
*************************************************
* Pair of parens around each item in {X}{Y}
*************************************************
> \l_tmpa_tl={X}{Y}.
<recently read> }

l.112 \[ \uqualg{{X}{Y}} {P(X,Y)}
                                  \]
?
*************************************************
* open paren
*************************************************
*************************************************
* exists
*************************************************
! Missing = inserted for \ifnum.
<to be read again>
                   {
l.112 \[ \uqualg{{X}{Y}} {P(X,Y)}

答案1

这样能让你满意吗?我觉得你应该清楚地解释一下你想做什么。

\documentclass{scrartcl}

\usepackage{amssymb}
\usepackage{mathtools}
\usepackage{xparse}

\ExplSyntaxOn

\NewDocumentCommand \uqualg { m m } { \shmuel_uqual:nn { #1 } { #2 } }
\NewDocumentCommand \setupuqualg { m } { \keys_set:nn { shmuel / uqualg } { #1 } }

\keys_define:nn { shmuel / uqualg }
 {
  subscript    .bool_gset:N = \g_uqual_scrpt_bool ,
  singleparens .bool_gset:N = \g_uqual_snglparen_bool ,
  multiparens  .bool_gset:N = \g_uqual_multparen_bool ,
 }

\cs_new_protected:Npn \math_sb:n #1 { \c_math_subscript_token { #1 } }

\cs_new_protected:Npn \shmuel_uqual:nn #1 #2
 {
  \seq_set_split:Nnn \l_tmpa_seq { } { #1 }
  \bool_if:NTF \g_uqual_scrpt_bool
   {
    \bool_if:NT \g_uqual_snglparen_bool (
    \exists \math_sb:n { \substack { \seq_use:Nn \l_tmpa_seq { \\ } } }
    \bool_if:NT \g_uqual_snglparen_bool )
   }
   {
    \bool_if:NTF \g_uqual_multparen_bool
     {
      ( \exists \seq_use:Nn \l_tmpa_seq { ) ( \exists } )
     }
     {
      \bool_if:NT \g_uqual_snglparen_bool (
      \seq_map_inline:Nn \l_tmpa_seq { \exists ##1 }
      \bool_if:NT \g_uqual_snglparen_bool )
     }
   }
   #2
 }

\ExplSyntaxOff

\begin{document}

\[ \uqualg {X}  {P(X)}   \]
\[ \uqualg {XY} {P(X,Y)} \]

\setupuqualg{singleparens}

\[ \uqualg {X}  {P(X)}   \]
\[ \uqualg {XY} {P(X,Y)} \]

\setupuqualg{multiparens}

\[ \uqualg {X}  {P(X)}   \]
\[ \uqualg {XY} {P(X,Y)} \]

\setupuqualg{subscript}

\[ \uqualg {X}  {P(X)}   \]
\[ \uqualg {XY} {P(X,Y)} \]

\setupuqualg{subscript,singleparens=false}

\[ \uqualg {X}  {P(X)}   \]
\[ \uqualg {XY} {P(X,Y)} \]

\end{document}

答案2

[这只是一个补充,以便我可以正确格式化。它回答了当前问题,如该问题的评论中所述,而不是 Manuel 解决的原始问题。]

_show当介绍第一个这样的示例时,第 17 页对宏的作用的解释更为详细。

\cs_show:N <control sequence>

<control sequence>显示终端上的定义。

TeXhackers 注释:这与 TeX 原语类似\show,每行包含固定数量的字符。

因此,预计其行为将类似于\show,它们都会暂停编译以便展示终端上的某些东西。

相关内容