
Empecé a aprender LaTeX3 hace unas semanas y actualmente estoy jugando con tablas. Aquí está mi 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}
La salida de este código es:
1. row
1. row
1. row
El resultado deseado debería ser así:
1. row
2. row
3. row
Cuando reemplazo el tabular
entorno, por ejemplo, con un center
entorno, obtengo el resultado esperado.
Ahora, si reemplazo \\
in \int_use:N \l_row_count_int .~row \\
con ,~
, \int_incr:N
parece funcionar nuevamente incluso dentro del tabular
entorno, y el resultado es:
1. row, 2. row, 3. row,
Entonces, mi pregunta es, ¿por qué aumentar el número entero no funciona dentro de un tabular
entorno cuando se usan varias filas y qué puedo hacer para obtener el resultado deseado?
Respuesta1
De mi humilde comentario a una respuesta.:)
¡Estabas muy cerca de una solución! El culpable aquí es el alcance: esas asignaciones se realizan localmente; hagámoslos globales.
Antes de continuar, debemos mover la declaración de enteros fuera de su definición de comando; de lo contrario, se generará un error en llamadas posteriores a \tablerow
. Ahora, una pequeña convención de codificación, de
\int_new:N \l_row_count_int
a
\int_new:N \g_row_count_int
desde que nuestro mostrador se volvió global. :)
Ahora, un par de reemplazos (¡gracias a egreg por la xparse
sugerencia!):
\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}
Y todo debería estar funcionando bien.:)
También puede optar por \g_tmpa_int
un número entero cero para la asignación global y ahorrar un par de dólares.:)