¿Cuándo un nodo adhesivo tiene el tipo `xspaceskip` en LuaTeX?

¿Cuándo un nodo adhesivo tiene el tipo `xspaceskip` en LuaTeX?

Estoy usando TeX Live 2017 y eldocumentación luatex actual de nodos de pegamentodice que el subtypecampo de un nodo de pegamento tiene los siguientes valores posibles:

0 = omisión de usuario, 1 = omisión de línea, 2 = omisión de línea base, 3 = omisión parcial, 4 = omisión superior, 5 = omisión inferior, 6 = omisión superior, 7 = omisión inferior, 8 = omisión izquierda, 9 = omisión derecha, 10 = omisión superior, 11 = omisión dividida, 12 = tabskip, 13 = spaceskip, 14 = xspaceskip, 15 = parfillskip, 16 = mathskip, 17 = Thinmuskip, 18 = medmuskip, 19 = Thickmuskip, 98 = conditionalmathskip, 99 = muglue, 100 = líderes, 101 = cleaders, 102 = xleaders, 103 = líderes

Estaba tratando de aprender sobre LuaTeX y escribí el siguiente código simple para generar información sobre cada párrafo:

\documentclass{article}
\directlua{dofile("parinfo.lua")}
\begin{document}

Word1, word2 office. Word3. End.
\end{document}

dónde parinfo.luaes:

function traverse_paragraph(head)
   while head do
      print(string.format('In paragraph: %s %s', node.type(head.id), debugstr_node(head)))
      head = head.next
   end
  return true
end
luatexbase.add_to_callback('pre_linebreak_filter', traverse_paragraph, 'Info for debugging')

function debugstr_node(n)
   if node.type(n.id) == "glue" then
      return debugstr_glue(n)
   elseif node.type(n.id) == "glyph" then
      return n.char < 128 and string.char(n.char) or string.format('[char %s]', n.char)
   elseif node.type(n.id) == "kern" then
      return string.format('%s', n.kern)
   elseif node.type(n.id) == "penalty" then
      return string.format('%s', n.penalty)
   else
      return ''
   end
end

function debugstr_glue(n)
   if n.subtype == 13 then
      subtype = 'spaceskip'
   elseif n.subtype == 14 then
      subtype = 'xspaceskip'
   elseif n.subtype == 15 then
      subtype = 'parfillskip'
   else
      subtype = '' .. n.subtype
   end
   return string.format('<%s: %s plus %s(%s) minus %s(%s)', subtype, n.width, n.stretch, n.stretch_order, n.shrink, n.shrink_order)
end

Entonces, cuando el .texarchivo se compila con lualatex, obtenemos un resultado como:

In paragraph: local_par 
In paragraph: hlist 
In paragraph: glyph W
In paragraph: kern -54395
In paragraph: glyph o
In paragraph: glyph r
In paragraph: glyph d
In paragraph: glyph 1
In paragraph: glyph ,
In paragraph: glue <spaceskip: 218235 plus 136396(0) minus 58196(0)
In paragraph: glyph w
In paragraph: kern -18350
In paragraph: glyph o
In paragraph: glyph r
In paragraph: glyph d
In paragraph: glyph 2
In paragraph: glue <spaceskip: 218235 plus 109117(0) minus 72745(0)
In paragraph: glyph o
In paragraph: glyph [char 64259]
In paragraph: glyph c
In paragraph: glyph e
In paragraph: glyph .
In paragraph: glue <spaceskip: 290980 plus 327351(0) minus 24248(0)
In paragraph: glyph W
In paragraph: kern -54395
In paragraph: glyph o
In paragraph: glyph r
In paragraph: glyph d
In paragraph: glyph 3
In paragraph: glyph .
In paragraph: glue <spaceskip: 290980 plus 327351(0) minus 24248(0)
In paragraph: glyph E
In paragraph: glyph n
In paragraph: glyph d
In paragraph: glyph .
In paragraph: penalty 10000
In paragraph: glue <parfillskip: 0 plus 65536(2) minus 0(0)

Tenga en cuenta que el pegamento después de la coma (que tiene mayor estiramiento) y el que está después de .(que tiene mayor ancho y mayor estiramiento) todavía se muestran como subtipo spaceskip, en lugar de xspaceskip. (El pegamento al final del párrafo tiene el subtipo parfillskip, como se esperaba).

¿Se espera esto? ¿Cuándo veremos que el pegamento tiene tipo xspaceskip? ¿Y existe una forma alternativa en el filtro pre_linebreak de detectar el pegamento más grande que sigue a la puntuación o al final de la oración (con \nonfrenchspacing), además de realizar un seguimiento del pegamento entre palabras visto recientemente y comparar las diferencias?

No entiendo completamente el funcionamiento de estos, incluso para los que no son LuaTeX, por lo que puede que esté confundido :-) En caso de que importe, luatex --versiondice

Este es LuaTeX, Versión 1.0.4 (TeX Live 2017)

Respuesta1

cuando estableces\xspaceskip

\documentclass{article}
\directlua{dofile("parinfo.lua")}
\setlength\xspaceskip{10pt}
\begin{document}

Word1, word2 office. Word3. End.
\end{document}

In paragraph: glyph 3
In paragraph: glyph .
In paragraph: glue <xspaceskip: 655360 plus 0(0) minus 0(0)
In paragraph: glyph E

información relacionada