I am unable to get my typst script to work

I’m unable to get my modified script to work.

The original script works fine:

#import "@preview/genealotree:0.2.0": *
// https://codeberg.org/drloiseau/genealogy

#import "@preview/cetz:0.3.1": canvas, draw
#import draw: *

#set page(width: auto, height: auto, margin: 1cm)
#set text(size: 11pt)

#let family-tree = genealogy-init()

#(family-tree.config.union-dist = 5.5)
#(family-tree.config.siblings-dist = 8)
#(family-tree.config.union-vline = 3)
#(family-tree.config.person-radius = 2)

#let family-tree = add-persons(
  family-tree,
  (
    "1": (sex: "m", label: "1 name lastname\n\nm: 0000\nd: 0000"),
    "2": (sex: "f", label: "2 name lastname\n\nm: 0000\nd: 0000"),
    "3": (sex: "m", label: "3 name lastname\n\nm: 0000\nd: 0000"),
    "4": (sex: "f", label: "4 name lastname\n\nm: 0000\nd: 0000"),
    "5": (sex: "f", label: "5 name lastname\n\nm: 0000\nd: 0000"),
    "6": (sex: "m", label: "6 name lastname\n\nm: 0000\nd: 0000"),
    "7": (sex: "m", label: "7 name lastname\n\nm: 0000\nd: 0000"),
    "8": (sex: "f", label: "8 name lastname\n\nm: 0000\nd: 0000"),
    "9": (sex: "f", label: "9 name lastname\n\nm: 0000\nd: 0000"),
    "10": (sex: "m", label: "10 name lastname\n\nm: 0000\nd: 0000"),
    "11": (sex: "m", label: "11 name lastname\n\nm: 0000\nd: 0000"),
  )
)

#let family-tree = add-unions(
  family-tree,
  (("1", "2"), ("3", "5")),
  (("3", "4"), ()),
  (("5", "6"), ("7",)),
  (("7", "8"), ("9", "10", "11")),
)

#canvas({
    // Draw the tree
    draw-tree(family-tree)
})

But when I updated my script to get it’s data from an external toml file,
I can’t get it to work.

#import "@preview/genealotree:0.2.0": *
// https://codeberg.org/drloiseau/genealogy

#import "@preview/cetz:0.3.1": canvas, draw
#import draw: *

#set page(width: auto, height: auto, margin: 1cm)
#set text(size: 11pt)

#let family-tree = genealogy-init()

#(family-tree.config.union-dist = 5.5)
#(family-tree.config.siblings-dist = 8)
#(family-tree.config.union-vline = 3)
#(family-tree.config.person-radius = 2)

#let gen = toml("gen.toml")

#for c in gen.family_tree [
  #let family-tree = add-persons(
    family-tree,
    (str(c.id): (sex: c.sex, label: c.label))
  )
]

#for c in gen.unions.unions [
  #let family-tree = add-unions(family-tree, (c.at(0), c.at(1)))
]

#canvas({
    // Draw the tree
    draw-tree(family-tree)
})

And the toml:

# gen.toml

[unions]
unions = [
  [["1", "2"], ["3", "5"]],
  [["3", "4"], []],
  [["5", "6"], ["7",]],
  [["7", "8"], ["9", "10", "11"]]
]

[[family_tree]]
id = 1
sex = "m"
label = "1 name lastname\n\nm: 0000\nd: 0000"

[[family_tree]]
id = 2
sex = "f"
label = "2 name lastname\n\nm: 0000\nd: 0000"

[[family_tree]]
id = 3
sex = "m"
label = "3 name lastname\n\nm: 0000\nd: 0000"

[[family_tree]]
id = 4
sex = "f"
label = "4 name lastname\n\nm: 0000\nd: 0000"

[[family_tree]]
id = 5
sex = "f"
label = "5 name lastname\n\nm: 0000\nd: 0000"

[[family_tree]]
id = 6
sex = "m"
label = "6 name lastname\n\nm: 0000\nd: 0000"

[[family_tree]]
id = 7
sex = "m"
label = "7 name lastname\n\nm: 0000\nd: 0000"

[[family_tree]]
id = 8
sex = "f"
label = "8 name lastname\n\nm: 0000\nd: 0000"

[[family_tree]]
id = 9
sex = "f"
label = "9 name lastname\n\nm: 0000\nd: 0000"

[[family_tree]]
id = 10
sex = "m"
label = "10 name lastname\n\nm: 0000\nd: 0000"

[[family_tree]]
id = 11
sex = "m"
label = "11 name lastname\n\nm: 0000\nd: 0000"

How can I get my script to work?

Hi @grimnight,

please be more specific with your question, what is not working? Version 1/2 of what?
Try to reduce your code to a minimal example with the same error.
I suspect you mean that version 0.2.0 of the genealotree package which was updated yesterday is not working for you. That is correct, as every package always needs to be manually approved by the Typst team. Therefore, as indicated in the error message, the package is not yet available. Since a few package updates have accumulated over the holidays, I believe it will take a few days next week for version 0.2.0 of the package to become available.

1 Like

Also, when adding detail, please take the time to revise your post’s title to be a complete question as per the question guidelines:

Good titles are questions you would ask your friend about Typst.

And you could add tags such as scripting. We hope by adhering to this, we make the information in this forum easy to find in the future. Thanks!

1 Like

It seems like you are re-declaring your family-tree variable instead of re-assigning its value
This is the end of your script:

#let gen = toml("gen.toml")
 
#for c in gen.family_tree [
  #let family-tree = add-persons(
    family-tree,
    (str(c.id): (sex: c.sex, label: c.label))
  )
]
 
#for c in gen.unions.unions [
  #let family-tree = add-unions(family-tree, (c.at(0), c.at(1)))
]

Because of the let statements (and content blocks), the variable is never changed but re-declared for that specific block
You cou rewrite it like so and it should work as expected (I haven’t tested it though):

#let gen = toml("gen.toml")
#let people = gen.family_tree.map(person => {
  let id = str(person.id)
  let value = (sex: person.sex, label: person.label)
  return (id, value)
}).to-dict()

#let family-tree = add-persons(family-tree, people)
#let family-tree = add-unions(family-tree, ..gen.unions.unions)

You can also write the last two lines as #{family-tree = ...}

1 Like

Thank you @LordBaryhobal , I got it to work.

@flokl and SillyFreak sorry, in hindsight I do realise that my request for help was poorly written.
I had been trying to get the script to work for a while and had been frustrated when I wrote my help request.

1 Like

no worries! but please do edit your post though, so that it is more useful for future readers.