Eine Nodeliste erstellen – einfaches Beispiel1

Auf der DANTE Konferenz in Dortmund habe ich einen Vortrag über LuaTeX gehalten und dort ein Beispiel für's Erstellen einer Nodelist gegeben. Das Beispiel habe ich extra knapp gehalten, damit der Code lesbar auf eine Folie passt. Hier ist dasselbe Beispiel etwas ausführlicher.

\directlua{
function mkhbox(str)
  local head
  local glyph = node.id("glyph")
  for s in string.utfvalues(str) do
    if s == 32 then % Leerzeichen
      n = node.new(node.id("glue"))
      n.spec = node.new(node.id("glue_spec"))
      n.spec.width   = 3   * 2^16
      n.spec.shrink  = 1.1 * 2^16
      n.spec.stretch = 2.2 * 2^16
    else
      n = node.new(node.id("glyph"))
      n.font = 1
      n.char = s
    end

    if head then
      last.next = n
    else
      head = n
    end
    last = n
  end
  return node.hpack(head)
end

node.write(node.copy(mkhbox("Hallo")))

b = mkhbox("Welt")
b.height = 0
b.depth  = 0
node.write(node.copy(b))
}
\bye

Dieses (zugegebenermaßen wieder etwas künstliche) Beispiel erzeugt die beiden h-Boxen „Hallo” und „Welt“ und legt diese übereinander. mkhbox, also node.hpack() erzeugt eine \hbox, und für diese Box kannst du die Größen beliebig ändern. Sehr praktisch!

Teilen

1 Kommentar zu "Eine Nodeliste erstellen – einfaches Beispiel"

Ulrike Fischer schrieb am 01.12 um 11:31 Uhr:

Für alle LaTeX-Nutzer, die das ausprobieren und sich über die mathematischen Symbole wundern: mit
n.font = font.current() (statt n.font=1) bekommt man die “aktuelle” Schrift.

Kommentar schreiben