
EDIT: O hpack_filter é acionado e minha pergunta é inútil. Consulte minha resposta sobre por que perdi a chamada de retorno de chamada.
Estou usando o LuaTeX para analisar o processo de criação de expressões matemáticas em um documento. Para isso, uso o mlist_to_hlist
retorno de chamada para inserir um whatsit
nó na lista de nós. Quando as expressões matemáticas são montadas em sua forma final, agrupando várias listas de nós em listas horizontais e verticais, entro nesse processo com retornos de chamada hpack_filter
e vpack_filter
. Isso me permite seguir o caminho de criação desde a expressão matemática bruta até a página final.
Encontro um problema com uma parte específica deste processo. Parece que as linhas de um align
ambiente -math são adicionadas à lista vertical principal como listas horizontais com um subtipo específico. Esses hlist
nós possuem o subtipo 4, que é descrito como 'coluna ou linha de alinhamento' na documentação do LuaTeX.
Meu problema agora é que a criação exatamente desses hlist
s não é filtrada com o hpack_filter
retorno de chamada. Para todos os outros hlist
tipos, recebo a invocação esperada, hpack_filter
mas não para estes. Para meus propósitos, já é suficiente verificar os argumentos de entrada deste processo quanto à ocorrência de determinado whatsit
nó e então cancelar completamente o empacotamento. O objetivo é não transferir esse conteúdo para a lista vertical principal.
Isto leva ao meuquestões:
- Por que não é
hpack_filter
solicitada a criação de umhlist
com subtipo 4? - É possível ativar tal comportamento ou obter de alguma forma um mecanismo de retorno de chamada equivalente por outros meios?
Responder1
Ao inspecionar a lista de nós fornecida como argumento para os hpack_filter
retornos de chamada, não percebi que o argumento de entrada continha unset
nós. Minha opinião sobre como um alinhamento (que é gerado pelo comando TeX \halign
) é tratado pelo LuaTeX é a seguinte:
- Através de uma série de
hpack
invocações com argumentogroupcode == align_set
, as listas de nós de entrada são compactadas nohead
campo deunset
nós. - Esses
unset
nós (comglue
nós e talvez outras coisas) são então compactados em umhlist
nó com subtipo 4. As listas de nós que residiam noshead
campos dosunset
nós ainda estão presentes, mas agora emhead
campos dehlist
nós com subtipo 5. Esse empacotamento acontece em umahpack
invocação com argumentogroupcode == fin_row
.Essa é exatamente a parte que perdi e que estava pedindo.
Isso é o que descobri observando as listas de nós intermediários e é minha opinião. Esta informação não pode ser encontrada no manual do LuaTeX até agora (versão 0.76) e unset
os nós quase não são mencionados. Que eles têm um head
campo que deduzi olhando o código-fonte do LuaTeX.