LuaTeX hpack_filter 回呼不會在某些 hlist 建立上觸發

LuaTeX hpack_filter 回呼不會在某些 hlist 建立上觸發

編輯: hpack_filter 被觸發,我的問題毫無意義。請參閱我的答案,了解為什麼我錯過了回調呼叫。

我正在使用 LuaTeX 來分析文件中數學表達式的建立過程。為此,我使用mlist_to_hlist回調將whatsit節點插入到節點列表中。當透過將各種節點列表打包成水平和垂直列表來將數學表達式組裝成最終形式時,我使用hpack_filtervpack_filter回調來掛鉤這個過程。這使我能夠遵循從原始數學表達式一直到最終頁面的建立路徑。

我在這個過程的特定部分遇到問題。似乎align-math-environment 的行被添加到主垂直列表中,作為具有特定子類型的水平列表。這些hlist節點的子類型為 4,在 LuaTeX 文件中被描述為「對齊列或行」。

我現在的問題是,這些 s 的創建hlist沒有通過hpack_filter回調進行過濾。對於所有其他hlist類型,我得到了預期的調用,hpack_filter但不是這些類型。就我的目的而言,檢查此過程的輸入參數是否出現某個whatsit節點就足夠了,然後完全取消打包。目標是不將此內容轉移到主垂直清單。

這導致我的問題

  • 為什麼hpack_filter不要求建立具有hlist子類型 4 的子類型?
  • 是否可以啟用這種行為或透過其他方式獲得等效的回調機制?

答案1

在檢查作為回調參數給出的節點列表時hpack_filter,我沒有註意到輸入參數包含unset節點。我對 LuaTeX 如何處理對齊(由 TeX 指令產生\halign)的看法如下:

  1. 透過一系列hpack帶有參數的調用groupcode == align_set,輸入節點清單被打包到節點head欄位中unset
  2. 然後,這些節點unset(帶有glue節點和其他內容)被打包到hlist子類型 4 的head節點中unset。中與論證。headhlisthpackgroupcode == fin_row這正是我錯過的部分,也是我想要的部分。

這是我透過查看中間節點清單得出的結論,也是我自己的觀點。到目前為止,在 LuaTeX 手冊(版本 0.76)中找不到此信息,並且unset幾乎沒有提及節點。他們有一個head欄位是我透過查看 LuaTeX 原始碼推斷出來的。

相關內容