
BEARBEITEN: Der hpack_filter wird ausgelöst und meine Frage ist sinnlos. Lesen Sie in meiner Antwort, warum ich den Callback-Aufruf verpasst habe.
Ich verwende LuaTeX, um den Erstellungsprozess von mathematischen Ausdrücken in einem Dokument zu analysieren. Zu diesem Zweck verwende ich den mlist_to_hlist
Rückruf, um einen whatsit
Knoten in die Knotenliste einzufügen. Wenn die mathematischen Ausdrücke durch das Packen verschiedener Knotenlisten in horizontale und vertikale Listen in ihre endgültige Form gebracht werden, greife ich mit hpack_filter
und vpack_filter
Rückrufen auf diesen Prozess zu. Dadurch kann ich den Erstellungspfad vom Rohmathematikausdruck bis zur endgültigen Seite verfolgen.
Ich habe ein Problem mit einem bestimmten Teil dieses Prozesses. Es scheint, dass die Zeilen einer align
-math-Umgebung der vertikalen Hauptliste als horizontale Listen mit einem bestimmten Untertyp hinzugefügt werden. Diese hlist
Knoten haben den Untertyp 4, der in der LuaTeX-Dokumentation als „Ausrichtungsspalte oder -zeile“ beschrieben wird.
Mein Problem ist nun, dass die Erstellung genau dieser s nicht mit dem Callback hlist
gefiltert wird . Für alle anderen Typen bekomme ich den erwarteten Aufruf von , für diese jedoch nicht. Für meine Zwecke reicht es bereits aus, die Eingabeargumente dieses Prozesses auf das Vorkommen bestimmter Knoten zu prüfen und dann das Packen komplett abzubrechen. Das Ziel ist, diesen Inhalt nicht in die Hauptvertikalliste übertragen zu lassen.hpack_filter
hlist
hpack_filter
whatsit
Dies führt zu meinemFragen:
- Warum wird
hpack_filter
zur Erstellung keinhlist
mit Subtyp 4 aufgerufen? - Ist es möglich, ein solches Verhalten zu aktivieren oder auf andere Weise einen gleichwertigen Rückrufmechanismus zu erhalten?
Antwort1
Beim Überprüfen der Knotenliste, die als Argumente für die hpack_filter
Rückrufe angegeben wurden, ist mir nicht aufgefallen, dass das Eingabeargument unset
Knoten enthielt. Meiner Meinung nach \halign
wird eine Ausrichtung (die durch den TeX-Befehl generiert wird) von LuaTeX wie folgt behandelt:
- Durch eine Reihe von
hpack
Aufrufen mit Argumentengroupcode == align_set
werden die Eingabeknotenlisten in dashead
Knotenfeld gepacktunset
. - Diese
unset
Knoten (mitglue
Knoten und möglicherweise anderem Zeug) werden dann in einenhlist
Knoten mit Subtyp 4 gepackt. Die Knotenlisten, die sich in denhead
Feldern derunset
Knoten befanden, sind immer noch vorhanden, aber jetzt inhead
Feldern vonhlist
Knoten mit Subtyp 5. Dieses Packen geschieht in einemhpack
Aufruf mit dem Argumentgroupcode == fin_row
.Dies ist genau der Teil, den ich vermisst habe und nach dem ich gefragt habe.
Das habe ich herausgefunden, indem ich mir die Zwischenknotenlisten angesehen habe, und es ist meine eigene Meinung. Diese Information ist bisher im LuaTeX-Handbuch (Version 0.76) nicht zu finden und unset
Knoten werden kaum erwähnt. Dass sie ein head
Feld haben, habe ich aus dem LuaTeX-Quellcode abgeleitet.