在适当的时候扩展 expl3 计数器测试

在适当的时候扩展 expl3 计数器测试

我正在尝试让一个计数器工作,\l__ioiooiioio_args_second_int在下面的例子中调用,我已经声明在每次循环时增加\int_incr:N \l__ioiooiioio_step_int,但显然计数器保持在零(可以通过控制看到\int_compare:nT{\l__ioiooiioio_step_int = 0}{\hyperlink{doc.rc.#1}{$\rightarrow$},这显然只适用于)\l__ioiooiioio_step_int=0。显然这是总是情况确实如此。为什么计数器的值没有增加?

\documentclass{article}

\usepackage{xparse} \usepackage{longtable} \usepackage{multirow} \usepackage{hyperref}

\ExplSyntaxOn

\NewDocumentCommand{\mymacro}{ m m }  
 {   
  \ioiooiioio_setargs:nn { #1 } { #2 }   
  \ioiooiioio_print:n   
 }

\seq_new:N \l__ioiooiioio_first_col_seq 
\seq_new:N \l__ioiooiioio_second_col_seq 
\tl_new:N \l__ioiooiioio_table_body_tl 
\int_new:N \l__ioiooiioio_step_int 
\int_new:N \l__ioiooiioio_args_int

\cs_new_protected:Npn \ioiooiioio_setargs:nn #1 #2  
 {   
  \seq_set_split:Nnn \l__ioiooiioio_first_col_seq { , } { #1 }   
  \seq_set_split:Nnn \l__ioiooiioio_second_col_seq { , } { #2 }   
  \tl_clear:N \l__ioiooiioio_table_body_tl   
  \int_zero:N \l__ioiooiioio_step_int   
  \int_set:Nn \l__ioiooiioio_args_int { \seq_count:N \l__ioiooiioio_first_col_seq }
  \seq_mapthread_function:NNN
       \l__ioiooiioio_first_col_seq
       \l__ioiooiioio_second_col_seq
       \__ioiooiioio_fill_body:nn  
 }

\cs_new_protected:Npn \__ioiooiioio_fill_body:nn #1 #2  
 {
  \int_incr:N \l__ioiooiioio_step_int   
  \tl_put_right:Nn \l__ioiooiioio_table_body_tl {  & #1 & #2 & 
  \int_compare:nT{\l__ioiooiioio_step_int = 0}{\hyperlink{doc.rc.#1}{$\rightarrow$}}
  \\}  
 }

\cs_new_protected:Npn \ioiooiioio_print:n   
 {  
  \multirow{ \l__ioiooiioio_args_int}{*}{\seq_item:Nn \l__ioiooiioio_first_col_seq { 1 }} 
  \l__ioiooiioio_table_body_tl    
 } 
\ExplSyntaxOff

\begin{document}

\begin{longtable}{cccc} 
\mymacro{this is a test,this,is a,test}{now its,not a,test,anymore} 
\end{longtable}

\end{document}

答案1

我不确定您到底想实现什么(您想将超链接放在哪一行?),但主要问题不在于计数器,而是您没有在正确的时间扩展测试。测试不是在您组装表格主体时扩展,而是在表格单元格内扩展,而那时计数器已经重置。

你想要的是

\cs_new_protected:Npn \__ioiooiioio_fill_body:nn #1 #2
  {
    \int_incr:N \l__ioiooiioio_step_int
    \tl_put_right:Nn \l__ioiooiioio_table_body_tl { & #1 & #2 & }
    \int_compare:nT { \l__ioiooiioio_step_int = ROW-NUMBER-GOES-HERE }
      {
        \tl_put_right:Nn \l__ioiooiioio_table_body_tl 
          { 
            \hyperlink { doc.rc.#1 } { $ \rightarrow $ } 
          }
      }
    \tl_put_right:Nn \l__ioiooiioio_table_body_tl { \\ }
  }

还要注意,如果你测试是否\l__ioiooiioio_step_int等于零,该测试将绝不结果为真,因为您在测试之前已经增加了计数器。如果您想要第一行中的超链接,则应该测试计数器是否为 1,而不是 0。

此外,由于打印命令不接受任何参数,因此它应该是\ioiooiioio_print:,而不是\ioiooiioio_print:n

相关内容