La devolución de llamada de LuaTeX hpack_filter no se activa en ciertas creaciones de hlist

La devolución de llamada de LuaTeX hpack_filter no se activa en ciertas creaciones de hlist

EDITAR: El hpack_filter se activa y mi pregunta no tiene sentido. Consulte mi respuesta sobre por qué perdí la invocación de devolución de llamada.

Estoy usando LuaTeX para analizar el proceso de creación de expresiones matemáticas en un documento. A tal efecto, utilizo la mlist_to_hlistdevolución de llamada para insertar un whatsitnodo en la lista de nodos. Cuando las expresiones matemáticas se ensamblan en su forma final empaquetando varias listas de nodos en listas horizontales y verticales, me conecto a este proceso con hpack_filtery vpack_filterdevoluciones de llamada. Esto me permite seguir la ruta de creación desde la expresión matemática sin procesar hasta la página final.

Encuentro un problema con una parte específica de este proceso. Parece que las filas de un alignentorno matemático se agregan a la lista vertical principal como listas horizontales con un subtipo específico. Estos hlistnodos tienen el subtipo 4, que se describe como "columna o fila de alineación" en la documentación de LuaTeX.

Mi problema ahora es que la creación de exactamente estos hlistmensajes de correo electrónico no se filtra con la hpack_filterdevolución de llamada. Para todos los demás hlisttipos obtengo la invocación esperada hpack_filterpero no para estos. Para mis propósitos, ya es suficiente verificar los argumentos de entrada de este proceso para detectar la aparición de cierto whatsitnodo y luego cancelar completamente el embalaje. El objetivo es que este contenido no se transfiera a la lista vertical principal.

Esto lleva a mipreguntas:

  • ¿Por qué hpack_filterno se solicita la creación de un hlistsubtipo 4?
  • ¿Es posible habilitar tal comportamiento u obtener de alguna manera un mecanismo de devolución de llamada equivalente por otros medios?

Respuesta1

Mientras inspeccionaba la lista de nodos que se proporcionaban como argumentos para las hpack_filterdevoluciones de llamada, no noté que el argumento de entrada contenía unsetnodos. Mi opinión sobre cómo \halignLuaTeX trata una alineación (generada por el comando TeX ) es la siguiente:

  1. Mediante una serie de hpackinvocaciones con argumento groupcode == align_set, las listas de nodos de entrada se empaquetan en el headcampo de unsetnodos.
  2. Estos unsetnodos (con gluenodos y quizás otras cosas) luego se empaquetan en un hlistnodo con subtipo 4. Las listas de nodos que residían en los headcampos de los unsetnodos todavía están presentes, pero ahora en headcampos de hlistnodos con subtipo 5. Este empaquetado ocurre en una hpackinvocación. con argumento groupcode == fin_row.Esta es exactamente la parte que me perdí y que estaba pidiendo.

Esto es lo que descubrí al mirar las listas de nodos intermedios y es mi propia opinión. Esta información no se puede encontrar en el manual de LuaTeX hasta el momento (versión 0.76) y unsetlos nodos apenas se mencionan. Que tienen un headcampo lo deduje al mirar el código fuente de LuaTeX.

información relacionada