\int_incr:N dentro do ambiente tabular

\int_incr:N dentro do ambiente tabular

Comecei a aprender LaTeX3 há algumas semanas e atualmente estou brincando com mesas. Aqui está o meu código:

\documentclass{article}
\usepackage{expl3}

\ExplSyntaxOn
\cs_new_protected:Npn \juhu_tablerow:n #1
{
  \int_new:N \l_row_count_int
  \int_set:Nn \l_row_count_int { 1 }
  \prg_replicate:nn {#1}
  {
    \int_use:N \l_row_count_int .~row \\
    \int_incr:N \l_row_count_int
  }
}
\cs_new_eq:NN \tablerow \juhu_tablerow:n
\ExplSyntaxOff

\begin{document}

\begin{tabular}{c}
\tablerow{3}
\end{tabular}

\end{document}

A saída deste código é:

1. row
1. row
1. row

A saída desejada deve ser assim:

1. row
2. row
3. row

Quando substituo o tabularambiente, por exemplo, por um centerambiente, obtenho a saída esperada.

Agora, se eu substituir \\in \int_use:N \l_row_count_int .~row \\por ,~, \int_incr:Nparece funcionar novamente mesmo dentro do tabularambiente, e a saída é:

1. row, 2. row, 3. row, 

Então, minha pergunta é: por que aumentar o número inteiro não funciona dentro de um tabularambiente ao usar várias linhas e o que posso fazer para obter o resultado desejado?

Responder1

Do meu humilde comentário a uma resposta.:)

Você estava muito perto de uma solução! O culpado aqui é o escopo: essas atribuições acontecem localmente; vamos torná-los globais.

Antes de prosseguirmos, devemos mover a declaração inteira para fora da sua definição de comando, caso contrário, um erro será gerado nas chamadas subsequentes para \tablerow. Agora, uma pequena convenção de codificação, de

\int_new:N \l_row_count_int

para

\int_new:N \g_row_count_int

desde que nosso contador se tornou global. :)Agora, algumas substituições (obrigado ao egreg pela xparsesugestão!):

\documentclass{article}
\usepackage{xparse}

\ExplSyntaxOn

\int_new:N \g_row_count_int

\cs_new_protected:Npn \juhu_tablerow:n #1
{
  \int_gset:Nn \g_row_count_int { 1 }
  \prg_replicate:nn {#1}
  {
    \int_use:N \g_row_count_int .~row \\
    \int_gincr:N \g_row_count_int
  }
}

\NewDocumentCommand{ \tablerow }{ m }{
    \juhu_tablerow:n{#1}
}
\ExplSyntaxOff

\begin{document}

\begin{tabular}{c}
\tablerow{3}
\end{tabular}

\end{document}

E tudo deve estar funcionando bem.:)

Você também pode escolher \g_tmpa_intqual é um número inteiro zero para atribuição global e economizar alguns dólares.:)

informação relacionada