Gustavo, miembro de este equipo de trabajo, nos ha hecho el favor de redactar este enunciado ya que conoce muy bien dicho tema.
Solución:
Aquí está un groupify
dominio:
groupify[]
que separará a los
en grupos de
elementos (a partir de la izquierda) e insertará
entre cada par de grupos. El valor por defecto
es ,allowbreak
(un espacio delgado que permite un salto de línea).
documentclassarticle
usepackagexparse
ExplSyntaxOn
NewExpandableDocumentCommand groupify O,allowbreak m m
jakob_groupify:nnn #1 #2 #3
cs_new:Npn jakob_groupify:nnn #1 #2 #3
__jakob_groupify_loop:nnw 1 #2 #3 q_recursion_tail #1 q_recursion_stop
cs_new:Npn __jakob_groupify_loop:nnw #1 #2 #3
quark_if_recursion_tail_stop:n #3
exp_not:n #3
int_compare:nNnTF #1 = #2
__jakob_groupify_sep:n
exp_args:Nf __jakob_groupify_loop:nnw int_eval:n #1+1
#2
cs_new:Npn __jakob_groupify_sep:n #1 #2 q_recursion_tail #3
tl_if_empty:nF #2 exp_not:n #3
__jakob_groupify_loop:nnw 1 #1
#2 q_recursion_tail #3
ExplSyntaxOff
begindocument
groupify301234567890123456789012345678901234567890123456789
groupify[ X ]501234567890123456789012345678901234567890123456789
enddocument
Aquí hay una solución basada en LuaLaTeX. Consiste en una función de Lua llamada groupnum
que hace el trabajo real y un LaTeX macro llamó groupnum
, que toma dos argumentos. El primero es opcional y establece la longitud del agrupamiento; la longitud predeterminada es 4. El segundo es el número que se supone que debe agruparse.
% !TEX TS-program = lualatex
documentclassarticle
usepackageluacode
beginluacode
function groupnum ( s , n )
while #s > n do
tex.sprint ( s:sub(1,n) .. "\mkern3mu\allowbreak")
s = s:sub(n+1)
end
tex.sprint ( s )
end
endluacode
%% LaTeX utility macro:
newcommandgroupnum[2][4]directluagroupnum("#2",#1)
begindocument
raggedright
$groupnum123456789012345$
$groupnum[5]123456789012345$
$groupnum[7]1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890$
enddocument
Si te mola el asunto, puedes dejar un ensayo acerca de qué te ha gustado de este enunciado.