O retorno de chamada LuaTeX hpack_filter não é acionado em certas criações de hlist

O retorno de chamada LuaTeX hpack_filter não é acionado em certas criações de hlist

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_hlistretorno de chamada para inserir um whatsitnó 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_filtere 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 alignambiente -math são adicionadas à lista vertical principal como listas horizontais com um subtipo específico. Esses hlistnó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 hlists não é filtrada com o hpack_filterretorno de chamada. Para todos os outros hlisttipos, recebo a invocação esperada, hpack_filtermas não para estes. Para meus propósitos, já é suficiente verificar os argumentos de entrada deste processo quanto à ocorrência de determinado whatsitnó 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_filtersolicitada a criação de um hlistcom 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_filterretornos de chamada, não percebi que o argumento de entrada continha unsetnós. Minha opinião sobre como um alinhamento (que é gerado pelo comando TeX \halign) é tratado pelo LuaTeX é a seguinte:

  1. Através de uma série de hpackinvocações com argumento groupcode == align_set, as listas de nós de entrada são compactadas no headcampo de unsetnós.
  2. Esses unsetnós (com gluenós e talvez outras coisas) são então compactados em um hlistnó com subtipo 4. As listas de nós que residiam nos headcampos dos unsetnós ainda estão presentes, mas agora em headcampos de hlistnós com subtipo 5. Esse empacotamento acontece em uma hpackinvocação com argumento groupcode == 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 unsetos nós quase não são mencionados. Que eles têm um headcampo que deduzi olhando o código-fonte do LuaTeX.

informação relacionada