flyx / DSA-4.1-Heldendokument

Konfigurierbares Heldendokument für DSA, basierend auf LuaLaTeX.
https://flyx.github.io/DSA-4.1-Heldendokument/
14 stars 4 forks source link

Wie lege ich einen neuen Record-Typ als Kind von einem vorhanden an? #21

Closed davidfoerster closed 7 months ago

davidfoerster commented 7 months ago

Ich experimentiere mit einem Charakterporträtbild (via \includegraphics) auf dem Heldenbogen herum. Dazu möchte ich eine Datenstruktur Held.Portrait in schema.lua einführen, die bspw. so aussehen soll:

local Portrait = d.Record::def(
  {name = "Portrait", description = [[Porträtbild des Helden]]},
  {"filename", String, ""},
  {"bb", String, ""},
  {"viewport", String, ""},
  {"trim", String, ""},
  {"clip", schema.Boolean, true},
  {"keepaspectratio", schema.Boolean, true},
  {"type", String, ""},
  {"ext", String, ""},
  {"page", OptNum, {}})

d:singleton(d.Record, {name = "Held", description = [[Grundlegende Daten des Helden.]]},
  {"Name", String, ""},
  -- ... snip ...
  {"Portrait", Portrait, {}})

Wenn ich nun versuche, den Heldenbogen zu erzeugen bekomme ich eine wenig hilfreiche Fehlermeldung, die sich auch noch auf eine nicht existierende Datei bezieht:

\blockbox=\box117
\saved@arstrutbox=\box118
) (./common.texvalues.lua:2: attempt to call a nil value
stack traceback:
    values.lua:2: in main chunk
    ./data.lua:16: in main chunk
    [C]: in function 'require'
    [\directlua]:1: in main chunk.
l.10 }

Sie tritt unabhängig von meinen Versuchen auf, Held.Portrait auf verschiedene Weisen (oder gar nicht) zu instantiieren.

Was mache ich falsch bzw. was sollte ich anders machen? Ich bin auch für andere Metatypen als Grundlage für Portrait offen, falls das besser passt.


Wenn ich den Typ als eigenständigen Singleton definiere, scheint es hingegen zu funktionieren:

d:singleton(
  d.Record,
  {name = "Portrait", description = [[Porträtbild des Helden]]},
  {"filename", String, ""},
  -- ... snip ...
  )
flyx commented 7 months ago

Ich sehe nichts offenkundig falsches. Wenn du das debuggen willst, kannst du mit dsa41held validate <held-datei> arbeiten, dann hast du den TeX-overhead nicht und kriegt eventuell bessere Fehlermeldungen. Es hilft mitunter auch, Lua direkt auf einer Datei, zB dem Schema, auszuführen.

Ich werd mir das auch mal genauer anschauen, wenn ich Zeit finde.

davidfoerster commented 7 months ago

Wenn du das debuggen willst, kannst du mit dsa41held validate <held-datei> arbeiten

Danke für diesen nützlichen Hinweis! Nachdem ich einige loadfile-Aufrufe in assert() gesteckt hatte, bekam ich sogar hilfreiche (Syntax-)Fehlermeldungen, die mich zur Lösung brachten. Ich weiß gar nicht mehr, was genau das Problem war. Vielleicht nur Syntax.