
編輯: hpack_filter 被觸發,我的問題毫無意義。請參閱我的答案,了解為什麼我錯過了回調呼叫。
我正在使用 LuaTeX 來分析文件中數學表達式的建立過程。為此,我使用mlist_to_hlist
回調將whatsit
節點插入到節點列表中。當透過將各種節點列表打包成水平和垂直列表來將數學表達式組裝成最終形式時,我使用hpack_filter
和vpack_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
)的看法如下:
- 透過一系列
hpack
帶有參數的調用groupcode == align_set
,輸入節點清單被打包到節點head
欄位中unset
。 - 然後,這些節點
unset
(帶有glue
節點和其他內容)被打包到hlist
子類型 4 的head
節點中unset
。中與論證。head
hlist
hpack
groupcode == fin_row
這正是我錯過的部分,也是我想要的部分。
這是我透過查看中間節點清單得出的結論,也是我自己的觀點。到目前為止,在 LuaTeX 手冊(版本 0.76)中找不到此信息,並且unset
幾乎沒有提及節點。他們有一個head
欄位是我透過查看 LuaTeX 原始碼推斷出來的。