#import "@preview/cetz:0.2.2": coordinate #let val(value, alignment) = { return ( type: "value", value: value, alignment: alignment ) } #let disc(eod: false, ..args) = { let pargs = args.pos() let left = pargs.at(0, default: (none, none)) let right = pargs.at(1, default: (none, none)) let center = pargs.at(2, default: (none, none)) let kwargs = args.named() if "left" in kwargs { left = kwargs.left } if "right" in kwargs { right = kwargs.right } if "center" in kwargs { center = kwargs.center } let (value-l, alignment-l) = left let (value-r, alignment-r) = right let (value-c, alignment-c) = center return ( type: "discontinuity", left: ( value: value-l, alignment: alignment-l, ), right: ( value: value-r, alignment: alignment-r, ), center: ( value: value-c, alignment: alignment-c, ), eod: eod ) } #let inter(value, start, end, i: auto) = { return ( type: "intermediate", value: value, start: start, end: end, i: i, ) } #let get-anchor( ctx, line-i, i, alignment, side, dx: .1, dy: .1 ) = { let (_, anchor) = coordinate.resolve(ctx, "anchor-" + str(i)) let (_, header-t) = coordinate.resolve(ctx, "header-" + str(line-i) + ".north") let (_, header-b) = coordinate.resolve(ctx, "header-" + str(line-i) + ".south") let x = anchor.at(0) if side == "left" { x -= dx } else if side == "right" { x += dx } let yt = header-t.at(1) let yb = header-b.at(1) let y = (yt + yb) / 2 if alignment == "top" { y = yt - dy } else if alignment == "bottom" { y = yb + dy } return (x, y) }