
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 tabular
ambiente, por exemplo, por um center
ambiente, obtenho a saída esperada.
Agora, se eu substituir \\
in \int_use:N \l_row_count_int .~row \\
por ,~
, \int_incr:N
parece funcionar novamente mesmo dentro do tabular
ambiente, 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 tabular
ambiente 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 xparse
sugestã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_int
qual é um número inteiro zero para atribuição global e economizar alguns dólares.:)