Ich verwende TeX Live 2017 und dieaktuelle Luatex-Dokumentation von Glue Nodesbesagt, dass das subtype
Feld eines Klebeknotens die folgenden möglichen Werte hat:
0 = Benutzer überspringen, 1 = Linie überspringen, 2 = Grundlinie überspringen, 3 = Teil überspringen, 4 = Anzeige überspringen, 5 = Anzeige unterspringen, 6 = Anzeige überspringen kurz, 7 = Anzeige unterspringen kurz, 8 = Links überspringen, 9 = Rechts überspringen, 10 = Oben überspringen, 11 = Oben teilen, 12 = Tabulator überspringen, 13 = Leerzeichen überspringen, 14 = xLeerzeichen überspringen, 15 = Teilfüllung überspringen, 16 = Mathematik überspringen, 17 = Dünne Linie überspringen, 18 = Mittlere Linie überspringen, 19 = Dicke Linie überspringen, 98 = Bedingte Mathematik überspringen, 99 = Muglue, 100 = Leader, 101 = Cleader, 102 = XLeader, 103 = GLeader
Ich wollte etwas über LuaTeX lernen und habe den folgenden einfachen Code geschrieben, um zu jedem Absatz eine informative Ausgabe auszugeben:
\documentclass{article}
\directlua{dofile("parinfo.lua")}
\begin{document}
Word1, word2 office. Word3. End.
\end{document}
wo parinfo.lua
ist:
function traverse_paragraph(head)
while head do
print(string.format('In paragraph: %s %s', node.type(head.id), debugstr_node(head)))
head = head.next
end
return true
end
luatexbase.add_to_callback('pre_linebreak_filter', traverse_paragraph, 'Info for debugging')
function debugstr_node(n)
if node.type(n.id) == "glue" then
return debugstr_glue(n)
elseif node.type(n.id) == "glyph" then
return n.char < 128 and string.char(n.char) or string.format('[char %s]', n.char)
elseif node.type(n.id) == "kern" then
return string.format('%s', n.kern)
elseif node.type(n.id) == "penalty" then
return string.format('%s', n.penalty)
else
return ''
end
end
function debugstr_glue(n)
if n.subtype == 13 then
subtype = 'spaceskip'
elseif n.subtype == 14 then
subtype = 'xspaceskip'
elseif n.subtype == 15 then
subtype = 'parfillskip'
else
subtype = '' .. n.subtype
end
return string.format('<%s: %s plus %s(%s) minus %s(%s)', subtype, n.width, n.stretch, n.stretch_order, n.shrink, n.shrink_order)
end
Wenn die .tex
Datei also mit kompiliert wird lualatex
, erhalten wir eine Ausgabe wie:
In paragraph: local_par
In paragraph: hlist
In paragraph: glyph W
In paragraph: kern -54395
In paragraph: glyph o
In paragraph: glyph r
In paragraph: glyph d
In paragraph: glyph 1
In paragraph: glyph ,
In paragraph: glue <spaceskip: 218235 plus 136396(0) minus 58196(0)
In paragraph: glyph w
In paragraph: kern -18350
In paragraph: glyph o
In paragraph: glyph r
In paragraph: glyph d
In paragraph: glyph 2
In paragraph: glue <spaceskip: 218235 plus 109117(0) minus 72745(0)
In paragraph: glyph o
In paragraph: glyph [char 64259]
In paragraph: glyph c
In paragraph: glyph e
In paragraph: glyph .
In paragraph: glue <spaceskip: 290980 plus 327351(0) minus 24248(0)
In paragraph: glyph W
In paragraph: kern -54395
In paragraph: glyph o
In paragraph: glyph r
In paragraph: glyph d
In paragraph: glyph 3
In paragraph: glyph .
In paragraph: glue <spaceskip: 290980 plus 327351(0) minus 24248(0)
In paragraph: glyph E
In paragraph: glyph n
In paragraph: glyph d
In paragraph: glyph .
In paragraph: penalty 10000
In paragraph: glue <parfillskip: 0 plus 65536(2) minus 0(0)
Beachten Sie, dass der Kleber nach dem Komma (der eine größere Dehnung hat) und der nach dem .
(der eine größere Breite und größere Dehnung hat) immer noch beide mit dem Untertyp angezeigt werden spaceskip
, statt mit xspaceskip
. (Der Kleber am Ende des Absatzes hat, wie erwartet, den Untertyp parfillskip
.)
Ist das zu erwarten? Wann würden wir einen Kleber vom Typ sehen xspaceskip
? Und gibt es im pre_linebreak-Filter eine alternative Möglichkeit, den größeren Kleber zu erkennen, der auf die Interpunktion oder das Satzende (mit \nonfrenchspacing
) folgt, außer beispielsweise den kürzlich gesehenen Kleber zwischen Wörtern zu verfolgen und auf Unterschiede zu vergleichen?
Ich verstehe die Funktionsweise dieser Funktionen nicht einmal für Nicht-LuaTeX, daher bin ich möglicherweise nur verwirrt :-) Falls es wichtig ist, luatex --version
sagt
Dies ist LuaTeX, Version 1.0.4 (TeX Live 2017)
Antwort1
wenn Sie\xspaceskip
\documentclass{article}
\directlua{dofile("parinfo.lua")}
\setlength\xspaceskip{10pt}
\begin{document}
Word1, word2 office. Word3. End.
\end{document}
In paragraph: glyph 3
In paragraph: glyph .
In paragraph: glue <xspaceskip: 655360 plus 0(0) minus 0(0)
In paragraph: glyph E