
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_hlist
devolución de llamada para insertar un whatsit
nodo 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_filter
y vpack_filter
devoluciones 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 align
entorno matemático se agregan a la lista vertical principal como listas horizontales con un subtipo específico. Estos hlist
nodos 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 hlist
mensajes de correo electrónico no se filtra con la hpack_filter
devolución de llamada. Para todos los demás hlist
tipos obtengo la invocación esperada hpack_filter
pero 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 whatsit
nodo 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_filter
no se solicita la creación de unhlist
subtipo 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_filter
devoluciones de llamada, no noté que el argumento de entrada contenía unset
nodos. Mi opinión sobre cómo \halign
LuaTeX trata una alineación (generada por el comando TeX ) es la siguiente:
- Mediante una serie de
hpack
invocaciones con argumentogroupcode == align_set
, las listas de nodos de entrada se empaquetan en elhead
campo deunset
nodos. - Estos
unset
nodos (conglue
nodos y quizás otras cosas) luego se empaquetan en unhlist
nodo con subtipo 4. Las listas de nodos que residían en loshead
campos de losunset
nodos todavía están presentes, pero ahora enhead
campos dehlist
nodos con subtipo 5. Este empaquetado ocurre en unahpack
invocación. con argumentogroupcode == 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 unset
los nodos apenas se mencionan. Que tienen un head
campo lo deduje al mirar el código fuente de LuaTeX.