我正在尝试让一个计数器工作,\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
。